Diskussion zum Artikel "Die Verwendung von ORDER_MAGIC für den Handel mit unterschiedlichen Expert Advisors mit einem Instrument"
Ich weiß nicht, wer oder wie, aber ich ziehe es vor, bei der Erstellung meiner eigenen Aufzählungen explizit ID-Nummern anzugeben (obwohl das nicht notwendig ist).
Zum Beispiel so:
enum Emagic { ENUM_DIGITAL_NAME = 0, // numerischer Name des Beraters ENUM_CODE_INTERACTION = 1, // Interaktionscode ENUM_EXPERT_SYMBOL = 2 // das Symbol, mit dem der EA gestartet wird };
Dies kann auch bei der Migration von MQL4 hilfreich sein, z. B. ist dies die Aufzählung, die ich für die Arbeit mit Bestellungen verwende
//ENUM_MT4_ORDER_TYPE enum ENUM_MT4_ORDER_TYPE //Arten von Handelsgeschäften { OP_BUY = 0, //Kauf OP_SELL = 1, //Verkauf OP_BUYLIMIT = 2, // Ausstehender BUY LIMIT-Auftrag OP_SELLLIMIT = 3, //Anhängige Bestellung SELL LIMIT OP_BUYSTOP = 4, //Anhängiger BUY STOP-Auftrag OP_SELLSTOP = 5 //Anhängiger SELL STOP-Auftrag };
Dieser Ansatz ist praktisch, weil sich unabhängig von der Position des Bezeichners in der Aufzählung sein Code (numerischer Wert) nicht ändert. ....
Außerdem ist dieser Ansatz praktisch, wenn die Aufzählung Bezeichner mit einem negativen Wert enthalten soll
PS
Sehr interessanter Artikel, vielen Dank an den Autor...
Ich weiß nicht, wer oder wie, aber ich ziehe es vor, bei der Erstellung meiner eigenen Aufzählungen explizit ID-Nummern anzugeben (obwohl das nicht notwendig ist).
Zum Beispiel so:
Dies kann auch bei der Migration von MQL4 hilfreich sein, z. B. ist dies die Aufzählung, die ich für die Arbeit mit Bestellungen verwende
Dieser Ansatz ist praktisch, weil sich unabhängig von der Position des Bezeichners in der Aufzählung sein Code (numerischer Wert) nicht ändert. ....
Außerdem ist dieser Ansatz praktisch, wenn die Aufzählung Bezeichner mit einem negativen Wert enthalten soll
PS
Sehr interessanter Artikel, vielen Dank an den Autor...
Für mich ist es nicht entscheidend, denn bei der Deklaration einer Aufzählung werden die Werte automatisch in der Reihenfolge zugewiesen,
obwohl ich zustimme, dass Ihre Variante klarer ist (besonders wenn die Aufzählungen lang sind, sagen wir mehr als 3-4).
Bei einer solchen Herangehensweise an den Magier ist es notwendig, die gleiche Anweisung für den Benutzer zu schreiben - so dass der Benutzer klar erkennen kann, welche Magier besetzt werden und welche frei sind. Benutzer von Expert Advisors verwenden Expert Advisors nicht nur von einem Entwickler, und die Methode wird wahrscheinlich nicht in die Standards aufgenommen, die von allen Expert Advisor-Autoren verwendet werden. Hätten die Entwickler des Terminals diesen Ulong in mehrere Variablen aufgeteilt, so dass es mehrere Mages gäbe, zum Beispiel vier Zwei-Byte-Mages.
request.magic request.id1 request.id2 request.id3
Oder zumindest das Terminal mit einer Bibliothek ausstatten, so dass es irgendwie in die Standards aufgenommen werden könnte.
SetMagic(Magic,Id1,Id2,Id3)
Bei einer solchen Herangehensweise an den Magier ist es notwendig, die gleiche Anweisung für den Benutzer zu schreiben - so dass der Benutzer klar erkennen kann, welche Magier besetzt werden und welche frei sind. Benutzer von Expert Advisors verwenden Expert Advisors nicht nur von einem Entwickler, und die Methode wird wahrscheinlich nicht in die Standards aufgenommen, die von allen Expert Advisor-Autoren verwendet werden. Hätten die Entwickler des Terminals diesen Ulong in mehrere Variablen aufgeteilt, so dass es mehrere Mages gäbe, zum Beispiel vier Zwei-Byte-Mages.
Oder zumindest das Terminal mit einer Bibliothek ausstatten, so dass es irgendwie in die Standards aufgenommen werden könnte.
Es ist keineswegs so, dass es für den Benutzer notwendig ist, eine Anleitung zur Arbeit mit MAGIK zu schreiben, auch wenn diese nicht über die Beschreibung, wie MAGIK aufgebaut ist, hinausgeht....
Ich glaube, dass dies im Moment einer der besten Artikel über Handelsautomatisierung ist. Ich werde mehr sagen - ich selbst bin ein Anhänger der Kodierung von MAGIK auf einem ernsthafteren Niveau als 777777 oder 555555, auch wenn ich es vielleicht vorziehe, dort detailliertere Informationen zu platzieren, als zu sagen, dass es vom Autor getan wird.
Aber ich bin nicht auf die Idee gekommen, Strukturen zu verwenden (da die Idee der Kodierung schon seit MQL4 bekannt ist), obwohl ich wahrscheinlich kurz davor war....
Ich glaube auch nicht, dass es notwendig ist, in MAGIC Informationen über die Symbole zu "schreiben", mit denen gehandelt wird (das liegt daran, dass diese Informationen bereits an anderer Stelle gespeichert sind und sich vom Zeitpunkt der Bestellung bis zur vollständigen Schließung der Position nicht ändern). Außerdem denke ich, dass es ausreicht, die letzten drei Ziffern des MAGIC (wenn nicht der Sicherheitscode) dem MARKER des EXPERTEN zuzuordnen (ODER MARKER, ich werde nicht genau sagen, wie es in der Gentechnik ist).
Das liegt daran, dass man in der ERSTEN dieser Ziffern 9-10 Grundklassen von Experten kodieren kann und in den verbleibenden zwei seine eindeutige Nummer aus der Sicht des Benutzers oder Entwicklers. Als Ergebnis erhält man normalerweise 900 bis 1000 Kombinationen.
Ich bevorzuge auch einen Algorithmus, bei dem der Expert Advisor zumindest die vom Händler gesetzten Aufträge erkennt und sie entsprechend kodiert.
PS
Ich glaube nicht, dass man Angst haben muss, dass mehrere EAs kodierte MAGICs durcheinander bringen, zumindest denke ich, dass es bei einem bestimmten Ansatz nicht so gefährlich (und wahrscheinlich) ist, wie es auf den ersten Blick scheint. Insbesondere wird es irrelevant, ob all diese Experten (auch wenn sie von verschiedenen Autoren stammen) diese Methode der Verschlüsselung von MAGIC unterstützen und die Aktionen der anderen berücksichtigen. Idealerweise sollte nur ein Experte auf dieses oder jenes Paar eingehen.....
Der Artikel gibt ein Beispiel für die Verwendung von Codes, wobei nicht alle Ziffern verwendet werden und die Codierung offensichtlich mit Überschuss erfolgt,
Falls erforderlich, können sogar diese 9 belegten Bits komprimiert werden.
Neben der Identifizierung des Zauberers (die seine verbleibenden 9 Bits) kann auch der Stand der Bilanz zum Zeitpunkt der Bestellung übertragen werden.
Da der Saldo kaum mehr als 6 Bits beanspruchen dürfte, bleibt noch Platz für eine beliebige Kodierung.
Der Artikel gibt ein Beispiel für die Verwendung von Codes, wobei nicht alle Ziffern verwendet werden und die Codierung offensichtlich mit Überschuss erfolgt,
Falls erforderlich, können sogar diese 9 belegten Bits komprimiert werden.
Neben der Identifizierung des Zauberers (die seine verbleibenden 9 Bits) kann auch der Stand der Bilanz zum Zeitpunkt der Bestellung übertragen werden.
Da der Saldo kaum mehr als 6 Bits beanspruchen dürfte, bleibt noch Platz für eine beliebige Kodierung.
Zu all dem sollten Sie 1000 oder 10000 addieren und vor der Dekodierung subtrahieren, so dass es einen garantierten Bereich von Magie gibt, der von Ihrer Methode nicht belegt wird.
Um all dies sollte 1000 oder 10000 hinzugefügt werden, und vor der Dekodierung zu subtrahieren, so dass es einen garantierten Bereich von nicht durch Ihre Methode der Magie besetzt.
Nun, wie dies schmerzlos in dem Artikel beschrieben zu tun (müssen nur ein wenig Arbeit, um den Bereich der Verschlüsselung zu erweitern),
Ich sehe keine Probleme.
PS die einzige dünne Stelle sollte nicht vergessen, das Gleichgewicht in Ganzzahl zu übersetzen, sonst wird das Komma Glitch geben, wie es zu tun, sollte auf die Bindung gesehen werden, wenn das Konto Cent dann multiplizieren mit 100, wenn eine solche Präzision nicht notwendig ist, dann die Übersetzung in int mit Trimmen.
Nun, wie man es schmerzlos zu tun ist in dem Artikel beschrieben (nur ein wenig optimieren, um den Bereich der Verschlüsselung zu erweitern),
Ich sehe keine Probleme.
PS die einzige dünne Stelle sollte nicht vergessen, den Saldo in Integer übersetzen sonst Komma wird Glitch geben, wie es zu tun, sollte an der Bindung aussehen, wenn das Konto Cent ist dann multiplizieren mit 100, wenn eine solche Präzision nicht benötigt wird, dann die Übersetzung in int mit Clipping.
Wenn es kein Problem gibt, geben Sie eine kurze und klare Anweisung, wie die Nicht-Überschneidung von Magie durch Ihr System und nicht verschlüsselt zu gewährleisten.
Wenn es kein Problem ist, geben Sie eine kurze und klare Anweisung, wie die Nichtüberschneidung von durch Ihr System kodierten und nicht kodierten Zaubern gewährleistet werden kann.
Damit meine Antwort nicht wie eine Ausrede aussieht, werde ich gleich sagen, dass diese Frage nicht berücksichtigt wird, sondern erlaubt ist.
Hier ist der maximale Wert von ulong 18 446 744 073 709 551 615 die 17*10^18 hat alle freien Felder. Стоит добавить при кодировании 17 000 000 000 000 000 и поставить при декодировании проверку содержит ли 20 и 19 разряд числа 1 и 7 и вы гарантированно определите кодированный ли магик или нет.
//+------------------------------------------------------------------+ //| Die Funktion gibt eine vorgefertigte Magie zurück, die aus den Eingabedaten zusammengesetzt ist. //+------------------------------------------------------------------+ ulong Cmagic::SetMagic_request(int digital_name=0,int code_interaction=0) { if(digital_name>=1000)Print("Der numerische Name des Beraters ist falsch eingestellt (größer als 1000)"); if(code_interaction>=1000)Print("Falscher Alien-Alien-Identifikationscode (größer als 1000)".); mag.digital_name =digital_name; mag.code_interaction =code_interaction; mag.expert_symbol =symbolexpert(); mag.magicnumber =17000000000000000000+// вот эта вставка даст 20 разрядов магику mag.digital_name*(int)pow(1000,2)+ mag.code_interaction*(int)pow(1000,1)+ mag.expert_symbol; return(mag.magicnumber); }
und im Decoder.
//+------------------------------------------------------------------+ //| Die Funktion teilt die Magie in drei Teile von drei Ziffern auf. //|| und gibt den Teil zurück, auf den die Kategorie | //+------------------------------------------------------------------+ int Cmagic::decodeMagic_result(int category) { string string_value=(string)mag.magicnumber; int rem=(int)MathMod(StringLen(string_value),3); if(rem!=0) { rem=3-rem; string srem="0"; if(rem==2)srem="00"; string_value=srem+string_value; } int start_pos=StringLen(string_value)-3*category; string value=StringSubstr(string_value,start_pos,3); if(StringLen(string_value)!=20)return((int)StringToInteger("0"));//если магика не 20 разрядов значит не кодированный return((int)StringToInteger(value)); }
So ist es, und vergiss nicht, Dimitri, dass derjenige, der etwas tun will, nach einer Gelegenheit sucht, und derjenige, der nichts tun will, nach einem Grund sucht, ich habe ein Fenster in deiner Macht geöffnet, um ein Fenster oder sogar eine Tür daraus zu machen.
Übrigens, ich benutze diese
(int)pow(1000,2)
Verdrängung durch Ziffern, aber niemand verbietet, es durch String umzuschreiben, ich wollte nur in dem Artikel beide Methoden zeigen und wenn möglich organisch anpassen (also Kodierung geht durch int und Dekodierung durch String).
Und im Allgemeinen wollte ich die Möglichkeiten aufzeigen und nicht einen Blackbox-Konverter geben (es ist besser, einem Mann eine Schaufel zu geben als einen Eimer Brei).
PS hier sagte eine Sache verschlüsselt eine andere, ( Ich habe ein Gewitter, so dass das Netzwerk regelmäßig ausgeschaltet ist) verschlüsselt überprüfen nicht 1 und 7 in 20 und 19 Ziffern und das Vorhandensein dieser sehr Ziffern die, wenn die Magie 20-stellige Mittel verwendet Codierung, aber Sie verstehen, die Prüfung kann wiedergegeben werden.
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.
- 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 Die Verwendung von ORDER_MAGIC für den Handel mit unterschiedlichen Expert Advisors mit einem Instrument :
Dieser Beitrag beschreibt die Kodierung von Informationen mithilfe der magischen Identifikation sowie die Trennung, den Aufbau und die Synchronisierung des automatischen Handelns verschiedener Expert Advisors. Dieser Beitrag ist für Neueinsteiger ebenso interessant wie für erfahrenere Händler, weil er das Thema virtuelle Positionen behandelt, die bei der Implementierung komplexer Synchronisierungssysteme von Expert Advisors und diverser Strategien hilfreich sind.
Autor: Nikolay Demko