1 minuto OHLC vs ogni tick - risultati opposti

 

Sto ottenendo un risultato completamente opposto quando provo su ogni tick o 1min OHLC. l'EA e i parametri di input sono esattamente gli stessi ma nel caso di 1min ohlc ottengo 50000 profitti mentre in ogni tick ottengo -7000 perdite.

questo accade su molte coppie di test su un periodo di 2 anni 0811-0813

qualcuno ha avuto lo stesso problema? Non capisco quale sia il problema e cosa devo fare quando faccio trading con soldi veri.

entrambi i grafici qui sotto

1minuto OHLC

1minuto ohlc

ogni tick

ogni segno di spunta

 

Senza alcuna informazione su come il tuo EA decide di comprare/vendere è difficile rispondere.

Vediamo nel mercato molte situazioni in cui una barra ha una dimensione molto grande (per esempio su notizie importanti ).

Quindi il tester genera fino a 11 tick per tale barra. A seconda della tua logica si comporta in modo molto diverso (solo nei test).

Se tu usassi il tuo EA con denaro reale, sono abbastanza sicuro che sarebbe molto peggio, perché barre così grandi possono avere fino a 200 tick in un minuto.

Presumo che la tua logica agisca sulla barra corrente, dovresti provare la tua logica con i valori della barra precedente.

I migliori auguri

Uwe

 
ugo58:

Senza alcuna informazione su come il tuo EA decide di comprare/vendere è difficile rispondere.

Vediamo nel mercato molte situazioni in cui una barra ha una dimensione molto grande (per esempio su notizie importanti).

Quindi il tester genera fino a 11 tick per tale barra. A seconda della tua logica si comporta in modo molto diverso (solo nei test).

Se tu usassi il tuo EA con denaro reale, sono abbastanza sicuro che sarebbe molto peggio, perché barre così grandi possono avere fino a 200 tick in un minuto.

Presumo che la tua logica agisca sulla barra corrente, dovresti provare la tua logica con i valori della barra precedente.

I migliori auguri

Uwe

Ti invio ora un trucco per "ticchettare" solo in una barra. Devi solo mettere questa logica all'inizio del tick. Se la barra non è nuova allora esce...

In quali situazioni pensi che questo trucco possa funzionare bene?

   //--- Let's first check if a new bar has come!         
   if(CopyTime(_Symbol, _Period, 0, 1, m_currentBarTime) > 0) 
     {
      if(m_previousBarTime != m_currentBarTime[0])
        {
         m_isNewBar = true;
         m_previousBarTime = m_currentBarTime[0];
        }
     }
   else
     {
      Alert("Error copying historical data, error: ", GetLastError());
      return;
     }
     
   if(!m_isNewBar) return;

Cosa consiglieresti anche per risolvere questi tick extra? C'è un articolo che spiega questo? Grazie.

 
laplacianlab:

Mando ora un trucco per "ticchettare" solo in una barra. Basta mettere questa logica all'inizio del tick. Se la barra non è nuova allora esce...

In quali situazioni pensi che questo trucco possa funzionare bene?

Cosa consiglieresti anche per risolvere questi tick extra? C'è un articolo che spiega questo? Grazie.

Cosa intendi per "risolvere quei ticchettii in più"?
 
ugo58:

Senza alcuna informazione su come il tuo EA decide di comprare/vendere è difficile rispondere.

Vediamo nel mercato molte situazioni in cui una barra ha una dimensione molto grande (per esempio su notizie importanti).

Quindi il tester genera fino a 11 tick per tale barra. A seconda della tua logica si comporta in modo molto diverso (solo nei test).

Se tu usassi il tuo EA con denaro reale, sono abbastanza sicuro che sarebbe molto peggio, perché queste grandi barre possono avere fino a 200 tick in un minuto.

Presumo che la tua logica agisca sulla barra corrente, dovresti provare la tua logica con i valori della barra precedente.

I migliori auguri

Uwe

ciao,

