0
Господа гляньте пожалуйста, что не так??? Ничерта не выходит, выдаёт ошибку и всё тут…
//+-------------------------------------------------------------------------------------+
//|       Weakly Советник с мультитаймфреймовым анализом от Lerdon, AM2 и SSG_mdfV2.mq4 |
//|                                              Copyright 2019, Lerdon, AM2 и SSG_mdfV2|
//|                                                         http://www.forexsystems.biz |
//+-------------------------------------------------------------------------------------+
#property copyright "Разработан 2022, Lerdon, AM2 и SSG_mdfV2"
#property link      "ATS-TALLROCK"
#property version   "1.04"
#property strict

extern string s              = "Блок";
extern bool   Blok_TP        = true;
extern double n_Day          = 5;
//--- Inputs
extern double Lots           = 0.1;   // Фикс. размер позиции
extern double Risk           = 10;    // Размер в процентах от баланса
extern bool   Trailing       = true;  // Tralling STOP 
extern bool   ProfitTrailing = false; // Авто STOPLOSS(рекомендуемое FALSE)
extern double H              = 0.7;   // Расчет автотрейлинга(с 0 до 1)
extern bool   _CloseTime     = true;  // Авторасчет времени закрытия позиции
extern bool   FletClose      = true;  // Закрывать открытые позиции при флете
extern int    Magic          = 123;   //ID orders |показатели ниже не трогать|

extern int StopLoss          = 0;     // Stop Loss(ОБЯЗАТЕЛЬНО УСТАНОВИТЬ В СЛУЧАЕ АвтоSTOPLOSS TRUE!)
extern int TakeProfit        = 0;     // Take Profit
extern int TrailingStep      = 10;    // Шаг трала
extern int Slip              = 30;    // размер реквот
extern int corner            = 2;     // Текстовые метки в левом нижнем углу (0-3)
extern color LineColor       = clrLime;//Цвет текстовых меток
extern int raz               = 10;     //Размер шрифта
          //              Движок системы, не влезать!
 int CountW1           = 50;       // свечей для расчета W1
 int CountH1           = 120;      // свечей для расчета Н1
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   Comment("");
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
  // Comment("");
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutOrder(int type,double price){
   int r=0;
   color clr=Green;
   double sl=0,tp=0;  
//=====================================================================
/*
При выставлениии ордера, для рассчёта ТП берём во внимание следующие показатели(как пример):
1.Недельная норма движения=951(GBPUSD)
2.Рассчитываем этот параметр для получения кеф. по следующей схеме: 
  951/5/100 = 1,902(округляем), кеф.=1,9 
     (где 951-недельная норма движения, 
     5-количаство учитываемых торговых дней(параметр нужно вынести в блок управления), 
     100-это фиксированный делитель для получения кеф.
3.1,9 — это и будет кеф. для дальнейшего рассчёта.
4.Вычислив кеф. вычисляем ТП исходя из рассчитаного уже трейлинг стопа(стоп лосс) 
5.Рассчитаный трейлинг стоп(стоп лосс) = 665
6.Рассчёт ТП: 
   665*1,9=1263,5(округляем), 
      где 665-рассчитаный трейлинг стоп(стоп лосс), 
      1,9 — это кеф. рассчитаный в п.2
6.1 Полученый результат 1263-это и будет являться ТП при выставлении ордера.
7.Если изменяются рассчёты(показатели) по Недельной норме движения и(или) Трейлинг стопу(стоп лоссу), 
  то соответственно пересчитытывается(переставляется) и тейк профит…
*/
    double kef = NormalizeDouble(Y()/(n_Day*100),1);//  Рассчитанный КЕФ 
    int TrailingStop = (int)NormalizeDouble((Y()*H),0);// Фиксированный размер трейлинг стопа    
    int TP = (int)NormalizeDouble(TrailingStop*kef,0); // Рассчитанный Тейк Профит 
//=====================================================================
   if(type==1 || type==3 || type==5)
     {
      clr=Red;
      if(StopLoss>0)
         sl=NormalizeDouble(price+StopLoss*_Point,_Digits);
      if(TakeProfit>0)
         tp=NormalizeDouble(price-TakeProfit*_Point,_Digits);
       if(Blok_TP)
         tp=NormalizeDouble(price-TP*_Point,_Digits);   
     }
   if(type==0 || type==2 || type==4)
     {
      clr=Blue;
      if(StopLoss>0)
         sl=NormalizeDouble(price-StopLoss*_Point,_Digits);
      if(TakeProfit>0)
         tp=NormalizeDouble(price+TakeProfit*_Point,_Digits);
       if(Blok_TP)
         tp=NormalizeDouble(price+TP*_Point,_Digits);   
     }
   r=OrderSend(NULL,type,Lot(),NormalizeDouble(price,_Digits),Slip,sl,tp,"",Magic,0,clr);
   return;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double Lot(){
   double lot=Lots;
   if(Lots==0) lot=AccountBalance()*Risk/100000;// 10000*Risk/100000=1
   return(lot);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int CountTrades(){
   int count=0;
   for(int i=OrdersTotal()-1; i>=0; i--){
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()<2) count++;
           }
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double Y(){
   double y=0;
   for(int i=0; i<CountW1; i++)
     {
      y+=(iHigh(NULL,PERIOD_W1,i)-iLow(NULL,PERIOD_W1,i))/_Point;
     }
   return(y/(CountW1*2));
  }
//+------------------------------------------------------------------+
//| Сопровождение позиции простым тралом                             |
//+------------------------------------------------------------------+
void TrailingPositions() { 
  bool rez;
  int TrailingStop = (int)NormalizeDouble((Y()*H),0);// Фиксированный размер трейлинг стопа
  for (int i=0; i<OrdersTotal(); i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderMagicNumber()==Magic) {
        if (OrderSymbol()==Symbol()) {
          if (OrderType()==OP_BUY) {
            if (!ProfitTrailing || (Bid-OrderOpenPrice())>TrailingStop*Point) {
              if (OrderStopLoss()<Bid-(TrailingStop+TrailingStep-1)*Point) {
                rez=OrderModify(OrderTicket(),OrderOpenPrice(),Bid-TrailingStop*_Point,OrderTakeProfit(),0,clrBlue);
              }
            }
          }
          if (OrderType()==OP_SELL) {
            if (!ProfitTrailing || OrderOpenPrice()-Ask>TrailingStop*Point) {
              if (OrderStopLoss()>Ask+(TrailingStop+TrailingStep-1)*Point || OrderStopLoss()==0) {
                rez=OrderModify(OrderTicket(),OrderOpenPrice(),Ask+TrailingStop*_Point,OrderTakeProfit(),0,clrRed);
              }
            }
          }
        }
      }
    }
  }
}
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
avatar

