Calcolo dei profitti degli ordini chiusi "HELP - pagina 9

 
Natashe4ka:

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

E ora mi sto chiedendo come mai la funzione non ha funzionato correttamente per tutto questo tempo!!!

Vedo, devo togliere il controllo per il profitto = positivo, per questo il conto si ferma più tardi, dovevo solo prendere in considerazione anche la mia perdita precedente.

double lastloss()
{
double lastlos=0.0,lastlot=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 && OrderCloseTime()!=0) time=OrderCloseTime();
            if(OrderCloseTime()+PeriodSeconds()<time/* && op>0.0*/) break;
            op=OrderProfit()+OrderSwap()+OrderCommission();
            lastlos+=op;
            cnt++;
         }
      }
}
return(lastlos);
}
 
Natashe4ka:

Anche a me è sembrato che tutto conti 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!!!

State usando la funzione delle prime pagine del vostro libro per principianti per chiudere. Nel tester si chiuderà quasi normalmente, ma nel commercio reale il bot chiuderà spesso in rosso, specialmente se prende un piccolo profitto.

Hai mai provato a fare trading sul mercato reale o solo nel tester?

Avete mai visto una situazione simile, quando una serie di posizioni vengono chiuse? Nota la differenza in pip dal segnale alla chiusura, e per chiudere l'ultima posizione

Per non spammare, allegherò solo 3 screenshot, anche se in realtà ce ne sono più di un centinaio:


Tutte le funzioni funzionano correttamente per tutti, ma solo voi non funzionate correttamente. Vi siete mai chiesti perché?

E infine, la domanda che dovete porvi, non abbiamo bisogno di una risposta: avete intenzione di riavviare il terminale in qualsiasi momento, o chiuderlo per il fine settimana, ...? Se è così, come otterrete il profitto al prossimo lancio del terminale per continuare il lavoro dell'Expert Advisor che è stato fatto all'ultima chiusura della serie, se non volete salvarlo da nessuna parte?

 

C'è di più:

Perché ho chiesto cosa fa la rimozione di un ordine tra le posizioni di chiusura?


Ora abbiamo una situazione: un EA inizia a chiudere le posizioni quando raggiunge il profitto e poi riceve un ordine che non serve a niente, cioè non fa né profitto né perdita, ma viene inviato un ordine per rimuovere questo ordine e mentre viene rimosso, il prezzo esce e l'EA continua a chiudere ulteriormente. Il risultato è il seguente: abbiamo iniziato a chiudere il profitto ma siccome abbiamo chiuso tutto sbagliato, abbiamo finito per chiudere la serie con una perdita. È normale? Non scrivete codici solo per il tester, scrivete un codice almeno per lavorare su un conto demo.

 
Vitalie Postolache:

Capito, devo rimuovere il controllo per il profitto = positivo, fa fermare il conto più tardi, avevo solo bisogno di prendere in considerazione anche la mia perdita precedente.

double lastloss()
{
double lastlos=0.0,lastlot=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 && OrderCloseTime()!=0) time=OrderCloseTime();
            if(OrderCloseTime()+PeriodSeconds()<time/* && op>0.0*/) break;
            op=OrderProfit()+OrderSwap()+OrderCommission();
            lastlos+=op;
            cnt++;
         }
      }
}
return(lastlos);
}

Funziona, conta come dovrebbe, geniale, fantastico!!!
Grazie - grazie - grazie !!!!!!!!!!!!)))))))))))))

Hai fatto bene))

 
Vitaly Muzichenko:

C'è di più:

Perché ho chiesto cosa fa la rimozione di un ordine tra le posizioni di chiusura?


Ora abbiamo una situazione: un EA inizia a chiudere le posizioni quando raggiunge il profitto e poi riceve un ordine che non serve a niente, cioè non fa né profitto né perdita, ma viene inviato un ordine per rimuovere questo ordine e mentre viene rimosso, il prezzo esce e l'EA continua a chiudere ulteriormente. Il risultato è il seguente: abbiamo iniziato a chiudere il profitto ma siccome abbiamo chiuso tutto sbagliato, abbiamo finito per chiudere la serie con una perdita. È normale? Non scrivete codici solo per il tester, scrivete un codice almeno per lavorare su un conto demo.

Sì, non si chiudono in ordine, succede se il ciclo di chiusura parte da zero.
 
Vitalie Postolache:
Non si chiudono in nessun ordine, succede se il ciclo di chiusura parte da zero.

Da quale zero?

Beh, perché perdere tempo per la cancellazione dell'ordine al momento della chiusura della griglia? Tu stesso sai che cancellare un ordine richiede tempo, quindi perché perdere tempo? E se la tua società di intermediazione non è veloce, siamo fregati. Ho mostrato una schermata con 15 posizioni chiuse in 1 minuto e 34 secondi e dobbiamo renderci conto che il prezzo può passare attraverso più di una dozzina di punti durante questo tempo e saremo fortunati se va nella nostra direzione e non contro di noi.

 
Vitaly Muzichenko:

Da quale zero?

Beh, perché perdere tempo per la cancellazione dell'ordine al momento della chiusura della griglia? Tu stesso sai che cancellare un ordine richiede tempo, quindi perché perdere tempo? E se la tua società di intermediazione non è veloce, siamo fregati. Una volta ho postato uno screenshot dove 15 posizioni sono state chiuse in 1min.34s, e dobbiamo capire che il prezzo può passare attraverso più di una dozzina di punti durante questo tempo e saremo fortunati se va nella nostra direzione e non contro di noi.

Da questo punto zero for(int i=0;i<OrdersHistoryTotal();i++) - In questo modo, gli ordini saranno chiusi uno per uno nel migliore dei casi se sono selezionati per numero ordinale.

Sì, lo so, un ordine pendente non deve essere cancellato nel mezzo del processo di chiusura di una serie, e sarebbe meglio chiuderli in ordine, ma questo viene con l'esperienza.