Discussion de l'article "L'utilisation de ORDER_MAGIC pour trader avec différents Expert Advisors sur un seul instrument" - page 2

 
ias:


2. ce que représente l'expression (int) et la valeur qu'elle prend en int DIGITS=(int)-log10(SymbolInfoDouble(symbol,SYMBOL_VOLUME_STEP)) ; if(DIGITS<0)DIGITS=0 ;


En savoir plus sur la conversion de type explicite.
Документация по MQL5: Основы языка / Типы данных / Приведение типов
Документация по MQL5: Основы языка / Типы данных / Приведение типов
  • www.mql5.com
Основы языка / Типы данных / Приведение типов - Документация по MQL5
 
ias:

1. merci à l'auteur pour son article.
2.Que signifie l'expression (int) et quelle valeur elle prend en int DIGITS=(int)-log10(SymbolInfoDouble(symbol,SYMBOL_VOLUME_STEP)) ; if(DIGITS<0)DIGITS=0 ;
3.Pourquoi, lors des tests, l'expression (int) et SYMBOL_VOLUME_STEP prennent-elles les valeurs Unknown identifier et comment cela affecte-t-il le résultat int DIGITS ?
4. Comment fonctionne le code d'interaction ?
Le code d'interaction a-t-il une importance lorsque les EA travaillent sur le même instrument, où il suffit de définir des noms numériques identiques ou différents pour les EA.

L'expression (int) est une conversion de l'expression suivante vers le type int.

L'expression SYMBOL_VOLUME_STEP est l'une des valeurs de l'énumération ENUM_SYMBOL_INFO_INTEGER.

Aucune des expressions ci-dessus n'est une variable, elles ont donc naturellement la valeur "Identifiant inconnu" dans Debugger,

ce qui signifie littéralement "impossible à reconnaître", Debugger ne pouvant tout simplement pas comprendre à quel type appartient la variable déclarée pour le suivi.


Документация по MQL5: Основы языка / Типы данных / Целые типы / Типы char, short, int и long
Документация по MQL5: Основы языка / Типы данных / Целые типы / Типы char, short, int и long
  • www.mql5.com
Основы языка / Типы данных / Целые типы / Типы char, short, int и long - Документация по MQL5
 
ias:


4. Comment fonctionne le code d'interaction ?
Le code d'interaction a-t-il une importance lorsque les EA travaillent sur le même instrument, où il suffit de définir des noms numériques identiques ou différents pour les EA.

Désolé, j'ai été distrait et je n'ai pas répondu à la 4ème question.

Le code d'interaction est utilisé comme une magie unique pour plusieurs Expert Advisors de confiance.

Par exemple, si vous avez un Expert Advisor parfaitement au point dans lequel vous ne voulez rien changer, mais que vous avez créé un EA suiveur et que vous voulez tester son fonctionnement avec cet EA, vous démarrez l'EA original et l'EA suiveur et vous donnez le même code d'interaction aux deux EA et ils percevront les actions de l'autre comme étant les leurs, tandis que les changements effectués par des EA tiers sans ce code d'interaction seront ignorés (ils seront invisibles pour la paire d'EA sélectionnée).

En même temps, vous pouvez traiter certaines données séparément parce que le code d'identification de l'AE (nom numérique) est différent,

tout dépend de la demande telle que vous la formulez (par exemple, vous pouvez rédiger un rapport uniquement sur le travail du chalut).

Une seule et même transaction peut être définie comme étant la vôtre ou celle de quelqu'un d'autre, en fonction de la demande.

[Supprimé]  
ias:

1. merci à l'auteur pour son article.
2.Que signifie l'expression (int) et quelle valeur elle prend en int DIGITS=(int)-log10(SymbolInfoDouble(symbol,SYMBOL_VOLUME_STEP)) ; if(DIGITS<0)DIGITS=0 ;
3.Pourquoi, lors des tests, l'expression (int) et SYMBOL_VOLUME_STEP prennent-elles les valeurs Unknown identifier et comment cela affecte-t-il le résultat int DIGITS ?
4. Comment fonctionne le code d'interaction ?
Le code d'interaction a-t-il une importance lorsque les EA travaillent sur le même instrument, où il suffit de définir des noms numériques identiques ou différents pour les EA.

Comme je comprends que vous ne saisissez pas très bien la signification du code, voyons ce qui se passe en détail.

int DIGITS=(int)-log10(SymbolInfoDouble(symbol,SYMBOL_VOLUME_STEP)); if(DIGITS<0)DIGITS=0;

1. Nous obtenons la taille de l'étape de volume de lot pour l'instrument, SYMBOL_VOLUME_STEP - L'étape de volume minimum pour faire un trade (Habituellement, c'est 0.01) ;

