English Русский 中文 Español Deutsch 日本語 Português 한국어 Italiano Türkçe
Calculs de marché : bénéfices, pertes et coûts

Calculs de marché : bénéfices, pertes et coûts

MetaTrader 5Exemples | 13 mai 2024, 17:00
547 0
Evgeniy Ilin
Evgeniy Ilin

Sommaire

Introduction

Lors du développement des Expert Advisors, je n'ai pas prêté attention à la signification de certaines valeurs lors du calcul du profit ou de la perte. La création d'un EA ne nécessite pas d'approfondir cette question. En effet, pourquoi devrais-je saisir toutes ces valeurs alors que MQL5 et même MQL4 contiennent toutes les fonctionnalités nécessaires pour effectuer ces calculs ? Cependant, après un certain temps et une certaine expérience, des questions commencent inévitablement à se poser. Nous finissons par remarquer des détails qui nous semblaient auparavant insignifiants. Mais après y avoir réfléchi, vous vous rendez compte qu'un EA travaille à l’aveuglette. Toutes les données sur la question que j'ai pu trouver sur internet se sont avérées rares et non structurées. J'ai donc décidé de les structurer moi-même. Après avoir lu cet article, vous obtiendrez un modèle mathématique complet et fonctionnel, et vous apprendrez à comprendre et à calculer correctement tout ce qui concerne les ordres.

Équations pour le calcul des profits ou des pertes des ordres

Pour mettre au point un système de trading efficace, il faut tout d'abord comprendre comment est calculé le profit ou la perte de chaque ordre. Nous sommes tous capables de calculer nos profits et nos pertes d'une manière ou d'une autre pour maintenir notre système de gestion de l'argent. Certains le font intuitivement, d'autres procèdent à des estimations approximatives, mais presque tous les EA disposent des calculs nécessaires pour toutes les quantités requises. Le développement d'un EA permet de discipliner ses pensées et de comprendre ce qui est calculé et comment, ce qui n'a pas de prix. Venons-en maintenant au fait. Il convient de commencer par l'idée la plus simple de la manière dont le bénéfice d'un ordre est calculé. Personnellement, j'ai toujours su que le calcul du bénéfice est assez complexe dans son essence, mais qu'il repose sur quelques considérations simples. Pour simplifier la compréhension, supposons que le spread, le swap et la commission n'existent pas. Je pense que de nombreuses personnes ne tiennent même pas compte de ces valeurs au départ. Bien sûr, le langage MQL5 fournit des fonctions intégrées, telles que OrderCalcProfit, et peut-être d'autres. Mais dans cet article, je veux passer en revue les bases afin que tout le monde comprenne ce qui est calculé et comment. Une telle méticulosité peut être déconcertante, mais ne pas prêter attention à des paramètres tels que le spread, la commission et le swap est une erreur fatale que commettent de nombreux traders. Chacune de ces valeurs affecte le bénéfice ou la perte à sa manière. Dans mes calculs, je prendrai tout en compte et je montrerai comment ces petites choses peuvent être utiles. Profit et perte des ordres, en excluant les spreads, les commissions et les swaps :

  • PrBuy = Lot * ValeurDuTick * [ ( PE - PS ) / Point ] — profit pour un ordre d'achat
  • PrSell = Lot * ValeurDuTick * [ ( PS - PE ) / Point ] — profit pour un ordre de vente
  • Point — variation minimale possible du prix d'un symbole sélectionné
  • ValeurDuTick — valeur de profit pour une position profitable lorsque le prix se déplace de 1 point.
  • PE — prix de clôture de la transaction (Bid)
  • PS — prix d'ouverture de la transaction (Bid)

Les valeurs telles que Point et ValeurDuTick dans le langage MQL5 sont définies au niveau des variables prédéfinies, ou sont disponibles dans la valeur de retour des fonctions de type SymbolInfoDouble. J'aborderai régulièrement le sujet de MQL5 dans mes articles, d'une manière ou d'une autre, car il est souvent possible d'aller au fond des choses en analysant la manière dont MQL5 ou certaines de ses fonctionnalités sont construites.

Elargissons maintenant légèrement la compréhension de cette équation. Un ordre d'achat est ouvert au prix de l’Offre (Ask), et un ordre de vente est ouvert au prix de la Demande (Bid). Par conséquent, un ordre d'achat est clôturé au prix de l’Offre (Bid), et un ordre de vente est clôturé au prix de la Demande (Ask). Réécrivons maintenant les équations en tenant compte de ces nouveaux amendements :

  • PrBuy = Lot * ValeurDuTick * [ ( Bid2 - Ask1 ) / Point ] — profit pour un ordre d'achat
  • PrSell = Lot * ValeurDuTick * [ ( Bid1 - Ask2 ) / Point ] — profit pour un ordre de vente
  • Bid1 — Prix d'ouverture de la transaction de vente
  • Ask1 — Prix d'ouverture de la transaction d'achat
  • Bid2 — Prix de clôture de la transaction d'achat
  • Ask2 — Prix de clôture de la transaction de vente

Le fragment de la spécification ci-dessous contient la plupart des données dont nous aurons besoin par la suite :

données requises

Il ne s'agit que d'une partie des données nécessaires au calcul. Le reste des données peut être obtenu à l'aide de diverses fonctions MQL5 intégrées. Prenons l'exemple de l'USDJPY. Nous n'avons pas besoin en fait d'une spécification pour écrire du code, mais comprendre où ces données sont affichées peut s'avérer très utile.

Avançons, et cette fois, examinons les commissions. La commission d’un ordre peut être calculée de différentes manières. Mais toutes les méthodes principales se résument à un pourcentage des lots que nous négocions. Il existe d'autres façons de facturer une commission de trading, mais je ne les examinerai pas ici car nous n'en aurons pas besoin. J'examinerai 2 scénarios possibles pour le calcul de la commission. Je pense qu'ils sont suffisants. Si nous prenons le swap comme base, les exemples de swaps peuvent suggérer une autre méthode de calcul qui peut être appliquée à la commission : le calcul en points.

Il en résulte 2 méthodes apparemment différentes. Cependant, comme nous le verrons, ces méthodes ne sont qu'une forme commode de perception de la même méthode de "taxation", incluant le spread. Vous trouverez ci-dessous 2 équations pour calculer une commission :

  1. Comission = Lot * ValeurDuTick * ComissionPoints
  2. Comission = Lot * TailleDuContrat * BidAlpha * CommissionPourcentage / 100

Nous voyons ici la nouvelle valeur "TailleDuContrat", qui est également implémentée dans MQL5 via une fonctionnalité intégrée recevant des informations du serveur de trading. Cette valeur est l'une des plus importantes et est présente dans tous les calculs de pertes et de profits, bien que ce soit sous une forme implicite pour simplifier les calculs pour les programmeurs. Je comprends la validité de ces simplifications du point de vue du programmeur. Mais notre objectif actuel est de tout comprendre. Vous verrez pourquoi cela est nécessaire vers la fin de cet article. J'ai également introduit une variable BidAlpha supplémentaire. Je vous en dévoile également la signification ci-dessous. Les valeurs suivantes spécifiées dans la spécification du symbole apparaissent également :

  • ComissionPoints – commission en points
  • CommissionPourcentage – commission en pourcentage de la taille du contrat
Le multiplicateur BidAlpha est nécessaire pour convertir un swap en unités de la devise de base en un swap en unités de notre solde. Quatre scénarios sont possibles :
  1. BidAlpha = 1 (si la devise de base est la même que la devise de dépôt)
  2. BidAlpha = Cours de l’Offre (du symbole sélectionné)
  3. BidAlpha = Cours de l’Offre (du taux correspondant, où la devise de base du symbole sélectionné est la même que la devise de base du symbole transitoire, et la seconde devise est la même que la devise de dépôt)
  4. BidAlpha = 1 / Cours de la Demande (du taux correspondant, où la devise de base du symbole sélectionné est la même que la seconde devise du symbole transitoire, et la devise de base est la même que la devise de dépôt)

Si la taille du contrat est appliquée à la paire USDCHF, il est en effet clair que la devise de base de la paire sélectionnée est l'USD. Supposons que nous ayons un dépôt en USD, la monnaie de transition devient alors l'USDUSD et, par conséquent, son taux est toujours égal à un. Le deuxième cas est encore plus simple. Supposons que nous ayons une paire EURUSD, qui est également le taux de conversion, donc son prix de l’Offre (Bid) est la valeur requise. Le troisième cas pourrait être le suivant. Supposons que notre monnaie soit l'EURNZD. Il s'avère alors que nous devons trouver le taux de conversion entre l'EUR et l'USD. Le cours de l'EURUSD et le Bid (l’Offre) de ce cours sont ce dont nous avons besoin. Dans le quatrième cas, les choses sont un peu plus compliquées. Supposons que nous ayons sélectionné CHFJPY. Il est clair que la paire de transition est USDCHF, puisqu'il n'y a pas de taux de change CHFUSD sur le Forex. Bien entendu, nous pouvons créer notre propre symbole synthétique et travailler avec le CHFUSD. Dans ce cas, nous pouvons utiliser le cas précédent. Mais il suffit en fait de retourner ce symbole pour que son taux devienne égal à "1 / Ask" du taux actuel "gênant". En fait, nous créons un symbole synthétique sans nous concentrer sur lui. Il en va de même pour les swaps. D'autres questions se posent également. Par exemple, quel taux doit être utilisé dans la monnaie de transition - cours acheteur (Bid), cours vendeur (Ask) ou cours moyen (Mid) ? Cette question ne peut être résolue dans le cadre de l'approche actuelle. Nous trouverons progressivement la bonne approche en cours de route. Définissons maintenant le cadre de l'amélioration, au moins approximativement. Pour ce faire, nous devons écrire au moins la première version approximative de l'équation générale des profits et des pertes, en tenant compte de toutes les options de "taxation", telles que le spread, le swap et la commission.

Pour calculer les swaps, nous obtenons des équations similaires :

  1. Swap = Lot * ValeurDuTick * SwapPoints * SwapCount(DateDeDebut, DateDeFin)
  2. Swap = Lot * TailleDuContrat * BidAlpha * SwapPourcentage / 100 * SwapCount(DateDeDebut, DateDeFin)

Les équations sont en effet assez similaires. La seule différence est que le certain multiplicateur est apparu ici sous la forme de la fonction SwapCount. J'espère que vous me laisserez une certaine liberté terminologique. Je l'appelle "fonction", car les swaps ne sont pas facturés immédiatement, alors que sa taille dépend de l'heure d'ouverture et de l’heure de clôture de l'ordre. Dans une approximation grossière, on peut bien sûr se passer du multiplicateur et écrire ce qui suit :

  • SimpleCount = MathFloor( (DateDeFin -DateDeDebut) / ( 24 * 60 * 60 ) )

Si nous supposons que DateDeFin et DateDeDebut sont de type "datetime". Leur différence est égale au nombre de secondes entre les points d'ouverture et de clôture de l'ordre. Le swap est chargé une fois par jour. Il suffit donc de diviser cette valeur par le nombre de secondes dans une journée. Nous pouvons ainsi nous faire une première idée de la manière dont les positions de swap peuvent être évaluées. Bien sûr, cette équation est loin d'être parfaite. Mais elle donne la réponse à la question de savoir de quel type de fonction il s'agit et ce qu'elle renvoie. Elle peut également suggérer comment (au moins approximativement) le swap est calculé. Elle renvoie le nombre de swaps accumulés pendant la durée de vie de la position. La commission dans la spécification sera de la même façon l'une des 2 valeurs possibles pour le swap avec l'indication obligatoire de la méthode de calcul :

  • SwapPoints - swap pour le rollover d’une position en points
  • SwapPourcentage - swap pour le renouvellement d'une position unique en % de la taille du contrat

Si dans le cas de la commission les équations sont plus simples et ne nécessitent pas d'éclaircissements, dans le cas du swap tout est beaucoup plus compliqué. Nous aborderons plus tard les subtilités et les nuances de ces simplifications. Il convient tout d’abord de mettre en forme les équations de pertes et profits, à l'exclusion des commissions et des swaps, de manière à ce qu'elles soient plus cohérentes :

  • PrBuy = Lot * ValeurDuTick * [ ( Bid2 - (Bid1 + S1 * Point)) / Point ] — profit pour un ordre d'achat
  • PrSell = Lot * ValeurDuTick * [ ( Bid1 - (Bid2 + S2 * Point)) / Point ] — profit pour un ordre de vente
  • S1 — écart (spread) lors de l'ouverture d'un ordre d'achat
  • S2 — écart (spread) lors de la clôture d'un ordre de vente

Il est clair que le prix Ask comprend à la fois le spread et le prix Bid. Séparons le profit ou la perte de l'ordre résultant du spread en en faisant une somme distincte :

  • PrBuy = Lot * ValeurDuTick * [ ( Bid2 - Bid1) / Point ] + ( - Lot * ValeurDuTick * S1 ) — profit pour un ordre d'achat
  • PrSell = Lot * ValeurDuTick * [ ( Bid1 - Bid2) / Point ] + ( - Lot * ValeurDuTick * S2 ) — profit pour un ordre de vente

