Calcolo dei profitti degli ordini chiusi "HELP - pagina 8

 
Natashe4ka:
Gli ordini vengono chiusi in serie, ma se non ci sono condizioni di chiusura, gli ordini vengono raccolti per un giorno o due, ecc.

Se la serie viene chiusa praticamente durante un ciclo, diciamo, durante la durata di una barra, allora possiamo prendere il criterio della serie per il tempo di chiusura più una barra. Cioè, tutti gli ordini il cui tempo di chiusura è inferiore a quello dovrebbero essere scartati.

Tuttavia, c'è la preoccupazione che questo funzioni solo nel tester; qualsiasi intervento manuale risulterà in un calcolo errato del profitto (solo il profitto dell'EA sarà preso in considerazione, mentre il trade manuale no).

 
Vitalie Postolache:
Se la serie viene chiusa praticamente durante un ciclo, diciamo durante la durata di una barra, allora possiamo prendere il criterio della serie per il tempo di chiusura più una barra. Cioè, tutti gli ordini con il tempo di chiusura inferiore a quello dovrebbero essere scartati.

Cioè

if ((op<0||OrderType()==op) && (t==OrderCloseTime() ||  t==OrderCloseTime()+60)) {LastProfit+=OrderProfit()+OrderCommission()+OrderSwap();}

(t==OrderCloseTime()||t==OrderCloseTime()+60)?

 
Natashe4ka:

Cioè

if ((op<0||OrderType()==op) && t==OrderCloseTime()+60) {LastProfit+=OrderProfit()+OrderCommission()+OrderSwap();}

+60 ?

PeriodSeconds() sarebbe più corretto. O hai intenzione di lavorare solo su M1?

Qualcosa del genere:

double lastloss()
{
double lastlos=0.0,op=0.0;
int cnt=0;
datetime time=0;
for(int i=OrdersHistoryTotal()-1; i>=0; i--)
{
      if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
      {
         if(OrderSymbol()==_Symbol && OrderMagicNumber()==Magic && OrderType()<2)
         {
            if(cnt==0) time=OrderCloseTime();
            op=OrderProfit()+OrderSwap()+OrderCommission();
            if(OrderCloseTime()+PeriodSeconds()<time && op>0.0) break;
            lastlos+=op;
            if(cnt!=0) cnt++;
         }
      }
}
return(lastlos);
}
 
Vitalie Postolache:

Qualcosa del genere:

Questo aggiunge un nuovo valore a quello precedente. Ma ogni nuova chiusura, un nuovo valore del profitto.
 

E puoi anche numerare gli ordini nel commento, per quei DC che non sovrascrivono il commento. E quando si prova il numero dal commento, appena il numero è fuori dall'ordine - la serie è finita.

Esempio: serie di ordini numero 1,2,3,4,5. Chiuso nell'ordine 5,4,3,2,1 - il ciclo vede 1 e si interrompe. Chiusura in ordine 1,2,3,4,5 e 1 (il numero d'ordine della serie precedente) - il ciclo vede la differenza 5-1>1 e interrompe. Devo pensare a come tradurre questo in codice ))))

 
Natashe4ka:
Quindi un nuovo valore viene aggiunto al valore precedente. E ogni nuova chiusura, un nuovo valore di profitto.
Non lo so, per me non ha senso.
 
Vitalie Postolache:
Non lo so, per me non ha senso.

Mettete le informazioni e vedrete che si aggiungono.

color ProfitColor;

   if(lastloss()<0) ProfitColor=Red;
   if(lastloss()>0) ProfitColor=LimeGreen;
   if(lastloss()==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(lastloss(),2)),10,"Arial",ProfitColor);
 
Natashe4ka:

Mettete le informazioni e vedrete subito cosa si aggiunge.

Hmm, sì, infatti... Continuiamo a pensare ))))
 
Ho capito che questo è un test nel tester....
 
Vitalie Postolache:
Hmm, sì, infatti... Continuiamo a pensare ))))

Ho anche pensato che contasse come dovrebbe.
Non avrei dovuto mettere questa informazione nel codice e la vita sarebbe stata più facile))

E ora è sconcertante come la funzione non abbia funzionato correttamente per tutto questo tempo!!!