Come eseguire l'EA per più coppie? - pagina 2

 
mittalpa:

Penso che entrambi gli approcci siano buoni.

L'unica cosa che vorrei aggiungere è che l'opzione #2 ha il merito delle prestazioni a causa del minor overhead. Tutto sarà in memoria che ovviamente è più veloce dell'operazione su file.

Un vantaggio per l'opzione #3 è se si desidera utilizzare i dati del file per qualcosa che MT4 non può fare.

Considera anche che se hai bisogno di costruire un EA che può recuperare da interruzioni di corrente ecc. senza l'intervento dell'utente per aggiornare le condizioni di mercato ecc. ti troverai comunque a costruire funzionalità di accesso al file.

 
cloudbreaker wrote >>

Considera anche che se hai bisogno di costruire un EA che possa riprendersi da interruzioni di corrente ecc. senza l'intervento dell'utente per aggiornare le condizioni di mercato ecc. ti troverai comunque a costruire funzionalità di accesso ai file.

Secondo la mia esperienza, incontrerai un sacco di problemi nel tentativo di costruire un EA che negozia coppie multiple.

1. Ogni coppia ha bisogno della sua logica personalizzata, dell'ottimizzazione e per alcune coppie forse anche di una diversa strategia di trading. Ho scritto degli EA che erano ottimizzati per una particolare coppia al punto che facevano un buon trading. Poi, quando ho provato a usarlo su un'altra coppia che ha la maggiore correlazione con la prima coppia, mi sono stupito che molte cose dovevano essere cambiate per far funzionare l'EA e ottimizzarlo per la seconda coppia. Ho scoperto che ogni coppia ha bisogno del proprio set completo di impostazioni personalizzate, valori di indicatori e molte volte anche cambiamenti nella logica di base e nella strategia. Per me ha molto più senso creare un EA molto flessibile che ha diverse strategie e rami di logica incorporati. Poi è solo una semplice questione di creare un nuovo file .set ottimale per ogni coppia.

2. L'EA che vuoi creare non potrà essere testato e ottimizzato in Strategy Tester. Il back testing e l'ottimizzazione sono essenziali nella mia esperienza. Ci sono ottimizzazioni che hanno migliorato notevolmente le prestazioni del mio EA che non avrei mai potuto scoprire se non avessi usato Strategy Tester. Mi ha dato cose come le impostazioni degli indicatori che erano così lontane da quelli che molti considerano i valori più utili e ottimali per un particolare indicatore, che non avrei mai pensato di provare valori vicini a quelli che si sono rivelati ottimali. Pensa a quanti parametri hai nel tuo EA. Ognuno di essi deve essere ottimizzato, e ogni ottimizzazione di un parametro può richiedere un cambiamento su un altro parametro. Ecco perché non puoi ottimizzare ogni parametro da solo. L'obiettivo dell'ottimizzazione è quello di ottimizzare tutti i tuoi parametri in relazione l'uno all'altro nel miglior modo possibile. Questo può richiedere molto tempo e molto lavoro usando il tester, ma è praticamente impossibile fare queste ottimizzazioni manualmente solo cambiando i parametri uno per uno da soli.