On peut constater que dans les deux équations, une certaine somme a été séparée, qui est la partie facturée par le courtier. Bien sûr, ce n'est pas le montant total. Mais au moins maintenant vous pouvez voir plus clairement ce que nous recevons et ce que le courtier prend. Notez que dans le premier cas, notre "taxe" sur le spread ne dépend que de la valeur du spread lors de l'ouverture d'une position d’"Achat", et dans le second cas, lors de la clôture d'une position de "Vente". Il s'avère que nous donnons au courtier une partie de notre profit sous la forme du spread au moment de chaque achat. En effet, si l'on approfondit le trading sur le Forex, il apparaît clairement que l'ouverture d'une position d'achat et la fermeture d'une position de vente sont des actions équivalentes confirmées par nos équations. En l'occurrence :

  • S1 — spread en points lors de l'ouverture d'une position
  • S2 — spread en points lors de la fermeture d'une position

Ces valeurs sont exactement celles que vous pouvez voir dans la fenêtre du Market Watch si vous voulez afficher le spread. La fonction MQL5 intégrée SymbolInfoInteger correspondante avec les entrées correspondantes renvoie exactement les mêmes valeurs. Vous pouvez trouver les entrées dans l'aide de MQL5. Ma tâche dans ce cas est de créer un modèle de calcul mathématique lié au langage MQL5 afin que ces équations puissent être immédiatement codées dans n'importe quel EA ou tout autre code MQL5. Voici notre somme, qui est maintenant similaire au swap comme à la commission :

  • SpreadBuy = - Lot * ValeurDuTick * S1
  • SpreadSell = - Lot * ValeurDuTick * S2

Spread à l'ouverture et à la fermeture

Conventionnellement, le spread est calculé au point d'Achat, mais je vais maintenant vous montrer pourquoi c'est incorrect. J'ai réalisé de nombreuses études de marché et le point le plus prévisible de l'évolution des prix s'est avéré être le point "0:00". C'est le point de passage d'un jour à l'autre. Si vous observez attentivement ce point, vous verrez à peu près la même chose sur toutes les paires de devises : un saut vers le mouvement de baisse du taux. Cela est dû à l'augmentation du spread à ce point. Le saut est suivi d'un retour en arrière équivalent. Qu'est-ce que le spread ? Le spread est un écart entre l'Offre (Bid) et la Demande (Ask). Traditionnellement, cet écart est considéré comme une conséquence de la profondeur du marché. Si la profondeur du marché est saturée d'ordres à cours limité, l'écart tend vers zéro, et si les acteurs quittent le marché, l'écart augmente. On peut parler de désintégration de la profondeur du marché. Même à première vue, on peut dire que le prix Bid n'est pas l'élément principal. Il s'avère que la Demande (Ask) et l'Offre (Bid) sont fondamentalement égales. Ceci est facile à comprendre si nous imaginons, par exemple, qu'il est possible de construire un instrument miroir USDEUR à partir de "EURUSD". Alors Bid devient Ask et, vice versa, Ask devient Bid. En d'autres termes, nous inversons la profondeur du marché.

La ligne Ask n'est généralement pas affichée sur le graphique, bien que cela puisse être utile :

offre et demande

Comme nous pouvons le voir, l'Offre (Bid) et la Demande (Ask) commencent à fusionner avec l’augmentation de la période du graphique. Il est possible qu'en raison de ces considérations, aucun terminal n'affiche les deux lignes, bien que je pense personnellement qu'il s'agit d'une option nécessaire. Mais il n'est pas si important de connaître la présence de ces valeurs et leur différence, car vous pouvez toujours les utiliser dans un EA. Je n'ai pas tracé le Mid ici, mais je pense que tout le monde comprend que cette ligne se situe exactement au milieu entre l'Offre (Bid) et la Demande (Ask). Il est clair que pour des périodes élevées, la différence entre ces valeurs ne joue pratiquement aucun rôle, et il semble qu'il ne soit même pas nécessaire de tenir compte de la présence de Ask, mais en fait c'est nécessaire. Ces détails sont très importants.

Dans cette optique, nous pouvons maintenant affirmer avec une certitude absolue que le milieu de la profondeur du marché est un invariant au cours de ces transformations. Cette valeur peut être calculée comme suit :

  • Mid = (Ask + Bid) / 2

En considérant une telle représentation et en utilisant la dernière équation, nous pouvons voir que :

  • Bid = Mid * 2 - Ask
  • Ask = Mid * 2 - Bid

Ensuite :

  • Bid = Mid * 2 - (Bid + S * Point) = Mid - (S * Point) / 2
  • Ask = Mid * 2 - (Ask - S * Point) = Mid + (S * Point) / 2

Ces expressions peuvent maintenant être substituées aux équations originales pour calculer le profit ou la perte des ordres. Il était important d'obtenir exactement ces expressions, parce que je veux vous montrer quelque chose que vous n'avez pas compris auparavant. Il s'avère que le montant facturé par le courtier ne dépend pas uniquement du point d'achat, mais des points d'entrée et de sortie, sur n’importe quelle position. Voyons ce que deviennent nos équations lorsque nous y insérons les nouvelles définitions étendues. Nous pouvons constater ce qui suit :

  • PrBuy = Lot * ValeurDuTick * [ (Mid2 - (S2 * Point) / 2) - (Mid1 + (S1 * Point) / 2)) / Point ]
  • PrSell = Lot * ValeurDuTick * [ (Mid1 - (S1 * Point) / 2) - (Mid2 + (S2 * Point) / 2)) / Point ]

Après les transformations appropriées, nous pouvons voir ceci :

  • PrBuy = Lot * ValeurDuTick * [ (Mid2 - Mid1) / Point ] - Lot * ValeurDuTick * ( S1 / 2 + S2 / 2 )
  • PrSell = Lot * ValeurDuTick * [ (Mid1 - Mid2) / Point ] - Lot * ValeurDuTick * ( S1 / 2 + S2 / 2 )

Considérant que :

  • Bid1 = Mid1 - (S1 * Point) / 2
  • Bid2 = Mid2 - (S2 * Point) / 2
  • Ask1 = Mid1 + (S1 * Point) / 2
  • Ask2 = Mid2 + (S2 * Point) / 2

Et en gardant à l'esprit que :

  • Mid1 — milieu de la profondeur du marché lors de l'ouverture d'une position
  • Mid2 — milieu de la profondeur du marché lors de la fermeture d'une position

Par commodité, nous désignons la somme négative définissant la perte due aux écarts comme suit :

  • Spread = -Lot * ValeurDuTick * ((S1 * Point) / 2 + (S2 * Point) / 2)

Et, par conséquent, la somme indiquant un profit ou une perte hors spread, commission et swap, par exemple :

  • ProfitIdealBuy = Lot * ValeurDuTick * [ (Mid2 - Mid1) / Point ]
  • ProfitIdealSell = Lot * ValeurDuTick * [ (Mid1 - Mid2) / Point ]

Nous pouvons maintenant écrire des équations plus pratiques en tenant compte de toutes les pertes dues au spread, à la commission et aux swaps. Commençons par le prototype de l'expression. Prenons comme base les dernières équations de profit et de perte des ordres, le spread étant le seul élément pris en compte ici :

  • TotalProfitBuy = ProfitIdealBuy + (Spread + Comission + Swap)
  • TotalProfitSell= ProfitIdealSell + (Spread + Comission + Swap)

J'aurais peut-être dû écrire cette équation au tout début, mais je pense qu'elle est plus appropriée ici. On constate que l'obscure ValeurDuTick est présente presque partout. La principale question est de savoir comment elle est calculée et comment une seule et même valeur peut être utilisée pour le calcul à différents moments. Les points dans le temps désignent les entrées et les sorties des positions. Je pense que vous comprenez que cette valeur est dynamique par nature et qu'elle est différente pour chaque symbole de trading. Sans décomposer cette valeur en composantes, nous obtiendrons des erreurs d'autant plus grandes que les "cibles" seront éloignées. En d'autres termes, les équations obtenues ne sont qu'une approximation. Il existe une équation absolument exacte dépourvue de tous ces défauts. Les ratios obtenus ci-dessus lui servent de limite. Les limites elles-mêmes peuvent être exprimées comme suit :

  • Lim[ dP -> 0 ] ( PrBuy(Mid1, Mid1+dP... ) ) = TotalProfitBuy(Mid1, Mid1+dP...)
  • Lim[ dP -> 0 ] ( PrSell(Mid1, Mid1+dP... ) ) = TotalProfitSEll(Mid1, Mid1+dP...)
  • Mid1+dP = Mid2 — le nouveau prix est obtenu à partir du précédent plus le delta tendant vers zéro
  • TotalProfitBuy = TotalProfitBuy(P1, P2... ) — comme nous l’avons déterminé, le profit ou la perte est une fonction des valeurs Mid et de beaucoup d'autres.
  • TotalProfitSell = TotalProfitSell(P1, P2... ) — similaire

En général, les limites équivalentes pour une compréhension générale de la situation peuvent être établies de plusieurs manières. Il n'est pas nécessaire de les multiplier. Dans notre cas, une seule suffit pour plus de clarté.

Bien que nous ayons trouvé quelques équations et qu'elles fonctionnent, les limites d'application sont très conditionnelles. Nous nous attacherons ensuite à obtenir les équations initiales impliquant ces équations approximatives. Si nous ne connaissons pas les éléments constitutifs d'un bénéfice ou d'une perte, nous n'obtiendrons jamais ces équations. À leur tour, ces équations nous aideront non seulement à trouver les ratios les plus précis pour calculer les profits et les pertes, mais aussi à trouver le déséquilibre des processus du marché, qui peut ensuite générer un profit.

Méthode la plus précise pour calculer les pertes et les profits des ordres

Pour comprendre comment construire ces équations, nous devons revenir aux bases, à savoir ce que sont l'achat et la vente. Mais tout d'abord, je pense qu'il est important de se rappeler qu'acheter signifie en fait échanger son argent contre un produit. Une autre monnaie peut être considérée comme une marchandise puisqu'elle symbolise la capacité à posséder certains biens. Il est alors clair que la vente est le processus inverse de l'échange de la deuxième monnaie contre la première. Mais si l'on omet toutes les conventions, il s'avère que l'achat et la vente sont des actions équivalentes. Une monnaie est échangée contre une autre et la seule différence est la monnaie que nous donnons et celle que nous recevons en retour.

En cherchant des informations sur ces calculs, j'ai trouvé des conventions étranges que j'ai personnellement été incapable de comprendre pendant longtemps, parce qu'elles n'ont aucun fondement. En tant que technicien ayant une grande expérience de l'étude de divers documents techniques, j'ai déterminé 2 vérités très simples. Si la matière n'est pas claire pour vous et qu'elle soulève des questions, alors... :

  • Les auteurs ne la comprennent pas eux-mêmes, et font donc tout leur possible pour vous convaincre du contraire par tous les moyens (en utilisant généralement des affirmations antilogiques).
  • Des détails sont délibérément omis afin de vous cacher des informations inutiles.

L'image ci-dessous développe l'idée en la rendant plus facile à comprendre. Elle montre l'ouverture et la fermeture de 2 types d'ordres de marché :

achat et vente

Maintenant, je pense que la section sur les spreads et la section actuelle deviendront plus claires. Cette image est pertinente pour l'ensemble de l'article, mais c'est dans ce bloc qu'elle est la plus utile.

Bien sûr, je suis sûr qu'il existe des calculs corrects dans la littérature spécialisée, mais il est évident qu'il est plus difficile de trouver ces informations que de deviner par soi-même ce qui manque. La convention stipule que lorsque nous achetons, par exemple, EURUSD, nous achetons de l'EUR et vendons de l'USD. Écrivons-le :

  • EUR = Lot * TailleDuContrat
  • USD = - Ask1 * Lot * TailleDuContrat = - (Bid1 + S1*Point) * Lot * TailleDuContrat

Dans ce cas, il s'avère que lors de l'achat, nous obtenons un montant positif de la devise de base et un montant négatif de la seconde devise. Je crois que je ne suis pas le seul à penser que c'est un non-sens total. Après y avoir réfléchi, je suis arrivé à la conclusion que les ratios sont corrects, mais qu'ils sont présentés d'une manière peu intuitive. Pour acheter de l'EUR, nous avons besoin d'une autre devise, l'USD, que nous pouvons prendre dans notre bilan, emprunter auprès d'un courtier ou utiliser les deux méthodes. En d'autres termes, nous prenons d'abord des USD dans un stock partagé et nous les empruntons. Cela ressemble à ceci :

  • USD1 = Ask1 * Lot * TailleDuContrat = (Bid1 + S1*Point) * Lot * TailleDuContrat — c'est ce que nous avons emprunté
  • EUR1 = Lot * TailleDuContrat — c'est ce que nous avons acheté avec des fonds empruntés au taux de change Ask au moment de l'achat.

La valeur négative apparaîtra plus tard. En fait, elle ne peut pas être ici en ce moment. La valeur négative apparaît lorsque nous clôturons notre position. Ainsi, si la position est ouverte, elle doit être fermée. Il s'avère que nous devons effectuer l'action Sell en utilisant le même lot. Si l'on s'en tient aux considérations habituelles :

  • EUR2 = Lot * TailleDuContrat
  • USD2 = Bid2 * Lot * TailleDuContrat

Il s'avère que nous vendons déjà des EUR et achetons des USD. En ce qui concerne nos transformations, il s'avère que nous prenons les euros que nous avons échangés contre des fonds empruntés et que nous les changeons à nouveau en monnaie empruntée. Un bénéfice ou une perte sera obtenu en soustrayant les fonds empruntés des fonds reçus :

  • Profit_EUR = EUR1 - EUR2 = 0
  • Profit_USD = USD2 - USD1 = Bid2 * Lot * TailleDuContrat - (Bid1 + S1*Point) * Lot * TailleDuContrat = Lot * TailleDuContrat * ( Bid2 - Bid1 - S1*Point)

Il s'avère que l'euro disparaît et qu'il ne reste plus que le dollar. Si notre dépôt est effectué en USD, il n'est pas nécessaire de convertir la devise résultante dans la devise du dépôt, puisqu'elles sont identiques. L'équation est très similaire à celle que nous avons prise comme base au tout début, la seule différence étant que la commission et le swap ne sont pas pris en compte ici car ils sont considérés séparément. Réécrivons maintenant un peu cette expression :

  • Profit_USD = Lot * (TailleDuContrat*Point) * [ ( Bid2 - Bid1 - S1*Point) / Point ]

Il suffit de diviser et de multiplier le côté droit par Point pour obtenir l'équation initiale. La même équation peut être obtenue si l'on utilise le système original de conventions stipulant que nous vendons et achetons en même temps, quelle que soit la direction de l'opération. Dans ce cas, tout ce qui est emprunté est marqué d'un signe négatif, symbolisant que nous le devons, et le montant acheté est marqué d'un signe plus. Dans un tel système de conventions, nous n'avons pas besoin de réfléchir à ce que nous changeons en quoi et d'où. Faisons de même en utilisant cette approche :

  • EUR1 = Lot * TailleDuContrat
  • USD1 = - Ask1 * Lot * TailleDuContrat = - (Bid1 + S1*Point) * Lot * TailleDuContrat

Il s'agit d'un achat. Première action.

  • EUR2 = - Lot * TailleDuContrat
  • USD2 = Bid1 * Lot * TailleDuContrat

Il s'agit d'une vente. Deuxième action.

Ensuite tout est simplifié, car il n'est pas nécessaire de réfléchir à ce qu'il faut soustraire de quoi et comment. Il suffit d'additionner séparément tous les EUR et tous les USD. La monnaie de base disparaît de toute façon pour ne laisser que la deuxième monnaie. Additionnons et vérifions que les équations sont identiques aux précédentes :

  • Profit_EUR = EUR1 + EUR2 = 0
  • Profit_USD = USD1 + USD2 = - (Bid1 + S1*Point) * Lot * TailleDuContrat + Bid2 * Lot * TailleDuContrat = Lot * TailleDuContrat * ( Bid2 - Bid1 - S1*Point)

Il s'avère que le bénéfice d'un symbole est considéré exclusivement dans la deuxième devise (et non dans la devise de base), et que la devise de base disparaît toujours pendant le cycle complet d'ouverture et de fermeture. Naturellement, tout est reflété pour la vente. Écrivons tout cela pour compléter nos calculs. Nous vendons maintenant l'EURUSD, puis nous clôturons cette position en effectuant un "achat" :

  • EUR1 = - Lot * Taille du contrat
  • USD1 = Bid1 * Lot * TailleDuContrat

Il s'agit d'une vente. Première action.

  • EUR2 = Lot * TailleDuContrat
  • USD2 = - (Bid2 + S2*Point) * Lot * TailleDuContrat

Il s'agit d'un achat, action deux.

Additionnons maintenant toutes les valeurs de la même manière :

  • Profit_EUR = EUR1 + EUR2 = 0
  • Profit_USD = USD1 + USD2 = Bid1 * Lot * TailleDuContrat - (Bid2 + S2*Point) * Lot * TailleDuContrat = Lot * TailleDuContrat * ( Bid1 - Bid2 - S2*Point)

Comme vous pouvez le constater, l'équation ne diffère que par le fait que Bid1 et Bid2 sont intervertis. Bien entendu, le spread est facturé au point de clôture de la position, car le point de clôture est le point d'achat. Jusqu'à présent, tout est strictement conforme aux équations originales. Il convient également de noter que nous savons maintenant ce qu'est la ValeurDuTick, du moins si la deuxième devise (et non la devise de base) de notre symbole correspond à la devise de notre dépôt. Ecrivons l'équation de cette valeur :

  • ValeurDuTick = TailleDuContrat * Point

Cependant, cette valeur ne convient que pour les symboles dans lesquels la devise du profit est égale à la devise de notre dépôt. Mais qu'en est-il si nous utilisons, par exemple, un taux croisé, tel que AUDNZD ? L'essentiel ici n'est pas le symbole lui-même, mais le fait que cette valeur est toujours calculée par rapport à la devise de notre dépôt, et que nous la recevons du serveur de trading. Mais si nous utilisons cette équation en relation avec le taux de change, il s'avère qu'elle fonctionne, bien sûr, mais qu'elle nous répondra non pas dans notre monnaie de dépôt, mais dans la deuxième monnaie du symbole. Pour convertir cette valeur dans la monnaie de dépôt, il est nécessaire de la multiplier par un certain ratio, qui est en fait le taux de conversion que nous avons examiné dans le bloc précédent.

  • TickValueCross = TailleDuContrat * Point * BidAlphaCross

Le calcul du taux de conversion est assez simple :

  1. Regardez la deuxième monnaie de notre symbole (pas la monnaie de base)
  2. Cherchez un symbole qui contient cette devise et la devise de notre dépôt
  3. Effectuez un échange au taux approprié
  4. Si nécessaire, transformez le symbole (parcours miroir)

Par exemple, si nous négocions l'EURCHF et que nous disposons d'un dépôt en USD, le bénéfice initial sera en CHF, nous pouvons donc utiliser l'instrument USDCHF et son taux. Nous devons donc échanger du CHF contre du USD, puis il s'avère que nous devons acheter du USD contre du CHF. Mais puisque CHF = PBid * USD, alors USD = (1/PAsk) * CHF et par conséquent :

  • BidAlphaCross = 1 / PAsk

Utilisons un autre symbole pour le deuxième exemple. Par exemple, si nous négocions AUDNZD et que nous obtenons des bénéfices en NZD, nous pouvons prendre le taux NZDUSD et, étant donné que USD = PBid * NZD, dans ce cas, nous pouvons prendre le taux NZDUSD :

  • BidAlphaCross = PBid

Voyons ce qu'il en est. Convertir le CHF en USD signifie "+USD ; -CHF". En d'autres termes, nous perdons une monnaie et en gagnons une autre. Il s'agit d'acheter des USD, de vendre au taux USDCHF, au prix du PAsk, ce qui signifie en fait la chose suivante : "USD = (1/PAsk) * CHF". Il est plus facile de le percevoir de la manière suivante : lorsque nous achetons, nous devrions recevoir un peu moins d'USD que si le courtier ne prenait rien sur notre opération d'échange. Cela signifie que si l'on divise par un PAsk plus grand, on obtient une valeur plus petite que 1/P.

Dans le second cas, la situation est inversée. La conversion de NZD en USD signifie "+USD ; -NZD", ce qui signifie vendre au prix PBid en utilisant le taux NZDUSD. Fixons un ratio similaire pour "USD = PBid * NZD". L'échange se fait à nouveau à un taux légèrement inférieur, qui est "PBid". Tout correspond. Tout est transparent et facile à comprendre. Gardez à l'esprit que le taux parfait primaire est "PMid", que j'ai examiné ci-dessus. Il est donc facile de comprendre que le spread n'est rien d'autre que le pourcentage que le courtier facture sous la forme de la devise échangée. Par conséquent, chaque transaction, qu'il s'agisse d'ouvrir ou de fermer une position, s'accompagne d'une taxe de courtage sur les opérations de change appelée "spread". Le reste de cette taxe est contenu dans les commissions et les échanges.

Le taux de conversion n'est pas nécessaire et le ratio n'est égal à 1 que si la devise de profit correspond à la devise de notre dépôt. Le ratio disparaît donc dans le cas des principales paires de devises et rend la taille du tick fixe pour toutes ces paires. Comme dans le cas précédent, notre symbole de trading peut s'avérer être un taux transitoire, de sorte que nous ne devons pas le rechercher parmi d'autres symboles.

En tenant compte de la nouvelle valeur BidAlphaCross, réécrivez les équations de profit et de perte de l'ordre sans commission ni swap :

  • BuyProfit = BidAlphaCross * Lot * TailleDuContrat * ( Bid2 - Bid1 - S1*Point)
  • SellProfit = BidAlphaCross * Lot * TailleDuContrat * ( Bid1 - Bid2 - S2*Point)

Compte tenu de ce qui précède :

  • Bid1 = Mid1 - (S1 * Point) / 2
  • Bid2 = Mid2 - (S2 * Point) / 2

Réécrivons les équations sous une forme plus visuelle, en remplaçant Mid par les ratios :

  • BuyProfit = BidAlphaCross * Lot * TailleDuContrat * ( Mid2 - (S2*Point)/2 - Mid1 + (S1*Point)/2 - S1*Point)
  • SellProfit = BidAlphaCross * Lot * TailleDuContrat * ( Mid1 - (S1*Point)/2 - Mid2 + (S2*Point)/2 - S2*Point)

Simplifions tout cela :

  • BuyProfit = Lot * BidAlphaCross * TailleDuContrat * Point * [ ( Mid2 - Mid1 )/ Point - ( S1/2 + S2/2 ) ]
  • SellProfit = Lot * BidAlphaCross * TailleDuContrat * Point * [ ( Mid1 - Mid2 )/ Point - ( S1/2 + S2/2 ) ]

Encore plus de simplification :

  • BuyProfit = Lot * TickValueCross * [ ( Mid2 - Mid1 )/ Point ] - Lot * TickValueCross * ( S1/2 + S2/2 )
  • SellProfit = Lot * TickValueCross * [ ( Mid1 - Mid2 )/ Point ] - Lot * TickValueCross * ( S1/2 + S2/2 )

Aujourd'hui, je pense que c'est devenu plus facile et plus clair. J'ai délibérément supprimé la somme associée au spread, afin que nous puissions voir qu'il s'agit exactement de la valeur facturée, quelle que soit la durée pendant laquelle notre position ou notre ordre reste actif.

Fonction de calcul exact du swap

Il reste maintenant à clarifier les équations de swap. Rappelons les équations que nous avons vues au début de l'article :

  • Swap = Lot * ValeurDuTick * SwapPoints * SwapCount(DateDeDebut, DateDeFin)
  • Swap = Lot * TailleDuContrat * BidAlpha * SwapPourcentage / 100 * SwapCount(DateDeDebut, DateDeFin)

Dans le dernier bloc, nous avons découvert que la ValeurDuTick n'est pas une valeur à un chiffre et qu'elle est calculée différemment selon les paires de devises. Il a été déterminé que :

  • ValeurDuTick = TailleDuContrat * Point

Mais cela ne fonctionne que pour les paires dont la devise de profit correspond à la devise de dépôt. Dans les cas plus complexes, nous utilisons la valeur suivante :

  • TickValueCross = TailleDuContrat * Point * BidAlphaCross

où BidAlphaCross est également une valeur différente, qui dépend de la devise de dépôt et du symbole sélectionné. Tout cela a été défini ci-dessus. Sur cette base, nous devons réécrire la première version de l'équation en remplaçant la constante standard :

  • Swap = Lot * TickValueCross * SwapPoints * SwapCount(StartTime, EndTime)

Mais cette équation est loin d'être parfaite. En effet, contrairement à une commission ou à un spread, un swap peut être crédité un nombre arbitraire de fois tant que votre position reste ouverte. Il s'avère que dans le cas des taux croisés, une seule valeur TickValueCross n'est pas suffisante pour décrire l'ensemble du swap, car à chaque point crucial du swap, cette valeur est légèrement différente parce que la valeur BidAlphaCross change. Ecrivons les équations complètes du calcul des swaps pour les deux options de "taxation" :

  1. Swap = SOMME(1 ... D) { Lot * (SwapPoints * K[i]) * TickValueCross[i] } — somme de tous les swaps accumulés en points, pour chaque point croisé 0:00
  2. Swap = SOMME(1 ... D) { Lot * TailleDuContrat * BidAlpha[i] * (SwapPourcentage/100 * K[i]) * } — en %

Tableaux à additionner :

  • K[i] = 1 ou 3 — si le rapport est "3", cela signifie qu'il s'agit du jour de la régularisation du triple swap.
  • TickValueCross[i] — tableau des tailles de ticks aux points de swap
  • BidAlpha[i] — tableau des taux d'ajustement aux points d'imputation des swaps

Examinons un exemple de calcul de swap pour un ordre arbitraire. Pour ce faire, je vais introduire les courtes notations suivantes :

  • TickValueCross[i] = T[i]
  • BidAlpha[i] = B[i]
  • K[i] = K[i]

Représentons maintenant graphiquement la manière dont nous allons additionner les swaps :

calcul de swap


Nous avons analysé tous les exemples possibles de calcul des pertes et profits de l'ordre.

Partie pratique

Dans cette section, nous allons tester notre modèle mathématique. J'accorderais notamment une attention particulière aux questions relatives au calcul du bénéfice ou de la perte sans tenir compte des commissions et des swaps. Si vous vous souvenez, je me demandais à quel moment je devais calculer la valeur TickValueCross si nous calculons le bénéfice au taux croisé ? Ce moment est la seule incertitude de tout le modèle que je vais tester. Pour ce faire, nous allons d'abord mettre en œuvre toutes les fonctionnalités nécessaires pour calculer le profit ou la perte de n'importe quel ordre à l'aide de notre modèle mathématique, le tester dans le testeur de stratégie et, après tout cela, comparer nos calculs avec les données d'ordres réels provenant de l'historique des transactions. L'objectif final est de tester notre modèle mathématique et de le comparer avec une fonction de référence de MQL5 telle que OrderCalcProfit.

Afin d'évaluer tout cela, il est nécessaire d'introduire 4 quantités :

  1. Real — profit de l’ordre historique
  2. BasicCalculated — le même bénéfice que celui calculé lors de l'ouverture d'un ordre à l'aide de la fonction OrderCalcProfit.
  3. CalculatedStart — profit calculé au moment de l'ouverture de l'ordre à l'aide de notre modèle mathématique.
  4. CalculatedEnd — bénéfice calculé au moment de la clôture de l'ordre à l'aide de notre modèle mathématique.

Cela implique 3 types d'écart moyen de la valeur du bénéfice :

  1. AverageDeviationCalculatedMQL = Somme(0..n-1) [ 100 * MathAbs(BasicCalculated - Real)/MathAbs(Real) ]  / n : écart de profit relatif calculé par le code MQL5
  2. AverageDeviationCalculatedStart = Somme(0.. n-1 ) [  100 * MathAbs(CalculatedStartReal)/MathAbs(Real) ] / n : écart de profit relatif par notre code lors de l'ouverture d'un ordre
  3. AverageDeviationCalculatedEnd =  Summ(0.. n-1 ) [  100 * MathAbs(CalculatedEnd Real)/MathAbs(Real) ] / n: écart de profit relatif par notre code lors de la fermeture d'un ordre

De même, vous pouvez saisir 3 types d'écart maximal :

  1. MaxDeviationCalculatedMQL = Max(0.. n-1 ) [ (100 * MathAbs(BasicCalculated - Real)/MathAbs(Réel)) ] : écart de profit relatif par le code MQL5
  2. MaxDeviationCalculatedStart =  Max(0.. n-1 ) [  (100 * MathAbs(CalculatedStart Real)/MathAbs(Real)) ]  -écart de profit relatif par notre code lors de l'ouverture d'un ordre
  3. MaxDeviationCalculatedEnd =  Max(0.. n-1 ) [  (100 * MathAbs(CalculatedEnd Real)/MathAbs(Real)) ]  - écart de profit relatif par notre code lors de la fermeture d'un ordre

où :

  • Somme(0..n-1) — somme de tous les écarts relatifs de tous les "n" ordres
  • Max(0..n-1) — écart relatif maximal de tous les ordres "n".

Nous pouvons tester notre modèle mathématique en implémentant ces calculs dans le code d'un EA arbitraire. Commençons par mettre en œuvre notre équation de profit. Je l'ai préparé de la manière suivante :

double CalculateProfitTheoretical(string symbol, double lot,double OpenPrice,double ClosePrice,bool bDirection)
   {
   //PrBuy = Lot * TickValueCross * [ ( Bid2 - Ask1 )/Point ]
   //PrSell = Lot * TickValueCross * [ ( Bid1 - Ask2 )/Point ]
   if ( bDirection )
      {
      return lot * TickValueCross(symbol) * ( (ClosePrice-OpenPrice)/SymbolInfoDouble(symbol,SYMBOL_POINT) );
      }
   else
      {
      return lot * TickValueCross(symbol) * ( (OpenPrice-ClosePrice)/SymbolInfoDouble(symbol,SYMBOL_POINT) );
      }   
   }

Nous avons ici 2 équations en 1 : pour l'achat et pour la vente. Le marqueur "bDirection" en est responsable. La fonction supplémentaire de calcul de la taille du tick est surlignée en vert. Je l'ai mis en œuvre de la manière suivante :

double TickValueCross(string symbol,int prefixcount=0)
   {
   if ( SymbolValue(symbol) == SymbolBasic() )
      {
      return TickValue(symbol);
      }
   else
      {
      MqlTick last_tick;
      int total=SymbolsTotal(false);//symbols in Market Watch
      for(int i=0;i<total;i++) Symbols[i]=SymbolName(i,false);
      string crossinstrument=FindCrossInstrument(symbol);
      if ( crossinstrument != "" )
         {
         SymbolInfoTick(crossinstrument,last_tick);
         string firstVAL=StringSubstr(crossinstrument,prefixcount,3);
         string secondVAL=StringSubstr(crossinstrument,prefixcount+3,3);
         if ( secondVAL==SymbolBasic() && firstVAL == SymbolValue(symbol) )
            {
             return TickValue(symbol) * last_tick.bid;
            }
         if ( firstVAL==SymbolBasic() && secondVAL == SymbolValue(symbol) )
            {
            return TickValue(symbol) * 1.0/last_tick.ask;
            }         
         }
      else return TickValue(symbol);  
      }
   return 0.0;   
   }

