gibt die Ausführungsrichtlinie zurück. - Seite 2

 
Vladimir Karputov:

Beispiel aus der Handelsklasse CTrade. Zuerst wird auf"SYMBOL_FILLING_FOK" geprüft, dann auf"SYMBOL_FILLING_IOC".


Die Prüfung erfolgt mit derbitweisen UND-Verknüpfung.

Bitweise UND-Verknüpfung

Die bitweise UND-Verknüpfung der binären Darstellungen x und y. Der Wert des Ausdrucks enthält 1 (WAHR) in allen Bits, in denen sowohl x als auch y ungleich Null sind, und 0 (FALSCH) in allen anderen Bits.


Beispiel:


Mehr über bitweise Operationen.

Nach diesem Code ist die Ausführungspolitik also entweder ioc oder fok oder keines von beiden, so dass sich herausstellt, dass es nicht zwei gleichzeitig sein können? Oder habe ich das wieder falsch verstanden?
 
Kann es nicht doch zwei zur gleichen Zeit geben? Was sollte die Funktion zurückgeben, damit es zwei zur gleichen Zeit gibt?
 
Ich habe Ihre Antwort wohl missverstanden. Sie meinten im Allgemeinen, nicht in Bezug auf ein Handelskonto. Vielen Dank für Ihre Hilfe.
 
Ivan_Invanov:
Kann es nicht doch zwei zur gleichen Zeit geben? Was sollte die Funktion zurückgeben, damit es zwei zur gleichen Zeit gibt?
Es kann 2 sein, dann gibt die Funktion 3 zurück. BUT¡¡¡¡¡ Dies ist eine untypische Situation. Da es nur 3 Möglichkeiten gibt, könnte es 1, 2 oder die Summe aus 1+2 sein. Es geht um die Summe, nicht um die dritte Option. Die Überprüfung mit einer bitweisen Operation kann also nur die Frage beantworten: Kann diese oder jene Füllungsrichtlinie angewendet werden.
 
Ivan_Invanov:
Kann es nicht doch zwei zur gleichen Zeit geben? Was sollte die Funktion zurückgeben, damit es zwei zur gleichen Zeit gibt?

Beispiel für die Prüfung von zwei Zeichen auf dem MetaQuotes-Demo-Server:

2020.07.19 07:35:07.922 Info_FILLING (USDRUB,H1)        MetaQuotes-Demo
2020.07.19 07:35:07.922 Info_FILLING (USDRUB,H1)        Fill or Kill, SYMBOL_FILLING_FOK: false
2020.07.19 07:35:07.922 Info_FILLING (USDRUB,H1)        Immediate or Cancel, SYMBOL_FILLING_IOC: true
2020.07.19 07:35:07.922 Info_FILLING (USDRUB,H1)        Return: true
2020.07.19 07:35:07.922 Info_FILLING (USDRUB,H1)        Flags of allowed order filling modes: SYMBOL_TRADE_EXECUTION_INSTANT
2020.07.19 07:35:07.922 Info_FILLING (USDRUB,H1)        
2020.07.19 07:35:45.291 Info_FILLING (EURUSD,H1)        MetaQuotes-Demo
2020.07.19 07:35:45.291 Info_FILLING (EURUSD,H1)        Fill or Kill, SYMBOL_FILLING_FOK: true
2020.07.19 07:35:45.291 Info_FILLING (EURUSD,H1)        Immediate or Cancel, SYMBOL_FILLING_IOC: false
2020.07.19 07:35:45.291 Info_FILLING (EURUSD,H1)        Return: true
2020.07.19 07:35:45.291 Info_FILLING (EURUSD,H1)        Flags of allowed order filling modes: SYMBOL_TRADE_EXECUTION_INSTANT

Siehe die Spezifikationen (fill-in) für diese Symbole:



und hier ist eine häufigere Variante: wenn alle Füllungen für ein Symbol verfügbar sind

2020.07.19 07:40:22.818 Info_FILLING (NZDUSD,H1)        MetaQuotes-Demo
2020.07.19 07:40:22.818 Info_FILLING (NZDUSD,H1)        Fill or Kill, SYMBOL_FILLING_FOK: true
2020.07.19 07:40:22.818 Info_FILLING (NZDUSD,H1)        Immediate or Cancel, SYMBOL_FILLING_IOC: true
2020.07.19 07:40:22.818 Info_FILLING (NZDUSD,H1)        Return: true
2020.07.19 07:40:22.818 Info_FILLING (NZDUSD,H1)        Flags of allowed order filling modes: SYMBOL_TRADE_EXECUTION_INSTANT

