Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 1215

 

доброго всем дня, требуется подсказка по переводу кода из МТ4 в МТ5...


функция на МТ4  - возвращает True или False используя MA.


input int                 MinDist          = 30;            // Мин. пройденное расстояние( отклонение от средней линии в  тиках)
input int                 OpenDev          = 16;         // Отклонение для входа ( отклонение от средней линии в  тиках)
//*********************************************************************************************
bool SignalBuy()  
  {
   double MA0 = iMA(Symbol(), 0, PeriodMA, ShiftMA, MethodMA, PriceMA, 0);
   if(Bid <= MA0+OpenDev*Point)
     {
      if(High[0]-MA0 >= MinDist*Point)
         return(true);
      for(int i=1; i<=Bars-1; i++)
        {
         double MA = iMA(Symbol(), 0, PeriodMA, ShiftMA, MethodMA, PriceMA, i);
         if(Low[i] <= MA+OpenDev*Point)
            return(false);
         if(High[i]-MA >= MinDist*Point)
            return(true);
        }
     }
   return(false);
  }
//*********************************************************************************************

 нужно ее перенести на МТ5

проблема в таймсериях Low[i]  и High[i] , не понимаю как их переделать.

 
Milhail Novgorodcev:

доброго всем дня, требуется подсказка по переводу кода из МТ4 в МТ5...


функция на МТ4  - возвращает True или False используя MA.


 нужно ее перенести на МТ5

проблема в таймсериях Low[i]  и High[i] , не понимаю как их переделать.

1. Хендл индикатора НУЖНО СОЗДАТЬ ОДИН РАЗ. Делается это в OnInit. Пример создания: iMA

2. Сначала исправить пункт 1.

Документация по MQL5: Технические индикаторы / iMA
Документация по MQL5: Технические индикаторы / iMA
  • www.mql5.com
//|                                                     Demo_iMA.mq5 | //|                        Copyright 2011, MetaQuotes Software Corp. | //|                                             https://www.mql5.com | //| Перечисление способов создания хэндла                            |  Creation             type=Call_iMA;                ...
 
Vladimir Karputov:

1. Хендл индикатора НУЖНО СОЗДАТЬ ОДИН РАЗ. Делается это в OnInit. Пример создания: iMA

2. Сначала исправить пункт 1.

вот что получилось: 

int MA0;                                  // variable for storing the handle of the iMA indicator

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  
MA0 = iMA(o_symbol.Name(), Period(), PeriodMA, ShiftMA, MethodMA, PriceMA);
  
  //--- if the handle is not created
   if(handle_iMA==INVALID_HANDLE)
     {
      //--- tell about the failure and output the error code
      PrintFormat("Failed to create handle of the iMA indicator for the symbol %s/%s, error code %d",
                  m_symbol.Name(),
                  EnumToString(Period()),
                  GetLastError());
      //--- the indicator is stopped early
      return(INIT_FAILED);
     }
//---
 
Milhail Novgorodcev:

вот что получилось: 

А теперь скажите, зачем Вам такой огромный цикл - по всем всем барам?

      for(int i=1; i<=Bars-1; i++)
        {

это очень нерационально.


Опишите логику своими словами.

 
Vladimir Karputov:

А теперь скажите, зачем Вам такой огромный цикл - по всем всем барам?

это очень нерационально.


Опишите логику своими словами.

Условие  - отход цены от средней линии на  MinDist(30 пипсов), если он происходит, тогда при возврате цены к средней и достижении OpenDev( 10 пипсов)  -  происходит сигнал на открытие Buy ордера. ( вверху средней всегда Buy)

 

 
Milhail Novgorodcev:

Условие  - отход цены от средней линии на  MinDist(30 пипсов), если он происходит, тогда при возврате цены к средней и достижении OpenDev( 10 пипсов)  -  происходит сигнал на открытие Buy ордера. ( вверху средней всегда Buy)

 

Когда нужно проверять 'MinDist(30 пипсов)' и 'OpenDev(10 пипсов)' - на каждом тике и всё же только в момент рождения нового бара?

 

Подскажите в чем причина открытия позиции сразу после запуска советника?

Условия на открытие позиции не выполняется, а позиция открывается

 if(
      (MovingAverage1[0]<MovingAverage2[0]) &&
      (MovingAverage1[1]>MovingAverage2[1])
   )
     {
      if(PositionsTotal()==0)
         trade.Sell(0.1);
     }

   if(
      (MovingAverage1[0]>MovingAverage2[0]) &&
      (MovingAverage1[1]<MovingAverage2[1])
   )
     {
      if(PositionsTotal()==1)
         trade.PositionClose(_Symbol);
        }

 
Pineapple88:

Подскажите в чем причина открытия позиции сразу после запуска советника?

Условия на открытие позиции не выполняется, а позиция открывается

Где и как получены значения средних? Получены-ли они вообще? Если эти значения получены нормально, то обратили-ли вы внимание на индексацию в массивах средних?

 
Alexey Viktorov:

Где и как получены значения средних? Получены-ли они вообще? Если эти значения получены нормально, то обратили-ли вы внимание на индексацию в массивах средних?

Вот код

 {

   double MovingAverage1[], MovingAverage2[]; //задаем два массиса для МА

   int MovingAverageIndic1 = iMA(_Symbol,0,20,0,MODE_EMA,PRICE_CLOSE);
   int MovingAverageIndic2 = iMA(_Symbol,0,200,0,MODE_EMA,PRICE_CLOSE);

   ArraySetAsSeries(MovingAverage1,true);
   ArraySetAsSeries(MovingAverage2,true);

   CopyBuffer(MovingAverageIndic1,0,0,3,MovingAverage1);
   CopyBuffer(MovingAverageIndic2,0,0,3,MovingAverage2);

   if(
      (MovingAverage1[0]<MovingAverage2[0]) &&
      (MovingAverage1[1]>MovingAverage2[1])
   )
     {
      if(PositionsTotal()==0)
         trade.Sell(0.1);
     }

   if(
      (MovingAverage1[0]>MovingAverage2[0]) &&
      (MovingAverage1[1]<MovingAverage2[1])
   )
     {
      if(PositionsTotal()==1)
         trade.PositionClose(_Symbol);
     }

  }
 
Pineapple88:

Вот код

Хендл индикатора НУЖНО СОЗДАТЬ ОДИН РАЗ. Делается это в OnInit. Пример создания: iMA

Документация по MQL5: Технические индикаторы / iMA
Документация по MQL5: Технические индикаторы / iMA
  • www.mql5.com
//|                                                     Demo_iMA.mq5 | //|                        Copyright 2011, MetaQuotes Software Corp. | //|                                             https://www.mql5.com | //| Перечисление способов создания хэндла                            |  Creation             type=Call_iMA;                ...
Причина обращения: