1minuto OHLC vs cada tick - resultados opuestos

 

El EA y los parámetros de entrada son exactamente los mismos pero en el caso de 1min ohlc obtengo 50000 de beneficio mientras que en cada tick obtengo -7000 de pérdidas.

esto sucede en muchos pares probando en un periodo de 2 años 0811-0813

¿alguien ha tenido el mismo problema? No entiendo cuál es el problema aquí y qué debo hacer cuando el comercio de dinero real.

ambos gráficos a continuación

1minuto OHLC

1minuto ohlc

cada tick

cada tictac

 

Sin ninguna información sobre cómo su EA decide comprar/vender es difícil de responder.

Vemos en el mercado muchas situaciones en las que una barra tiene un tamaño muy grande (por ejemplo en noticias importantes ).

Entonces el probador genera hasta 11 ticks para tal barra. Dependiendo de su lógica actúa muy diferente (sólo en las pruebas).

Si usted utiliza su EA con dinero real, estoy seguro de que será mucho peor, ya que tales barras grandes pueden tener hasta 200 ticks en un minuto.

Supongo que tu lógica actúa sobre la barra actual, deberías probar tu lógica con los valores de la barra anterior.

Un saludo

Uwe

 
ugo58:

Sin ninguna información sobre cómo su EA decide comprar/vender es difícil de responder.

Vemos en el mercado muchas situaciones en las que una barra tiene un tamaño muy grande (por ejemplo en noticias importantes).

Entonces el probador genera hasta 11 ticks para tal barra. Dependiendo de su lógica actúa muy diferente (sólo en las pruebas).

Si usted utiliza su EA con dinero real, estoy seguro de que será mucho peor, ya que tales barras grandes pueden tener hasta 200 ticks en un minuto.

Supongo que tu lógica actúa sobre la barra actual, deberías probar tu lógica con los valores de la barra anterior.

Un saludo

Uwe

Te envío ahora un truco para que sólo haya "ticks" en una barra. Solo tienes que poner esta lógica al principio del tick. Si la barra no es nueva entonces sale...

¿En qué situaciones crees que puede funcionar bien este truco?

   //--- 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;

¿Qué recomendarías también para solucionar esos ticks de más? ¿Hay algún artículo que lo explique? Gracias.

 
laplacianlab:

Ahora mando un truco para que solo se haga el "tic" en una barra. Solo tienes que poner esta lógica al principio del tick. Si la barra no es nueva entonces sale...

¿En qué situaciones crees que puede funcionar bien este truco?

¿Qué recomendarías también para solucionar esos ticks de más? ¿Hay algún artículo que lo explique? Gracias.

¿A qué te refieres con "para solucionar esos ticks de más"?
 
ugo58:

Sin ninguna información sobre cómo su EA decide comprar/vender es difícil de responder.

Vemos en el mercado muchas situaciones en las que una barra tiene un tamaño muy grande (por ejemplo en noticias importantes).

Entonces el probador genera hasta 11 ticks para tal barra. Dependiendo de su lógica actúa muy diferente (sólo en las pruebas).

Si usted utiliza su EA con dinero real, estoy seguro de que será mucho peor, ya que tales barras grandes pueden tener hasta 200 ticks en un minuto.

Supongo que tu lógica actúa sobre la barra actual, deberías probar tu lógica con los valores de la barra anterior.

Un saludo

Uwe

Hola,

¿a qué te refieres con los valores de la barra anterior? ¿usar maVal[1] (donde maVal contiene los valores de la media móvil y el array se establece como serie) en lugar de maVal[0]?

¿o comprobar si la condición se ha verificado durante la última barra y así entrar en la apertura de esta barra?

A continuación parte del código de mi EA muy simple

 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;

si uso maVal[1] o maVal[0] la situación no cambia mucho, el ohcl sigue siendo rentable mientras que cada tick no lo es.

gracias

 
ugo58:

Sin ninguna información sobre cómo su EA decide comprar/vender es difícil de responder.

Vemos en el mercado muchas situaciones en las que una barra tiene un tamaño muy grande (por ejemplo en noticias importantes).

Entonces el probador genera hasta 11 ticks para tal barra. Dependiendo de su lógica actúa muy diferente (sólo en las pruebas).

Si usted utiliza su EA con dinero real, estoy seguro de que será mucho peor, ya que tales barras grandes pueden tener hasta 200 ticks en un minuto.

Supongo que tu lógica actúa sobre la barra actual, deberías probar tu lógica con los valores de la barra anterior.

Un saludo

Uwe

Esto no es cierto, el probador puede generar mucho más de 11 ticks. Ver este post.
 
angevoyageur:
¿A qué te refieres con "resolver esos ticks extra"?

Estoy totalmente de acuerdo con ugo58. Las barras grandes pueden disparar el evento OnTick muchas veces, mientras que las barras pequeñas lo harán mucho menos.

Esto puede tener un impacto en tu estrategia de trading automatizado, por lo que los desarrolladores tenemos que buscar soluciones que mitiguen el hecho de que tu evento OnTick pueda ser ejecutado muchas muchas veces por barra.

Creo que lo que envié antes es sólo una solución. ugo50 propuso otra solución: ejecutar tu lógica OnTick en la barra pasada más reciente. De todos modos, si usted quiere ejecutar su lógica OnTick en la barra actual tal vez usted puede utilizar algo similar a lo que envié antes.

Estamos tratando de implementar algo como un evento OnBar.

¿Qué opinas de esto?

 
michelino:

Hola,

¿a qué te refieres con usar los valores de la barra anterior? ¿usar maVal[1] (donde maVal contiene los valores de la media móvil y el array se establece como serie) en lugar de maVal[0]?

¿o comprobar si la condición se ha verificado durante la última barra y así entrar en la apertura de esta barra?

A continuación parte del código de mi EA muy simple

si uso maVal[1] o maVal[0] la situación no cambia mucho, el ohcl sigue siendo rentable mientras que cada tick no lo es.

gracias

Obviamente hay una gran diferencia si tu código usa maVal[1] o maVal[0], o en general si estás trabajando en barra cerrada solamente o en barra abierta o dentro de una barra.

En el último caso necesitas usar el modo Every tick, todos los demás modos no son apropiados.

 
angevoyageur:
Esto no es cierto, el probador puede generar mucho más de 11 ticks. Ver este post.

Gracias. Oh, bueno. Una de las cosas que tuve que reaprender ;)


Como dije, depende de su lógica.

Hay muchas maneras de resolver estos problemas, maVal[1]es una de las soluciones más fáciles, ya que las medias móviles pueden no cambiar tan rápido en cada barra (dependiendo de la longitud del período y el método de suavizado).

Eso podría ser diferente si por ejemplo usted depende de un alto y un bajo de un rango de barras.

 
Gracias por compartir... Nice
 
Tal vez este enlace también sea útil,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.