Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 349

 

Можно через iCustom передать динамичный input-параметры в индикатор? Я когда пытаюсь это сделать, то открывается новое окно индикатора, на каждый новый динамичный input-параметр.

   if(NewBarCur())BulsPeriod++;
   double sep_window=iCustom(Symbol(),PERIOD_CURRENT,"Bulls",BulsPeriod,0,0);
 
И такой вопрос, можно как-то узнать, например, что до конца графика теста осталось 1 бар или 3 минуты?
 
Artyom Trishkin:

В этой ветке я хочу начать свою помощь тем, кто действительно хочет разобраться и научиться программированию на новом MQL4 и желает легко перейти на MQL5 - языки очень похожи.

Здесь можно будет обсудить задачи, алгоритмы их решения, да и впрочем, любые вопросы, так или иначе касающиеся программирования для МТ.

Надеюсь, что к решению вопросов подтянутся другие опытные участники нашего форума, и ветка будет интересна всем.


Artyom Trishkin:

В этой ветке я хочу начать свою помощь тем, кто действительно хочет разобраться и научиться программированию на новом MQL4 и желает легко перейти на MQL5 - языки очень похожи.

Здесь можно будет обсудить задачи, алгоритмы их решения, да и впрочем, любые вопросы, так или иначе касающиеся программирования для МТ.

Надеюсь, что к решению вопросов подтянутся другие опытные участники нашего форума, и ветка будет интересна всем.


Artyom Trishkin:

В этой ветке я хочу начать свою помощь тем, кто действительно хочет разобраться и научиться программированию на новом MQL4 и желает легко перейти на MQL5 - языки очень похожи.

Здесь можно будет обсудить задачи, алгоритмы их решения, да и впрочем, любые вопросы, так или иначе касающиеся программирования для МТ.

Надеюсь, что к решению вопросов подтянутся другие опытные участники нашего форума, и ветка будет интересна всем.


Artyom Trishkin:

В этой ветке я хочу начать свою помощь тем, кто действительно хочет разобраться и научиться программированию на новом MQL4 и желает легко перейти на MQL5 - языки очень похожи.

Здесь можно будет обсудить задачи, алгоритмы их решения, да и впрочем, любые вопросы, так или иначе касающиеся программирования для МТ.

Надеюсь, что к решению вопросов подтянутся другие опытные участники нашего форума, и ветка будет интересна всем.


Artyom Trishkin:

В этой ветке я хочу начать свою помощь тем, кто действительно хочет разобраться и научиться программированию на новом MQL4 и желает легко перейти на MQL5 - языки очень похожи.

Здесь можно будет обсудить задачи, алгоритмы их решения, да и впрочем, любые вопросы, так или иначе касающиеся программирования для МТ.

Надеюсь, что к решению вопросов подтянутся другие опытные участники нашего форума, и ветка будет интересна всем.


Artyom

Artyom Trishkin:

В этой ветке я хочу начать свою помощь тем, кто действительно хочет разобраться и научиться программированию на новом MQL4 и желает легко перейти на MQL5 - языки очень похожи.

Здесь можно будет обсудить задачи, алгоритмы их решения, да и впрочем, любые вопросы, так или иначе касающиеся программирования для МТ.

Надеюсь, что к решению вопросов подтянутся другие опытные участники нашего форума, и ветка будет интересна всем.


помоги разобраться, я добавил в советник функцию трэйлинг стопа, прокомпилировал, - выдаёт две ошибки. - Голову сломал, понять не могу как их исправить чтобы сова получилась. Правда сделки закрываются по условиям старой стратегии после касания ценой верхнейграницы канала, и нижней соответственно. Я так понимаю здесь тоже что-то нужно изменить. - Отзовись парням армии днр.

#property copyright "Copyright 2017, MetaQuotes Software Corp."

#property link      "https://www.mql5.com"

#property version   "1.00"

#property strict


//---------------------------------------------------------

extern double Lots            = 0.01;

extern int    TakeProfit      = 600;

extern int    StopLoss        = 25;

extern int    Magic           = 0001;

extern int    Slippage        = 3;

extern int    TralType        = 0; // 0-SAR, 1-ATR, 2-HMA

extern double SAR_Step        = 0.02;

extern double SAR_Max         = 0.2;

extern int    ATR_Period      = 14;

extern double ATR_K           = 2.0;

extern int    HMA_Period      = 16;

extern int    HMA_Method      = 3;

extern int    HMA_Shift       = 0;

datetime      LBT;

//---------------------------------------------------------

