renvoie la politique d'exécution. - page 2

 
Vladimir Karputov:

Exemple de la classe de commerce CTrade. Il est d'abord vérifié pour'SYMBOL_FILLING_FOK', puis pour'SYMBOL_FILLING_IOC'.


La vérification est effectuée à l'aide del'opération "ET par bit".

Opération ET par bit

L'opération ET par bit des représentations binaires x et y. La valeur de l'expression contient 1 (VRAI) dans tous les bits où x et y contiennent tous deux des valeurs non nulles, et 0 (FAUX) dans tous les autres bits.


Exemple :


En savoir plus sur les opérations par bit.

Donc par ce code, la politique d'exécution est soit ioc, soit fok, soit aucune des deux, il s'avère donc qu'il ne peut y en avoir deux en même temps ? Ou ai-je encore mal compris ?
 
Que doit rendre la fonction pour qu'il y en ait deux en même temps ?
 
J'ai dû mal comprendre votre réponse. Vous vouliez dire en général, pas par rapport à un compte de trading. Merci pour votre aide.
 
Ivan_Invanov:
Que devrait donner la fonction pour qu'il y en ait deux en même temps ?
Il peut être 2, alors la fonction retournera 3. BUT¡¡¡¡¡ Il s'agit d'une situation atypique. Étant donné qu'il n'y a que 3 possibilités, cela pourrait être 1, 2 ou la somme de 1+2. C'est la somme, pas la troisième option. La vérification avec une opération bit à bit ne peut donc répondre qu'à la question suivante : peut-on appliquer telle ou telle politique de remplissage ?
 
Ivan_Invanov:
Que devrait donner la fonction pour qu'il y en ait deux en même temps ?

Exemple de contrôles pour deux personnages du serveur 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

Voir les spécifications (à remplir) pour ces symboles :



et voici une variante plus courante : lorsque tous les remplissages sont disponibles pour un symbole

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

et la spécification


 
Merci.
 
Alexey Viktorov:
Il peut aussi être 2, alors la fonction renverra 3. BUT¡¡¡¡¡ Il s'agit d'une situation atypique. Étant donné qu'il n'y a que 3 possibilités, cela pourrait être 1, 2 ou la somme de 1+2. C'est la somme, pas la troisième option. La vérification avec une opération bit à bit ne peut donc répondre qu'à la question suivante : peut-on appliquer telle ou telle politique de remplissage ?
Je ne comprends toujours pas comment une variable peut renvoyer deux termes. Et s'il renvoie une valeur de 3 comme un membre, les opérations de type bitwise ne fonctionneront pas. J'ai décidé de choisir simplement le mode EXECUTION_INSTANT et j'aurai toujours une politique FOK .
 
Ivan_Invanov:
Je ne comprends toujours pas comment une variable peut renvoyer deux membres. Et s'il renvoie un membre comme 3, alors les opérations de type bitwise ne fonctionneront pas. J'ai décidé de choisir simplement le mode EXECUTION_INSTANT et j'aurai toujours une politique FOK .

Pour comprendre cela, vous devez comprendre ce que sont les drapeaux.

Chaque valeur suivante d'un drapeau est la valeur de la précédente multipliée par 2. C'est-à-dire 1, 2, 4, 8, 16, 32......... Donc si la valeur est 33, cela signifie que cette valeur ne contient que 1 et 32. De même, si la valeur est 18, elle ne peut être composée que de 16 et de 2. Et la valeur 3 ne peut être composée que de 1 et 2.

Ainsi, les opérations par bit ne font que vérifier si la valeur vérifiée est présente dans la somme des drapeaux. Si vous vérifiez si un nombre arbitraire est inclus dans 18, vous obtenez faux, sauf pour vérifier les valeurs 2 et 16.

 
Alexey Viktorov:

Pour comprendre cela, vous devez comprendre ce que sont les drapeaux.

Chaque valeur suivante d'un drapeau est la valeur de la précédente multipliée par 2. C'est-à-dire 1, 2, 4, 8, 16, 32......... Donc si la valeur est 33, cela signifie que cette valeur ne contient que 1 et 32. De même, si la valeur est 18, elle ne peut être composée que de 16 et de 2. Et la valeur 3 ne peut être composée que de 1 et 2.

Ainsi, les opérations par bit ne font que vérifier si la valeur vérifiée est présente dans la somme des drapeaux. Si vous vérifiez si un nombre arbitraire est inclus dans 18, vous obtiendrez faux, sauf si vous vérifiez les valeurs 2 et 16.

Oui, je comprends comment travailler avec des chiffres binaires.

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

À partir de ce code, par exemple, la fonction renvoie 3 .

(11&1)==1 ; 11==01 non, c'est faux, ça n'a pas marché.

J'étais en train d'écrire ça et je me suis dit que j'avais peut-être mal compris les opérations.

& cela signifie que je convertis les valeurs décimales en valeurs binaires et que je fais une conjonction par bit.

== vrai lorsque le premier terme est égal au second. Est-ce correct ?

 
Ahhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh, ça y est enfin. S'il y a une valeur dans un chiffre, c'est un drapeau vrai et le triplet met la valeur dans les deux chiffres. Seulement, pourquoi ce code fonctionne-t-il alors ?