Discussione sull’articolo "L'implementazione di una modalità multivaluta su MetaTrader 5" - pagina 5
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
ditemi,
1. se ho bisogno solo di Bid e Ask di altre valute, è giusto usare le "spie"?
2. è solo un'idea, non c'è la possibilità nella funzione onChartEvent di controllare gli eventi di altre valute e non solo della valuta corrente?
3. è possibile impostare il valore del timer inferiore a uno nell'evento onTimer, in modo da scaricare il valore delle quotazioni molto più spesso e di conseguenza ritardare l'ora dell'ultimo tick di un tempo minimo?
4. oppure è possibile utilizzare "CHARTEVENT_CUSTOM+n" per controllare, nel mio caso, l'incrocio delle maschere su altri grafici?
1. Utilizzo.
2. Esiste un'opzione. L'evento di un'altra valuta deve essere inviato al grafico in cui è impostato l'EA con OnChartEvent().
3. No. Uno è il minimo.
4. È possibile.
Ho creato un semplice "indicatore spia" SendEvent.mq5, che invia un evento quando arriva una nuova quotazione:
Ho creato un semplice Expert Advisor che riceve gli eventi da questo indicatore e cerca di effettuare un'operazione di trading (ecco una parte, il testo completo è nel file allegato):
L'Expert Advisor riceve gli eventi dall'indicatore, ma nel tester (sia con che senza visualizzazione) non può eseguire un'operazione di trading - viene restituito l'errore "Invalid Request", codice di ritorno 10013. In tempo reale funziona normalmente. Se l'operazione di trading nell'Expert Advisor viene eseguita da OnTick() invece che da OnChartEvent(), funziona bene.
Ho inserito l'invio della richiesta di negoziazione nel modello di Expert Advisor offerto dall'autore dell'articolo in CodeBase - anche le operazioni di negoziazione non funzionano (stesso errore).
Qualcuno sa dirmi qual è il motivo? Ho letto in questo thread che OnChartEvent() non viene elaborato nel tester, ma in questo caso gli eventi inviati dall'indicatore vengono elaborati nel tester, ma è impossibile eseguire un'operazione di trading da OnChartEvent() nel tester.
Ho creato un semplice "indicatore-spia" SendEvent.mq5, che invia un evento quando arriva una nuova quotazione:
Ho creato un semplice Expert Advisor che riceve gli eventi da questo indicatore e cerca di effettuare un'operazione di trading (ne fornisco una parte, il testo completo è nel file allegato):
L'Expert Advisor riceve eventi dall'indicatore, ma nel tester (sia con che senza visualizzazione) non può eseguire un'operazione di trading - viene restituito l'errore "Invalid Request", codice di ritorno 10013. In tempo reale funziona normalmente. Se un'operazione di trading nell'Expert Advisor viene eseguita da OnTick() invece che da OnChartEvent(), funziona bene.
Ho inserito l'invio della richiesta di negoziazione nel modello di Expert Advisor offerto dall'autore dell'articolo in CodeBase - anche le operazioni di negoziazione non funzionano (stesso errore).
Qualcuno sa dirmi qual è il motivo? Ho letto in questo thread che OnChartEvent() non viene elaborato nel tester, ma in questo caso gli eventi inviati dall'indicatore vengono elaborati nel tester, ma è impossibile eseguire un'operazione di trading da OnChartEvent() nel tester.
Cercate di farvi venire in mente il mio pesce. Naturalmente, la logica non è completa e molto stupida, ma sembra essere molto simile a quello che ti serve.
Almeno le posizioni del mercato si aprono sia nel tester che nella demo.
Non so perché (sono troppo pigro per capirlo), ma il tuo esempio mi dava 10013 in qualsiasi situazione.
PS
È meglio legarsi a oggetti standard (come CAccountInfo e CTrade). Ma se avete la pazienza di scrivere tutto da soli, ne sarò felice.
A proposito, l'implementazione della spia stessa è meglio prenderla dall'articolo, o farne una copia modificabile (ad esempio, suggerisco di sostituire l'anno "(long)_Period" con la data di invio dell'evento o altre informazioni utili). La vostra variante è in qualche modo piuttosto "grezza".
Vedete se riuscite a far funzionare il mio pesce. La logica è incompleta e molto ottusa, ma sembra essere molto simile a quella che ti serve.
Sto cercando di ottenere i prezzi di tre coppie EURUSD, EURGBP, GBPUSD. Tutto funziona bene quando seleziono "Tutti i tick" o "Solo prezzi aperti" nel tester della strategia. Ma se scelgo "Ogni tick basato sui tick reali", per qualche motivo possono verificarsi diversi eventi "Nuova barra" in un minuto per uno strumento.
Per ripetere, è possibile selezionare un intervallo, ad esempio da 2016.07.15 a 2016.07.19. Ecco un esempio di log, osservando il 7° minuto e il 9° minuto:
2016.07.15 00:05:00 > -> id=2: EURGBP CHARTEVENT_NEWBAR_M1 price=0.8333
2016.07.15 00:05:00 > -> id=0: EURUSD CHARTEVENT_NEWBAR_M1 price=1.1119
2016.07.15 00:05:00 > -> id=1: GBPUSD CHARTEVENT_NEWBAR_M1 price=1.33399
2016.07.15 00:06:00 > -> id=2: EURGBP CHARTEVENT_NEWBAR_M1 price=0.8334
2016.07.15 00:06:00 > -> id=0: EURUSD CHARTEVENT_NEWBAR_M1 price=1.1119
2016.07.15 00:06:00 > -> id=1: GBPUSD CHARTEVENT_NEWBAR_M1 price=1.33394
2016.07.15 00:07:19 > -> id=2: EURGBP CHARTEVENT_NEWBAR_M1 price=0.8333700000000001
2016.07.15 00:07:19 > -> id=0: EURUSD CHARTEVENT_NEWBAR_M1 price=1.11174
2016.07.15 00:07:19 > -> id=1: GBPUSD CHARTEVENT_NEWBAR_M1 price=1.33382
2016.07.15 00:07:19 > -> id=2: EURGBP CHARTEVENT_NEWBAR_M1 price=0.8333700000000001
2016.07.15 00:07:19 > -> id=0: EURUSD CHARTEVENT_NEWBAR_M1 price=1.11174
2016.07.15 00:07:19 > -> id=1: GBPUSD CHARTEVENT_NEWBAR_M1 price=1.33381
2016.07.15 00:07:19 > -> id=2: EURGBP CHARTEVENT_NEWBAR_M1 price=0.8333700000000001
2016.07.15 00:07:19 > -> id=0: EURUSD CHARTEVENT_NEWBAR_M1 price=1.11174
2016.07.15 00:07:19 > -> id=1: GBPUSD CHARTEVENT_NEWBAR_M1 price=1.33384
2016.07.15 00:08:00 > -> id=2: EURGBP CHARTEVENT_NEWBAR_M1 price=0.83329
2016.07.15 00:08:00 > -> id=0: EURUSD CHARTEVENT_NEWBAR_M1 price=1.11167
2016.07.15 00:08:00 > -> id=1: GBPUSD CHARTEVENT_NEWBAR_M1 price=1.33394
2016.07.15 00:09:00 > -> id=2: EURGBP CHARTEVENT_NEWBAR_M1 price=0.83327
2016.07.15 00:09:00 > -> id=0: EURUSD CHARTEVENT_NEWBAR_M1 price=1.11166
2016.07.15 00:09:00 > -> id=1: GBPUSD CHARTEVENT_NEWBAR_M1 price=1.33396
2016.07.15 00:09:00 > -> id=2: EURGBP CHARTEVENT_NEWBAR_M1 price=0.83327
2016.07.15 00:09:00 > -> id=0: EURUSD CHARTEVENT_NEWBAR_M1 price=1.11166
Sto cercando di ottenere i prezzi di tre coppie EURUSD, EURGBP, GBPUSD. Tutto funziona bene quando seleziono "Tutti i tick" o "Solo prezzi aperti" nel tester della strategia. Ma se scelgo "Ogni tick basato sui tick reali", per qualche motivo possono verificarsi diversi eventi "Nuova barra" in un minuto per uno strumento.
Per ripetere, è possibile selezionare un intervallo, ad esempio da 2016.07.15 a 2016.07.19. Ecco un esempio di log, osservando il 7° minuto e il 9° minuto:
Qual è la ragione di questo comportamento quando si seleziona la modalità "Tutti i tick basati sui tick reali"?Come si cattura l'evento "Nuova barra"? Nella build 1375 la precisione dell'arrivo dei tick è stata migliorata in millisecondi:
Tester: Aggiunto il supporto per la precisione al millisecondo. In precedenza nel tester della strategia il tempo era di un secondo.
Quando si eseguono i test sui tick reali, i millisecondi vengono presi dai dati dei tick originali. Quando si generano i tick, i millisecondi sono scritti in base al volume del tick. Ad esempio, se ci sono 3 tick in un secondo, ad essi verrà assegnato il tempo 000, 333 e 666 millisecondi.
Catturo unanuova barra nel modo in cui è scritto nell'articolo. Cioè, l'indicatore invia l'evento "Nuova barra" in questo modo (rispetto al tempo precedente minuti, ore, giorni, mesi):
double price_current=price[rates_total-1];
TimeCurrent(time);
if(prev_calculated==0)
{
EventCustom(CHARTEVENT_INIT,price_current);
prev_time=time;
return(rates_total);
}
//--- new tick
if((flag_event & CHARTEVENT_TICK)!=0) EventCustom(CHARTEVENT_TICK,price_current);
//--- check change time
if(time.min==prev_time.min &&
time.hour==prev_time.hour &&
time.day==prev_time.day &&
time.mon==prev_time.mon) return(rates_total);
//--- new minute
if((flag_event & CHARTEVENT_NEWBAR_M1)!=0) EventCustom(CHARTEVENT_NEWBAR_M1,price_current);
AGGIORNAMENTO: il problema è scomparso con l'installazione della build 1375.
Grazie per questo enorme articolo. Non avevo mai sentito parlare di EventChartCustom. Stavo provando altri eventi grafici, ma prendevano in considerazione solo gli eventi causati dall'azione umana. Questo risolve molte cose.
A proposito, io lavoro su MQL4, era al 98% la stessa cosa.
Salute
Grazie mille per questo, è così utile. Ottimo lavoro!