extern string TMA             = "Параметры индикатора TMA";

extern string TimeFrame       = "current time frame";

extern int    HalfLength      = 56;

extern int    Price           = PRICE_CLOSE;

extern double ATRMultiplier   = 2.0;

extern int    ATRPeriod       = 100;

extern bool   Interpolate     = true;

//---------------------------------------------------------

double  PriceHigh, PriceLow, SL, TP;

int ticket;


//+------------------------------------------------------------------+

//| Expert initialization function                                   |

//+------------------------------------------------------------------+

int OnInit()

{

   if (Digits == 3 || Digits == 5)

   {

   TakeProfit *= 10;

   StopLoss   *= 10;

   Slippage   *= 10;

   }

   return(INIT_SUCCEEDED);

}  

//+------------------------------------------------------------------+

//| Expert deinitialization function                                 |

//+------------------------------------------------------------------+

void OnDeinit(const int reason)

{


}

//+------------------------------------------------------------------+

//| Expert tick function                                             |

//+------------------------------------------------------------------+

void OnTick()

{

  PriceHigh = iCustom(NULL, 0, "TMA_Fair", TimeFrame, HalfLength, Price, ATRMultiplier, ATRPeriod, Interpolate, 1, 0);

  PriceLow  = iCustom(NULL, 0, "TMA_Fair", TimeFrame, HalfLength, Price, ATRMultiplier, ATRPeriod, Interpolate, 2, 0);

  

  if(CountSell() == 0 && Bid >= PriceHigh) 

  {

     ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, "TMA robot", Magic, 0, Red);

     if (ticket > 0)

     {

        SL = NormalizeDouble(Bid + StopLoss*Point, Digits);

        TP = NormalizeDouble(Bid - TakeProfit*Point, Digits);

        

        if (OrderSelect(ticket, SELECT_BY_TICKET))     

           if (!OrderModify(ticket, OrderOpenPrice(), SL, TP, 0))

                Print("Ошибка модификации ордера на продажу!");

     }   

}  

  if (CountBuy() == 0 && Ask <= PriceLow) 

  {

     ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0, "TMA robot", Magic, 0, Blue);

     if (ticket > 0)

     {

        TP = NormalizeDouble(Ask + TakeProfit*Point, Digits);

        SL = NormalizeDouble(Ask - StopLoss*Point, Digits);

        

        if (OrderSelect(ticket, SELECT_BY_TICKET))     

            if(!OrderModify(ticket, OrderOpenPrice(), SL, TP, 0))

                Print("Ошибка модификации ордера на покупку!");

     }   else Print("Ошибка открытия ордера на покупку");

   }

   

//+------------------------------------------------------------------+

//| Expert initialization function                                   |

//+------------------------------------------------------------------+

int init()

  {

//--------


//--------

    return (0);

    }

//+------------------------------------------------------------------+

//| Expert tick function                                             |

//+------------------------------------------------------------------+

void OnTick()

{

  PriceHigh = iCustom(NULL, 0, "TMA_Fair", TimeFrame, HalfLength, Price, ATRMultiplier, ATRPeriod, Interpolate, 1, 0);

  PriceLow  = iCustom(NULL, 0, "TMA_Fair", TimeFrame, HalfLength, Price, ATRMultiplier, ATRPeriod, Interpolate, 2, 0);

  

  if(CountSell() == 0 && Bid >= PriceHigh) 

  {

     ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, "TMA robot", Magic, 0, Red);

     if (ticket > 0)

     {

        SL = NormalizeDouble(Bid + StopLoss*Point, Digits);

        TP = NormalizeDouble(Bid - TakeProfit*Point, Digits);

        

        if (OrderSelect(ticket, SELECT_BY_TICKET))     

           if (!OrderModify(ticket, OrderOpenPrice(), SL, TP, 0))

                Print("Ошибка модификации ордера на продажу!");

     }    else Print("Ошибка открытия ордера на продажу!");

  }

  if (CountBuy() == 0 && Ask <= PriceLow) 

  {

     ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0, "TMA robot", Magic, 0, Blue);

     if (ticket > 0)

     {

        TP = NormalizeDouble(Ask + TakeProfit*Point, Digits);

        SL = NormalizeDouble(Ask - StopLoss*Point, Digits);

        

        if (OrderSelect(ticket, SELECT_BY_TICKET))     

            if(!OrderModify(ticket, OrderOpenPrice(), SL, TP, 0))

                Print("Ошибка модификации ордера на покупку!");

     }   else Print("Ошибка открытия ордера на покупку");

   }

     if (Ask <= PriceLow && CountSell() > 0)

   {

      for (int i = OrdersTotal() -1; i>0; i--)

      {

          if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))

          {

             if (OrderMagicNumber() == Magic && OrderType() == OP_SELL)

                 if (!OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, Black))

                     Print("Ошибка закрытия ордера на продажу!");

          }

      }

   }  

   if (Bid >= PriceHigh && CountBuy() > 0)

   {

      for (int i = OrdersTotal() -1; i>0; i--)

      {

          if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))

          {

             if (OrderMagicNumber() == Magic && OrderType() == OP_BUY)

                 if(!OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, Black))

                     Print("Ошибка закрытия ордера на покупку!");

          }

      }

   }

}

//+------------------------------------------------------------------+

int CountSell()

{

  int count = 0;

  

  for (int trade = OrdersTotal()-1; trade>=0; trade--)

  {

      if(OrderSelect(trade, SELECT_BY_POS, MODE_TRADES))

      {

          if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == OP_SELL)

            count++;

      }

  }

   return(count);

}//+------------------------------------------------------------------+

int CountBuy()

{

  int count = 0;

  

  for (int trade = OrdersTotal()-1; trade>=0; trade--)

  {

      if(OrderSelect(trade, SELECT_BY_POS, MODE_TRADES))

      {

          if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == OP_BUY)

            count++;

      }

  }

   return(count);

}

//+------------------------------------------------------------------+

//| Expert deinitialization function                                 |

//+------------------------------------------------------------------+

int deinit()

{

//+-------


//+-------

   return (0);

   }

//+------------------------------------------------------------------+

//| expert start function                                            |

//+------------------------------------------------------------------+  

int Start()

{

//-----

  bool error = fals;

  if (LBT!=Time[0]) {

    if (OrdersTotal()!=0) {

       for (int i=0; i<OrdersTotal(); i++) {

          if (OrderSelect(i,SELECT_BY_POS)&&OrderSymbol()==Symbol()&&OrderType()<2) {

             double SL = OrderStopLoss();

               if OrderType()==0) {

                 switch (TralType) {

                    case 0: SL = iSAR(NULL,0,SAR_Step,SAR_Max,0);

                            break;

                    case 1: SL = High[1] - iATR(NULL,0,ATR,Period,1)*ATR_K;                    

                            break;

                    case 2: SL = iCustom(NULL,0,"VininI_HMAsound&amp",HMA_Period,HMA_Method,3,HMA_Shift, fals,fals,"",1,0,0);

                            break;

                 }

                  if (SL<OrderStopLoss())

                      SL = OrderStopLoss();

              }

               if (OrderType()==1) {

                   switch (TralType) { 

                    case 0: SL = iSAR(NULL,0,SAR_Step,SAR_Max,0);

                            break;

                    case 1: SL = Low[1] + iATR(NULL,0,ATR,Period,1)*ATR_K;                    

                            break;

                    case 2: SL = iCustom(NULL,0,"VininI_HMAsound&amp",HMA_Period,HMA_Method,3,HMA_Shift, fals,fals,"",1,0,0);

                            break;

                 }

                  if (SL>OrderStopLoss())

                      SL = OrderStopLoss(); 

              }

              if (SL!=OrderStopLoss()) {

                  if(!OrderModify(OrderTicket(),OrderOpenPrice(),SL,OrderTakeProfit(),0))

                      error = true;

                  }

              }

          }

      }

      if (!error)

          LBT = Time[0];

  }     

    return (0);

}                                

//+------------------------------------------------------------------+

 
vkravtzov:

Научись вставлять код!!!


Научись вставлять код!!!


Научись вставлять код!!!


Научись вставлять код!!!


Научись вставлять код!!!


Научись вставлять код!!!


Научись вставлять код!!!


Научись вставлять код!!!


Научись вставлять код!!!


Научись вставлять код!!!

 
vkravtzov:   помоги разобраться, я добавил в советник функцию трэйлинг стопа, прокомпилировал, - выдаёт две ошибки. - Голову сломал, понять не могу как их исправить чтобы сова получилась. Правда сделки закрываются по условиям старой стратегии после касания ценой верхнейграницы канала, и нижней соответственно. Я так понимаю здесь тоже что-то нужно изменить. - Отзовись парням армии днр.

Решил помочь. Но возникли вопросы к автору - у Вас две вот эти функции инициализации - что они делают?

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
{
   if (Digits == 3 || Digits == 5)
   {
   TakeProfit *= 10;
   StopLoss   *= 10;
   Slippage   *= 10;
   }
   return(INIT_SUCCEEDED);
}


