Diskussion zum Artikel "Bibliothek für ein leichtes und schnelles Entwickeln vom Programmen für den MetaTrader (Teil VI): Ereignisse von Änderungen von Orders und Positionen"
Guten Abend, Artem. Man lebt und lernt nie aus! Und ich lerne, indem ich Ihre Arbeit als methodisches Material benutze. Ich danke Ihnen für Ihre beträchtliche Arbeit und Erfahrung.
Natürlich nicht ohne Missverständnisse, und um noch genauer zu sein - je mehr ich lerne, desto mehr verstehe ich nicht.
In der beigefügten Datei habe ich versucht, Ihren Expert Advisor TestDoEasyPart08 zu modifizieren und einen benutzerdefinierten Indikator hinzuzufügen, auch Ihren iCrossAD.
Ich habe die Funktion iCustom(asymbol.Name(), _Period, "iCrossAD") verwendet;
CrossAD = iCustom(asymbol.Name(), _Period, "iCrossAD"); if (CrossAD == INVALID_HANDLE) { Print("Der Deskriptor für den iCrossAD-Indikator konnte nicht erstellt werden!"); return(INIT_FAILED); }
Dann habe ich versucht, die Daten aus dem Indikator in die EA-Puffer zu kopieren und zu überprüfen, wie gut mir das gelungen ist.
void OnTick() { //+------------------------------------------------------------------+////////////////////////////// int buf_size = 30; double Buf_Arrow_Sell[], Last_Arrow_Sell; double Buf_Arrow_Buy[], Last_Arrow_Buy; ArraySetAsSeries(Buf_Arrow_Sell, true); ArraySetAsSeries(Buf_Arrow_Buy, true); if (CopyBuffer(CrossAD, 3, 0, buf_size, Buf_Arrow_Sell) != buf_size || ArraySize(Buf_Arrow_Sell) != buf_size) { Print("Daten aus iCrossAD konnten nicht korrekt kopiert werden"); return; } else Last_Arrow_Sell = Buf_Arrow_Sell[0]; if (CopyBuffer(CrossAD, 2, 0, buf_size, Buf_Arrow_Buy) != buf_size || ArraySize(Buf_Arrow_Buy) != buf_size) { Print("Daten aus iCrossAD konnten nicht korrekt kopiert werden"); return; } else Last_Arrow_Buy = Buf_Arrow_Buy[0]; //+------------------------------------------------------------------+ Comment("Ausgabe von fraktalen Daten"., "\n Last_Arrow_Buy = ",Last_Arrow_Buy, "\n ---------------------- ", "\n Last_Arrow_Sell = ",Last_Arrow_Sell ); //+------------------------------------------------------------------+ //+------------------------------------------------------------------+//////////////////////////////
All dieser Trick will nicht funktionieren, bitte sagen Sie mir, wo ich falsch mache und wie man es wirklich ???? tun.
Guten Abend, Artem. Man lebt und lernt immer! Und ich lerne, indem ich Ihre Arbeit als methodisches Material verwende. Ich danke Ihnen für Ihre beträchtliche Arbeit und Erfahrung.
Natürlich ist es nicht ohne Missverständnisse, und um noch genauer zu sein - je mehr ich lerne, desto mehr verstehe ich nicht.
In der beigefügten Datei ist ein Versuch, Ihren Expert Advisor TestDoEasyPart08 zu modifizieren, indem ein benutzerdefinierter Indikator hinzugefügt wird, auch Ihr iCrossAD.
Ich habe die Funktion iCustom(asymbol.Name(), _Period, "iCrossAD") verwendet;
Dann habe ich versucht, die Daten aus dem Indikator in die EA-Puffer zu kopieren und zu prüfen, wie gut mir das gelungen ist
Dieser ganze Trick will nicht funktionieren, bitte sagen Sie mir, wo ich etwas falsch mache und wie man es richtig macht...
"Will nicht klappen" - was genau klappt nicht?
Das würde ich auf der globalen Ebene machen:
int buf_size = 30; double Buf_Arrow_Sell[], Last_Arrow_Sell; double Buf_Arrow_Buy[], Last_Arrow_Buy;
Dieses in OnInit():
ArraySetAsSeries(Buf_Arrow_Sell, true); ArraySetAsSeries(Buf_Arrow_Buy, true);
Und prüfen, ob der Indikator überhaupt Werte in den Puffern beim Nullbar hat - man prüft sie nur beim Nullbar. Ich weiß nicht mehr, was er dort ausgibt, und auf welchem Balken.
- "Was genau funktioniert nicht...?" - In diesem Stadium versuche ich, die Werte der letzten Auf- und Abwärtspfeile des Indikators in den Kommentaren zu sehen. Wenn ich dies erreiche, kann ich sie zeitlich vergleichen und weiß somit, welcher der letzte und somit "aktuelle" war. Dies kann als Signal bei der Änderung des Wertes oder als Filter für andere Signale betrachtet werden (kann/kann nicht). Aber hier ist das Problem, ich kann diese Werte nicht in die Kommentare übertragen und noch mehr - ich kann die Kommentare selbst nicht sehen, der Text sollte sichtbar sein?
- " Das würde ich auf globaler Ebene tun: ..." - Ich habe es verschoben und versucht herauszufinden, warum es so ist. Ich glaube, ich habe es verstanden, danke für die Wissenschaft!!!!
- "So würde ich in OnInit() vorgehen: ..." - Habe es verschoben, vielen Dank, ich werde es mir merken.
- "Und überprüfen Sie, ob der Indikator jemals Werte in den Puffern bei der Nullleiste hat - ..." - Ich werde versuchen, einen Kommentar innerhalb des Indikators zu organisieren und den Indikator laufen zu lassen, um den Wert selbst mit meinen Augen zu sehen, aber wie werden sie dann in einem Chart angezeigt? Den Indikator in einem separaten Chart aktivieren?
- "Sie überprüfen sie nur auf dem Null-Balken ..." - Ja, mir ist klar, wenn ich mit diesen Pfeilen auf das Array zugreife, werde ich wahrscheinlich fast immer einen leeren Wert erhalten und nur selten, wenn ein Pfeil gezeichnet wird, wird der Wert nicht leer sein. Also muss ich entweder einen Schalter des letzten Signals auf der Indikatorseite organisieren, oder eine Schleife laufen lassen, die letzten Werte bis zum ersten nicht leeren hier im Expert Advisor ausschreiben? Also genau den gleichen Schalter wie auf der Indikatorenseite?????
Bitte helfen Sie mir mit dem Kommentar, ich kann nicht verstehen, warum er nicht angezeigt wird!!!!
- "Was genau funktioniert nicht...?" - In diesem Stadium versuche ich, die Werte der letzten Auf- und Abwärtspfeile des Indikators in den Kommentaren zu sehen. Wenn ich dies erreiche, kann ich sie zeitlich vergleichen und weiß somit, welcher der letzte und somit "aktuelle" war. Dies kann als Signal bei der Änderung des Wertes oder als Filter für andere Signale betrachtet werden (kann/kann nicht). Aber hier ist das Problem, ich kann diese Werte nicht in die Kommentare übertragen und noch mehr - ich kann die Kommentare selbst nicht sehen, der Text sollte sichtbar sein?
- " This is what I would do at the global level:" - Habe es verschoben, versucht zu erkennen, warum es so ist, ich denke, ich habe es, danke für die Wissenschaft!!!!
- "Das hier in OnInit():" - Verschoben, vielen Dank, ich werde es mir merken.
- "Und prüfen Sie, ob der Indikator jemals Werte in den Puffern bei der Nullleiste hat - ..." - Ich werde versuchen, einen Kommentar innerhalb des Indikators zu organisieren und den Indikator laufen zu lassen, um die Werte selbst mit meinen Augen zu sehen, aber wie werden sie dann in einem Chart angezeigt? Den Indikator in einem separaten Chart aktivieren?
- "Sie überprüfen sie nur auf dem Null-Balken ..." - Ja, mir ist klar, wenn ich mit diesen Pfeilen auf das Array zugreife, werde ich wahrscheinlich fast immer einen leeren Wert erhalten und nur selten, wenn ein Pfeil gezeichnet wird, wird der Wert nicht leer sein. Also muss ich entweder eine Umschaltung des letzten Signals auf der Indikatorseite organisieren, oder eine Schleife laufen lassen, die die letzten Werte bis zum ersten nicht leeren Wert ausschreibt? Ich meine genau den gleichen Schalter wie auf der Indikatorseite????
Bitte helfen Sie mir mit dem Kommentar, ich kann nicht verstehen, warum er nicht angezeigt wird!!!!
Was steht im Protokoll "Experten"? Werden Indikator-Handles erstellt?
Was wird in das Journal "Experten" geschrieben? Werden Indikatorgriffe erstellt?
Guten Tag! Ja, der Handle wird erstellt, er ist gleich 10.
Ich habe einen kleinen Fortschritt gemacht (sehr klein!). Es gibt Comment-Datensätze
Es gibt Print()-Datensätze
2019.05.19 17:31:13.127 2018.01.02 00:00:00 Handle iCrossAD = 10
2019.05.19 17:31:13.580 2018.01.02 09:00:00:00 Daten aus dem 2. Puffer des Indikators iCrossAD kopiert
2019.05.19 17:31:13.580 2018.01.02 09:00:00 CrossAD = 10, period_find = 400, Last_Arrow_Buy = 1.797693134862316e+308
2019.05.19 17:31:13.580 2018.01.02 09:00:00 Daten aus dem 3. Puffer des iCrossAD Indikators kopiert
2019.05.19 17:31:13.580 2018.01.02 09:00:00 CrossAD = 10, period_find = 400, Last_Arrow_Sell = 1.797693134862316e+308
2019.05.19 17:31:13.580 2018.01.02 09:00:20 Daten aus dem 2. Puffer des iCrossAD Indikators kopiert
2019.05.19 17:31:13.581 2018.01.02 09:00:20 CrossAD = 10, period_find = 400, Last_Arrow_Buy = 1.797693134862316e+308
2019.05.19 17:31:13.581 2018.01.02 09:00:20 Daten aus dem 3. Puffer des iCrossAD Indikators kopiert
2019.05.19 17:31:13.581 2018.01.02 09:00:20 CrossAD = 10, period_find = 400, Last_Arrow_Sell = 1.797693134862316e+308
Zwei Puffer im Indikator, aus denen die Daten kopiert werden, enthalten die Werte, auf die die Indikatorpfeile gesetzt werden. Sie werden zum Zeitpunkt des Setzens des Pfeils dorthin geschrieben. Daraus schließe ich, dass sie zum Zeitpunkt der Pfeilbildung mit doppelten Preisen gefüllt werden sollten. Aber aus irgendeinem Grund erhalte ich eine kosmische Zahl, wenn ich mich nicht irre, ist es das Maximum der möglichen Doppelwerte im MT5.
Aber ich habe das im Tester ausprobiert und erreicht, gestern und heute gab es keine Kurse, heute ist Sonntag.
Wenn es einen Wunsch gibt, bitte helfen Sie mir zu verstehen. Expert Advisor und Indikator an den Beitrag angehängt. Der Expert Advisor wurde geändert, ich schrieb darüber oben, der Indikator ist auch Ihre, es gibt keine Änderungen in ihm.
Guten Tag. Ja, der Griff ist erstellt, er ist gleich 10.
Ich habe einen kleinen Fortschritt gemacht (sehr klein!). Kommentar Datensätze sind erschienen
Es gibt Print()-Datensätze
2019.05.19 17:31:13.127 2018.01.02 00:00:00 Handle iCrossAD = 10
2019.05.19 17:31:13.580 2018.01.02 09:00:00:00 Daten aus dem 2. Puffer des iCrossAD Indikators kopiert
2019.05.19 17:31:13.580 2018.01.02 09:00:00 CrossAD = 10, period_find = 400, Last_Arrow_Buy = 1.797693134862316e+308
2019.05.19 17:31:13.580 2018.01.02 09:00:00 Daten aus dem 3. Puffer des iCrossAD Indikators kopiert
2019.05.19 17:31:13.580 2018.01.02 09:00:00 CrossAD = 10, period_find = 400, Last_Arrow_Sell = 1.79769313486262316e+308
2019.05.19 17:31:13.580 2018.01.02 09:00:20 Daten aus dem 2. Puffer des iCrossAD Indikators kopiert
2019.05.19 17:31:13.581 2018.01.02 09:00:20 CrossAD = 10, period_find = 400, Last_Arrow_Buy = 1.79769313486262316e+308
2019.05.19 17:31:13.581 2018.01.02 09:00:20 Daten aus dem 3. Puffer des iCrossAD Indikators kopiert
2019.05.19 17:31:13.581 2018.01.02 09:00:20 CrossAD = 10, period_find = 400, Last_Arrow_Sell = 1.79769313486262316e+308
Zwei Puffer im Indikator, aus denen die Daten kopiert werden, enthalten die Werte, auf die die Indikatorpfeile gesetzt werden. Sie werden zum Zeitpunkt des Setzens des Pfeils dorthin geschrieben. Daraus schließe ich, dass sie nicht mit doppelten Preisen gefüllt werden sollten. Aber aus irgendeinem Grund habe ich eine kosmische Zahl, wenn ich mich nicht irre, ist es das Maximum der möglichen doppelten Werte in MT5.
Allerdings habe ich versucht und erreicht dies in der Tester, gab es keine Notierungen gestern und heute, heute ist Sonntag.
Wenn es einen Wunsch gibt, bitte helfen Sie mir zu verstehen. Expert Advisor und Indikator an den Beitrag angehängt. Der Expert Advisor wurde geändert, ich habe oben darüber geschrieben, der Indikator ist auch Ihrer, es gibt keine Änderungen in ihm.
Nun, hier geht es um Fragen zur Bibliothek, nicht um triviale Unkenntnis über leere Werte von Indikatorpuffern. LEERER_WERT == DBL_MAX
Verstanden, gehört, danke. Ich glaube, ich wusste etwas über leere Werte, ich werde die Frage studieren.
Wenn es hier nicht angebracht ist, können Sie mir einen Thread empfehlen, in dem ich Antworten auf solche lahmeren Fragen von Ihnen oder Ihren Kollegen erhalten kann?
Wenn es keinen solchen Ort gibt, würde es sich wahrscheinlich lohnen, einen zu erstellen.
Entschuldigen Sie, dass ich Sie störe, aber hier gibt es keine lebhaften Unterhaltungen, niemand mischt sich ein, und wer außer dem Autor wird die besten Ratschläge geben.
Außerdem versuche ich gerade, Ihre Bibliothek zu benutzen. Primitiv, natürlich, aber so gut ich kann, sorry.
Roger, ich habe dich verstanden, danke. Ich dachte, ich wüsste etwas über leere Werte, ich werde mich damit befassen.
Wenn es hier nicht angebracht ist, können Sie einen anderen Thread empfehlen, in dem ich Antworten auf solche lahmeren Fragen von Ihnen oder Ihren Kollegen erhalten kann?
Wenn es keinen solchen Ort gibt, würde es sich wahrscheinlich lohnen, einen zu erstellen.
Es tut mir leid, dass ich Sie störe, aber hier gibt es keine lebhaften Diskussionen, es gibt niemanden, der stört, und wer außer dem Autor wird die besten Ratschläge geben.
Außerdem versuche ich gerade, Ihre Bibliothek zu benutzen. Primitiv natürlich, aber so gut ich kann, sorry.
Bei Fragen, die sich nicht auf die Bibliothek beziehen, schreiben Sie bitte hier:

- 2016.11.09
- www.mql5.com
Fragen, die sich nicht auf die Bibliothek beziehen, bitte hier stellen:
Vielen Dank, ging, schaute, las. Genau das, was ich brauche, ich werde es verwenden.

- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Neuer Artikel Bibliothek für ein leichtes und schnelles Entwickeln vom Programmen für den MetaTrader (Teil VI): Ereignisse von Änderungen von Orders und Positionen :
In den vorherigen Artikeln haben wir begonnen, eine große plattformübergreifende Bibliothek zu erstellen, die die Entwicklung von Programmen für MetaTrader 5 und MetaTrader 4 Plattformen vereinfacht. Im siebten Teil haben wir die Aktivierung der Verfolgung von StopLimit-Orders hinzugefügt und die Funktionsweise zur Verfolgung anderer Ereignisse von Orders und Positionen vorbereitet. In diesem Artikel werden wir die Klasse zur Verfolgung von Ereignissen der Order- und Positionsänderung entwickeln.
Kompilieren wir den EA.
Wir setzen die Werte von StopLoss in Punkten und TakeProfit in Punkten auf Null, um Positionen zu öffnen und Pending-Orders ohne Stopps zu platzieren. Setzen wie StopLoss für Modifikation (Punkte) und TakeProfit für Modifikation (Punkte) auf 20 und 60 (Standardwerte) — diese StopLoss und TakeProfit werden durch Drücken der Schaltflächen eingestellt.
Starten wir den EA im Tester und setzen Pending-Orders. Dann drücken wir die Tasten zum Einstellen von StopLoss und TakeProfit nacheinander. Die Preise sind eingestellt und die entsprechenden Einträge erscheinen im Journal. Als Nächstes aktivieren wir das Trailing und beobachten die Orders, während sie dem Preis folgen und die entsprechenden Einträge im Journal erscheinen. Positionen, die durch Orders ausgelöst werden, werden mit ihrem StopLoss verfolgt, und die entsprechenden Einträge erscheinen im Journal.
Netting-Konten:
Hedging-Konten:
Autor: Artyom Trishkin