mishelbb

  • 20 января 2022, 04:09
0
Может не тот код, тут их уже как грязи, голову сломать можно, просьба большая, если что то меняете в коде, Вы сразу готовый вриант сделайте, я не думаю что это настолько Вам обременительно, а куски эти, ну вот не соображаю я настолько в них, потом мудриш тут, я понимаю — это нужно понимать, но когда вот такое выползает а ты смотришь как «баран на новые ворота», начинаеш мудрить и в конечном итоге вообще жесть получается…
avatar

mishelbb

  • 20 января 2022, 03:05
0
Здравствуйте уважаемый, при компи ляции выдаёт ошибку почему то, а в кодах я не силён настолько, если не сложно гляньте пожалуйста…
avatar

mishelbb

  • 20 января 2022, 02:55
0
Понял, давайте так попробуем, благодарю.., дай то Бог…
avatar

mishelbb

  • 19 января 2022, 21:44
0
Попробуйте конечно, возможно какая то часть вопросов решиться.., покумекайте и над тейком с этим грёбаным тралом, может что придёт в голову.., может отключить трал вообще.., ну там безубыток может, хотя это тоже не выход, так для успокения что не в минусе. Будут варианты поделитесь надеюсь… и за эту вариацию спасибо большое!!!
avatar

mishelbb

  • 19 января 2022, 19:13
0
Сов. большую часть времени находится в плюсе, но то, что наколбашевает — убивают подтягивающиеся стопы…
avatar

mishelbb

  • 19 января 2022, 19:06
0
… да пусть хоть десять раз заходит если рассчёты дают заходить, входит он нормально, профит ловит но не удерживает, его фиксировать надо, ТП я вижу при сильном и резком движении, оно есть, и его надо ловить и не отпускать под стопы тральные, не знаю как, но трал не нравится мне, самое гловное что схема действительно рабочая вроде, как до ума домутить…
avatar

mishelbb

  • 19 января 2022, 18:55
0
… в том, что без тейка гоняет от профита к лузу туда сюда, и толу нет без фиксации, руками не наставишся, а самое главное движение гадать — не нагадаешся, тут хоть по средниму(может быть) попытка от всех рассчётов, фиксируеш профит — вроде нормально, как отпускаеш в «свободный полёт», так хрен в стакан, стопы подтягиваются и готовы ордера…
avatar

mishelbb

  • 19 января 2022, 18:44
0
… ага, спасибо, учту.
avatar

mishelbb

  • 19 января 2022, 16:14
0
Поставил, попробовал, всё нормально считает, ещё раз моя огромная признательность, буду с переносом на другой сов. разбираться, что там — куда.., спасибо…
avatar

mishelbb

  • 19 января 2022, 15:14
0
Ага, понял, спасибо Вам огромное, поди сам управлюсь с этим, спасибо!!!
avatar

mishelbb

  • 19 января 2022, 14:40
0
… приношу извинения, сам с кодами на «вы», ну да век живи-век учись, правда один хрен «дураком» помирать, спасибо что подсказали, теперь буду знать как.
avatar

mishelbb

  • 19 января 2022, 13:03
0
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void CloseTimeAll(int ot=-1){
   bool cl=1;
   int closeTime=CloseTime();
   for(int i=OrdersTotal()-1; i>=0; i--){
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic){
            if(TimeCurrent()-OrderOpenTime()>closeTime*3600){
               if(OrderType()==0 && (ot==0 || ot==-1))
                 {
                  RefreshRates();
                  cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,_Digits),Slip,White);
                 }
               if(OrderType()==1 && (ot==1 || ot==-1))
                 {
                  RefreshRates();
                  cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,_Digits),Slip,White);
                 }
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void CloseAll(int ot=-1){
   bool cl;
   for(int i=OrdersTotal()-1; i>=0; i--){
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic){
            if(OrderType()==0 && (ot==0 || ot==-1)){
               RefreshRates();
               cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),Slip,White);
              }
            if(OrderType()==1 && (ot==1 || ot==-1)){
               RefreshRates();
               cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),Slip,White);
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   double lo=Low[iLowest(NULL,0,MODE_LOW,CountH1,0)];
   double hi=High[iHighest(NULL,0,MODE_HIGH,CountH1,0)];
   double midl=(hi+lo)/2;
   double x=(hi-lo)/_Point;
   
   if(FletClose && x<Y() && CountTrades()!=0)CloseAll();  
   if(_CloseTime)CloseTimeAll();     
   if(Trailing)TrailingPositions();  

   if(CountTrades()<1 && x>Y())
     {
      if(Bid<hi && Bid>(hi+lo)/2)
         PutOrder(0,Ask);
      if(Bid>lo && Bid<(hi+lo)/2)
         PutOrder(1,Bid);
     }
     /*
Comment(   "\n ПОКАЗАТЕЛИ РАССЧИТАННЫЕ СИСТЕМОЙ ATS",     
           "\n Недельная норма движения : --  ",NormalizeDouble(Y(),0),
           "\n Текущее движение на H1 : --  ",NormalizeDouble(x,0),
           "\n Рассчитанный Трейлинг-стоп(Stop loss): --  ",NormalizeDouble(Y()*H,0),
           "\n Рассчетное время закрытия позиции : --  ",NormalizeDouble(CloseTime(),0));
 */
   SetLabel("Label1", "ПОКАЗАТЕЛИ РАССЧИТАННЫЕ СИСТЕМОЙ ATS", LineColor, 5, 75, corner, raz);
   SetLabel("Label2", "Недельная норма движения : --  "+DoubleToStr(Y(),0)+" пп", LineColor, 5, 60, corner, raz);
   SetLabel("Label3", "Текущее движение на H1 : --  "+DoubleToStr(x,0)+" пп", LineColor, 5, 45, corner, raz); 
   SetLabel("Label4", "Рассчитанный Трейлинг-стоп(Stop loss): --  "+DoubleToStr(Y()*H,0)+" пп", LineColor, 5, 30, corner, raz);
   SetLabel("Label5", "Рассчетное время закрытия позиции : --  "+DoubleToStr(CloseTime(),0)+" часов", LineColor, 5, 15, corner, raz);  
   
   SetHLine(clrRed, "lo", lo, STYLE_SOLID, 1); 
   SetHLine(clrYellow, "midl", midl, STYLE_SOLID, 1);  
   SetHLine(clrLime, "hi", hi, STYLE_SOLID, 1);  
  
   double _lo=(lo+midl)/2;// линия Middle.L
   double _hi=(hi+midl)/2;// линия Middle.H
   
   double _lov=Low[iLowest(NULL,0,MODE_LOW,_CountH1,0)];//High и Low на промежутке 120 свечей на графике H1 за последние 48 часов.
   double _hig=High[iHighest(NULL,0,MODE_HIGH,_CountH1,0)];//High и Low на промежутке 120 свечей на графике H1 за последние 48 часов.
 
  if(lo<_lov && hi>_hig){
          SetHLine(clrWhiteSmoke, "_lo", _lo, STYLE_SOLID, 1); 
          SetHLine(clrAqua, "_hi", _hi, STYLE_SOLID, 1);     
          SetLabel("Label6"," High и Low не обновились за последние 48 часов = Флет", clrRed, 5, 15, 0, 12);         
         }
   else{
        SetLabel("Label6"," High и Low  обновились за последние 48 часов = Тренд", clrLime, 5, 15, 0, 12);
        }
        
   if((lo<_lov && hi<=_hig) || (lo>=_lov && hi>_hig)){
       SetLabel("Label7"," High и Low частично обновились за последние 48 часов = Сужение канала",clrYellow, 5, 30, 0, 12); 
       }
   else{SetLabel("Label7","", clrNONE, 5, 30, 0, 12);}     
  }
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 30.03.2008                                                     |
//|  Описание : Установка объекта OBJ_HLINE горизонтальная линия               |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    cl - цвет линии                                                         |
//|    nm - наименование               ("" - время открытия текущего бара)     |
//|    p1 - ценовой уровень            (0  - Bid)                              |
//|    st - стиль линии                (0  - простая линия)                    |
//|    wd - ширина линии               (0  - по умолчанию)                     |
//+----------------------------------------------------------------------------+
void SetHLine(color cl, string nm="", double p1=0, int st=0, int wd=1) {
  if (nm=="") nm=DoubleToStr(Time[0], 0);
  if (p1<=0) p1=Bid;
  if (ObjectFind(nm)<0) ObjectCreate(nm, OBJ_HLINE, 0, 0,0);
  ObjectSet(nm, OBJPROP_PRICE1, p1);
  ObjectSet(nm, OBJPROP_COLOR , cl);
  ObjectSet(nm, OBJPROP_STYLE , st);
  ObjectSet(nm, OBJPROP_WIDTH , wd);
}
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 12.10.2007                                                     |
//|  Описание : Установка текстовой метки, объект OBJ_LABEL.                   |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    nm - наименование объекта                                               |
//|    tx - текст                                                              |
//|    cl - цвет метки                                                         |
//|    xd - координата X в пикселах                                            |
//|    yd - координата Y в пикселах                                            |
//|    cr - номер угла привязки        (0 - левый верхний,                     |
//|                                     1 - правый верхний,                    |
//|                                     2 - левый нижний,                      |
//|                                     3 - правый нижний )                    |
//|    fs - размер шрифта              (9 - по умолчанию  )                    |
//+----------------------------------------------------------------------------+
void SetLabel(string nm, string tx, color cl, int xd, int yd, int cr=0, int fs=9) {
  if (ObjectFind(nm)<0) ObjectCreate(nm, OBJ_LABEL, 0, 0,0);
  ObjectSetText(nm, tx, fs);
  ObjectSet(nm, OBJPROP_COLOR    , cl);
  ObjectSet(nm, OBJPROP_XDISTANCE, xd);
  ObjectSet(nm, OBJPROP_YDISTANCE, yd);
  ObjectSet(nm, OBJPROP_CORNER   , cr);
  ObjectSet(nm, OBJPROP_FONTSIZE , fs);
}
//+----------------------------------------------------------------------------+
avatar

