restituisce la politica di esecuzione. - pagina 2

 
Vladimir Karputov:

Esempio dalla classe commerciale CTrade. Prima viene controllato per'SYMBOL_FILLING_FOK', poi per'SYMBOL_FILLING_IOC'.


Il controllo viene eseguito utilizzando l'operazione "AND bitwise".

Operazione bitwise AND

L'operazione bitwise AND delle rappresentazioni binarie x e y. Il valore dell'espressione contiene 1 (VERO) in tutti i bit dove sia x che y contengono non-zero; e 0 (FALSO) in tutti gli altri bit.


Esempio:


Maggiori informazioni sulle operazioni bitwise.

Quindi con questo codice la politica di esecuzione è o ioc o fok o nessuno dei due, quindi risulta che non possono essercene due allo stesso tempo? O ho di nuovo frainteso?
 
Non possono essercene due allo stesso tempo? Cosa deve restituire la funzione perché ce ne siano due allo stesso tempo?
 
Devo aver frainteso la sua risposta. Intendevi in generale, non in relazione a un conto di trading. Grazie per il vostro aiuto.
 
Ivan_Invanov:
Non possono essercene due allo stesso tempo? Cosa dovrebbe restituire la funzione perché ce ne siano due allo stesso tempo?
Può essere 2, allora la funzione restituirà 3. BUT¡¡¡¡¡ Questa è una situazione atipica. Dato che ci sono solo 3 opzioni, potrebbe essere 1, 2 o la somma di 1+2. È la somma, non la terza opzione. Quindi il controllo con un'operazione bitwise può solo rispondere alla domanda: può essere applicata questa o quella politica di riempimento.
 
Ivan_Invanov:
Non possono essercene due allo stesso tempo? Cosa dovrebbe restituire la funzione perché ce ne siano due allo stesso tempo?

Esempio di controlli per due personaggi del server MetaQuotes-Demo:

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

Vedere le specifiche (compilare) per questi simboli:



ed ecco una variante più comune: quando tutti i riempimenti sono disponibili per un simbolo

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

e specifiche


 
Grazie.
 
Alexey Viktorov:
Può anche essere 2, allora la funzione restituirà 3. BUT¡¡¡¡¡ Questa è una situazione atipica. Dato che ci sono solo 3 opzioni, potrebbe essere 1, 2 o la somma di 1+2. È la somma, non la terza opzione. Quindi il controllo con un'operazione bitwise può solo rispondere alla domanda: può essere applicata questa o quella politica di riempimento.
Ancora non capisco come una variabile possa restituire due termini. E se restituisce un valore di 3 come membro, le operazioni bitwise non funzioneranno. Ho deciso di scegliere solo la modalità EXECUTION_INSTANT e avrò sempre una politica FOK .
 
Ivan_Invanov:
Ancora non capisco come una variabile possa restituire due membri. E se restituisce un termine come 3, allora le operazioni bitwise non funzioneranno. Ho deciso di scegliere solo la modalità EXECUTION_INSTANT e avrò sempre una politica FOK .

Per capire questo è necessario capire cosa sono le bandiere.

Ogni valore successivo di una bandiera è il valore del precedente moltiplicato per 2. Cioè 1, 2, 4, 8, 16, 32......... Quindi se il valore è 33 significa che questo valore contiene solo 1 e 32. Allo stesso modo se il valore è 18 può essere composto solo da 16 e 2. E il valore 3 può essere composto solo da 1 e 2.

Quindi le operazioni bitwise stanno solo controllando se il valore controllato è presente nella somma dei flag. Se si controlla se un numero arbitrario è incluso in 18 si ottiene falso, tranne che per controllare i valori 2 e 16.

 
Alexey Viktorov:

Per capire questo è necessario capire cosa sono le bandiere.

Ogni valore successivo di una bandiera è il valore del precedente moltiplicato per 2. Cioè 1, 2, 4, 8, 16, 32......... Quindi se il valore è 33 significa che questo valore contiene solo 1 e 32. Allo stesso modo se il valore è 18 può essere composto solo da 16 e 2. E il valore 3 può essere composto solo da 1 e 2.

Quindi le operazioni bitwise stanno solo controllando se il valore controllato è presente nella somma dei flag. Se controllate se un numero arbitrario è incluso in 18 otterrete falso, tranne che per controllare i valori 2 e 16.

Sì, capisco come lavorare con le cifre binarie.

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

Da questo codice, per esempio, la funzione restituisce 3 .

(11&1)==1 ; 11==01 no, è falso, non ha funzionato.

Stavo scrivendo questo e ho pensato che forse ho frainteso le operazioni.

& significa che converto i valori decimali in binario e faccio una congiunzione bitwise.

== vero quando il primo termine è uguale al secondo termine. È corretto?

 
Se c'è un valore in una cifra, è una bandiera vera e la tripletta mette il valore in entrambe le cifre. Ma allora perché questo codice funziona?