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 существует несколько вариантов вызова индикаторов, и осуществляются они в основном при помощи функций IndicatorCreate() и iCustom(). Причем эти функции лишь возвращают хендл индикатора, и дальнейшая работа с индикаторами ведется именно через него. Так что же такое хендл? Как работать с функциями IndicatorCreate() и iCustom()? И как...
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 parametersinputint Input1=9;
//---int handle_iEnvelopes; // variable for storing the handle of the iEnvelopes indicator//+------------------------------------------------------------------+//| Expert initialization function |//+------------------------------------------------------------------+intOnInit()
{
//--- create handle of the indicator iEnvelopes
handle_iEnvelopes=iEnvelopes(Symbol(),Period(),3,0,MODE_LWMA,PRICE_OPEN,0.03);
//--- if the handle is not createdif(handle_iEnvelopes==INVALID_HANDLE)
{
//--- tell about the failure and output the error codePrintFormat("Failed to create handle of the iEnvelopes indicator for the symbol %s/%s, error code %d",
Symbol(),
EnumToString(Period()),
GetLastError());
//--- the indicator is stopped earlyreturn(INIT_FAILED);
}
//---return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+//| Expert deinitialization function |//+------------------------------------------------------------------+voidOnDeinit(constint reason)
{
//---
}
//+------------------------------------------------------------------+//| Expert tick function |//+------------------------------------------------------------------+voidOnTick()
{
//---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(constint handle,constint buffer,constint start_pos,
constint 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 codeResetLastError();
//--- fill a part of the iBands array with values from the indicator bufferint copied=CopyBuffer(handle,buffer,start_pos,count,arr_buffer);
if(copied!=count)
{
//--- if the copying fails, tell the error codePrintFormat("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 calculatedreturn(false);
}
return(result);
}
//+------------------------------------------------------------------+
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.
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.
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?
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.
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
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Erlauben Sie die Verwendung von Cookies, um sich auf der Website MQL5.com anzumelden.
Bitte aktivieren Sie die notwendige Einstellung in Ihrem Browser, da Sie sich sonst nicht einloggen können.
Sie sind angemeldet. Die Zwei-Faktor-Authentifizierung wurde deaktiviert. Richten Sie sie erneut ein und scannen Sie einen neuen QR-Code oder fahren Sie mit deaktivierter Zwei-Faktor-Authentifizierung fort.
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.
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
Ergebnis:
Beispiel: wie man iEnvelopes Indikatorwerte von einem EA erhält
Herzlichen Dank! Ich werde es mir ansehen!
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?
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.
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?
?
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
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?
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.
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: