OrderProfit() sostituto in MQL5!

 

Ciao,

sto convertendo uno script MQL4 in MQL5 in cui utilizzavo la funzione OrderProfit() per ottenere il profitto (positivo o negativo) di una operazione chiusa, dopo averla correttamente selezionata.

In MQL5 questa funzione non è disponibile purtroppo; facendo ricerche in rete, ho visto che si potrebbe usare una funziona del genere:

HistoryDealGetInteger(Ticket, DEAL_ENTRY_OUT);

Dove DEAL_ENTRY_OUT dovrebbe essere proprio la proprietà dell'ordine che indica il profitto.

Tuttavia, non riesco ad utilizzarla in quanto ricevo questo errore (la chiamata si trova all'interno di una funzione):

no one of the overloads can be applied to the function call

Sto cercando di utilizzare questa propietà all'interno di una funzione di questo tipo:

long OrderProfitMQL4 ( const ulong Ticket ) {
    HistoryOrderSelect(Ticket);
    return HistoryDealGetInteger(Ticket, DEAL_ENTRY_OUT);

}

Qualcuno sa dirmi come mai o cosa sto sbagliando?

Grazie in anticipo

Christian

 
ducarpit:

Ciao,

sto convertendo uno script MQL4 in MQL5 in cui utilizzavo la funzione OrderProfit() per ottenere il profitto (positivo o negativo) di una operazione chiusa, dopo averla correttamente selezionata.

In MQL5 questa funzione non è disponibile purtroppo; facendo ricerche in rete, ho visto che si potrebbe usare una funziona del genere:


Dove DEAL_ENTRY_OUT dovrebbe essere proprio la proprietà dell'ordine che indica il profitto.

Tuttavia, non riesco ad utilizzarla in quanto ricevo questo errore (la chiamata si trova all'interno di una funzione):

Sto cercando di utilizzare questa propietà all'interno di una funzione di questo tipo:

Qualcuno sa dirmi come mai o cosa sto sbagliando?

Grazie in anticipo

Christian

Prima devi recuperare lo storico con HistorySelect() dopo ciclando lo storico recuperi le informazioni di tuo interesse dei deal con  HistoryDealGetString(),  HistoryDealGetInteger() e HistoryDealGetDouble(). Guarda qui: https://www.mql5.com/it/docs/trading/historyselect c'è anche uno script d'esempio che recupera tutte le informazioni.
Documentazione su MQL5: Funzioni di Trade / HistorySelect
Documentazione su MQL5: Funzioni di Trade / HistorySelect
  • www.mql5.com
HistorySelect - Funzioni di Trade - MQL5 Riferimento - Guida al linguaggio di trading algoritmico/automatico per MetaTrader 5
 
Michele Catanzaro #:
Prima devi recuperare lo storico con HistorySelect() dopo ciclando lo storico recuperi le informazioni di tuo interesse dei deal con  HistoryDealGetString(),  HistoryDealGetInteger() e HistoryDealGetDouble(). Guarda qui: https://www.mql5.com/it/docs/trading/historyselect c'è anche uno script d'esempio che recupera tutte le informazioni.

Ah grande @Michele Catanzaro!
Alla fine ho composto così il pezzo del mio script che calcola il profitto delle operazioni chiuse in un determinato periodo di tempo (sotto)

Sicuramente si può semplificare ulteriormente, forse non serve rifare il controllo sulla date dentro al ciclo for visto che la history è già stata selezionata sopra e quindi l'ordine è per forza incluso in quel periodo.

Forse dovrò aggiungere solo il controllo per capire se l'ordine effettivamente è stato chiuso o se è ancora aperto...

HistorySelect(dateFrom, dateTo);

// Estraggo il numero di ordini chiusi nell'history
ordersNumber = HistoryDealsTotal();
    

// Ciclo tutti gli ordini chiusi nell'history
for(i = 0; i < ordersNumber; i++) {

        if(HistoryDealGetTicket(i) == 0) {  // Controllo se la selezione è andata a buon fine

                Print("Access to history failed with error (",GetLastError(),")");
                break;

        } 
else if((datetime)HistoryOrderGetInteger(i, ORDER_TIME_DONE) >= dateFrom && (datetime)HistoryOrderGetInteger(i, ORDER_TIME_DONE) <= dateTo) {  // se l'ordine chiudo è compreso fra le due date

            // Aumento il numero di ordini chiusi trovati e sommo il profitto
            totalProfit += HistoryDealGetDouble(i,DEAL_PROFIT);;
            dailyOrdersNumber += 1;

        }
}
Michele Catanzaro
Michele Catanzaro
  • 2021.02.26
  • www.mql5.com
Profilo del trader
 
Non confondere gli ordini con le operazioni(deals). Il codice sopra è comunque sbagliato. Non avere fretta e leggiti la documentazione.