Calcolo dei profitti degli ordini chiusi "HELP - pagina 3

 
Vitaly Muzichenko:
Non si adatta, non ci sono informazioni per 10 anni.

Non è lo stesso neanche per te.

La variabile t cambierà e sarete agghindati.

Deve essere memorizzato prima di iniziare a chiudere la serie

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:

Non è lo stesso neanche per te.

La variabile t cambierà e sarete sconvolti.

Deve essere memorizzato prima che la serie si chiuda.

L'avete provato?

Viene memorizzato prima della chiusura, al momento del segnale di chiusura.

 
Vitaly Muzichenko:
Non è adatto, non ci sono informazioni per 10 anni.

Profitto attuale, , tutta la storia.

A proposito, può essere impostato su qualsiasi data e ora.

 
Vitaly Muzichenko:

Prova


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 ricorda ogni nuovo, ma poi qualcosa conta sconosciuto. Nella schermata #3 dovrebbe essere 4, non 190

 
Vitaly Muzichenko:

L'avete provato?

Si ricorda prima di chiudere, nel momento in cui si riceve il segnale di chiusura

Basta leggere il codice.
 

Anche questo, 190

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

Profit ricorda ogni nuovo, ma poi qualcosa conta sconosciuto. Nella schermata #3 dovrebbe essere 4, non 190

Ecco il codice, funziona bene per me, ma forse perché la serie è chiusa correttamente

File:
info.mq4  9 kb
 
Natashe4ka:

Così anche 190

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


Dove si trova il comando per chiudere gli ordini?

Hai scritto la variabile t lì dentro?

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

Dove si trova il comando per chiudere gli ordini?

Avete scritto la variabile t lì dentro?

t=TimeCurrent();//posto nel blocco di segnale per chiudere una serie di ordini

È tutto lì, naturalmente.

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

È tutto lì, naturalmente.

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


No, questa linea viene rimossa. Questo è il calcolo del profitto, non funziona così.

Dove il comando per chiudere nel codice - lì, ma non una tale linea

Leggi sopra.