//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//--------
//--------
    return (0);
    }

функций OnTick() две ....  Да еще третья функция int Start()  - все они выполняются с приходом тика. И в какой последовательности терминал их запустит?

Ошибка: отсутствует закрывающая фигурная скобка в конце функции OnTick()

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
{
  PriceHigh = iCustom(NULL, 0, "TMA_Fair", TimeFrame, HalfLength, Price, ATRMultiplier, ATRPeriod, Interpolate, 1, 0);
  PriceLow  = iCustom(NULL, 0, "TMA_Fair", TimeFrame, HalfLength, Price, ATRMultiplier, ATRPeriod, Interpolate, 2, 0);
  if(CountSell() == 0 && Bid >= PriceHigh)
  {
     ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, "TMA robot", Magic, 0, Red);
     if (ticket > 0)
     {
        SL = NormalizeDouble(Bid + StopLoss*Point, Digits);
        TP = NormalizeDouble(Bid - TakeProfit*Point, Digits);
        if (OrderSelect(ticket, SELECT_BY_TICKET))
           if (!OrderModify(ticket, OrderOpenPrice(), SL, TP, 0))
                Print("Ошибка модификации ордера на продажу!");
     }
  }
  if (CountBuy() == 0 && Ask <= PriceLow)
  {
     ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0, "TMA robot", Magic, 0, Blue);
     if (ticket > 0)
     {
        TP = NormalizeDouble(Ask + TakeProfit*Point, Digits);
        SL = NormalizeDouble(Ask - StopLoss*Point, Digits);
        if (OrderSelect(ticket, SELECT_BY_TICKET))
            if(!OrderModify(ticket, OrderOpenPrice(), SL, TP, 0))
                Print("Ошибка модификации ордера на покупку!");
     }   else Print("Ошибка открытия ордера на покупку");
   }
}    // Эту скобку добавил !!!!!!!!!!!!!!!!!!!!!!!!!

Теперь компилятор обнаружил 8 ошибок. Удалил

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//--------
//--------
    return (0);
    }


//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
{
//+-------
//+-------
   return (0);
   }

Ошибок стало 7

Вместо    if OrderType()==0)    надо скобку после if:        if(OrderType()==0)    -  ошибок стало 8

В двух местах   iATR(NULL,0,ATR,Period,1)  - надо iATR(NULL,0,ATR_Period,1)  - ошибок стало 2

bool error = fals;   надо  bool error = false;  - ошибок стало 3

Индикатор   VininI_HMAsound&amp   где взять?  Какие там параметры?   = тогда бы ошибка осталась 1

И зачем в трех местах вопрос задавать?

 

Помогите скачать и устонавить бесплатных советников и сигналы на мт4 не как немогу найти скачать визде только как устонавить, а скачать нету. Подскажите где искать

 
vovik36 Степанов:

Помогите скачать и устонавить бесплатных советников и сигналы на мт4 не как немогу найти скачать визде только как устонавить, а скачать нету. Подскажите где искать

Сначала окончите школу, потом приходите.

 
Artyom Trishkin:

А так?


   for(i=pos; i<rates_total && !IsStopped(); i++)
     {
      double dmin=1000000.0;
      double dmax=-1000000.0;
      for(k=i-InpKPeriod+1; k<=i; k++)
       {double ima=iMA(Symbol(),1,60,0,1,0,k);
         if(dmin>ima)  dmin=ima;
         if(dmax<ima)  dmax=ima;
                   Comment(ima);
        }
      ExtLowesBuffer[i]=dmin;
      ExtHighesBuffer[i]=dmax;
     }

Привет. Подскажи почему он не видит ima=iMA(Symbol(),1,60,0,1,0,k). Через коммент показывает намного выше котировку чем сама линия. Из-за этого минималька и максималька вообще не вычисляет как надо

 
Rustam Bikbulatov:

Привет. Подскажи почему он не видит ima=iMA(NULL,60,24,0,1,0,k). Через коммент показывает намного выше котировку чем сама линия. Из-за этого минималька и максималька вообще не вычисляет как надо

iMA - нумерация как в таймсериях, 0 - наиболее актуальное число. А у вас видимо наоборот
 
Maxim Kuznetsov:
iMA - нумерация как в таймсериях, 0 - наиболее актуальное число. А у вас видимо наоборот

Это нечаенно поставил. Ничего не меняет это. Сама суть что показывает неправильно с k!

Причина обращения: