Ti stai perdendo delle opportunità di trading:
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Registrazione
Accedi
Accetti la politica del sito e le condizioni d’uso
Se non hai un account, registrati
Ora aggiornato e cercando di capire di nuovo. Ho messo stampe su quasi tutte le linee. Riferirò i risultati.
Ecco la corsa con il tuo inserto, nel momento in cui lo stop loss è stato fissato:
2011.08.09 00:41:08 Core 1 2011.01.14 01:41:27 Posizione lunga di EURUSD da chiudere di stop-loss2011.08.09 00:41:08 Core 1 2011.01.14 01:41:27 -----------------Deal #63 sl 1.33328
2011.08.09 00:41:08 Core 1 2011.01.01.14 01:41:27 oldDealsTotal=62 newDealsTotal=63
2011.08.09 00:41:08 Core 1 2011.01.14 01:41:27 CSampleExpert::Trade
2011.08.09 00:41:08 Core 1 2011.01.14 01:41:27 ordine eseguito vendere 0,15 a 1,33328 [#63 vendere 0.15 EURUSD a 1,33328]
2011.08.09 00:41:08 Core 1 2011.01.14 01:41:27 operazione eseguita [#63 vendere 0,15 EURUSD a 1,33328]
2011.08.09 00:41:08 Core 1 2011.01.14 01:41:27 deal #63 sell 0.15 EURUSD at 1.33328 done (based on order #63)
2011.08.09 00:41:08 Core 1 2011.01.14 01:41:27 stop loss attivato comprare 0,15 EURUSD 1,32127 sl: 1,33328 tp: 1,35139 [#63 vendere 0.15 EURUSD a 1,33328]
2011.08.09 00:41:08 Core 1 2011.01.13 18:32:00 Posizione lunga di EURUSD da modificare trailing
Piazzo ordini pendenti con una durata di 1 ora. Dopo un'ora, gli ordini che non sono stati attivati vengono chiusi alla scadenza dell'ordine. Se diversi ordini vengono chiusi simultaneamente e prima della chiusura la funzione HistoryOrdersTotal() aveva un valore diverso da zero, allora perde alcuni ordini. Per esempio, prima della chiusura di 8 ordini, la funzione aveva un valore di 4, ma dopo la chiusura, ha un valore di 10. Due ordini sono persi.
Cosa intende per "gli ordini sono stati persi"? Va tenuto presente che i messaggi che arrivano a OnTrade() possono portare informazioni su più di un evento di compravendita. Inoltre, se diversi messaggi vengono inviati simultaneamente, quando si elabora il primo messaggio, la cache storica potrebbe essere già cambiata, e si potrebbe avere una sensazione di "eventi persi".
Si prega di leggere l'articolo Eventi commerciali in MetaTrader 5:
Conclusione
Tutte le operazioni nella piattaforma di trading MetaTrader 5 sono asincrone, e l'invio di messaggi su tutti i cambiamenti nel conto di trading sono fatti indipendentemente l'uno dall'altro, quindi non cercare di tracciare un singolo evento secondo la regola "Una richiesta - Un evento di trading". Se volete determinare esattamente cosa è cambiato dopo l'evento Trade, dovete analizzare tutte le transazioni, posizioni e ordini ad ogni chiamata del gestore OnTrade e confrontarle con lo stato che avevamo prima che l'evento apparisse.Ho specificamente richiesto il valore di HistoryOrdersTotal(), che era uguale a 4, prima di chiudere gli ordini. Dopo aver chiuso 8 ordini, il valore di HistoryOrdersTotal() avrebbe dovuto essere uguale a 12 (4 + 8), ma era uguale a 10. Ho allegato un file di log, possiamo vedere situazioni simili in esso più di una volta. Ho anche allegato l'Expert Advisor, con il quale questo è ottenuto. Fatelo voi stessi e vedrete tutto.
Provate a cambiare la funzione, cosa succederà?
Il rapporto HTML dell'esecuzione del tester non viene sempre salvato in un file!
Descrivere più precisamente. In quali circostanze.
Descrivere più precisamente. In quali circostanze.
Raramente, circa una volta su 20-30 corse del tester - aprire la scheda "Risultati
clicco su salva rapporto XML - ottengo il file del rapporto, tutto è OK!
clicco su salva rapporto HTML - la finestra per salvare il file si apre, si blocca con una ProgressBar vuota per un po' (brevemente), poi la ProgressBar si riempie rapidamente e la finestra si chiude... Ma non viene creato nessun file di report!
Non posso specificare un modello per quando esattamente questo accade.
Provate a cambiare la funzione, cosa succederà?
La chiave è"dovete analizzare tutte le compravendite, le posizioni e gli ordini su ogni chiamata al gestore OnTrade e confrontarlo con lo stato in cui si trovava prima della sua comparsa" . Nell'esempio di su con ordini in sospeso, questo si applica solo agli ordini nella storia. Per evitare di perdere gli ordini, cambierei il codice in questo modo:
Introdurre una variabile globale int oldHistoryOrders; e in Ontrade, qualcosa come questo:
Non è così che lavoro con OnTrade() come hai descritto. Nel mio codice allegato, ho rimosso tutto, lasciando solo la parte che evidenzia il bug della funzione. Non ho praticamente nessun loop nel mio EA. L'EA gestisce un singolo simbolo su un singolo tick. Pertanto, non ho bisogno di cicli. Io elaboro tutti i simboli entro 12 tick.
PS: OnTrade() mi informa di un evento commerciale e quale evento si è verificato è definito dalle mie funzioni senza loop.