Fragen von Anfängern MQL5 MT5 MetaTrader 5 - Seite 1243

 

Ich habe mich ursprünglich auf diesen Artikel gestützt:https://www.mql5.com/ru/articles/43

Aber der Code dort ist nur bis zu dem Moment der Überprüfung und immer Indikator-Daten in Puffer-Arrays, weiter gibt es kein Beispiel, wie man mit empfangenen Indikator-Daten zu arbeiten. Ich habe das Referenzbuch durchgesehen, es gibt hauptsächlich Codebeispiele für Indikatoren, ich habe setindexbuffer daraus entnommen. Ich möchte wissen, in welche Richtung ich "graben" soll. Gestern hatte ich es satt, ich habe einen halben Tag hier verbracht.

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

Ich habe es bereits ausprobiert. Aber im Assistenten wird es dort mit Klassen erzeugt. Ich möchte zumindest den Code auf einfache Art und Weise verstehen - den Code verstehe ich zumindest ein bisschen. Könnten Sie bitte beraten, wie der Code zu korrigieren, um Indikatorwerte in der EA zu erhalten?

Beispiel: Wie man die Werte des iEnvelopes-Indikators von EA erhält

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


Ergebnis:


 
Vladimir Karputov:

Beispiel: wie man iEnvelopes Indikatorwerte von einem EA erhält

Herzlichen Dank! Ich werde es mir ansehen!

 
Vladimir Karputov:


Vladimir, sagen Sie mir bitte, woher UPPER_LINE und LOWER_LINE kommen? Wenn wir nur den Blinkerhebel haben, haben wir ihn dann direkt vom Hebel?

 
Sayberix:

Vladimir, sagen Sie mir bitte, woher UPPER_LINE und LOWER_LINE kommen? Wenn wir nur den Blinkerhebel bekommen haben, haben wir dann auch gleich den Griff bekommen?

Ich verstehe Ihre Frage nicht. Es ist eine Ansammlung von Buchstaben ohne Bedeutung. Bitte formulieren Sie Ihre Frage um - tippen Sie nicht übereilt, sondern denken Sie über Ihre Frage nach und tippen Sie in aller Ruhe.

 
Vladimir Karputov:

Ich verstehe Ihre Frage nicht. Eine Reihe von Buchstaben, die keine Bedeutung haben. Bitte formulieren Sie Ihre Frage um - tippen Sie nicht hastig, sondern denken Sie über Ihre Frage nach und tippen Sie ruhig.

Im Argument der Funktion:

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

Sie haben UPPER_LINE verwendet.

Woher stammt dieser Parameterwert, aus dem Handle, das Sie zuvor erhalten haben?

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

?

 
Sayberix:

Im Argument der Funktion:

Sie haben UPPER_LINE verwendet.

Woher stammt dieser Parameterwert, aus dem zuvor empfangenen Handshake:

?

Nein. Dieser Wert stammt aus der iEnvelopes-Hilfe

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

Nachmittags. Wenn ich einen EA für die Währung GBPUSD ausführe, setze ich einen Indikator im Code für EURUSD, der EA stürzt beim Start ab. Wenn ich den EA jedoch auf EURUSD ausführe und GBPUSD als Indikator angebe, funktioniert alles. Womit kann sie in Verbindung gebracht werden?

   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:

Nachmittags. Wenn ich einen EA für die Währung GBPUSD ausführe, setze ich einen Indikator im Code für EURUSD, der EA stürzt beim Start ab. Wenn ich den EA jedoch auf EURUSD ausführe und GBPUSD als Indikator angebe, funktioniert alles. Woran kann das liegen?

1. Erzeugen Sie einen EA mit dem Assistenten MQL5 - geben Sie zum Beispiel "GBPUSD" für den EA und "EURUSD" für das Signalmodul an. Sie erhalten dann einen RICHTIGEN Beispielcode. Studieren Sie den Code. In Zukunft sollten Sie die manuelle Bearbeitung vermeiden und den Code mit dem MQL5-Assistenten generieren.

2. Wenn Sie für einen Expert Advisor "GBPUSD" angegeben haben , sollten Sie diesen EA NUR auf "GBPUSD" ausführen.

Dateien:
1.mq5  13 kb
 
Vladimir Karputov:

1. Erzeugen Sie einen EA mit dem Assistenten MQL5 - geben Sie z.B. "GBPUSD" für den EA und "EURUSD" für das Signalmodul an. Sie erhalten dann einen RICHTIGEN Beispielcode. Studieren Sie den Code. In Zukunft sollten Sie die manuelle Bearbeitung vermeiden und den Code mit dem MQL5-Assistenten generieren.

2. Wenn Sie für einen Expert Advisor "GBPUSD" angegeben haben , dann sollten Sie diesen EA NUR auf "GBPUSD" ausführen.

Vladimir, ich habe den Code mit dem MQL5-Assistenten erstellt. Ich habe versucht, Ihre EA, es funktioniert auch nicht für mich, wenn ich es auf GBPUSD Währung laufen.

Im Protokoll steht Folgendes:

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