
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
grazie per il consiglio, ecco una versione molto semplice del mio codice, questo non è il mio codice reale ma spero che questo sia più chiaro.
come ho detto questo non è il codice reale, trovare pattern ecc è solo un esempio. la ragione per cui ho aperto questo thread è lafunzione DetectExistingPattern()
Ti ho già dato del codice di esempio su come eseguire il codice alla prima esecuzione di OnTick(), quindi ora aggiorna il tuo post di codice di conseguenza in modo che il tuo DetectExistingPattern() venga eseguito nella prima chiamata di OnTick() e non in OnInit().
Inoltre, non puoi usare "Bars" per rilevare una nuova barra. Questo non è corretto. Dovresti usare o "Time[0]" o "SeriesInfoInteger( _Symbol, _Period, SERIES_LASTBAR_DATE )". Ecco un esempio:
Ti ho già dato del codice di esempio su come eseguire il codice alla prima esecuzione di OnTick(), quindi ora aggiorna il tuo post di codice di conseguenza in modo che il tuo DetectExistingPattern() venga eseguito nella prima chiamata di OnTick() e non in OnInit().
Inoltre, non puoi usare "Bars" per rilevare una nuova barra. Questo non è corretto. Dovresti usare o "Time[0]" o "SeriesInfoInteger( _Symbol, _Period, SERIES_LASTBAR_DATE )". Ecco un esempio:
grazie @FMIC, ho aggiunto il codice semplice perché @jjc l'ha chiesto. A proposito, ho imparato a usare Bars dal dal, come ricordo, tutti scrivevano in quel modo e così ho fatto. Perché è sbagliato? Può funzionare in modo improprio?
ps: Uso metatrader 4, quindi è mql4 giusto?
Grazie @FMIC, ho aggiunto il codice semplice perché @jjc l'ha chiesto. A proposito, ho imparato a usare Bars dal momento che, se ricordo bene, tutti scrivevano in quel modo e così ho fatto. Perché è sbagliato? Può funzionare in modo improprio?
ps: Uso metatrader 4, quindi è mql4 giusto?
FMIC:
No! On the forum, you will find that many users have shown that the "Bars" method is very old and unreliable because the number of bars can be changed by the "Options" for charts or it can be constant when the maximum number of bars per chart has been reached. So, it is wrong to use it. Use either "Time[0]" or if you want it to be compatible with MQL5 as well, use "SeriesInfoInteger( _Symbol, _Period, SERIES_LASTBAR_DATE )". Please see my example.
come ho detto questo non è il codice reale, trovare il modello ecc è solo un esempio. la ragione per cui ho aperto questo thread è lafunzione DetectExistingPattern()
Tornando alla tua domanda originale... In questo esempio, un'opzione sarebbe quella di cambiare la funzione CheckTrendPattern() in modo da poterle dire di iniziare da una barra specifica. Invece di usare l'intervallo fisso di barre da 1 a 10, usi invece un offset da 1 a 10 da un punto di partenza specificato.
Quando non c'è un ordine esistente e si vuole controllare se il modello è attualmente soddisfatto, si usa CheckTrendPattern(0) invece di CheckTrendPattern().
Quando si avvia, se si ha un ordine esistente, allora si può cercare il pattern che lo ha attivato come segue. Questo è lo stesso suggerimento che ho dato all'inizio: prendete l'indice della barra equivalente al tempo di apertura dell'ordine esistente e iniziate a cercare a ritroso da lì.
Tuttavia, come dice FMIC, è preferibile fare questo controllo nella prima chiamata a OnTick() piuttosto che in OnInit(). Le mie ragioni per suggerire questo non hanno nulla a che fare con il "bloccare l'inizializzazione". Invece, sarei preoccupato che, quando MT4 si riavvia con l'EA già attaccato a un grafico, non hai ancora una lista di ordini al 100% affidabile dal broker o una storia aggiornata delle barre.
Un'altra considerazione che potresti voler tenere a mente è il seguente scenario, tutto ciò che accade durante il tempo coperto da una singola barra:
Si potrebbe voler controllare gli ordini chiusi così come gli ordini aperti, per prevenire questo.
Tornando alla tua domanda originale... In questo esempio, un'opzione sarebbe quella di cambiare la vostra funzione CheckTrendPattern() in modo da poterle dire di iniziare da una barra specifica. Invece di usare l'intervallo fisso di barre da 1 a 10, usi invece un offset da 1 a 10 da un punto di partenza specificato.
Quando non c'è un ordine esistente e si vuole controllare se il modello è attualmente soddisfatto, si usa CheckTrendPattern(0) invece di CheckTrendPattern().
Quando si avvia, se si ha un ordine esistente, allora si può cercare il pattern che lo ha attivato come segue. Questo è lo stesso suggerimento che ho dato all'inizio: prendete l'indice della barra equivalente al tempo di apertura dell'ordine esistente e iniziate a cercare a ritroso da lì. Tuttavia, come dice FMIC, è preferibile fare questo controllo nella prima chiamata a OnTick() piuttosto che in OnInit(). Le mie ragioni per suggerire questo non hanno nulla a che fare con il "bloccare l'inizializzazione". Invece, sarei preoccupato che, quando MT4 si riavvia con l'EA già attaccato a un grafico, non hai ancora una lista di ordini al 100% affidabile dal broker o una storia aggiornata delle barre.
Un'altra considerazione che potresti voler tenere a mente è il seguente scenario, tutto ciò che accade durante il tempo coperto da una singola barra:
Ora è più chiaro perché dovrei farlo in OnInit, l'affidabilità è il punto più importante naturalmente e non ho pensato alla tua considerazione di avvertimento. questa parte è davvero importante, potrei aprire ordini ridondanti, forse raro ma possibile. Devo gestire questo in qualche modo. davvero grazie mille.
@WHRoeder il tuo nuovo controllo barra di controllo è così semplice e bello. Ho aggiunto il tuo metodo al mio codice, grazie.
Ciao a tutti,
come consigliato da @FMIC, scrivo un indicatore che trova il mio pattern, dà un segnale e qualche altro dato che userò per i miei ordini (potrei aprire più di un ordine a prezzi diversi). Ora voglio usarlo nel mio EA ma ho una domanda, ho bisogno della vostra esperienza. Quando ricevo un segnale dal mio indicatore, apro un ordine o metto un ordine (limite di vendita o limite di acquisto, ecc) se il mio mt4 si blocca per qualsiasi motivo quando lo riapro, come posso trovare che l'ordine aperto appartiene a quale segnale nel mio indicatore. è giusto usare il bar shift per questo? come abbiamo detto prima, posso trovare il tempo di creazione dell'ordine, quindi trovare quel bar shift e dovrei cercare di ottenere il valore dell'indicatore usando questo shift? Come posso abbinare questo ordine e lo spostamento dell'indicatore?
Grazie.
Sì, puoi usare iBarShift(), proprio come ti ha spiegatojjc in un post precedente per poi fare riferimento ai dati del tuo indicatore tramite la funzione iCustom().