und Spezifikation


 
Ich danke Ihnen.
 
Alexey Viktorov:
Es kann auch 2 sein, dann gibt die Funktion 3 zurück. BUT¡¡¡¡¡ Dies ist eine untypische Situation. Da es nur 3 Möglichkeiten gibt, könnte es 1, 2 oder die Summe aus 1+2 sein. Es geht um die Summe, nicht um die dritte Option. Die Überprüfung mit einer bitweisen Operation kann also nur die Frage beantworten: Kann diese oder jene Füllungsrichtlinie angewendet werden.
Ich verstehe immer noch nicht, wie eine Variable zwei Terme zurückgeben kann. Und wenn es einen Wert von 3 als ein Mitglied zurückgibt, funktionieren die bitweisen Operationen nicht. Ich habe mich entschieden, nur den Modus EXECUTION_INSTANT zu wählen und werde immer eine FOK-Richtlinie haben .
 
Ivan_Invanov:
Ich verstehe immer noch nicht, wie eine Variable zwei Mitglieder zurückgeben kann. Und wenn ein Begriff als 3 zurückgegeben wird, dann funktionieren die bitweisen Operationen nicht. Ich habe mich entschieden, nur den Modus EXECUTION_INSTANT zu wählen und werde immer eine FOK-Richtlinie haben .

Um dies zu verstehen, müssen Sie wissen, was Flaggen sind.

Der jeweils nächste Wert einer Flagge ist der Wert der vorherigen Flagge multipliziert mit 2. D.h. 1, 2, 4, 8, 16, 32......... Wenn also der Wert 33 ist, bedeutet dies, dass dieser Wert nur 1 und 32 enthält. Wenn der Wert 18 ist, kann er auch nur aus 16 und 2 zusammengesetzt sein. Und der Wert 3 kann nur aus 1 und 2 zusammengesetzt werden.

Bei bitweisen Operationen wird also nur geprüft, ob der geprüfte Wert in der Summe der Merker vorhanden ist. Wenn Sie prüfen, ob eine beliebige Zahl in 18 enthalten ist, erhalten Sie false, außer bei der Prüfung der Werte 2 und 16.

 
Alexey Viktorov:

Um dies zu verstehen, müssen Sie wissen, was Flaggen sind.

Der jeweils nächste Wert einer Flagge ist der Wert der vorherigen Flagge multipliziert mit 2. D.h. 1, 2, 4, 8, 16, 32......... Wenn also der Wert 33 ist, bedeutet dies, dass dieser Wert nur 1 und 32 enthält. Wenn der Wert 18 ist, kann er auch nur aus 16 und 2 zusammengesetzt sein. Und der Wert 3 kann nur aus 1 und 2 zusammengesetzt werden.

Bei bitweisen Operationen wird also nur geprüft, ob der geprüfte Wert in der Summe der Merker vorhanden ist. Wenn Sie prüfen, ob eine beliebige Zahl in 18 enthalten ist, erhalten Sie falsch, außer bei den Werten 2 und 16.

Ja, ich weiß, wie man mit binären Ziffern arbeitet.

   uint filling=(uint)SymbolInfoInteger(symbol,SYMBOL_FILLING_MODE);
   if((filling&SYMBOL_FILLING_FOK)==SYMBOL_FILLING_FOK)
     {
      m_type_filling=ORDER_FILLING_FOK;

In diesem Code gibt die Funktion zum Beispiel 3 zurück.

(11&1)==1 ; 11==01 nein, das ist falsch, es hat nicht funktioniert.

Ich war gerade dabei, dies zu schreiben und dachte, dass ich die Vorgänge vielleicht missverstanden habe.

& das bedeutet, dass ich Dezimalwerte in Binärwerte umwandle und eine bitweise Verknüpfung durchführe.

== wahr, wenn der erste Term gleich dem zweiten Term ist. Ist dies richtig?

 
Ahhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh, endlich ist es soweit. Wenn eine Ziffer einen Wert enthält, ist dies ein wahres Flag, und das Triplett setzt den Wert in beide Ziffern. Nur warum funktioniert dieser Code dann?