Comment MetaTrader 5 calcule-t-il le profit ?

 

Exécution d'un script simple :

//+------------------------------------------------------------------+
//|                                                       profit.mq5 |
//+------------------------------------------------------------------+
string com;
string Sy[28]={"EURGBP","EURAUD","EURNZD","EURUSD","EURCAD","EURCHF","EURJPY","GBPAUD","GBPNZD","GBPUSD",
              "GBPCAD","GBPCHF","GBPJPY","AUDNZD","AUDUSD","AUDCAD","AUDCHF","AUDJPY","NZDUSD","NZDCAD",
              "NZDCHF","NZDJPY","USDCAD","USDCHF","USDJPY","CADCHF","CADJPY","CHFJPY"};
double a[28],b[28],BuyPlus[28],BuyMinus[28],SellPlus[28],SellMinus[28];
double diff=0.001;

void OnStart()
  {com="";
   for(int i=0;i<28;i++)
      {b[i]=SymbolInfoDouble(Sy[i],SYMBOL_BID);a[i]=SymbolInfoDouble(Sy[i],SYMBOL_ASK);
       OrderCalcProfit(ORDER_TYPE_BUY,Sy[i],1.0,a[i],a[i]+diff,BuyPlus[i]);
       OrderCalcProfit(ORDER_TYPE_BUY,Sy[i],1.0,a[i],a[i]-diff,BuyMinus[i]);
       OrderCalcProfit(ORDER_TYPE_SELL,Sy[i],1.0,b[i],b[i]+diff,SellPlus[i]);
       OrderCalcProfit(ORDER_TYPE_SELL,Sy[i],1.0,b[i],b[i]-diff,SellMinus[i]);
       
       com=com+"\n"+Sy[i]+"  BuyPlus="  +DoubleToString(BuyPlus[i],4)
                         +"  BuyMinus=" +DoubleToString(BuyMinus[i],4)
                         +"  SellPlus=" +DoubleToString(SellPlus[i],4)
                         +"  SellMinus="+DoubleToString(SellMinus[i],4);
      }//for
   Comment(com);
  }//start

L'erreur est clairement visible...

Le problème doit provenir deSYMBOL_TRADE_TICK_VALUE_PROFIT etSYMBOL_TRADE_TICK_VALUE_LOSS.

Nous aurons besoin deSYMBOL_TRADE_TICK_VALUE_LONG et SYMBOL_TRADE_TICK_VALUE_SHORT.

La recherche a donné quelque chose d'intéressant :

Renat:

Я вчера, когда смотрел код, неверно выразился по поводу разной стоимость пункта в зависимости от направления.

Точнее сказать, что TickValue при конвертации в целевую валюту зависит от того, убыточна она или нет. То есть, если мы получили убыток в 1 пипс, то нам надо его выкупить по цене Ask, а если прибыль в 1 пипс, то продать по цене Bid.


C'est faux, bien sûr. Pour une position courte, le prix est inversé.....

J'espère vraiment que l'erreur est involontaire ! Pouvez-vous le corriger, s'il vous plaît !

Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
  • www.mql5.com
Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте - Документация по MQL5
 

Malheureusement, la question n'est pas clairement formulée et il n'y a pas de conclusion à partir de l'exemple proposé. Il n'est pas clair - ce qui est exactement indiqué comme une erreur.

Formulez votre question de manière précise, joignez les résultats obtenus et indiquez où se trouve l'erreur, s'il vous plaît.

Par exemple, indiquez ici où se trouve l'erreur :

EURGBP  BuyPlus=158.40000000  BuyMinus=-158.48000000  SellPlus=-158.48000000  SellMinus=158.40000000  Profit=1.58398000  Loss=1.58482000

J'ai ajouté les valeurs SYMBOL_TRADE_TICK_VALUE_PROFIT et SYMBOL_TRADE_TICK_VALUE_LOSS à la fin.

Vous pouvez voir que le bénéfice prend en fait en compte différentes valeurs d'un tick, en fonction de la rentabilité ou de la perte d'une transaction. Cela est dû au fait qu'il existe une opération implicite de conversion vers la devise de dépôt, lorsqu'il faut vendre (en cas de bénéfice) ou racheter (en cas de perte) le résultat financier obtenu dans une devise à convertir.

Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
  • www.mql5.com
Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте - Документация по MQL5
 

 