mishelbb

  • 19 января 2022, 13:00
0
//+-------------------------------------------------------------------------------------+
//|        Weakly Советник с мультитаймфреймовым анализом от Lerdon, AM2 и SSG_flet.mq4 |
//|                                               Copyright 2019, Lerdon, AM2 и SSG_flet|
//|                                                         http://www.forexsystems.biz |
//+-------------------------------------------------------------------------------------+
#property copyright "Разработан 2022, Lerdon, AM2 и SSG_flet"
#property link      "ATS-TALLROCK"
#property version   "1.04"
#property strict
//--- Inputs
extern double Lots           = 0.1;   // Фикс. размер позиции
extern double Risk           = 10;    // Размер в процентах от баланса
extern bool   Trailing       = true;  // Tralling STOP 
extern bool   ProfitTrailing = false; // Авто STOPLOSS(рекомендуемое FALSE)
extern double H              = 0.7;   // Расчет автотрейлинга(с 0 до 1)
extern bool   _CloseTime     = true;  // Авторасчет времени закрытия позиции
extern bool   FletClose      = true;  // Закрывать открытые позиции при флете
extern int    Magic          = 123;   //ID orders |показатели ниже не трогать|

extern int StopLoss          = 0;     // Stop Loss(ОБЯЗАТЕЛЬНО УСТАНОВИТЬ В СЛУЧАЕ АвтоSTOPLOSS TRUE!)
extern int TakeProfit        = 0;     // Take Profit
extern int TrailingStep      = 10;    // Шаг трала
extern int Slip              = 30;    // размер реквот
extern int corner            = 2;     // Текстовые метки в левом нижнем углу (0-3)
extern color LineColor       = clrLime;//Цвет текстовых меток
extern int raz               = 10;     //Размер шрифта
          //              Движок системы, не влезать!
 int CountW1           = 50;       // свечей для расчета W1
 int CountH1           = 120;      // свечей для расчета Н1
 int _CountH1          = 48;       // свечей для расчета Н1 flet последние 48 часов
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   Comment("");
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
  // Comment("");
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutOrder(int type,double price){
   int r=0;
   color clr=Green;
   double sl=0,tp=0;
   if(type==1 || type==3 || type==5)
     {
      clr=Red;
      if(StopLoss>0)
         sl=NormalizeDouble(price+StopLoss*_Point,_Digits);
      if(TakeProfit>0)
         tp=NormalizeDouble(price-TakeProfit*_Point,_Digits);
     }
   if(type==0 || type==2 || type==4)
     {
      clr=Blue;
      if(StopLoss>0)
         sl=NormalizeDouble(price-StopLoss*_Point,_Digits);
      if(TakeProfit>0)
         tp=NormalizeDouble(price+TakeProfit*_Point,_Digits);
     }
   r=OrderSend(NULL,type,Lot(),NormalizeDouble(price,_Digits),Slip,sl,tp,"",Magic,0,clr);
   return;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double Lot(){
   double lot=Lots;
   if(Lots==0) lot=AccountBalance()*Risk/100000;// 10000*Risk/100000=1
   return(lot);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int CountTrades(){
   int count=0;
   for(int i=OrdersTotal()-1; i>=0; i--){
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()<2) count++;
           }
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double Y(){
   double y=0;
   for(int i=0; i<CountW1; i++)
     {
      y+=(iHigh(NULL,PERIOD_W1,i)-iLow(NULL,PERIOD_W1,i))/_Point;
     }
   return(y/(CountW1*2));
  }
//+------------------------------------------------------------------+
//| Сопровождение позиции простым тралом                             |
//+------------------------------------------------------------------+
void TrailingPositions() { 
  bool rez;
  int TrailingStop = (int)NormalizeDouble((Y()*H),0);// Фиксированный размер трейлинг стопа
  for (int i=0; i<OrdersTotal(); i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderMagicNumber()==Magic) {
        if (OrderSymbol()==Symbol()) {
          if (OrderType()==OP_BUY) {
            if (!ProfitTrailing || (Bid-OrderOpenPrice())>TrailingStop*Point) {
              if (OrderStopLoss()<Bid-(TrailingStop+TrailingStep-1)*Point) {
                rez=OrderModify(OrderTicket(),OrderOpenPrice(),Bid-TrailingStop*_Point,OrderTakeProfit(),0,clrBlue);
              }
            }
          }
          if (OrderType()==OP_SELL) {
            if (!ProfitTrailing || OrderOpenPrice()-Ask>TrailingStop*Point) {
              if (OrderStopLoss()>Ask+(TrailingStop+TrailingStep-1)*Point || OrderStopLoss()==0) {
                rez=OrderModify(OrderTicket(),OrderOpenPrice(),Ask+TrailingStop*_Point,OrderTakeProfit(),0,clrRed);
              }
            }
          }
        }
      }
    }
  }
}
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int CloseTime(){
     int count=0;
     double  K=0, L=0, N=0;
     double lo=Low[iLowest(NULL,0,MODE_LOW,CountH1,1)];
     double hi=High[iHighest(NULL,0,MODE_HIGH,CountH1,1)];
     double x=(hi-lo)/_Point;
     K=NormalizeDouble(Y()*2,0);
     L=x/120;
     N=K/L;
     count=(int)NormalizeDouble(N,0);  // время закрытия в часах
   return(count);
  }
