Indicar una nueva barra - página 4

 
Donald Gibson:

¿MQL4 mejorado?

Nunca he oído hablar de eso.


Yo tampoco desde ayer ;) Y el nombre correcto parece ser "MQL4 actualizado". MQ escribe:

(..) A partir de la compilación 600, el lenguaje de programación MQL4 ha sido completamente revisado alcanzando el nivel de MQL5- ahora usted puede desarrollar robots comerciales en MQL4/5 utilizando el entorno de desarrollo unificado MetaEditor, estilo único, bibliotecas y herramientas de depuración.

(...) Por lo tanto, hemos decidido implementar en él la máxima cantidad posible de funciones y características del lenguaje MQL5 preservando completamente la funcionalidad de MQL4. En otras palabras, todas las potentes funciones de MQL5, incluyendo ООP y el compilador de código nativo, estarán disponibles en MQL4. (...)

Para conseguirlo, hemos desarrollado un compilador unificado que soporta automáticamente los lenguajes MQL4 y MQL5. (...)

El problema en la definición es la palabra "lenguajes". El lenguaje es MQL, igual que C++ es un lenguaje y Basic es un lenguaje. Updated-MQL4/MQL5 son sólo mods de MQL específicos para cada plataforma, ni más ni menos, por lo que la comparación de MQL4 (nativo) y Updated-MQL4 es prácticamente la misma que con C y C++. Y la migración de MQL4.com a MQL5.com acaba de hacer la confusión perfecta. Como demuestran estos mensajes, la mayoría de la gente no asocia la OOP con MQL4, al igual que yo. Para mí siempre fue MQL5 que soporta ambas plataformas, MT4 y MT5.

Pero de todos modos, funciona bastante bien y MQLWhatever es de lejos la mejor interfaz en comparación con todas las otras cosas de mierda alrededor.

 

@Lorentzos Roussos

Alain can correct me on this but you may find gaps in instances where on the time horizon of a bar there where no ticks , so no bar will be in place

Upppsss ... No he visto tanta labia. (Que no significa nada).

Yo uso mi "NewBar-indicator" para sacar los stopps automáticamente en el alto o bajo de la barra anterior.

(De hecho, es un poco más difícil, ya que considero "Innenstaebe y Aussenstaebe" (eng. "movimientos interiores y exteriores" ???). Ni idea de cuál es la traducción correcta.

Pero voy a utilizar esto sólo en los mercados líquidos que tienen al menos veinte - hasta algunos cientos de ticks por minuto.

No creo que encuentre un periodo de diez minutos sin ningún tick.

De todos modos, el programa debe ser capaz de manejar esto.

¡Gracias!

Willbur

 
Willbur:

@Lorentzos Roussos

Upppsss ... No he visto tanta labia. (Que no significa nada).

Yo uso mi "NewBar-indicator" para sacar los stopps automáticamente en el alto o bajo de la barra anterior.

(De hecho, es un poco más difícil, ya que considero "Innenstaebe y Aussenstaebe" (eng. "movimientos interiores y exteriores" ???). Ni idea de cuál es la traducción correcta.

Pero voy a utilizar esto sólo en los mercados líquidos que tienen al menos veinte - hasta algunos cientos de ticks por minuto.

No creo que encuentre un periodo de diez minutos sin ningún tick.

De todos modos, el programa debe ser capaz de manejar esto.

¡Gracias!

Willbur

si usas iTime, si no hay una nueva barra no se disparará de todos modos.
 
usted está usando iTime , si no hay una nueva barra que no se dispara anyway.you son seguros <br / translate="no">

¿Qué quieres decir con que "estás usando iTime"? He entendido que "iTime" es sólo una variable en tu programa - puedes llamarla "Bert" o "Clarly" si quieres?

- - - - -

Hoy he hecho algunas pruebas. Y me encontré con algunas de las brechas que usted ha mencionado.

Por ejemplo, S&P500 a las 20:34 hay una barra, para las 20:35 y 20:36 no tengo ticks ni barras del servidor (ActiveTrades). Los siguientes ticks llegaron a las 20:37.

Posteriormente no hay barras en el gráfico para estos períodos. (ver gráfico M1 adjunto)

No lo he comprobado, pero creo que tampoco hay barras en la función CopyRates() para esta hora.



Creo, que debería revisar su código en este punto.

Supongo, que va a indicar los tres primeros tick de la barra de 20:37 como nuevas barras.

(TimeCurrent() salta de las 20:34 a las 20:37¡ Tienes que añadir PeriodeSeconds() tres veces para llegar allí).

void OnTick()  
{
//---   if(TimeCurrent()>=projection)   
    {Print("New Bar "+TimeToString(projection,TIME_DATE|TIME_MINUTES));   
     projection=projection+PeriodSeconds();   
    }

Willbur


 

Hola a todos,

En caso de que alguien siga buscando... aquí hay un fragmento de mi código para asegurar que sólo se abra una operación por barra.

  if (iBars(Symbol(),0) == BarsCurr)DisableTrading = 1;
  
  for(i=0;i<OrdersTotal();i++)
  {
  if (OrderSelect (i,SELECT_BY_POS,MODE_TRADES) == True && OrderMagicNumber() == MagicNumber) DisableTrading = 1;
  }

  for(i=OrdersTotal();i>0;i--)
  {
  if (OrderSelect (i,SELECT_BY_POS,MODE_HISTORY) == True && OrderMagicNumber() == MagicNumber)
  {
  if ((OrderClosePrice() >= Open[0] && OrderClosePrice() <= Close[0]) && (OrderOpenPrice() >= Open[0] && OrderOpenPrice()<= Close[0]))
  {
  DisableTrading = 1;
  }
   }
      }

El ibars se puede sustituir por bars y el disabletrading = 1 significa no hacer nada. La parte de las barras se puede entender mejor usando lo que se publica normalmente. Ponga BarsCurr = 0 en la parte de inicialización y BarsCurr = Bars en la parte de la orden de compra/venta de su código.

Sin embargo tengo un problema, estoy tratando de implementar la orden de cierre por inversión de señal... ¿alguna idea?

 

Como el debate sobre el reconocimiento de los NewBars se ha alargado un poco, resumiré los resultados en breve.

Entorno técnico:

Si el servidor detecta un cambio (nueva operación o nueva determinación del precio), el servidor envía una señal al terminal. El programa del terminal activa la rutina OnTick ().

Con esta señal obtenemos la siguiente información

Hora actual () - la hora del servidor cuando se ha enviado el tick.

Información sobre el último tick - SymbolInfoTick()
- Hora del servidor cuando se ha producido el tick
- Compra
- Oferta
- Último precio (no con todos los proveedores)
- una bandera que indica lo que se ha cambiado.

Información sobre la barra actual
- CopyRates()
- nombre de la barra, por ejemplo, "10:20:00".
- Apertura-Alto-Bajo-Cierre

Reconocimiento de una nueva barra (ej. Periodo = M1)

Porque el servidor sólo envía una señal si algo ha cambiado,
las barras con el nombre "hh.mm:00" pueden aparecer más tarde que "hh:mm:00"

Esto puede provocar situaciones especiales para los símbolos con poca liquidez.

Las soluciones que se ocupan de la duración del periodo no detectan esto:

TimeCurrent() bars "nombre"
Último Tick 10:10:07 10.10:00
Siguiente Tick 10:11:30 10:11:00

No con esto (Cero ticks en un periodo):

TimeCurrent() barras "nombre"
Último Tick 10:10:30 10:10:00
Siguiente Tick 10:13:40 10:13:00 ¡La barra de las 10:12:00 no está!

En muy raras ocasiones he visto situaciones (¿durante una carga muy alta en el servidor?) en las que la hora del servidor ya está cambiada al siguiente periodo mientras que las barras no lo están.

TimeCurrent() barras "nombre"
Último Tick 10:10:00 10:09:00
Siguiente Tick 10:10:00 10:10:00

Conclusión:

Está bien ir con el TimeCurrent() para suprimir el CopyRates() innecesario.

Una vez que el TimeCurent() alcanza el nuevo período hay que comprobar si la barra también se conmuta.

Esto me lleva de nuevo al código que Alain trajo a la discusión muy temprano:

https://www.mql5.com/en/forum/22983

Willbur

Improve your time execution by removing Bars function calls
Improve your time execution by removing Bars function calls
  • www.mql5.com
After a basic profiling I get the following results :.
 

@emeka Mbanefo

mi manual no menciona una función llamada "iBars".

¿Estás seguro de que se trata de código MQL5?

Willbur

 
Willbur:

@emeka Mbanefo

mi manual no menciona una función llamada "iBars".

¿Estás seguro de que este es el código MQL5?

Willbur

Ah, no es para mql5, es para mql4, creo. De todas formas, lo de iBars es cosa mía. Es una función general, como he dicho anteriormente.

Todavía estoy esperando ayuda con el código de inversión de la señal.

Gracias.

 
emeka Mbanefo:

Ah, no es para mql5. Es para mql4, creo. Aún así, el iBars soy yo jugando. Sus barras como una función general, como he dicho anteriormente.

Todavía estoy esperando ayuda con el código de inversión de la señal.

Gracias.

  • Por favor, no secuestrar otro tema con contenido no relacionado.
  • Este tema es sobre mql5, como ya se dijo.
  • Este tema es sobre la detección de una nueva barra, no el comercio sólo una vez por barra.
  • iBars no es fiable para detectar una nueva barra.
Indicate a new bar
Indicate a new bar
  • www.mql5.com
Another idea could be the check wether the number of bars has been incremented.