2. Obtenir le logarithme du nombre sur la base 10 => -log10(0,01) = 2 ou -log10(0,10) = 1 (pour MQ c'est -log10(0,10) = 1) ;

3. assimiler le résultat (-2/-1) à la variable DIGITS, qui est de type int.

4. Si la valeur de DIGITS<0, lui attribuer la valeur = 0.

PS

(int) est utilisé pour forcer le résultat d'un calcul au type int...

 

Cet article ne reflète pas l'événement "Stop Loss/Stake Profit occurred". Il s'agit d'une omission très grave !

Exemple: un Expert Advisor a deux parties : la première fonctionne lorsque la "position virtuelle" sur un symbole et une période donnés est égale à 0, et la seconde fonctionne lorsque cette "position virtuelle" n'est pas égale à zéro ; disons que l'Expert Advisor ferme cette position. Considérons une situation : sur un signal, nous avons effectué un achat, la "position virtuelle" a pris la valeur +100. Un stop loss a été déclenché, la "position virtuelle" réelle a pris la valeur 0. Mais dans notre cas, elle sera égale à +100. Le conseiller expert "pensera" que la position est de +100, mais en réalité elle est de 0, ce qui conduira à un résultat indésirable.

Veuillez m'expliquer ce point.

 
beast:

Cet article ne reflète pas l'événement "Stop Loss/Stake Profit occurred". Il s'agit là d'une omission très grave !

Exemple: un Expert Advisor a deux parties : la première fonctionne lorsque la "position virtuelle" sur un symbole et une période donnés est égale à 0, et la seconde fonctionne lorsque cette "position virtuelle" n'est pas égale à zéro ; disons que l'Expert Advisor ferme cette position. Considérons une situation : sur un signal, nous avons effectué un achat, la "position virtuelle" a pris la valeur +100. Un stop-loss a été déclenché, la "position virtuelle" réelle a pris la valeur 0. Mais dans notre cas, elle sera égale à +100. Le conseiller expert "pensera" que la position est de +100, mais en réalité elle est de 0, ce qui conduira à un résultat indésirable.

Veuillez m'expliquer ce point.

C'est exact, cet article ne contient pas de module de traitement des ordres stop.

Il décrit les possibilités d'utilisation du nombre magique.

Pour utiliser une position virtuelle, il faudra des stops virtuels.

 

Alors pourquoi avons-nous besoin de la magie ?

Parce que si nous l'utilisons pour fouiller dans l'historique, nous n'obtiendrons pas une image complète des ordres passés par cet Expert Advisor, car nous ne serons pas en mesure d'identifier les stop loss et les take profits.

 
beast:

Alors pourquoi avons-nous besoin de la magie ?

Parce que si nous l'utilisons pour fouiller dans l'historique, nous n'obtiendrons pas une image complète des ordres passés par cet Expert Advisor, car nous ne serons pas en mesure d'identifier les stop loss et les take profits.


Il est nécessaire de comprendre que c'est une erreur d'utiliser des stops dans le cadre d'une stratégie de trading. Les ordres stop stockés sur le serveur sont des ordres de protection contre les situations où quelque chose a mal tourné (panne de communication avec le serveur, panique sur le marché), dans d'autres cas, les ordres stop virtuels sous forme de signaux EA sont tout à fait appropriés.

Mais la pratique montre que les programmeurs sont souvent paresseux pour virtualiser les stops. Après tout, il est beaucoup plus facile d'utiliser des ordres stop prêts à l'emploi.

 

Lors du calcul, il est nécessaire de passer en revue toutes les transactions, si une transaction avec un magicien donné - nous prenons en compte son volume, toutes les autres transactions sont vérifiées pour le fait de fermer par stoploss/stakeprofit, s'il y en a, alors il est nécessaire de réinitialiser le montant calculé. Dans mon article, le stoploss n'est pas non plus pris en compte. Qui l'eût cru... C'est un nouveau sujet, veuillez m'excuser.

Avec ce magik il y a encore une chose, l'EA a ouvert une position, vous déconnectez l'EA et fermez les positions manuellement - c'est tout, après cela il y aura une comptabilité incorrecte.

Et quelle est la situation : disons qu'un EA a ouvert l'achat 0,1, le second EA a ouvert la vente 0,1, la position cumulée est égale à 0, et on considère qu'il y a deux contre-positions.

En plus de tout cela, nous avons besoin d'un moyen de contrôle, d'un script pour calculer si les volumes calculés pour tous les mages sont cohérents avec le volume réel, nous avons besoin de moyens de nivellement - pour ouvrir avec un mage et fermer avec un autre.

Cela soulève une grande question : l'utilisation de la magie sera-t-elle toujours demandée et, dans l'affirmative, comment s'en accommoder ? ....

Faut-il ouvrir un compte séparé pour chaque conseiller ?

 

Corrigez-moi si je me trompe...

Je dois essayer quelque chose de similaire à votre code ici pour discriminer les opérations et les positions de différents EA. J'ai plusieurs doutes. Ce code est-il optimisé ? Je pense que ce code pourrait vraiment ralentir l'ordinateur si vous avez un long historique de trades et plusieurs eas exécutant ce code - bien que je ne l'ai pas encore prouvé, c'est seulement ce que je pense.

Par exemple, dans le fichier magic_exp1_fr.mq5, la méthode prHistory_Deals(ulong &buf[],int HTD) remplit le tampon buf[] avec toutes les transactions que nous avons eues.

Ne serait-il pas plus performant de ne stocker que le dernier DEAL IN qui n'a pas encore été rempli par un DEAL OUT ?

Peut-être n'ai-je pas vraiment compris ce que fait le code. Ce que je pense que le code fait dans magic_exp1_fr.mq5 est : pour tout l'historique des transactions depuis le début des temps :-) Il vérifie si la somme des volumes de tous les DEAL_TYPE_SELL et DEAL_TYPE_BUY est la même, auquel cas nous n'avons pas de position ouverte. Si le volume des SELLs est supérieur au volume des BUYs, alors nous avons une position générale SELL, et une position BUY si le volume des BUYs est supérieur à celui des SELLs.

N'y a-t-il pas d'autres moyens ?