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

 
Vitaly Muzichenko:
Il ne correspond pas, il n'y a aucune information depuis 10 ans.

Ce n'est pas la même chose pour vous non plus.

La variable t va changer et vous serez aghtung.

Il faut le mémoriser avant de commencer à fermer les séries.

color ProfitColor;
datetime t;


// START //
//t=TimeCurrent();//разместить в блоке сигнала на закрытие серии ордеров

   if(LastProfitCL(-1)<0) ProfitColor=Red;
   if(LastProfitCL(-1)>0) ProfitColor=LimeGreen;
   if(LastProfitCL(-1)==0)ProfitColor=DarkGray;
   ObjectCreate("Last Profit", OBJ_LABEL, 0, 0, 0);
   ObjectSet("Last Profit", OBJPROP_CORNER, 1);
   ObjectSet("Last Profit", OBJPROP_XDISTANCE, 5);
   ObjectSet("Last Profit", OBJPROP_YDISTANCE, 15);
   ObjectSetText("Last Profit",StringConcatenate("Last Profit: ",DoubleToStr(LastProfitCL(-1),2)),10,"Arial",ProfitColor);
// END START //

//+----------------------------------------------------------------------------+
//|    Возвращает суммарный профит в валюте депозита серии закрытых ордеров    |
//+----------------------------------------------------------------------------+
double LastProfitCL(int op=-1){ //"op" позиция (-1 любая позиция)
  double LastProfit=0;
   for(i=OrdersHistoryTotal()-1;i>=0;i--)
     if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY) && (OrderType()==OP_BUY || OrderType()==OP_SELL) && OrderSymbol()==Symbol() && OrderMagicNumber()==magic) {
       if (OrderType()!= op || OrderSymbol()!= Symbol() || OrderMagicNumber()!= magic) continue;
    
       if (op<0 || OrderType()==op)

        {

          if(OrderCloseTime()>=t)LastProfit+=OrderProfit()+OrderCommission()+OrderSwap();
       }

       }
  return(LastProfit);
   }

 
Renat Akhtyamov:

Ce n'est pas la même chose pour vous non plus.

La variable t va changer et vous allez être sidéré.

Il doit être mémorisé avant la fin de la série.

L'avez-vous essayé ?

Il est mémorisé avant la fermeture, au moment du signal de fermeture.

 
Vitaly Muzichenko:
Il n'est pas adapté, il n'y a aucune information depuis 10 ans.

Bénéfice actuel, , tout l'historique.

D'ailleurs, il peut être réglé sur n'importe quelle date et heure.

 
Vitaly Muzichenko:

Essayez


Comment( LastProfitCL(-1, 0) );

//+----------------------------------------------------------------------------+
//|    Возвращает суммарный профит в валюте депозита серии закрытых ордеров    |
//+----------------------------------------------------------------------------+
double LastProfitCL(int op=-1, datetime t=0){ //"op" позиция (-1 любая позиция)
double LastProfit=0;
  for(int i=OrdersHistoryTotal()-1;i>=0;i--) {
   if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) {
    if((op<0||OrderType()==op) && OrderSymbol()==Symbol() && OrderMagicNumber()==magic){
     if(t<=OrderCloseTime()) {
       t=OrderCloseTime();
       LastProfit+=OrderProfit()+OrderCommission()+OrderSwap();
  }}}} 

 return(LastProfit);
}

Profit se souvient de chaque nouvelle, mais ensuite quelque chose compte inconnu. Dans l'écran n°3, ce devrait être 4, et non 190.

 
Vitaly Muzichenko:

L'avez-vous essayé ?

Il se souvient avant de fermer, au moment où il reçoit le signal de fermeture.

Lisez juste le code.
 

Cela aussi, 190

if(OrderCloseTime()>=t)LastProfit+=OrderProfit()+OrderCommission()+OrderSwap();
 
Natashe4ka:

Profit se souvient de chaque nouvelle, mais ensuite quelque chose compte inconnu. Dans l'écran n°3, ce devrait être 4, et non 190.

Voici le code, il fonctionne bien pour moi, mais peut-être parce que la série est fermée correctement

Dossiers :
info.mq4  9 kb
 
Natashe4ka:

Ainsi que 190

if(OrderCloseTime()>=t)LastProfit+=OrderProfit()+OrderCommission()+OrderSwap();


Où se trouve l'ordre de fermeture des commandes ?

Avez-vous écrit la variable t là-dedans ?

t=TimeCurrent();//разместить в блоке сигнала на закрытие серии ордеров
 
Renat Akhtyamov:

Où se trouve l'ordre de fermeture des commandes ?

Avez-vous écrit la variable t là-dedans ?

t=TimeCurrent();//place dans le bloc de signal pour la fermeture d'une série d'ordres

Tout est là, bien sûr.

if(t<=OrderCloseTime()) {
       t=OrderCloseTime();
if(OrderCloseTime()>=t)LastProfit+=OrderProfit()+OrderCommission()+OrderSwap();
 
Natashe4ka:

Tout est là, bien sûr.

if(t<=OrderCloseTime()) {
       t=OrderCloseTime();
if(OrderCloseTime()>=t)LastProfit+=OrderProfit()+OrderCommission()+OrderSwap();


Non, cette ligne est supprimée. Il s'agit déjà d'un calcul de profit, ça ne fonctionnera pas comme ça.

Où la commande de fermer dans le code - là, mais pas une telle ligne

Lire ci-dessus.