Yeni başlayanlardan sorular MQL5 MT5 MetaTrader 5 - sayfa 1243

 

Bu makaleye dayanarak:   https://www.mql5.com/en/articles/43

Ancak, yalnızca gösterge verilerinin arabellek dizilerine kontrol edildiği ve alındığı ana kadar kod vardır, o zaman alınan gösterge verileriyle nasıl çalışılacağına dair bir örnek yoktur. Referans kitabına baktım, çoğunlukla göstergeler için kod örnekleri var, bu yüzden zaten setindexbuffer'ı oradan ekledim. En azından "kazmak" için hangi yöne ipucu verin. Dün zaten yorgundum, yarım gün geçirdim.

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

Zaten denedim. Ama master'da orada sınıflarla birlikte üretir. En azından basit bir şekilde anlardım - en azından fazla anlamadığım kodda. EA'daki gösterge değerlerini almak için kodu nasıl düzelteceğimi söyler misiniz?

Örnek: EA'dan iEnvelopes gösterge değerleri nasıl alınır

 //+------------------------------------------------------------------+
//|                         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);
  }
//+------------------------------------------------------------------+


Sonuç:


 
Vladimir Karputov :

Örnek: EA'dan iEnvelopes gösterge değerleri nasıl alınır

Çok teşekkürler! Bunu halledeceğim!

 
Vladimir Karputov :


Vladimir, lütfen söyle bana: UPPER_LINE ve LOWER _LINE'ı nereden alıyor? Sadece gösterge kulpunu almışsak, kulptan hemen almamız mümkün müdür?

 
Sayberix :

Vladimir, lütfen söyle bana: UPPER_LINE ve LOWER _LINE'ı nereden alıyor? Yalnızca gösterge tutamağını aldıysak, tutamacı hemen aldık mı?

Sorunuz anlaşılmadı. Anlamı olmayan bir dizi harf. Lütfen sorunuzu yeniden ifade edin - yazmaya zaman ayırın, sorunuzu düşünün ve sakince yazın.

 
Vladimir Karputov :

Sorunuz anlaşılmadı. Anlamı olmayan bir dizi harf. Lütfen sorunuzu yeniden ifade edin - yazmaya zaman ayırın, sorunuzu düşünün ve sakince yazın.

İşlev argümanında:

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

UPPER_LINE kullandınız.

Bu parametre değeri, daha önce alınan tanıtıcıdan nereden geliyor:

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

?

 
Sayberix :

İşlev argümanında:

UPPER_LINE kullandınız.

Bu parametre değeri, daha önce alınan tanıtıcıdan nereden geliyor:

?

Numara. Bu değer, iEnvelopes yardımından alınmıştır.

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

Tünaydın. Danışmanı GBPUSD para biriminde başlatırken, göstergeyi EURUSD kodunda ayarladım, danışman başlangıçta çöküyor. Aynı zamanda, tersini yaparsanız, danışmanı EURUSD'de çalıştırın ve göstergeyi GBPUSD'ye ayarlayın, her şey çalışır. Ne ile bağlanabilir?

   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 :

Tünaydın. Danışmanı GBPUSD para biriminde başlatırken, göstergeyi EURUSD kodunda ayarladım, danışman başlangıçta çöküyor. Aynı zamanda, tersini yaparsanız, danışmanı EURUSD'de çalıştırın ve göstergeyi GBPUSD'ye ayarlayın, her şey çalışır. Ne ile bağlanabilir?

1. Wizard MQL5 kullanarak bir EA oluşturun - örneğin, EA için 'GBPUSD' ve sinyal modülü için 'EURUSD' belirtin. DOĞRU kod örneğini alacaksınız. Kodu inceleyin. Gelecekte, manuel düzenlemeye izin vermeyin, ancak Wizard MQL5 kullanarak kod oluşturun.

2. EA için 'GBPUSD' belirlediyseniz, bu EA'yı YALNIZCA 'GBPUSD' üzerinde çalıştırmanız gerekir.

Dosyalar:
1.mq5  13 kb
 
Vladimir Karputov :

1. Wizard MQL5 kullanarak bir EA oluşturun - örneğin, EA için 'GBPUSD' ve sinyal modülü için 'EURUSD' belirtin. DOĞRU kod örneğini alacaksınız. Kodu inceleyin. Gelecekte, manuel düzenlemeye izin vermeyin, ancak Wizard MQL5 kullanarak kod oluşturun.

2. EA için 'GBPUSD' belirlediyseniz, bu EA'yı YALNIZCA 'GBPUSD' üzerinde çalıştırmanız gerekir.

Vladimir, kodu MQL5 sihirbazını kullanarak oluşturdum. EA'nız denedi, GBPUSD para biriminde çalıştırıldığında da benim için çalışmıyor.

Günlük şunları söylüyor:

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