cosa intendi con i valori della barra precedente? usare maVal[1] (dove maVal contiene i valori della media mobile e l'array è impostato come serie) invece di maVal[0]?

o controllare se la condizione è stata verificata durante l'ultima barra e quindi entrare all'apertura di questa barra?

Qui sotto parte del codice del mio semplicissimo EA

 triggerLong=maVal[1]-diff;
 triggerShort=maVal[1]+diff; 

......
.......

Buy_Condition_1=(now_ask<triggerLong);
Sell_Condition_1=(now_bid>triggerShort);

Exit_long_Condition=(closeAtCross? now_ask>=maVal[1]:false) || Sell_Condition_1;
Exit_short_Condition=(closeAtCross? now_bid<=maVal[1]:false) || Buy_Condition_1;

che io usi maVal[1] o maVal[0] la situazione non cambia così tanto, l'ohcl è ancora redditizio mentre ogni tick no.

grazie

 
ugo58:

Senza alcuna informazione su come il tuo EA decide di comprare/vendere è difficile rispondere.

Vediamo nel mercato molte situazioni in cui una barra ha una dimensione molto grande (per esempio su notizie importanti).

Quindi il tester genera fino a 11 tick per tale barra. A seconda della tua logica si comporta in modo molto diverso (solo nei test).

Se tu usassi il tuo EA con denaro reale, sono abbastanza sicuro che sarebbe molto peggio, perché barre così grandi possono avere fino a 200 tick in un minuto.

Presumo che la tua logica agisca sulla barra corrente, dovresti provare la tua logica con i valori della barra precedente.

I migliori auguri

Uwe

Questo non è vero, tester può generare molto più di 11 tick. Vedi questo post.
 
angevoyageur:
Cosa intendi per "risolvere quei tick extra"?

Sono assolutamente d'accordo con ugo58. Le barre grandi possono innescare l'evento OnTick molte volte, mentre le barre piccole lo innescano molto meno.

Questo può avere un impatto sulla vostra strategia di trading automatico, quindi noi sviluppatori dobbiamo cercare soluzioni che mitigano il fatto che il vostro evento OnTick può essere eseguito molte molte volte per barra.

Penso che quello che ho inviato prima sia solo una soluzione. ugo50 ha proposto un'altra soluzione: eseguire la logica OnTick nella barra passata più recente. Comunque, se vuoi eseguire la tua logica OnTick sulla barra corrente forse puoi usare qualcosa di simile a quello che ho mandato prima.

Stiamo cercando di implementare qualcosa come un evento OnBar.

Cosa ne pensi di questo?

 
michelino:

ciao,

cosa intendi usando i valori della barra precedente? usare maVal[1] (dove maVal contiene i valori della media mobile e l'array è impostato come serie) invece di maVal[0]?

o controllare se la condizione è stata verificata durante l'ultima barra e quindi entrare all'apertura di questa barra?

Qui sotto parte del codice del mio semplicissimo EA

che io usi maVal[1] o maVal[0] la situazione non cambia molto, l'ohcl è ancora redditizio mentre ogni tick no.

grazie

C'è ovviamente una grande differenza se il tuo codice usa maVal[1] o maVal[0], o in generale se stai lavorando solo su barra chiusa o su barra aperta o dentro una barra.

Nell'ultimo caso devi usare la modalità Every tick, tutte le altre modalità non sono appropriate.

 
angevoyageur:
Questo non è vero, tester può generare molto più di 11 tick. Vedi questo post.

Grazie. Oh, bene. Una delle cose che ho dovuto reimparare ;)


Come ho detto dipende dalla tua logica.

Ci sono molti modi per risolvere questi problemi, maVal[1]è una delle soluzioni più facili in quanto le medie mobili possono non cambiare così velocemente su ogni barra (a seconda della lunghezza del periodo e del metodo di lisciatura).

Questo potrebbe essere diverso se per esempio dipendete da un alto e un basso di un intervallo di barre.

 
Grazie per condividere... Bello
 
Forse anche questo link è utile,https://www.mql5.com/en/articles/159
"New Bar" Event Handler
"New Bar" Event Handler
  • 2010.10.11
  • Konstantin Gruzdev
  • www.mql5.com
MQL5 programming language is capable of solving problems on a brand new level. Even those tasks, that already have such solutions, thanks to object oriented programming can rise to a higher level. In this article we take a specially simple example of checking new bar on a chart, that was transformed into rather powerful and versatile tool. What tool? Find out in this article.