Calcul du profit d'un ordre fermé "HELP - page 5

 
Natashe4ka:

Ceci est également correct si "cnt" est mis à zéro, mais alors la valeur est à nouveau incompréhensible comme dans la capture d'écran 3 (devrait être une valeur de profit de 4.27)

double LastProfitCL(int op=-1){ //"op" позиция (-1 любая позиция)
  int cnt=0;
  double LastProfit=0;
   for(i=0;i<OrdersHistoryTotal();i++)
     if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY) && (OrderType()==OP_BUY || OrderType()==OP_SELL) && OrderSymbol()==Symbol() && OrderMagicNumber()==magic) {
       if (OrderSymbol()!=Symbol() || OrderMagicNumber()!=magic) continue;
       if ((op<0 || OrderType()==op) && cnt==0) {LastProfit+=OrderProfit()+OrderCommission()+OrderSwap(); cnt++;} else {cnt=0;}
       }
  return(LastProfit);
   }

Ce n'est pas bon quand je n'ai pas de pensée logique(

Vous voyez, sur le marché réel, le dépôt fondra en 3 jours avec ce genre de logique.

 
Vitaly Muzichenko:
C'est mauvais quand on ne pense pas logiquement.

C'est vrai.

L'ordre en attente a été supprimé

 
Natashe4ka:

C'est vrai.

L'ordre en attente a été supprimé

C'est compréhensible comme ça.
 

OK, alors comment renvoyer un ticket des ordres fermés qui sont égaux à OrderCloseTime() et calculer leur profit ?
Comme ça :

if (t<OrderCloseTime()) {t=OrderCloseTime();r=OrderTicket();profit+=OrderProfit()+OrderCommission()+OrderSwap();}
 
Natashe4ka:

OK, alors comment renvoyer un ticket des ordres fermés qui sont égaux à OrderCloseTime() et calculer leur profit ?
Quelque chose comme ça :

if (t<OrderCloseTime()) {t=OrderCloseTime();r=OrderTicket();profit+=OrderProfit()+OrderCommission()+OrderSwap();}


Et si elle se ferme sur un arrêt ?

ticket=OrderClose(......);

if(ticket>0){//увеличить размер массива на один и записать тикет закрытого ордера}

 
J'ai écrit un système pour enregistrer le drawdown ou le profit accumulé - cela ressemblait à quelque chose comme ça : pour chaque ordre de marché pendant l'ouverture, une variable globale avec le nom du ticket de cet ordre est créée et lorsque nous avons besoin de recalculer les profits/pertes accumulés, nous vérifions simplement la liste actuelle des ordres par rapport à la liste des variables globales et faisons un compte en supprimant les variables inutiles et en ajoutant le profit directement au nom du ticket.
 
Renat Akhtyamov:

Et si elle se ferme sur un arrêt ?

ticket=OrderClose(......);

if(ticket>0){//увеличить размер массива на один и записать тикет закрытого ордера}

Bien, quels tableaux, quels tickets, quels ordres ?

Après le premier redémarrage du terminal, ou l'arrêt pendant le week-end, vous perdrez simplement toutes les données, et ce sera la fin de toutes les écritures et de tous les calculs.

 
Aleksey Semenov:
Par exemple, lorsque j'ai écrit pour moi-même le système de comptage du drawdown ou du profit accumulé, cela ressemblait à ceci : pour chaque ordre de marché pendant l'ouverture, une variable globale avec le nom du ticket de cet ordre est créée et lorsque nous voulons recalculer le profit/la perte, nous vérifions simplement la liste des ordres actuels par rapport à la liste des variables globales et nous effectuons le calcul en supprimant les variables excédentaires et en ajoutant le profit directement au ticket à partir du nom.

Il s'agit d'une charge importante pour le système. Dans un indicateur, cela fonctionne bien, mais dans un EA, l'énumération de dizaines de variables globales peut entraîner le blocage du terminal.

Il y a une heure d'ouverture et de fermeture, vous devez travailler avec, et il n'y a aucune difficulté à l'obtenir, et avec un seul enregistrement temporel vous pouvez obtenir toutes les informations sur l'état du compte, et vous n'avez pas besoin d'un vélo.

 
Vitaly Muzichenko:

Quels tableaux, quels tickets, quelles commandes ?

Après le premier redémarrage du terminal, ou un arrêt de fin de semaine, vous perdrez simplement toutes les données, et ce sera la fin de toutes les écritures et calculs.

c'est soluble

Je n'ai pas à vous l'expliquer.

 
Vitaly Muzichenko:

Il s'agit d'une charge importante pour le système. Dans un indicateur, cela fonctionne bien, mais dans un EA, l'énumération de dizaines de variables globales peut entraîner le blocage du terminal.

Il y a des heures d'ouverture et de fermeture, c'est à partir de cela que vous devez travailler, et il n'y a aucune difficulté à l'obtenir, avec un seul enregistrement temporel vous pouvez obtenir toutes les informations sur l'état du compte, et vous n'avez pas besoin d'un vélo.

Si vous avez, par exemple, un terminal rempli de centaines de variables glob inutilisées, alors oui - la reconstruction se terminera tristement, sinon, cela fonctionne assez rapidement, si l'écriture est correcte.
Raison: