Calcolo dei profitti degli ordini chiusi "HELP - pagina 5

 
Natashe4ka:

Questo è anche corretto se "cnt" è impostato a zero, ma allora il valore è di nuovo incomprensibile come nello screenshot 3 (dovrebbe essere un valore di profitto di 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);
   }

Non va bene quando non ho un pensiero logico (

Vedete, nel mercato reale il deposito si scioglierà in 3 giorni con questo tipo di logica.

 
Vitaly Muzichenko:
È brutto quando non si pensa in maniera logica (

Proprio così.

L'ordine pendente è stato cancellato

 
Natashe4ka:

Proprio così.

L'ordine in sospeso è stato cancellato

È comprensibile così com'è.
 

OK, allora come si fa a restituire un ticket di ordini chiusi che sono uguali a OrderCloseTime() e calcolare il loro profitto?
Come questo:

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

OK, allora come si fa a restituire un ticket di ordini chiusi che sono uguali a OrderCloseTime() e calcolare il loro profitto?
Qualcosa del genere:

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


E se si chiude su una fermata?

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

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

 
Ho scritto un sistema per registrare il drawdown o il profitto accumulato - sembrava qualcosa del genere: per ogni ordine a mercato durante l'apertura viene creata una variabile globale con il nome del ticket di questo ordine e quando abbiamo bisogno di ricalcolare il profitto/perdita accumulato, controlliamo semplicemente la lista attuale degli ordini contro la lista delle variabili globali ed eseguiamo la contabilità cancellando le variabili in eccesso e aggiungendo il profitto direttamente al ticket dal nome.
 
Renat Akhtyamov:

E se si chiude su una fermata?

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

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

Bene, quali array, quali biglietti, quali ordini?

Dopo il primo riavvio del terminale, o lo spegnimento durante il fine settimana, perderai semplicemente tutti i dati, e quella sarà la fine di tutte le scritture e i calcoli.

 
Aleksey Semenov:
Per esempio, quando stavo scrivendo per me stesso un sistema di conteggio del drawdown o del profitto accumulato, si presentava così: per ogni ordine a mercato durante l'apertura viene creata una variabile globale con il nome del ticket di questo ordine e quando vogliamo ricalcolare il profitto/perdita, controlliamo semplicemente l'elenco degli ordini correnti con la lista delle variabili globali ed eseguiamo il calcolo cancellando le variabili in eccesso e aggiungendo il profitto direttamente al ticket dal nome.

Questo è un carico pesante per il sistema, in un indicatore funziona bene, ma in un EA l'enumerazione di decine di variabili globali può finire con un blocco del terminale.

C'è un orario di apertura e di chiusura, bisogna lavorarci e non c'è difficoltà ad ottenerlo, e con un solo record temporale si possono ottenere tutte le informazioni sullo stato del conto, e non c'è bisogno di una bicicletta.

 
Vitaly Muzichenko:

Quali array, quali biglietti, quali ordini?

Dopo il primo riavvio del terminale, o lo spegnimento di un fine settimana, perderete semplicemente tutti i dati, e questa sarà la fine di tutte le scritture e dei calcoli.

è risolvibile

Non devo spiegartelo.

 
Vitaly Muzichenko:

Questo è un carico pesante per il sistema, in un indicatore funziona bene, ma in un EA l'enumerazione di decine di variabili globali può finire con un blocco del terminale.

Ci sono orari di apertura e di chiusura, questo è ciò di cui avete bisogno per lavorare, e non c'è difficoltà ad ottenerlo, con un unico record temporale potete ottenere tutte le informazioni sullo stato del conto, e non avete bisogno di una bicicletta.

Se avete per esempio un terminale pieno di centinaia di variabili glob inutilizzate, allora sì - la ricostruzione finirà tristemente, altrimenti funziona abbastanza rapidamente, se scritto correttamente