初学者的问题 MQL5 MT5 MetaTrader 5 - 页 1215

 

大家下午好,我需要一个提示,如何将代码从MT4翻译到MT5...


MT4上的函数 - 使用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);
  }
//*********************************************************************************************

需要将其转移到MT5

问题是在时间序列Low[i]和High[i]中,我不明白如何转换它们。

 
Milhail Novgorodcev:

大家下午好,我需要一个提示,如何将代码从MT4翻译到MT5...


MT4上的函数 - 使用MA返回真或假。


需要将其转移到MT5

问题是在时间序列Low[i]和High[i]中,我不明白如何转换它们。

你必须只创建一次指标手柄。这是在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点)时 - 有一个信号可以打开一个买入订单(它总是买在平均线的顶端)

 
Milhail Novgorodcev:

条件是价格远离MinDist(30 点)上的平均线,如果发生这种情况,那么当价格回到平均线并达到OpenDev(10点)时 - 有一个信号,可以打开一个买入订单(它总是买在平均线的顶端)

我们应该在什么时候检查 "MinDist(30 pips) "和 "OpenDev(10 pips)"--在每个tick 还是只在一个新条形图打开的时刻?

 

在EA启动后立即开仓 的原因是什么?

不符合开仓条件,但开仓了

 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:

在EA启动后立即开仓 的原因是什么?

开仓的条件没有满足,但开仓了

平均数的数值是在哪里和如何获得的?你到底有没有得到它们呢?如果数值是正常获得的,你是否注意到平均数阵列中的索引?

 
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;                ...