Su un'altra nota, qualunque sia il modo in cui decidete di codificare il vostro EA, salvare il vostro stato EA o altre informazioni su file non è obbligatorio nella maggior parte dei casi, e non è l'unica opzione. Il modo migliore, più efficiente e più facile per farlo è quello di salvare il tuo stato nelle variabili globali. Dopo tutto, questa è la vera ragione per cui la funzione Variabili Globali è stata aggiunta a MT. Inoltre alcuni di voi hanno parlato di avere un ulteriore EA creato al solo scopo di scambiare i dati memorizzati sul file system permettendo lo scambio di dati e l'interazione tra i due EA. Anche questo non è necessario. Lo scambio di dati e anche la capacità di logica condizionale tra più EA è un'altra caratteristica delle variabili globali. Questo permette a più EA su diversi grafici di avere accesso ai dati di qualsiasi EA e di usare quei dati per prendere decisioni che possono effettuare un cambiamento in un altro EA. Questi dati sono sicuri e protetti anche in caso di crash del computer o di interruzione di corrente. Ma cosa succede in un crash o in un'interruzione di corrente quando si sta salvando, leggendo o scambiando dati tra EA e si hanno uno o due file aperti? È molto probabile che vi ritroviate con dati mancanti, corruzione dei dati e, nel peggiore dei casi, file a zero byte o nessun file. Con le variabili globali nessuno di questi problemi può accadere. Il vostro stato EA sarà esattamente come era il millisecondo prima che il vostro sistema si spegnesse. Ora il lato negativo delle GV di cui tutti parlano è che non possono memorizzare stringhe, ma ci sono alcuni buoni modi per aggirare questo problema.

Prima di tutto i GV possono memorizzare stringhe se si usa il nome del GV come valore della stringa, per esempio GlobalVariableSet(Symbol() + "LastUptime=" + TimeLocal(), -1); Un problema con questo è che c'è un limite alla lunghezza dei nomi GV quindi non si può usare questo modo per salvare stringhe lunghe. Un altro ottimo workaround che uso sempre è la memorizzazione di stringhe nei campi di testo degli oggetti grafici. Si può lavorare con loro proprio come si lavora con gli ordini e i GV. Ci sono funzioni mql per ottenere l'ammontare totale sia dei GV che degli oggetti grafici in modo da poter fare un loop attraverso tutti loro e trovare quello che state cercando, sempre nello stesso modo in cui fate un loop attraverso i vostri ordini.

ATTENZIONE - Ora sto andando su un sentiero di coniglio su altri modi interessanti in cui gli oggetti grafici possono migliorare le vostre funzioni di trading... andando un po' fuori tema, ma può essere un'informazione utile...

Ci sono cose molto più utili che puoi fare con gli oggetti grafici. Per esempio, uno dei miei EA ha una funzione opzionale di hedging. Quando l'hedging è abilitato non c'è ovviamente un vero stop loss su qualsiasi nuovo ordine piazzato, perché quando si fa hedging sullo stesso simbolo il punto è di aprire un ordine opposto se il primo ordine va oltre quello che sarebbe il normale stop loss e il primo ordine deve rimanere aperto. Quindi il vostro codice dovrebbe sapere qual è lo stop loss e monitorare il trade in modo da poter aprire la copertura quando il primo ordine colpisce il prezzo dello stop loss, e nel caso ci sia qualche malinteso la ragione per cui non possiamo usare un vero stop loss sull'ordine è perché in tal caso l'ordine verrebbe chiuso, il che ovviamente renderebbe impossibile la copertura. Ma con gli oggetti grafici si può fare in modo che questo funzioni meglio e che appaia all'utente esattamente come un vero stop loss. Quello che devi fare è questo: Quando piazzi l'ordine, allo stesso tempo crei un oggetto linea orizzontale con il prezzo param = al prezzo dello stop loss. Il nome dell'oggetto linea è "Order #" + orderTicket; la descrizione è "StopLoss @ " + SLPrice. Impostate lo stile della linea su STYLE_DASHDOT, il colore su rosso e avrete una linea di stop loss che assomiglia esattamente a quella reale. Anche il codice per farlo funzionare è facile. Tutte le informazioni di cui avete bisogno sono già memorizzate nell'oggetto linea - il numero del biglietto d'ordine e il prezzo di SL, che è il valore dell'oggetto linea. Poi si crea una funzione che controlla se il prezzo corrente raggiunge o supera la linea. Quando ciò accade si ottiene il ticket# che è stato salvato nel campo nome della linea. Poi trovi l'ordine aperto che ha lo stesso ticket. Seleziona l'ordine per vedere se è un ordine di acquisto o di vendita e ottieni anche la dimensione del lotto. Ora hai tutte le informazioni necessarie per aprire il tuo ordine di copertura. Apri un nuovo ordine opposto al primo e con la stessa dimensione del lotto. Il passo finale è quello di cancellare la linea di stop loss. Quando lo guardi lavorare è abbastanza bello perché ora puoi vedere quando ti stai avvicinando all'essere "Hedged".

Un altro vantaggio è che se pensi che il tuo ordine possa farcela, se il prezzo sembra che possa tornare a tuo favore ma hai bisogno di un po' più di spazio, allora trascina la linea SL/Hedge un po' più in alto. Non ti piacerebbe poterlo fare con le linee standard di SL e TP? Sarebbe una grande nuova caratteristica se rendessero mobili le linee di stop loss e take profit in modo da poter fare rapidi aggiustamenti quando il mercato si sta muovendo davvero. Naturalmente potete farlo oggi nei vostri EA usando i passi di cui sopra e un buon vantaggio è che il broker non vedrà mai il vostro SL o TP. Il lato negativo è che se il tuo computer si spegne, non hai SL o TP lato server. Ma lo stesso vale per i robot come FapTurbo. Il loro metodo 'furtivo' è mettere falsi valori di SL e TP sugli ordini e chiudere gli ordini dal codice o modificare l'ordine con i valori corretti di SL e TP all'ultimo minuto quando il prezzo si avvicina.

 
Jacques366:

Ciao a tutti,

Preferisco tenere a mente che stiamo ancora lavorando in tempo reale, quindi mi dimentico di usare il ciclo while o la funzione wait per tenere la mano sulla comunicazione!

Attaccare il tuo EA a una coppia come EURUSD ti fornisce abbastanza segnali per gestire tutte le altre coppie, i tick sono molto frequenti. Non è una questione di minuti, ma di secondi (eseguire un ciclo per 2 minuti mi sembra davvero folle). Se non è una questione di secondi, basta pensare al perché o vedere con un altro broker.

se hai davvero bisogno di più di quello che otterrai attaccando il tuo EA a eurusd, pensa di eseguire istanze separate del tuo EA attaccato ad ogni valuta. Scusa ma tendo a pensare "o ripensa il tuo sistema".

Scusate se questo post è un po' brusco. Volevo condividere con voi il mio punto di vista.

Buona fortuna.

Sono un programmatore principiante, quindi si prega di considerare questo uno scenario "what-if" per scopi di discussione:


Mi rendo conto che è una cattiva programmazione creare un ciclo While senza fine con niente di produttivo nel ciclo, o se ti impedisce di eseguire il resto del tuo EA, ma cosa succede se si crea un ciclo While senza fine che contiene il corpo del tuo EA. Non capisco abbastanza bene la programmazione MQL4 per comprendere appieno il tuo commento "tenere la mano sulla comunicazione". Se lanci gli ordini di trading tramite uno script indipendente, avrai problemi di comunicazione se l'EA continua a girare in un ciclo infinito?


Sto continuando a giocare con l'idea di utilizzare un ciclo infinito Mentre ed emettere ordini di trading tramite script standalone perché fare affidamento sui tick EURUSD in entrata per eseguire l'EA può portare ad alcuni lunghi ritardi. Per esempio tra le 0700 e le 0800 GMT di oggi, l'attesa più lunga sarebbe stata di 31 secondi, ma più tardi nella giornata verso la fine della sessione di New York l'attesa può richiedere fino a 2 minuti per un tick in arrivo --- Non ho ancora controllato la sessione asiatica, ma sospetto che anch'essa abbia dei lunghi intervalli tra i tick.


Se metti il corpo del tuo EA in un ciclo infinito potresti facilmente controllare la frequenza di aggiornamento di tutte le valute che stai negoziando e non sacrificare alcun ritardo. In effetti, potresti dover mettere una dichiarazione di sonno di 100-250 millisecondi nel ciclo per rallentarlo un po' se 50 passaggi attraverso l'EA in 1 secondo ti intorpidiscono la mente.


Apprezzo tutti i feedback.

 
vangrosh wrote >>

ATTENZIONE - ora sto andando su un sentiero di coniglio su altri modi interessanti in cui gli oggetti grafici possono migliorare le vostre funzioni di trading... andando un po' fuori tema, ma può essere un'informazione utile...

brillante!

 
vangrosh:

Secondo la mia esperienza, incontrerai un sacco di problemi nel tentativo di costruire un EA che negozia coppie multiple.

Questa è roba davvero forte e sicuramente ne introdurrò la maggior parte nel mio EA.

Un paio di cose che ho già deciso -
1. Solo una coppia per EA.
2. Solo un ordine per coppia. (Questo potrebbe cambiare in seguito, ma mi atterrò a questo finché non sarò abbastanza competente).

Grazie mille per aver condiviso le tue esperienze d'oro.

Pankaj
 

Questo grafico mostra l'intervallo di tempo tra i tick per EURUSD il 29 aprile 2009. Non so quale fuso orario rappresentano questi dati. I dati dei tick sono stati scaricati da Gain Capital.

Come si può vedere ci sono alcuni periodi durante il giorno in cui l'intervallo tra i tick supera spesso un minuto e occasionalmente due minuti.



 
vangrosh:

Poi è solo una semplice questione di creare un nuovo file .set ottimale per ogni coppia.

vangrosh: Come si crea e si usa un file .set? Non ho trovato alcun riferimento per questo tipo di file.

 
cloudbreaker wrote >>

Considera anche che se hai bisogno di costruire un EA che possa recuperare da interruzioni di corrente ecc. senza l'intervento dell'utente per aggiornare le condizioni di mercato ecc. ti troverai comunque a costruire funzionalità di accesso ai file.

Date un'occhiata qui: https://book.mql4.com/special/index

Caratteristiche generali dei programmi complessi


La strada da percorrere se si desidera creare EA multivaluta.

 
StraightTrader:

Date un'occhiata qui: https://book.mql4.com/special/index

Caratteristiche generali dei programmi complessi


La strada da percorrere se si desidera creare EA multivaluta.

Grazie per il riferimento.

 
FXtrader2008 wrote >>

Questo grafico mostra l'intervallo di tempo tra i tick per EURUSD il 29 aprile 2009. Non so quale fuso orario rappresentano questi dati. I dati dei tick sono stati scaricati da Gain Capital.

Come si può vedere ci sono alcuni periodi durante il giorno in cui l'intervallo tra i tick supera spesso un minuto e occasionalmente due minuti.

Grazie per il grafico. Sarebbe bello confrontarlo con quello di qualche altra valuta, giusto per essere sicuri di non avere gli stessi ritardi. (Ti sarei grato se potessi presentare facilmente i grafici per, diciamo, 4 coppie)

Ho appena notato, quando ho iniziato a costruire il mio EA, che quando non ho tick per 1 o 2 minuti su eurusd, allora è lo stesso per le altre valute. Forse era solo un rischio in quel momento o una cattiva assunzione che ho fatto, ma ho mantenuto questa idea e il mio EA sta funzionando per mesi senza problemi. L'esperienza concreta compensa la mancanza di logica e ho continuato a far funzionare il mio EA in questo modo. Se avessi incontrato dei problemi avrei impiantato la tua soluzione, cioè la tua idea di tenere il tuo EA sveglio con solo un ritardo tra 2 corse. Logicamente è così che dovrebbe essere fatto, per quanto ne so : ma non so come vengono generati i tick dai broker, quindi è difficile andare oltre.

È anche 'normale' o 'meglio' codificare in base al sistema all'interno del quale il tuo programma è in esecuzione.

Quindi, consentendo il trattamento di più valute, normalmente dovremmo essere in grado di attaccare il nostro EA a un canale che fornisce tutti i tick. Questa è una mancanza nella logica del sistema che dobbiamo affrontare in un modo o nell'altro.

Saluti