Questions des débutants MQL5 MT5 MetaTrader 5 - page 1055

 
Igor Makanu:

tout cela est clair, mais comment calculer correctement la différence de 2 prix en points entiers ?

C'est là que les arrondis peuvent être appliqués. C'est à vous de décider dans quel sens, ou simplement vers un nombre entier.

int pips_profit = (int)MathFloor(OrderOpenPrice()-OrderClosePrice())/_Point);
 
Igor Makanu:

Dans la boucle d'ordre, est-ce que SymbolInfoDouble(OrderSymbol(), SYMBOL_POINT) ; sera recalculé à chaque fois, parce queOrderSymbol() sera différent à chaque fois ?

Le problème est ici légèrement différent - le bénéfice total en pips pour tous les symboles.

 
Konstantin Nikitin:

C'est là que les arrondis peuvent être appliqués. C'est à vous de décider dans quel sens, ou simplement vers un nombre entier.


Eh bien oui, j'ai oublié ces constructions, dans les fonctions de calcul du lot de Kim, il y avait un arrondi correct.
fxsaber:

La tâche est donc légèrement différente - le bénéfice total en pips pour tous les symboles.

OK, mais pourquoi const - comment le compilateur se comporte-t-il si la boucle change de const ?

PS : le code est lisible, mais il faut le vérifier, je ne l'ai jamais utilisé.

 
Igor Makanu:

OK, mais pourquoi const - comment le compilateur se comporte-t-il si const est modifié dans la boucle ?

PS : le code est lisible, mais il faut le vérifier, je ne l'ai jamais utilisé.

A chaque étape, une variable sera créée. const - à cette étape, il n'est pas prévu de changer quoi que ce soit.

 
fxsaber:

Chaque étape créera une variable. const - il n'est pas prévu de changer quoi que ce soit dans cette étape.

L'étape est-elle une itération de la boucle ?

Il n'est toujours pas clair comment une telle construction se comportera, nous avons besoin d'un script pour vérifier

 
fxsaber:

L'objectif est donc légèrement différent - le profit total en pips sur tous les symboles.

Eh bien, alors c'est comme ça

short pipsProfitOrder = (short)MathFloor( ( OrderProfit()+OrderSwap()+OrderCommission() ) / (SymbolInfoDouble(_OrderSymbol(), SYMBOL_TRADE_TICK_VALUE)*OrderLots()) );

Je calcule les profits en pips d'une position, mais je pense que ce ne sera pas un problème de me l'appliquer à moi-même.

 
Igor Makanu:

une étape est une itération d'un cycle ?

Oui.

le comportement d'une telle construction n'est toujours pas clair, nous avons besoin d'un script pour vérifier

Voici un exemple d'une utilisation pratique de la vie variable

Forum sur le trading, les systèmes de trading automatisés et les tests de stratégie

Discussion sur "LifeHack for trader : mixer ForEach sur les définitions (#define)"

fxsaber, 2018.02.14 10:54

Mesure de la performance

#define  BENCH(A)                                                              \
{                                                                             \
  const ulong StartTime = GetMicrosecondCount();                              \
  A;                                                                          \
  Print("Time[" + #A + "] = " + (string)(GetMicrosecondCount() - StartTime)); \
}

double GetAsk()
{
  static MqlTick tick = {0};
  
  return(SymbolInfoTick(Symbol(),tick) ? tick.ask : 0);
}

#define  AMOUNT 1 e6

void OnStart()
{
  double Sum = 0;
  
  BENCH(for (int i = 0; i < AMOUNT; i++) Sum += GetAsk())
  BENCH(for (int i = 0; i < AMOUNT; i++) Sum += SymbolInfoDouble(_Symbol, SYMBOL_ASK))
  
  Print(Sum);
}


Résultat

Time[for(inti=0;i<AMOUNT;i++)Sum+=GetAsk()] = 78952
Time[for(inti=0;i<AMOUNT;i++)Sum+=SymbolInfoDouble(_Symbol,SYMBOL_ASK)] = 162606
 

Forum sur le trading, les systèmes de trading automatisés et les tests de stratégie

FAQ des débutants MQL5 MT5 MetaTrader 5

Konstantin Nikitin, 2019.06.04 19:58

Eh bien, alors

short pipsProfitOrder = (short)MathFloor( ( OrderProfit()+OrderSwap()+OrderCommission() ) / (SymbolInfoDouble(_OrderSymbol(), SYMBOL_TRADE_TICK_VALUE)*OrderLots()) );

Je calcule les profits en pips d'une position mais je pense que cela ne me pose aucun problème.

C'est ce qu'on appelle la conversion des profits avec coûts en pips VRAIS (pas à la clôture).

 
fxsaber:

C'est ce qu'on appelle un transfert de bénéfices sur les coûts en points COURANTS (pas au moment de la clôture).

C'est ainsi qu'il doit traduire le bénéfice en points. Pour le calcul des fermetures, vous devez toujours prendre la valeur du point comme base. Le bénéfice en pips ne doit pas nécessairement être égal à la différence en pips entre les prix d'ouverture et de clôture. et les prix de clôture.

 
Konstantin Nikitin:

Il doit donc traduire le bénéfice en points.

Ils pensent parfois que profit = OrderProfit().

Pour calculer un symbole fermé, vous devez toujours utiliser la valeur du point. La valeur en pips du profit ne doit pas nécessairement être égale à la différence en pips entre le prix d'ouverture et de clôture.

La valeur du point à la clôture n'est pas égale à la valeur du point au moment du calcul. De plus, au moment du calcul, le symbole peut tout simplement ne pas figurer dans le Market Watch.

C'est pourquoi on calcule à la fois la valeur des points et leur valeur au moment de la fermeture.