Il existe également 2 implémentations internes pour les cas suivants :

  1. La devise de profit du symbole est la même que la devise de notre dépôt.
  2. Tous les autres cas (recherche d'un taux transitoire)

Le deuxième scénario se divise également en deux cas :

  • La devise de dépôt se trouve en haut du taux de conversion.
  • La devise de dépôt se trouve en bas du taux de conversion.

Tout est conforme au modèle mathématique. Pour mettre en œuvre les dernières divisions, nous devons d'abord trouver le bon outil pour calculer le taux de conversion :

string FindCrossInstrument(string symbol,int prefixcount=0)
   {
   string firstVAL;
   string secondVAL;
   for(int i=0;i<ArraySize(Symbols);i++)
      {
      firstVAL=StringSubstr(Symbols[i],prefixcount,3);
      secondVAL=StringSubstr(Symbols[i],prefixcount+3,3);
      if ( secondVAL==SymbolBasic() && firstVAL == SymbolValue(symbol) )
         {
         return Symbols[i];
         }
      if ( firstVAL==SymbolBasic() && secondVAL == SymbolValue(symbol) )
         {
         return Symbols[i];
         }      
      }
   return "";
   }

Pour ce faire, nous devons savoir comment "retirer" la devise de base du nom d'un symbole :

string SymbolValue(string symbol,int prefixcount=0)
   {
   return StringSubstr(symbol,prefixcount+3,3);
   }

Et obtenir la devise de profit en utilisant la fonction MQL5 intégrée :

string SymbolBasic()
   {
   return AccountInfoString(ACCOUNT_CURRENCY);
   }

Comparez tout cela avec les devises dans tous les symboles du Market Watch avant la première occurrence trouvée. Nous pouvons désormais utiliser cette fonctionnalité au moment de l'ouverture et de la clôture des ordres. Si vous le souhaitez, vous pouvez voir le reste du code dans le fichier joint ci-dessous. J'ai ajouté le calcul des écarts après la fin du backtest. Elles sont écrites dans le journal du terminal. J'ai testé les 28 principales paires de devises et les taux croisés, et j'ai placé les résultats dans un tableau pour pouvoir évaluer les performances de notre modèle mathématique et les comparer avec l'implémentation en MQL5. Les résultats ont été répartis en 3 blocs conditionnels. Les deux premiers se présentent comme suit :

blocs 1 & 2

Comme vous pouvez le voir, pour les quatre premières paires de devises, le MQL5 et notre implémentation fonctionnent parfaitement car la devise de profit est la même que celle du dépôt. Vient ensuite un bloc de trois paires de devises, dans lesquelles la devise de base est la même que la devise de profit. Dans ce cas, l'implémentation de MQL5 fonctionne mieux, mais il est déjà clair que l'erreur de calcul lors de l'ouverture d'un ordre est beaucoup plus élevée que la même erreur lors de la fermeture. Cela montre indirectement que le calcul doit réellement être effectué au moment de la clôture de l'ordre. Jetons un coup d'œil à d'autres paires de devises :

bloc 3

Ici, ma fonctionnalité n'est pas inférieure à celle de base de MQL5. Il est également clair que les calculs effectués lors de la clôture d'une position sont beaucoup plus précis à tout moment. La seule chose que je ne peux pas expliquer est la présence de 0 dans la première ligne du deuxième bloc. Il peut y avoir de nombreuses raisons, mais je ne pense pas qu'ils soient liés à mon modèle. Mais je peux me tromper. Quant à la vérification des équations pour les commissions et les swaps, je ne pense pas qu'elle soit nécessaire. J'ai confiance en ces équations car elles n'ont rien de particulièrement délicat.

Conclusion

Dans cet article, j'ai proposé un modèle mathématique créé de toutes pièces et guidé uniquement par des fragments d'information. Le modèle contient tout ce dont vous avez besoin pour calculer les ordres pour les principales paires de devises et les taux croisés. Le modèle a été testé dans le testeur de stratégie et est prêt à être utilisé immédiatement dans un EA, un indicateur ou un script. L'application de ce modèle est en fait beaucoup plus large que le simple calcul des profits, des pertes ou des coûts. Mais c'est un sujet pour un autre article. Vous trouverez toutes les fonctionnalités nécessaires et des exemples d'utilisation dans l'EA de recherche que j'ai utilisé pour compiler le tableau. L'EA est joint à l'article. Vous pouvez l'exécuter vous-même et comparer les résultats avec le tableau. Plus important encore, je crois que j'ai réussi à créer un "manuel" simple et logique.



Traduit du russe par MetaQuotes Ltd.
Article original : https://www.mql5.com/ru/articles/10211

Fichiers joints |
Comment Échanger des Données : Une DLL pour MQL5 en 10 minutes Comment Échanger des Données : Une DLL pour MQL5 en 10 minutes
Maintenant, peu de développeurs se rappellent de la façon d'écrire une DLL simple et des caractéristiques spéciales des différentes liaisons système. À l'aide de plusieurs exemples, je vais tenter de montrer l'ensemble du processus de création de la DLL simple en 10 minutes, ainsi que de discuter de certains détails techniques de notre implémentation de liaison. Je vais montrer étape par étape le processus de la création de DLL dans Visual Studio avec des exemples d'échange de différents types de variables (nombres, tableaux, chaînes, etc.). En outre, je vais vous expliquer comment protéger votre terminal client des plantages dans les DLL personnalisées.
Combinatoires et probabilités pour le trading (Partie IV) : Logique de Bernoulli Combinatoires et probabilités pour le trading (Partie IV) : Logique de Bernoulli
Dans cet article, j'ai décidé de mettre en avant le célèbre schéma de Bernoulli et de montrer comment il peut être utilisé pour décrire des tableaux de données liées au trading. Tous ces éléments seront ensuite utilisés pour créer un système de trading auto-adaptatif. Nous chercherons également un algorithme plus générique, dont un cas particulier est la formule de Bernoulli, et nous lui trouverons une application.
L'Histogramme des prix (Profile du Marché) et son implémentation  en MQL5 L'Histogramme des prix (Profile du Marché) et son implémentation en MQL5
Le Profile du Marché a été élaboré par le brillant penseur Peter Steidlmayer. Il a suggéré l’utilisation de la représentation alternative de l'information sur les mouvements de marché « horizontaux » et « verticaux » qui conduit à un ensemble de modèles complètement différent. Il a assumé qu'il existe une impulsion sous-jacente du marché ou un modèle fondamental appelé cycle d'équilibre et de déséquilibre. Dans cet article, j’examinerai l'Histogramme des Prix - un modèle simplifié de profil de marché, et décrirai son implémentation dans MQL5.
Combinatoires et probabilités pour le trading (Partie V) : Analyse des courbes Combinatoires et probabilités pour le trading (Partie V) : Analyse des courbes
Dans cet article, j'ai décidé de mener une étude sur la possibilité de réduire les états multiples à des systèmes à deux états. L'objectif principal de cet article est d'analyser et de tirer des conclusions utiles qui pourraient contribuer au développement d'algorithmes de trading évolutifs basés sur la théorie des probabilités. Bien entendu, ce sujet fait appel aux mathématiques. Mais au vu de l'expérience des articles précédents, je constate que les informations générales sont plus utiles que les détails.