초보자의 질문 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] 에 있으며 변경 방법을 이해할 수 없습니다.

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 주문을 열라는 신호가 발생하는 것입니다. (상단 중앙은 항상 구매임)

 

 
Milhail Novgorodcev :

조건은 가격이 평균선에서 MinDist(30핍)만큼 멀어지면 가격이 평균으로 돌아와 OpenDev(10핍)에 도달하면 매수 주문을 열라는 신호가 발생하는 것입니다. (상단 중앙은 항상 구매임)

 

'MinDist(30 pips)' 및 'OpenDev(10 pips)'를 확인해야 하는 경우 - 모든 틱 에서 여전히 새 막대가 생성되는 순간에만?

 

어드바이저 출시 직후 포지션을 오픈한 이유가 무엇인지 알려주세요.

포지션 개설 조건이 충족되지 않고 포지션이 개설됨

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