devuelve la política de ejecución. - página 2

 
Vladimir Karputov:

Ejemplo de la clase de comercio de CTrade. Primero se comprueba si hay"SYMBOL_FILLING_FOK" y luego si hay"SYMBOL_FILLING_IOC".


La comprobación se realiza mediantela operación "AND bitwise".

Operación AND a nivel de bits

La operación AND a nivel de bits de las representaciones binarias x e y. El valor de la expresión contiene 1 (TRUE) en todos los bits en los que tanto x como y contienen un valor distinto de cero; y 0 (FALSE) en todos los demás bits.


Ejemplo:


Más información sobre las operaciones a nivel de bits.

Así que por este código la política de ejecución es ioc o fok o ninguna de las dos, por lo que resulta que no puede haber dos al mismo tiempo? ¿O he vuelto a entender mal?
 
Después de todo, ¿no puede haber dos al mismo tiempo? ¿Qué tiene que devolver la función para que haya dos al mismo tiempo?
 
Debo haber entendido mal su respuesta. Quería decir en general, no en relación con una cuenta comercial. Gracias por su ayuda.
 
Ivan_Invanov:
Después de todo, ¿no puede haber dos al mismo tiempo? ¿Qué debería devolver la función para que haya dos al mismo tiempo?
Puede ser 2, entonces la función devolverá 3. BUT¡¡¡¡¡ Esta es una situación atípica. Dado que sólo hay 3 opciones, podría ser 1, 2 o la suma de 1+2. Es la suma, no la tercera opción. Por lo tanto, la comprobación con una operación bitwise sólo puede responder a la pregunta: ¿Se puede aplicar tal o cual política de llenado?
 
Ivan_Invanov:
Después de todo, ¿no puede haber dos al mismo tiempo? ¿Qué debería devolver la función para que haya dos al mismo tiempo?

Ejemplo de comprobación de dos personajes del servidor 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

Consulte las especificaciones (relleno) de estos símbolos:



y aquí hay una variante más común: cuando todos los rellenos están disponibles para un símbolo

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

y la especificación


 
Gracias.
 
Alexey Viktorov:
También puede ser 2, entonces la función devolverá 3. BUT¡¡¡¡¡ Esta es una situación atípica. Dado que sólo hay 3 opciones, podría ser 1, 2 o la suma de 1+2. Es la suma, no la tercera opción. Por lo tanto, la comprobación con una operación bitwise sólo puede responder a la pregunta: ¿Se puede aplicar tal o cual política de llenado?
Todavía no entiendo cómo una variable puede devolver dos términos. Y si devuelve un valor de 3 como un miembro, las operaciones de bitwise no funcionarán. He decidido elegir sólo el modo EXECUTION_INSTANT y siempre tendré una política FOK .
 
Ivan_Invanov:
Sigo sin entender cómo una variable puede devolver dos miembros. Y si devuelve un miembro como 3, entonces las operaciones bitwise no funcionarán. He decidido elegir simplemente el modo EXECUTION_INSTANT y siempre tendré una política FOK .

Para entender esto hay que entender qué son las banderas.

Cada valor siguiente de una bandera es el valor de la anterior multiplicado por 2. Es decir, 1, 2, 4, 8, 16, 32......... Así que si el valor es 33 significa que este valor contiene sólo 1 y 32. Del mismo modo, si el valor es 18, sólo puede estar compuesto por 16 y 2. Y el valor 3 sólo puede estar compuesto por 1 y 2.

Por lo tanto, las operaciones bitwise sólo comprueban si el valor comprobado está presente en la suma de banderas. Si se comprueba si un número arbitrario está incluido en 18 se obtiene falso, excepto si se comprueban los valores 2 y 16.

 
Alexey Viktorov:

Para entender esto hay que entender qué son las banderas.

Cada valor siguiente de una bandera es el valor de la anterior multiplicado por 2. Es decir, 1, 2, 4, 8, 16, 32......... Así que si el valor es 33 significa que este valor contiene sólo 1 y 32. Del mismo modo, si el valor es 18, sólo puede estar compuesto por 16 y 2. Y el valor 3 sólo puede estar compuesto por 1 y 2.

Por lo tanto, las operaciones bitwise sólo comprueban si el valor comprobado está presente en la suma de banderas. Si comprueba si un número arbitrario está incluido en 18 obtendrá falso, excepto si comprueba los valores 2 y 16.

Sí, entiendo cómo trabajar con dígitos binarios.

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

De este código, por ejemplo, la función devuelve 3 .

(11&1)==1 ; 11==01 no, eso es falso, no funcionó.

Estaba escribiendo esto y pensé que quizás había entendido mal las operaciones.

& significa que convierto los valores decimales a binarios y hago una conjunción a nivel de bits.

== verdadero cuando el primer término es igual al segundo. ¿Es esto correcto?

 
Si hay un valor en un dígito, es una bandera verdadera y el triplete pone el valor en ambos dígitos. Sólo que, entonces, ¿por qué funciona este código?
Razón de la queja: