![MQL5 - Langage des stratégies de trading intégré au terminal client MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Vous manquez des opportunités de trading :
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Inscription
Se connecter
Vous acceptez la politique du site Web et les conditions d'utilisation
Si vous n'avez pas de compte, veuillez vous inscrire
Hehe un autre client heureux :)- pendant que nous y sommes, LEHayes pourrait-il m'aider à calculer le money management en pourcentage sans arrondir les pips. Voici ce que j'utilise actuellement lorsque je veux miser 1% de l'équité de mon compte :
double Profit_F=0.00001,Lots=0.1;
Lots=NormalizeDouble((AccountEquity()*Profit_F),1) ;
si (Lots < 0.1) Lots=0.1 ;
si (Lots > 1,0) Lots=1,0 ;
Cela fonctionne très bien pour mon stoploss de 100 lorsque j'ai un compte de 10 000 $ par exemple. Car 10 000 $ X 0,00001 = 0,1 lot. Mais lorsque j'ai 15 000 $, la taille du lot est maintenant de 0,15, mais elle est arrondie à 2,0, peut-être parce que mon courtier n'autorise pas les macro-lots. Comment puis-je l'obliger à rester à 0,1 jusqu'à ce que l'équité atteigne 20 000 $ ? Je suis debout depuis longtemps, après avoir lu votre fil, je suis trop fatigué pour chercher et étudier. Si vous avez une autre équation pour calculer mm s'il vous plaît fournir à la place.
Cela me rend fou, cela fait des mois que je cherche un algorithme existant qui ne fait rien d'autre que de calculer le prix par pip, quelle que soit la paire sur laquelle il se trouve. J'ai trouvé deux très bonnes stratégies de gestion de l'argent qui dépendent toutes deux de cette valeur pour précalculer la taille des transactions et la gestion du risque monétaire, mais je ne peux pas trouver un seul exemple de calcul qui gère le prix par pip.
Je suis prêt à vous offrir mon système de gestion de l'argent en échange de cette fonction. Je vous fournirai les deux techniques suggérées par les mentors avec lesquels j'ai travaillé.
Tout d'abord, nous devons reconnaître qu'il existe cinq types de symboles de base. Cela est important lorsqu'il s'agit de questions telles que le calcul de la tick_value, l'effet de levier, etc.
Il n'existe pas de définition formelle du type de symbole, mais pour un compte libellé en USD, voici comment j'énumère les types de symboles : (il s'agit d'exemples spécifiques, non exhaustifs)
La pertinence est la façon dont la dénomination du compte est liée à la devise de base et à la contre devise de l'instrument financier en question. Il en va de même pour les CFD et les paires de devises.
Dans cet exemple, la fonction d'appel que j'ai codée aurait déjà déterminé que pour AUDCAD la CalculatedBasePairForCross est AUDUSD :Une fois que vous avez le type de symbole, vous pouvez alors calculer le levier par instrument financier - par exemple, voici le code nécessaire pour calculer le levier pour AUDCAD :
CalculatedBasePairForCross=StringConcatenate(SymbolBase,AccountCurrency(),postfix);
Et le SymbolBase (c'est-à-dire la devise de base de l'instrument financier Symbol()) est :Et ainsi de suite.
Pour le calcul de la valeur du tick, vous devez tenir compte du type de symbole, car il est important lorsque l'évaluation change à la fois dans l'instrument financier concerné - Symbol() - et dans la paire de devises de connexion qui mène à la dénomination du compte. En poursuivant l'exemple ci-dessus, où nous discutons du type de symbole 4 - AUDCAD lorsque le compte est libellé en USD - la valeur du tick est explicitement définie comme suit :
Où la variable CalculatedCounterPairForCross pour AUDCAD a été précédemment déterminée comme étant USDCAD :
CalculatedCounterPairForCross=StringConcatenate(AccountCurrency(),SymbolCounter,postfix);
Et SymbolCounter a été déterminé par :En programmant le calcul de ces valeurs explicitement de cette manière, vous pouvez déterminer les informations de marché sans tenir compte des courtiers.
Gardez à l'esprit que le code ici n'est utile que pour symboltype = 4 dans lequel la devise de dénomination du compte est la contre devise lorsqu'elle est appariée avec la devise de base de Symbol() et de même la devise de dénomination du compte est la devise de base lorsqu'elle est appariée avec la contre devise qui forme la paire Symbol().
(AUDCAD -> AUDUSD & USDCAD)
Il s'avère que, bien qu'il existe cinq types de symboles universels, vous n'avez besoin d'en classer que quatre pour calculer l'effet de levier, la marge et la valeur du tick. Et les mathématiques ne deviennent un point de friction spécifique que lorsqu'il s'agit de paires de devises croisées par rapport à la dénomination du compte.
J'ai élaboré les relations spécifiques entre toutes les combinaisons de base et de contrepartie parce que mon approche de la gestion de l'argent consiste à définir explicitement la valeur à risque de perte pour chaque transaction et cela nécessite de connaître exactement la valeur de prix à laquelle la transaction doit être sortie de manière à ce que la perte respecte le budget des pertes défini précédemment. Pour les paires croisées, il s'avère naturellement que la valeur à risque est basée sur le prix des deux paires de devises à un instant donné (à moins que vous ne vous couvriez contre l'une ou l'autre).
Cette information est-elle d'une quelconque utilité ?
TICKVALUE, lorsqu'il est utilisé seul, peut être peu fiable.
Il serait intéressant de savoir à quel(s) courtier(s) cela s'applique, ou s'il y a d'autres considérations telles que l'ouverture/la fermeture du marché. Je n'ai jamais été en mesure de reproduire vos résultats.
Cette information est-elle utile ?
Je n'avais jamais réalisé qu'il y avait tant de choses à faire pour calculer la valeur d'un pip, dans mon EA je le faisais en laissant l'EA le calculer en utilisant le premier ordre ouvert, si c'est un achat, le prix actuel de l'offre - le prix de l'ordre ouvert / le profit de l'ordre = la valeur du pip dans la devise de base actuelle, ou si c'est une vente, l'offre actuelle + le prix ouvert / le profit de l'ordre = la valeur du pip, est-ce que cela ne va pas fonctionner correctement ?
Edit : Je réalise que j'ai écrit cela à l'envers, je voulais dire orderprofit/(currentbid-openprice)=valeur du pip.
je n'avais jamais réalisé qu'il y avait tant de choses à faire pour calculer la valeur d'un pip, dans mon EA je le faisais en laissant l'EA le calculer en utilisant le premier ordre ouvert si c'est un achat, prix actuel de l'offre - prix ouvert de l'ordre /profit de l'ordre = valeur du pip dans la devise de base actuelle, ou si c'est une vente, prix actuel+prix ouvert/profit de l'ordre=valeur du pip, est-ce que cela ne va pas fonctionner correctement ?
Ce calcul est valable dans la mesure où chaque pip a la même valeur, quel que soit le cours acheteur ou vendeur actuel.
Ceci est rigoureusement vrai pour les paires de devises qui sont de type de symbole = 2 comme je les ai définies ci-dessus, c'est-à-dire EURUSD, etc. (toute paire de devises dans laquelle la dénomination du compte est la contre devise de la paire).
Pour la plupart des gens, les différences ne sont pas susceptibles d'avoir de l'importance, les erreurs résultantes sont faibles. Dans mon cas, je voulais calculer de manière robuste les valeurs avec des expressions analytiques correctes.
Par exemple, si je budgétise 200 $ pour la perte maximale possible sur une transaction à venir et que mes stops sont fixés à 200 points, je veux connaître la taille du lot pour mon ordre de sorte que mes pertes ne puissent pas dépasser 200 $... pour être robuste à ce sujet, je dois calculer correctement l'évaluation du pip au point du prix du stop-loss. L'improvisation n'était pas une option acceptable pour moi ou mes clients ;)
Je suis heureux que LEHayes ait résolu le problème. Et Phillip, tu as complètement démystifié TickValue & layout pairs-synthesizing très bien pour que tout le monde en profite. C'est génial !
Je voudrais juste ajouter : les opérations de synthèse ...
CalculatedCounterPairForCross=StringConcatenate(AccountCurrency(),SymbolCounter,postfix);
SymbolCounter=StringSubstr(Symbol(),3,3);
... doivent faire attention à l'appendice supplémentaire comme USDJPYm dans certains courtiers de mini-lots. Je ne sais pas si un courtier peut modifier les six premières lettres des symboles en mettant ou en ajoutant une lettre devant ou entre la base et le compteur, si vous cherchez la robustesse, IMO lire à partir d'un fichier .set ou .sel est un pari plus sûr.
Je suis heureux que LEHayes ait résolu le problème. Et Phillip, tu as complètement démystifié TickValue & layout pairs-synthesizing très bien pour que tout le monde en profite. C'est génial !
Je voudrais juste ajouter : les opérations de synthèse ...
CalculatedCounterPairForCross=StringConcatenate(AccountCurrency(),SymbolCounter,postfix);
SymbolCounter=StringSubstr(Symbol(),3,3);
... doivent faire attention à l'appendice supplémentaire comme USDJPYm dans certains courtiers de mini-lots. Je ne sais pas si un courtier peut modifier les six premières lettres des symboles en mettant ou en ajoutant une lettre devant ou entre la base et le compteur, si vous cherchez la robustesse, IMO lire à partir d'un fichier .set ou .sel est un pari plus sûr.
Bon point ! Cependant, je ne cherche pas ce genre de robustesse lorsque je parle de calculs robustes.
Les courtiers peuvent nommer leurs paires de devises comme ils le veulent, on pourrait espérer que j'aurais la présence d'esprit de le remarquer et de modifier mes codes en conséquence avant d'essayer de faire du commerce en direct avec un nouveau courtier utilisant le symbole de devise lovelyUSDmoonCADcheese ! :P
Ce code traite simplement 100% des cas que j'ai rencontrés jusqu'à présent (Alpari, CitiFX, CMS forex, forex.com, FXCM, FXDD, IBFX, MIG, et ODL)... Je ne m'inquiète pas de le rendre à l'épreuve du futur, simplement à l'épreuve du présent. Maintenant, si vous avez quelque chose en tête pour le rendre à l'épreuve du futur... c'est le bon moment pour dire ce que vous pensez :)
lovelyUSDmoonCADcheese! ...
Lol ! J'ai vu des courtiers qui ont mal saisi la description du symbole dans la propriété du symbole (pas le paramètre Symbol(), mais ils doivent aussi le saisir à un moment donné !) Qui sait ! :))
Je ne peux pas dire si cela serait jamais 100% infaillible (qu'est-ce qui l'est ?). Mais je pense à quelque chose comme ceci :
Il y a quelque temps, Gordon m'a fait part de son point de vue sur les mérites d'un contrôle automatique infaillible dans un EA. Ayant cela à l'esprit (et le respectant), je continue à penser que cela peut être quelque chose de valable, même juste pour le plaisir ! :)