La valeur d'un tick ne dépend pas du profit ou de la perte d'une transaction.

Les profits et les pertes seront clôturés au même prix. La conversion est la même.

Seules les transactions courtes et longues peuvent avoir une différence dans la valeur du tick et peuvent être comptées différemment pour la conversion dans la devise de dépôt.

L'exemple d'AchatPlus et d'AchatMoins serait égal. SellPlus et SellMinus également. Vous pouvez seulement acheter.... est différent de Sell...

Vous confondez quelque chose ici :

Renat:

... Lorsque vous devezvendre(s'il s'agit d'un bénéfice) ouracheter(s'il s'agit d'une perte) le résultat financier dans une seule devise pour la conversion.

Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация о счете
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация о счете
  • www.mql5.com
Стандартные константы, перечисления и структуры / Состояние окружения / Информация о счете - Документация по MQL5
 

Lorsque vous ouvrez une transaction pour l'EURGBP, et que la devise du dépôt est l' USD,vous avez (en gros) Acheter EURUSD et Vendre GBPUSD. (La différence de volume n'a pas d'importance, car ils ne changent pas lorsque vous fermez).

Pour ouvrir :Achetez EURUSD à l'Ask(EURUSD) et Vendez GBPUSD à l'Bid(GBPUSD).

À la clôture(s'il s'agit d'un profit,s'il s'agit d'une perte), vous avez le même prix : Bid(EURUSD) et Ask(GBPUSD).

Pourquoi la valeur du tick est-elle différente pour lesprofits et les pertes?

Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация о счете
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация о счете
  • www.mql5.com
Стандартные константы, перечисления и структуры / Состояние окружения / Информация о счете - Документация по MQL5
 

C'est le résultat d'une idée fausse que les développeurs se font depuis longtemps:

Renat:

Il est plus exact de dire que la TickValue lors de la conversion dans la devise cible dépend du fait qu'il s'agisse d'une perte ou non. C'est-à-dire que si nous avons une perte de 1 pip, nous devons le racheter au prix Ask, et si nous avons un profit de 1 pip, nous devons le vendre au prix Bid.

 
Manov:

La valeur d'un tick ne dépendpas de la rentabilité ou de la non-rentabilité d'une transaction.

Les profits et les pertes seront clôturés au même prix. Sur la conversion - la même chose.

C'est ce qu'il fait.

Pour ce faire, vous devez comprendre les mathématiques des calculs avec des conversions croisées complexes. Tant que vous opérez avec des majors comme EURUSD et GBPUSD, vous ne verrez rien.

Oui, il peut sembler à première vue que cela n'en dépend pas, mais si vous examinez les croix en détail, vous verrez que c'est le cas.

 
Renat:

C'est ça le truc, ça dépend.

C'est en fait un point discutable. La logique de Renat est claire et semble même correcte à première vue :

Lorsque vous réalisez une transaction croisée, vous réalisez un profit dans sa devise de base. Par exemple, le profit d'une transaction EURGBP est mesuré en GBP. Mais il n'y a pas de concept de profit multi-devises dans MT5, donc le profit GBP est converti à la volée dans la devise du compte. Il semble donc qu'en cas de bénéfice positif, il doit être converti au taux de change actuel GBPUSD_Bid, et en cas de bénéfice négatif - GBPUSD_Ask.

Toutefois, voici un contre-exemple:

  1. Vous avez deux comptes indépendants. Vous avez décidé de transférer des fonds de l'un à l'autre.
  2. Sur l'EURGBP, vous définissez le spread interne sur un compte BuyLimit. En conséquence, le prix de l'offre devient le vôtre.
  3. Sur l'autre compte, en utilisant un ordre au marché, vous exécutez SELL.
  4. Par cette simple opération, vous vous êtes vendu à vous-même.
  5. Un certain temps passe et vous décidez de conclure l'affaire.
  6. Sur le premier compte, vous définissez la SellLimit à l'intérieur du spread. Maintenant votre prix devient le prix demandé.
  7. Sur l'autre compte, vous utilisez l'ordre de marché pour ACHETER.
  8. Il s'avère que vous avez maintenant acheté sur votre propre compte.
  9. Les deux transactions de chaque compte ont été fermées. Vous avez acheté et vendu à vous-même.
  10. Dans un compte, vous avez un profit positif et dans l'autre négatif.
  11. Pensez-vous que le montant des fonds sur vos deux comptes a changé (sans compter la commission du courtier) ?
  12. Selon la logique de Renat, elle a changé. Parce que le bénéfice dans un compte ne sera pas égal à la perte dans l'autre compte. Et ce malgré le fait que vous achetiez et vendiez vous-même.
  13. Est-ce exact ?

Nous parlions des conditions du marché - courtier ECN/STP.

Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
  • www.mql5.com
Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте - Документация по MQL5
 
hrenfx:

Cependant, un contre-exemple:
  1. Est-ce que c'est la bonne chose à faire ?

Il s'agissait des conditions du marché - courtier ECN/STP.

Considérez qu'il existe au moins deux autres opérations de conversion interne avec leurs propres écarts.
 
Renat:

C'est ça le truc : ça dépend.

Pour ce faire, vous devez vous plonger dans les mathématiques des calculs avec des conversions croisées complexes. Tant que vous opérez avec des majors comme EURUSD et GBPUSD, vous ne verrez rien.

Oui, il semble à première vue, que cela ne devrait pas dépendre, mais si vous examinez les croix en détail, vous verrez que c'est le cas.

Le calcul Ask/Bid peut êtrecompliqué, mais en fait,pour tous les croisements, vous avez 2 transactions :

1. acheter ou vendreSYMBOL_CURRENCY_BASE-ACCOUNT_CURRENCY sur Ask/Bid

2) Acheter ou vendreSYMBOL_CURRENCY_PROFIT -ACCOUNT_CURRENCY pour Ask/Bid

Chaque transaction, si nous l'avons ouverte avec Bid, nous la fermerons avec Ask. Et vice versa ...

Le signe de résultat n'a pas d'importance pour les prix de clôture, comme c'est le cas maintenant sur MetaTrader 5 !

 
 
Renat:
Notez qu'il existe au moins deux autres conversions internes avec leurs propres spreads.

De quelles opérations de conversion s'agit-il ? La logique est simple, vous devez convertir les bénéfices multidevises dans la devise du compte, rien de plus. Dans le cas de l'exemple, le bénéfice en GBP doit être converti en USD. Peu importe que le bénéfice soit positif ou négatif, vous devez le convertir.

Vous avez abandonné le schéma du marché consistant à prendre des bénéfices en plusieurs devises et à les convertir au moment du rollover. Cela s'écarte des conditions de marché de MT5, qui se positionne comme une plateforme de marché. Mais par souci de simplification, ce départ peut être compris et n'entraîne pas, dans de nombreux cas (pas dans tous), de coûts importants.

Mais dans le cas du calcul des bénéfices, pour appeler les choses par leur nom, vous contribuez, intentionnellement ou accidentellement, à un système frauduleux visant à prendre l'argent des clients en faveur d'un courtier utilisant MT5. Je m'explique, à l'heure actuelle, un courtier fait un bénéfice supplémentaire sur MT5 en négociant tous ses clients, égal (en gros) au chiffre d'affaires de tous ses clients sur les crosses, multiplié par le spread correspondant des majors.

Vous avez mis en place un système gratuit pour gagner de l'argent sur le spread, et sur n'importe quel spread. Par exemple, pendant les nouvelles, sur le même GBPUSD, le spread peut être très large et s'il y a une fermeture/ouverture chez les clients du courtier, le courtier gagne cet énorme spread sur un point plat.

C'est un inconvénient et le renoncement au bénéfice de la multidevise, parce que la multidevise peut être convertie à des prix très désagréables pendant les nouvelles. Et en fait, lors du rollover, le bénéfice multidevises est converti à la compensation totale de tous les clients. Et il est impossible que de tels déséquilibres se produisent, comme le montre le contre-exemple ci-dessus.

Raison: