初心者の方からの質問 MQL5 MT5 MetaTrader 5 - ページ 1215

 

MT4からMT5へのコード変換のヒントが欲しいのですが・・・。


MT4 の関数 - MA を使用して True または False を返します。


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 を使用して True または False を返します。


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. インジケータ・ハンドルは一度作成しなければならない(MUST)。これは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(30pips) でミッドラインから離れ、ミッドラインに戻り、OpenDev(10pips)になったら買い注文を 出すことです。(平均ラインの上部に常にBuyされます)。

 
Milhail Novgorodcev:

条件は、価格がMinDistの 平均線(30pips)から離れることで、もしそうなったら、価格が平均線に戻り、OpenDev(10pips)に達したとき- 買い注文を開くシグナルがあります(平均ラインの上部に常にBuyされます)。

MinDist(30 pips)」と「OpenDev(10 pips)」はいつチェックすべきでしょうか。毎ティック、あるいは新しいバーが開く瞬間だけでしょうか。

 

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:

以下はそのコードです。

インジケータハンドルは一度だけ作成されなければならない(MUST)。これは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;                ...