초보자의 질문 MQL5 MT5 MetaTrader 5 - 페이지 1243

 

이 문서를 기반으로:   https://www.mql5.com/en/articles/43

그러나 지시자 데이터를 확인하고 버퍼 배열로 받는 순간까지만 코드가 있고, 받은 지시자 데이터를 어떻게 처리하는지에 대한 예는 없습니다. 참고서에 들어가보니 인디케이터에 대한 코드 예제가 대부분이었기 때문에 이미 setindexbuffer를 첨부했습니다. 적어도 "파기"할 방향을 암시하십시오. 어제 나는 이미 지쳐 반나절을 보냈습니다.

Способы вызова индикаторов в MQL5
Способы вызова индикаторов в MQL5
  • www.mql5.com
В MQL5 существует несколько вариантов вызова индикаторов, и осуществляются они в основном при помощи функций IndicatorCreate() и iCustom(). Причем эти функции лишь возвращают хендл индикатора, и дальнейшая работа с индикаторами ведется именно через него. Так что же такое хендл? Как работать с функциями IndicatorCreate() и iCustom()? И как...
 
Sayberix :

이미 시도했습니다. 그러나 마스터에서는 클래스와 함께 생성됩니다. 나는 최소한 간단한 방법으로 그것을 이해할 것입니다. 적어도 제가 많이 이해하지 못하는 코드로 말입니다. EA에서 지표 값을 얻기 위해 코드를 수정하는 방법을 알려주시겠습니까?

예: EA에서 iEnvelopes 표시기 값을 가져오는 방법

 //+------------------------------------------------------------------+
//|                         Example iEnvelopes values on a chart.mq5 |
//|                        Copyright 2020, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, MetaQuotes Software Corp."
#property link        "https://www.mql5.com"
#property version    "1.00"
//--- input parameters
input int       Input1= 9 ;
//---
int       handle_iEnvelopes;                     // variable for storing the handle of the iEnvelopes indicator
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {
//--- create handle of the indicator iEnvelopes
   handle_iEnvelopes= iEnvelopes ( Symbol (), Period (), 3 , 0 , MODE_LWMA , PRICE_OPEN , 0.03 );
//--- if the handle is not created
   if (handle_iEnvelopes== INVALID_HANDLE )
     {
       //--- tell about the failure and output the error code
       PrintFormat ( "Failed to create handle of the iEnvelopes indicator for the symbol %s/%s, error code %d" ,
                   Symbol (),
                   EnumToString ( Period ()),
                   GetLastError ());
       //--- the indicator is stopped early
       return ( INIT_FAILED );
     }
//---
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
//---
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {
//---
   string text= "" ;
   double upper[],lower[];
   ArraySetAsSeries (upper, true );
   ArraySetAsSeries (lower, true );
   int start_pos= 0 ,count= 3 ;
   if (!iGetArray(handle_iEnvelopes, UPPER_LINE ,start_pos,count,upper) ||
      !iGetArray(handle_iEnvelopes, LOWER_LINE ,start_pos,count,lower))
     {
       return ;
     }
   string text_upper= "" ,text_lower= "" ;
   for ( int i=count- 1 ; i>= 0 ; i--)
     {
      text_upper  = text_upper   + "Upper" + "[" + IntegerToString (i)+ "]" + " " + DoubleToString (upper[i], Digits ()+ 1 )  + " | " ;
      text_lower  = text_lower   + "Lower" + "[" + IntegerToString (i)+ "]" + " " + DoubleToString (lower[i], Digits ()+ 1 )  + " | " ;
     }
   Comment (text_upper+ "\n" +text_lower);
  }
//+------------------------------------------------------------------+
//| Get value of buffers                                             |
//+------------------------------------------------------------------+
bool iGetArray( const int handle, const int buffer, const int start_pos,
               const int count, double &arr_buffer[])
  {
   bool result= true ;
   if (! ArrayIsDynamic (arr_buffer))
     {
       PrintFormat ( "ERROR! EA: %s, FUNCTION: %s, this a no dynamic array!" , __FILE__ , __FUNCTION__ );
       return ( false );
     }
   ArrayFree (arr_buffer);
//--- reset error code
   ResetLastError ();
//--- fill a part of the iBands array with values from the indicator buffer
   int copied= CopyBuffer (handle,buffer,start_pos,count,arr_buffer);
   if (copied!=count)
     {
       //--- if the copying fails, tell the error code
       PrintFormat ( "ERROR! EA: %s, FUNCTION: %s, amount to copy: %d, copied: %d, error code %d" ,
                   __FILE__ , __FUNCTION__ ,count,copied, GetLastError ());
       //--- quit with zero result - it means that the indicator is considered as not calculated
       return ( false );
     }
   return (result);
  }
//+------------------------------------------------------------------+


결과:


 
Vladimir Karputov :

예: EA에서 iEnvelopes 표시기 값을 가져오는 방법

매우 감사합니다! 이건 내가 정리할게!

 
Vladimir Karputov :


Vladimir, 알려주세요. UPPER_LINE과 LOWER _LINE은(는) 어디서 얻나요? 인디케이터 핸들만 받았는데 핸들에서 바로 받은게 가능한가요?

 
Sayberix :

Vladimir, 알려주세요. UPPER_LINE과 LOWER _LINE은(는) 어디서 얻나요? 인디케이터 핸들만 받았다면 바로 핸들을 받은 건가요?

귀하의 질문을 이해할 수 없습니다. 의미가 없는 문자 집합입니다. 질문을 바꿔서 입력하세요. 시간을 들여 질문에 대해 생각하고 침착하게 입력하세요.

 
Vladimir Karputov :

귀하의 질문을 이해할 수 없습니다. 의미가 없는 문자 집합입니다. 질문을 바꿔서 입력하세요. 시간을 들여 질문에 대해 생각하고 침착하게 입력하세요.

함수 인수에서:

iGetArray(handle_iEnvelopes, UPPER_LINE ,start_pos,count,upper)

UPPER_LINE을(를) 사용했습니다.

이전에 받은 핸들에서 이 매개변수 값은 어디에서 왔습니까?

handle_iEnvelopes= iEnvelopes ( Symbol (), Period (), 3 , 0 , MODE_LWMA , PRICE_OPEN , 0.03 );

?

 
Sayberix :

함수 인수에서:

UPPER_LINE을(를) 사용했습니다.

이전에 받은 핸들에서 이 매개변수 값은 어디에서 왔습니까?

?

아니요. 이 값은 iEnvelopes 도움말에서 가져옵니다.

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

안녕하세요. GBPUSD 통화로 어드바이저를 시작할 때 EURUSD 코드에 표시기를 설정하면 어드바이저가 시작될 때 충돌이 발생합니다. 동시에 반대 작업을 수행하고 EURUSD에서 어드바이저를 실행하고 지표를 GBPUSD로 설정하면 모든 것이 작동합니다. 무엇으로 연결할 수 있습니까?

   CSignalAC *filter0= new CSignalAC;

   if (filter0== NULL )

     {

       //--- failed

       printf ( __FUNCTION__ + ": error creating filter0" );

      ExtExpert.Deinit();

       return ( INIT_FAILED );

     }

   signal.AddFilter(filter0);

//--- Set filter parameters

   filter0. Symbol ( "EURUSD" );

   filter0.Weight(Signal_AC_Weight);
 
Nikita Bushuev :

안녕하세요. GBPUSD 통화로 어드바이저를 시작할 때 EURUSD 코드에 표시기를 설정하면 어드바이저가 시작될 때 충돌이 발생합니다. 동시에 반대 작업을 수행하고 EURUSD에서 어드바이저를 실행하고 지표를 GBPUSD로 설정하면 모든 것이 작동합니다. 무엇으로 연결할 수 있습니까?

1. 마법사 MQL5를 사용하여 EA를 생성합니다. 예를 들어 EA의 경우 'GBPUSD'를 지정하고 신호 모듈의 경우 'EURUSD'를 지정합니다. 올바른 코드 샘플을 받게 됩니다. 코드를 공부하세요. 앞으로는 단순히 수동 편집을 허용하지 않고 Wizard MQL5를 사용하여 코드를 생성하십시오.

2. EA에 'GBPUSD'를 지정한 경우 'GBPUSD'에서만 이 EA를 실행해야 합니다 .

파일:
1.mq5  13 kb
 
Vladimir Karputov :

1. 마법사 MQL5를 사용하여 EA를 생성합니다. 예를 들어 EA의 경우 'GBPUSD'를 지정하고 신호 모듈의 경우 'EURUSD'를 지정합니다. 올바른 코드 샘플을 받게 됩니다. 코드를 공부하세요. 앞으로는 단순히 수동 편집을 허용하지 않고 Wizard MQL5를 사용하여 코드를 생성하십시오.

2. EA에 'GBPUSD'를 지정한 경우 'GBPUSD'에서만 이 EA를 실행해야 합니다 .

Vladimir, MQL5 마법사를 사용하여 코드를 생성했습니다. 귀하의 EA에서 시도했지만 GBPUSD 통화로 실행할 때도 작동하지 않습니다.

로그에는 다음과 같이 나와 있습니다.

2020.08.16 13:01:20.793 Core 1  EURUSD: symbol to be synchronized
2020.08.16 13:01:20.793 Core 1  EURUSD: symbol synchronized already, 18 bytes received
2020.08.16 13:01:20.793 Core 1  2018.01.01 00:00:00   cannot load indicator 'Accelerator Oscillator' [4804]
2020.08.16 13:01:20.793 Core 1  2018.01.01 00:00:00   CSignalAC::InitAC: error initializing object
2020.08.16 13:01:20.793 Core 1  2018.01.01 00:00:00   CExpert::InitIndicators: error initialization indicators of signal object
2020.08.16 13:01:20.793 Core 1  2018.01.01 00:00:00   OnInit: error initializing indicators
2020.08.16 13:01:20.793 Core 1  tester stopped because OnInit returns non-zero code 1
사유: