Diskussion zum Artikel "Die Verwendung von ORDER_MAGIC für den Handel mit unterschiedlichen Expert Advisors mit einem Instrument" - Seite 2

 
ias:


2. wofür der Ausdruck (int) steht und welchen Wert er in int hat DIGITS=(int)-log10(SymbolInfoDouble(symbol,SYMBOL_VOLUME_STEP)); if(DIGITS<0)DIGITS=0;


Lesen Sie über explizite Typkonvertierung.
Документация по MQL5: Основы языка / Типы данных / Приведение типов
Документация по MQL5: Основы языка / Типы данных / Приведение типов
  • www.mql5.com
Основы языка / Типы данных / Приведение типов - Документация по MQL5
 
ias:

1. danke an den Autor für den Artikel.
2.Was der Ausdruck (int) bedeutet und welchen Wert er in int annimmt DIGITS=(int)-log10(SymbolInfoDouble(symbol,SYMBOL_VOLUME_STEP)); if(DIGITS<0)DIGITS=0;
3.Warum nehmen der Ausdruck (int) und SYMBOL_VOLUME_STEP während des Tests die Werte Unknown identifier an und wie wirkt sich dies auf das Ergebnis int DIGITS aus?
4. Wie funktioniert der Interaktionscode?
Spielt der Interaktionscode eine Rolle, wenn EAs auf demselben Instrument arbeiten, wobei es ausreicht, entweder identische oder unterschiedliche numerische Namen von EAs festzulegen.

Der Ausdruck (int) ist eine Umwandlung des folgenden Ausdrucks in den Typ int.

Der Ausdruck SYMBOL_VOLUME_STEP ist einer der Werte der Aufzählung ENUM_SYMBOL_INFO_INTEGER.

Keiner der obigen Ausdrücke ist eine Variable, daher haben sie in Debugger natürlich den Wert "Unbekannter Bezeichner",

was wörtlich "unmöglich zu erkennen" bedeutet. Debugger kann einfach nicht verstehen, zu welchem Typ die für die Verfolgung deklarierte Variable gehört.


Документация по MQL5: Основы языка / Типы данных / Целые типы / Типы char, short, int и long
Документация по MQL5: Основы языка / Типы данных / Целые типы / Типы char, short, int и long
  • www.mql5.com
Основы языка / Типы данных / Целые типы / Типы char, short, int и long - Документация по MQL5
 
ias:


4. wie funktioniert der Interaktionscode?
Spielt der Interaktionscode eine Rolle, wenn EAs auf demselben Instrument arbeiten, wobei es ausreicht, entweder identische oder unterschiedliche numerische Namen für EAs festzulegen.

Sorry, ich wurde abgelenkt und habe die 4. Frage nicht beantwortet.

Der Interaktionscode wird als eine einzige Magie für mehrere vertraute Expert Advisors verwendet.

Sie haben z.B. einen absolut ausgereiften EA, an dem Sie nichts ändern wollen, aber Sie haben einen Trailing EA erstellt und wollen testen, wie er mit diesem EA zusammenarbeitet. Sie starten den Original EA und den Trailing EA und geben beiden EAs den gleichen Interaktionscode und sie werden die Aktionen des anderen als ihre eigenen wahrnehmen, während die Änderungen, die von dritten EAs ohne einen solchen Interaktionscode gemacht werden, ignoriert werden (diese werden für das ausgewählte EA-Paar unsichtbar sein).

Gleichzeitig können Sie einige Daten getrennt verarbeiten, da der EA-Identifikationscode (digitaler Name) unterschiedlich ist,

alles hängt von der Anfrage ab, wie Sie sie formulieren werden (zum Beispiel können Sie einen Bericht nur über die Arbeit des Schleppnetzes erstellen).

Ein und dieselbe Transaktion kann je nach Anfrage als Ihre eigene oder die einer anderen Person definiert werden.

[Gelöscht]  
ias:

1. danke an den Autor für den Artikel.
2.Was der Ausdruck (int) bedeutet und welchen Wert er in int annimmt DIGITS=(int)-log10(SymbolInfoDouble(symbol,SYMBOL_VOLUME_STEP)); if(DIGITS<0)DIGITS=0;
3.Warum nehmen der Ausdruck (int) und SYMBOL_VOLUME_STEP während des Tests die Werte Unknown identifier an und wie wirkt sich dies auf das Ergebnis int DIGITS aus?
4. Wie funktioniert der Interaktionscode?
Spielt der Interaktionscode eine Rolle, wenn EAs auf demselben Instrument arbeiten, wobei es ausreicht, entweder identische oder unterschiedliche numerische Namen von EAs festzulegen.

Da ich verstehe, dass Sie die Bedeutung des Codes nicht ganz verstanden haben, lassen Sie uns verstehen, was im Detail passiert

int DIGITS=(int)-log10(SymbolInfoDouble(symbol,SYMBOL_VOLUME_STEP)); if(DIGITS<0)DIGITS=0;

1. Wir erhalten die Größe des Lot-Volumenschrittes für das Instrument, SYMBOL_VOLUME_STEP - Minimaler Volumenschritt, um einen Handel zu machen (normalerweise ist es 0.01);

2. Ermitteln des Logarithmus der Zahl zur Basis 10 => -log10(0,01) = 2 oder -log10(0,10) = 1 (für MQ ist es -log10(0,10) = 1);

3. Gleichsetzen des Ergebnisses (-2/-1) mit der Variablen DIGITS, die vom Typ int ist.

4. Wenn der Wert von DIGITS<0 ist, weise ihm den Wert = 0 zu.

PS

(int) wird verwendet, um das Ergebnis einer Berechnung dem Typ int zuzuordnen...

 

In diesem Artikel wird das Ereignis "Stop Loss/Stake Profit eingetreten" nicht berücksichtigt. Und das ist eine sehr starke Auslassung!

Beispiel: ein Expert Advisor hat zwei Teile: der erste funktioniert, wenn die "virtuelle Position" auf einem bestimmten Symbol und Zeitrahmen gleich 0 ist, und der zweite funktioniert, wenn diese "virtuelle Position" nicht gleich Null ist; nun, sagen wir, der Expert Advisor schließt diese Position. Betrachten wir eine Situation: Auf ein Signal hin haben wir einen Kauf getätigt, die "virtuelle Position" nahm den Wert +100 an. Ein Stop-Loss wurde ausgelöst, die reale "virtuelle Position" hat den Wert 0 angenommen. Aber in unserem Fall wird sie gleich +100 sein. Der Expert Advisor wird "denken", dass die Position +100 ist, aber in Wirklichkeit ist sie 0, was zu einem unerwünschten Ergebnis führen wird.

Bitte erklären Sie mir diesen Punkt.

 
beast:

In diesem Artikel wird das Ereignis "Stop Loss/Stake Profit eingetreten" nicht berücksichtigt. Und das ist eine sehr starke Auslassung!

Beispiel: ein Expert Advisor hat zwei Teile: der erste funktioniert, wenn die "virtuelle Position" auf einem bestimmten Symbol und Zeitrahmen gleich 0 ist, und der zweite funktioniert, wenn diese "virtuelle Position" nicht gleich Null ist; nun, sagen wir, der Expert Advisor schließt diese Position. Betrachten wir eine Situation: Auf ein Signal hin haben wir einen Kauf getätigt, die "virtuelle Position" nahm den Wert +100 an. Ein Stop-Loss wurde ausgelöst, die reale "virtuelle Position" hat den Wert 0 angenommen. Aber in unserem Fall wird sie gleich +100 sein. Der Expert Advisor wird "denken", dass die Position +100 ist, aber in Wirklichkeit ist sie 0, was zu einem unerwünschten Ergebnis führen wird.

Bitte erklären Sie mir diesen Punkt.

Das ist richtig, dieser Artikel enthält kein Modul zur Verarbeitung von Stop-Orders.

Er beschreibt die Möglichkeiten der Verwendung der magischen Zahl.

Um eine virtuelle Position zu verwenden, werden virtuelle Stopps benötigt.

 

Warum brauchen wir dann Magie?

Weil wir, wenn wir damit die Historie durchforsten, kein vollständiges Bild der von diesem Expert Advisor erteilten Aufträge erhalten, weil wir nicht in der Lage sind, Stop-Loss und Take-Profits zu identifizieren.

 
beast:

Warum brauchen wir dann Magie?

Weil wir, wenn wir damit die Historie durchforsten, kein vollständiges Bild der von diesem Expert Advisor erteilten Aufträge erhalten, weil wir nicht in der Lage sind, Stop-Loss und Take-Profits zu identifizieren.


Es ist wichtig zu verstehen, dass es ein Fehler ist, Stopps als Teil einer Handelsstrategie zu verwenden. Auf dem Server gespeicherte Stop-Aufträge sind Schutzaufträge für Situationen, in denen etwas schief gelaufen ist (Kommunikationsausfall mit dem Server, Panik auf dem Markt), in anderen Fällen sind virtuelle Stop-Aufträge in Form von EA-Signalen durchaus geeignet.

Die Praxis zeigt jedoch, dass die Programmierer oft zu faul sind, um Stopps zu virtualisieren. Schließlich ist es viel einfacher, vorgefertigte Stop-Orders zu verwenden.

 

Bei der Berechnung ist es notwendig, durch alle Geschäfte zu gehen, wenn ein Geschäft mit einem bestimmten Magier - wir berücksichtigen sein Volumen, alle anderen Geschäfte sind für die Tatsache der Schließung durch Stoploss / Stakeprofit überprüft, wenn es eine, dann ist es notwendig, den berechneten Betrag zurückzusetzen. In meinem Artikel wird auch der Stoploss nicht berücksichtigt. Wer hätte das gedacht... Das ist ein neues Thema, Sie müssen mich entschuldigen.

Bei dieser Magie gibt es noch eine Sache, der EA hat eine Position eröffnet, man trennt den EA und schließt die Positionen manuell - das war's, danach gibt es eine falsche Abrechnung.

Und was ist die Situation: Sagen wir, ein EA hat eine Kaufposition von 0,1 eröffnet, der zweite EA hat eine Verkaufsposition von 0,1 eröffnet, die kumulierte Position ist gleich 0, und es wird angenommen, dass es zwei Gegenpositionen gibt.

Zusätzlich zu all dem brauchen wir ein Mittel zur Kontrolle, ein Skript, das berechnet, ob die berechneten Volumina für alle Magics mit dem realen Volumen übereinstimmen, wir brauchen ein Mittel zur Nivellierung - um mit einem Magic zu öffnen und mit einem anderen zu schließen.

Das wirft die große Frage auf, ob die Verwendung von Magie überhaupt gefragt sein wird, und wenn ja, wie man damit leben kann....

Sollten wir für jeden Berater ein eigenes Konto eröffnen?

 

Bitte korrigieren Sie mich, wenn ich falsch liege...

Ich muss etwas ähnliches wie Ihren Code hier versuchen, um die Operationen und Positionen verschiedener EAs zu unterscheiden. Ich habe mehrere Zweifel. Ist dieser Code optimiert? Ich denke, dass dieser Code den Computer wirklich verlangsamen könnte, wenn Sie eine lange Historie von Trades haben und mehrere EAs diesen Code ausführen - obwohl ich das noch nicht bewiesen habe, das ist nur meine Meinung.

In der Datei magic_exp1_de.mq5 zum Beispiel füllt die Methode prHistory_Deals(ulong &buf[],int HTD) den Puffer buf[] mit allen Geschäften, die wir getätigt haben.

Wäre es nicht besser für die Leistung, wenn wir nur den letzten DEAL IN speichern würden, der noch nicht durch einen DEAL OUT gefüllt wurde?

Vielleicht habe ich nicht richtig verstanden, was der Code macht. Ich denke, der Code in magic_exp1_de.mq5 macht Folgendes: Er prüft für die gesamte Geschichte der Geschäfte seit Beginn der Zeit :-) prüft er, ob die Summe der Volumina aller DEAL_TYPE_SELL und DEAL_TYPE_BUY gleich ist, in diesem Fall haben wir keine Position offen. Wenn das Volumen der VERKÄUFE höher ist als das Volumen der KÄUFE, dann haben wir eine allgemeine VERKÄUFER-Position, und eine KAUF-Position, wenn das Volumen der KÄUFE höher ist als das der VERKÄUFE.

Gibt es keine andere Möglichkeit?