avatar

mishelbb

  • 19 января 2022, 13:00
0
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void CloseTimeAll(int ot=-1){
   bool cl=1;
   int closeTime=CloseTime();
   for(int i=OrdersTotal()-1; i>=0; i--){
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic){
            if(TimeCurrent()-OrderOpenTime()>closeTime*3600){
               if(OrderType()==0 && (ot==0 || ot==-1))
                 {
                  RefreshRates();
                  cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,_Digits),Slip,White);
                 }
               if(OrderType()==1 && (ot==1 || ot==-1))
                 {
                  RefreshRates();
                  cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,_Digits),Slip,White);
                 }
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void CloseAll(int ot=-1){
   bool cl;
   for(int i=OrdersTotal()-1; i>=0; i--){
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic){
            if(OrderType()==0 && (ot==0 || ot==-1)){
               RefreshRates();
               cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),Slip,White);
              }
            if(OrderType()==1 && (ot==1 || ot==-1)){
               RefreshRates();
               cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),Slip,White);
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   double lo=Low[iLowest(NULL,0,MODE_LOW,CountH1,0)];
   double hi=High[iHighest(NULL,0,MODE_HIGH,CountH1,0)];
   double midl=(hi+lo)/2;
   double x=(hi-lo)/_Point;
   
   if(FletClose && x<Y() && CountTrades()!=0)CloseAll();  
   if(_CloseTime)CloseTimeAll();     
   if(Trailing)TrailingPositions();  

   if(CountTrades()<1 && x>Y())
     {
      if(Bid<hi && Bid>(hi+lo)/2)
         PutOrder(0,Ask);
      if(Bid>lo && Bid<(hi+lo)/2)
         PutOrder(1,Bid);
     }
Comment(   "\n ПОКАЗАТЕЛИ РАССЧИТАННЫЕ СИСТЕМОЙ ATS",     
           "\n Недельная норма движения : --  ",NormalizeDouble(Y(),0),
           "\n Текущее движение на H1 : --  ",NormalizeDouble(x,0),
           "\n Рассчитанный Трейлинг-стоп(Stop loss): --  ",NormalizeDouble(Y()*H,0),
           "\n Рассчетное время закрытия позиции : --  ",NormalizeDouble(CloseTime(),0));
 
   SetLabel("Label1", "ПОКАЗАТЕЛИ РАССЧИТАННЫЕ СИСТЕМОЙ ATS", LineColor, 5, 75, corner, raz);
   SetLabel("Label2", "Недельная норма движения : --  "+DoubleToStr(Y(),0)+" пп", LineColor, 5, 60, corner, raz);
   SetLabel("Label3", "Текущее движение на H1 : --  "+DoubleToStr(x,0)+" пп", LineColor, 5, 45, corner, raz); 
   SetLabel("Label4", "Рассчитанный Трейлинг-стоп(Stop loss): --  "+DoubleToStr(Y()*H,0)+" пп", LineColor, 5, 30, corner, raz);
   SetLabel("Label5", "Рассчетное время закрытия позиции : --  "+DoubleToStr(CloseTime(),0)+" часов", LineColor, 5, 15, corner, raz);  
   
   SetHLine(clrRed, "io", lo, STYLE_SOLID, 1); 
   SetHLine(clrYellow, "midl", midl, STYLE_SOLID, 1);  
   SetHLine(clrLime, "hi", hi, STYLE_SOLID, 1);  
               
  }
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 30.03.2008                                                     |
//|  Описание : Установка объекта OBJ_HLINE горизонтальная линия               |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    cl - цвет линии                                                         |
//|    nm - наименование               ("" - время открытия текущего бара)     |
//|    p1 - ценовой уровень            (0  - Bid)                              |
//|    st - стиль линии                (0  - простая линия)                    |
//|    wd - ширина линии               (0  - по умолчанию)                     |
//+----------------------------------------------------------------------------+
void SetHLine(color cl, string nm="", double p1=0, int st=0, int wd=1) {
  if (nm=="") nm=DoubleToStr(Time[0], 0);
  if (p1<=0) p1=Bid;
  if (ObjectFind(nm)<0) ObjectCreate(nm, OBJ_HLINE, 0, 0,0);
  ObjectSet(nm, OBJPROP_PRICE1, p1);
  ObjectSet(nm, OBJPROP_COLOR , cl);
  ObjectSet(nm, OBJPROP_STYLE , st);
  ObjectSet(nm, OBJPROP_WIDTH , wd);
}
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 12.10.2007                                                     |
//|  Описание : Установка текстовой метки, объект OBJ_LABEL.                   |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    nm - наименование объекта                                               |
//|    tx - текст                                                              |
//|    cl - цвет метки                                                         |
//|    xd - координата X в пикселах                                            |
//|    yd - координата Y в пикселах                                            |
//|    cr - номер угла привязки        (0 - левый верхний,                     |
//|                                     1 - правый верхний,                    |
//|                                     2 - левый нижний,                      |
//|                                     3 - правый нижний )                    |
//|    fs - размер шрифта              (9 - по умолчанию  )                    |
//+----------------------------------------------------------------------------+
void SetLabel(string nm, string tx, color cl, int xd, int yd, int cr=0, int fs=9) {
  if (ObjectFind(nm)<0) ObjectCreate(nm, OBJ_LABEL, 0, 0,0);
  ObjectSetText(nm, tx, fs);
  ObjectSet(nm, OBJPROP_COLOR    , cl);
  ObjectSet(nm, OBJPROP_XDISTANCE, xd);
  ObjectSet(nm, OBJPROP_YDISTANCE, yd);
  ObjectSet(nm, OBJPROP_CORNER   , cr);
  ObjectSet(nm, OBJPROP_FONTSIZE , fs);
}
//+----------------------------------------------------------------------------+
avatar

mishelbb

  • 19 января 2022, 12:58
0
//+-------------------------------------------------------------------------------------+
//|         Weakly Советник с мультитаймфреймовым анализом от Lerdon, AM2 и SSG_mdf.mq4 |
//|                                                Copyright 2019, Lerdon, AM2 и SSG_mdf|
//|                                                         http://www.forexsystems.biz |
//+-------------------------------------------------------------------------------------+
#property copyright "Разработан 2022, Lerdon, AM2 и SSG_mdf"
#property link      "ATS-TALLROCK"
#property version   "1.04"
#property strict
//--- Inputs
extern double Lots           = 0.1;   // Фикс. размер позиции
extern double Risk           = 10;    // Размер в процентах от баланса
extern bool   Trailing       = true;  // Tralling STOP 
extern bool   ProfitTrailing = false; // Авто STOPLOSS(рекомендуемое FALSE)
extern double H              = 0.7;   // Расчет автотрейлинга(с 0 до 1)
extern bool   _CloseTime     = true;  // Авторасчет времени закрытия позиции
extern bool   FletClose      = true;  // Закрывать открытые позиции при флете
extern int    Magic          = 123;   //ID orders |показатели ниже не трогать|

extern int StopLoss          = 0;     // Stop Loss(ОБЯЗАТЕЛЬНО УСТАНОВИТЬ В СЛУЧАЕ АвтоSTOPLOSS TRUE!)
extern int TakeProfit        = 0;     // Take Profit
extern int TrailingStep      = 10;    // Шаг трала
extern int Slip              = 30;    // размер реквот
extern int corner            = 2;     // Текстовые метки в левом нижнем углу (0-3)
extern color LineColor       = clrLime;//Цвет текстовых меток
extern int raz               = 10;     //Размер шрифта
          //              Движок системы, не влезать!
 int CountW1           = 50;       // свечей для расчета W1
 int CountH1           = 120;      // свечей для расчета Н1
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   Comment("");
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
  // Comment("");
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutOrder(int type,double price){
   int r=0;
   color clr=Green;
   double sl=0,tp=0;
   if(type==1 || type==3 || type==5)
     {
      clr=Red;
      if(StopLoss>0)
         sl=NormalizeDouble(price+StopLoss*_Point,_Digits);
      if(TakeProfit>0)
         tp=NormalizeDouble(price-TakeProfit*_Point,_Digits);
     }
   if(type==0 || type==2 || type==4)
     {
      clr=Blue;
      if(StopLoss>0)
         sl=NormalizeDouble(price-StopLoss*_Point,_Digits);
      if(TakeProfit>0)
         tp=NormalizeDouble(price+TakeProfit*_Point,_Digits);
     }
   r=OrderSend(NULL,type,Lot(),NormalizeDouble(price,_Digits),Slip,sl,tp,"",Magic,0,clr);
   return;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double Lot(){
   double lot=Lots;
   if(Lots==0) lot=AccountBalance()*Risk/100000;// 10000*Risk/100000=1
   return(lot);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int CountTrades(){
   int count=0;
   for(int i=OrdersTotal()-1; i>=0; i--){
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()<2) count++;
           }
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double Y(){
   double y=0;
   for(int i=0; i<CountW1; i++)
     {
      y+=(iHigh(NULL,PERIOD_W1,i)-iLow(NULL,PERIOD_W1,i))/_Point;
     }
   return(y/(CountW1*2));
  }
//+------------------------------------------------------------------+
//| Сопровождение позиции простым тралом                             |
//+------------------------------------------------------------------+
void TrailingPositions() { 
  bool rez;
  int TrailingStop = (int)NormalizeDouble((Y()*H),0);// Фиксированный размер трейлинг стопа
  for (int i=0; i<OrdersTotal(); i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderMagicNumber()==Magic) {
        if (OrderSymbol()==Symbol()) {
          if (OrderType()==OP_BUY) {
            if (!ProfitTrailing || (Bid-OrderOpenPrice())>TrailingStop*Point) {
              if (OrderStopLoss()<Bid-(TrailingStop+TrailingStep-1)*Point) {
                rez=OrderModify(OrderTicket(),OrderOpenPrice(),Bid-TrailingStop*_Point,OrderTakeProfit(),0,clrBlue);
              }
            }
          }
          if (OrderType()==OP_SELL) {
            if (!ProfitTrailing || OrderOpenPrice()-Ask>TrailingStop*Point) {
              if (OrderStopLoss()>Ask+(TrailingStop+TrailingStep-1)*Point || OrderStopLoss()==0) {
                rez=OrderModify(OrderTicket(),OrderOpenPrice(),Ask+TrailingStop*_Point,OrderTakeProfit(),0,clrRed);
              }
            }
          }
        }
      }
    }
  }
}
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int CloseTime(){
     int count=0;
     double  K=0, L=0, N=0;
     double lo=Low[iLowest(NULL,0,MODE_LOW,CountH1,1)];
     double hi=High[iHighest(NULL,0,MODE_HIGH,CountH1,1)];
     double x=(hi-lo)/_Point;
     K=NormalizeDouble(Y()*2,0);
     L=x/120;
     N=K/L;
     count=(int)NormalizeDouble(N,0);  // время закрытия в часах
   return(count);
  }
avatar

mishelbb

  • 19 января 2022, 12:57
0
Всё отправил, гляньте пожалуйста, там два варианта кода, последний с чётом «сужения»…
avatar

mishelbb

  • 19 января 2022, 12:03
0
…исправлено, ниже
avatar

mishelbb

  • 19 января 2022, 12:01
0
…исправлено, ниже
avatar

mishelbb

  • 19 января 2022, 12:00
0
… исправлено, ниже
avatar

mishelbb

  • 19 января 2022, 11:57