Discusión sobre el artículo "Símbolo personalizados: fundamentos de uso en la práctica" - página 5

 
Mr David Frederick Roberts #:

Gracias por la respuesta. Esto es muy extraño, de hecho estoy usando el modo de ticks reales y no era consciente de que hay una opción de spread fijo en MT5 así que estoy seguro de que no (estoy más familiarizado con MT4).No me había dado cuenta de que los diferenciales eran los mismos para cada barra, de hecho, mirando a través del archivo completo parece que sólo cambian en los límites de 1 minuto. Supongo que estoy en lo cierto al pensar que las llamadas a SymbolInfoDouble() deben devolver los precios de la garrapata que se procesa como resultado de la llamada al evento OnTick() - no algún tipo de valor M1?

Intenté imprimir lo que esperaba que fuera el tiempo real del tick con milisegundos usando el código de abajo, pero el valor de los milisegundos es siempre cero...

EDIT: Como he dicho soy relativamente nuevo en MQL5 - Acabo de encontrar SymbolInfoTick(), tal vez debería estar usando que en lugar de lo que estoy haciendo! Voy a probar eso y ver qué pasa ...


Ok, eso no hizo ninguna diferencia, exactamente los mismos resultados, pero ninguno de ellos atando con el cuadro de diálogo "Symbol Ticks" en el terminal. Me equivoqué al decir que el valor de milisegundos era siempre cero - es distinto de cero durante exactamente un minuto, a saber, el minuto antes de la medianoche!

Esto me parece un problema bastante importante. Mi EA de trading espera recibir ticks con precios que coincidan con los datos de tick importados (¡como cualquier otro!). Me atrevo a decir que hay algo que estoy haciendo mal, pero si es así me gustaría saber qué es.He adjuntado un archivo zip con la prueba de EA, una hoja de cálculo de los resultados de la hora a cada lado de la medianoche, y algunas capturas de pantalla de configuración y garrapatas.

Me temo que no está claro cómo se crea el símbolo personalizado. Los archivos csv adjuntos son los mismos (BTW, no sé la razón por la que necesitas dos copias con nombres diferentes), y ambos tienen un formato incorrecto: los archivos de tick deben tener las siguientes columnas para ser importados en MT5 símbolo personalizado: fecha, hora, bid, ask, last, volume. Así que actualmente no es posible crear un símbolo personalizado a partir de tus ticks sin manipulaciones adicionales.

Sería más simple si usted publica imágenes de los ticks importados en MT5 UI y el registro de su EA lado a lado. Las imágenes presentadas anteriormente están incompletas y los ticks se ven diferentes entre las imágenes y en comparación con los archivos csv.

 
Stanislav Korotky #:

Me temo que no está claro cómo creas tu símbolo personalizado. Los archivos csv adjuntos son los mismos (BTW, no sé la razón por la que necesitas dos copias con nombres diferentes), y ambos tienen un formato incorrecto: los archivos de tick deben tener las siguientes columnas para ser importados en MT5 símbolo personalizado: fecha, hora, bid, ask, last, volume. Así que actualmente no es posible crear un símbolo personalizado a partir de tus ticks sin manipulaciones adicionales.

Sería más simple si usted publica imágenes de los ticks importados en MT5 UI y el registro de su EA lado a lado. Las imágenes presentadas anteriormente están incompletas y los ticks se ven diferentes entre las imágenes y en comparación con los archivos csv.

Los datos de los ticks han sido importados a MT5 como un símbolo personalizado de una exportación de mi MT4 'Tick Data Suite' usando datos de Dukascopy (archivos CSV de alrededor de 8GB de tamaño).

Los archivos csv que envié de ninguna manera están destinados a ser importados como datos de tick, son los resultados de mi EA de prueba (que se adjuntó) que está registrando los precios Bid y Ask y el tiempo para cada evento OnTick recibido. Los dos son simplemente derivados por diferentes métodos - uno usando SymbolInfoDouble(...) para obtener los precios Bid y Ask, y el otro usando SymbolInfoTick(...). El hecho de que son los mismos es simplemente probarme a mí mismo que no hay diferencia entre los métodos.

Mi punto es que los precios Bid y Ask y los tiempos en los archivos CSV registrados por el EA de prueba no coinciden con la imagen de los ticks importados en la MT5 UI (que también envié). Así que...

  1. Los tiempos de los ticks en la captura de pantalla de la UI no coinciden con los registrados por el EA de prueba - ¿por qué no?
  2. Los tiempos registrados por el EA de prueba tienen un componente de cero milisegundos excepto durante el minuto antes de medianoche - ¿por qué?
  3. Aunque los precios de compra registrados por el EA de prueba se aproximan a los de la interfaz de usuario de MT5, los precios de venta pueden ser muy diferentes (y de ahí el diferencial), ¿por qué?
  4. Los precios registrados por el EA de prueba dan un spread resultante que parece cambiar sólo en los límites de un minuto - ¿por qué?
  5. El EA de prueba registra menos eventos OnTick que registros de ticks en la interfaz de usuario de MT5, ¿por qué?

Me parece que hay algo que interfiere con los datos de ticks del símbolo personalizado en su camino entre el repositorio y el evento OnTick del EA.

A continuación he intentado alinear, lo más fielmente posible, una parte de los datos registrados por el EA de prueba (izquierda) y la IU MT5 (derecha). Es imposible alinearlos con precisión porque hay menos ticks registrados por el EA que los que existen en la IU MT5. Observe también que el valor en milisegundos registrado por el EA de prueba es cero hasta las 23:59.

El evento resaltado es probablemente el mismo tick pero observe que el EA de prueba registra precios diferentes a los de la UI...

EA registra Bid 1.16504 y Ask 1.16513 (spread = 9)

MT5 UI muestra Bid 1.16504 y Ask 1.16518 (spread = 14)

 
Mr David Frederick Roberts #:


Tienes muchos "por qué", pero es difícil dar una respuesta (sin especulaciones). Hay un problema en tu procedimiento o código fuente.

Lo que podrías hacer es publicar una pequeña parte de 8Gb de historial de ticks, que es fácil de importar a un símbolo personalizado y comprobar tu código.

Normalmente, SymbolInfoTick debería recibir exactamente los mismos ticks (incluyendo milisegundos de tiempo) que ves en la GUI de MT5 para el mismo símbolo personalizado.

Algunos ticks pueden ser omitidos en su EA si toma demasiado tiempo procesar el tick previo. Este "demasiado" puede ser muy corto, porque los ticks pueden venir muy rápidamente. Si desea asegurarse de que todos los ticks están disponibles en la historia, debe llamar a la función CopyTicks para el período desde el anterior tick procesado. Pero este no es el tema que deberías tratar ahora mismo - primero deberías averiguar qué está mal con el enfoque actual.

 
Mr David Frederick Roberts #:

Los datos de tick han sido importados a MT5 como un símbolo personalizado desde una exportación de mi MT4 'Tick Data Suite' usando datos de Dukascopy (archivos CSV de alrededor de 8GB de tamaño).

Los archivos csv que envié de ninguna manera están destinados a ser importados como datos de tick, son las salidas de mi EA de prueba (que se adjuntó) que está registrando los precios Bid y Ask y el tiempo para cada evento OnTick recibido. Los dos son simplemente derivados por diferentes métodos - uno usando SymbolInfoDouble(...) para obtener los precios Bid y Ask, y el otro usando SymbolInfoTick(...). El hecho de que son los mismos es simplemente probarme a mí mismo que no hay diferencia entre los métodos.

Mi punto es que los precios Bid y Ask y los tiempos en los archivos CSV registrados por el EA de prueba no coinciden con la imagen de los ticks importados en la MT5 UI (que también envié). Así que...

  1. Los tiempos de los ticks en la captura de pantalla de la UI no coinciden con los registrados por el EA de prueba - ¿por qué no?
  2. Los tiempos registrados por el EA de prueba tienen un componente de cero milisegundos excepto durante el minuto antes de medianoche - ¿por qué?
  3. Aunque los precios de compra registrados por el EA de prueba se aproximan a los de la interfaz de usuario de MT5, los precios de venta pueden ser muy diferentes (y de ahí el diferencial), ¿por qué?
  4. Los precios registrados por el EA de prueba dan un spread resultante que parece cambiar sólo en los límites de un minuto - ¿por qué?
  5. Hay menos eventos OnTick registrados por el EA de prueba que registros de ticks en la interfaz de usuario de MT5, ¿por qué?

Me parece que hay algo que interfiere con los datos de ticks del símbolo personalizado en su camino entre el repositorio y el evento OnTick del EA.

A continuación he intentado alinear, lo más fielmente posible, una parte de los datos registrados por el EA de prueba (izquierda) y la IU MT5 (derecha). Es imposible alinearlos con precisión porque hay menos ticks registrados por el EA que los que existen en la IU MT5. Observe también que el valor en milisegundos registrado por el EA de prueba es cero hasta las 23:59.

El evento resaltado es probablemente el mismo tick, pero tenga en cuenta que el EA de prueba registra precios diferentes a los de la UI...

EA registra Bid 1.16504 y Ask 1.16513 (spread = 9)

MT5 UI muestra Bid 1.16504 y Ask 1.16518 (spread = 14)

Los ticks que tu EA está recogiendo parecen ser ticks simulados y no ticks reales. Compruebe los registros del Probador de Estrategias.
 
Alain Verleyen #:
Los ticks que recoge tu EA parecen ser ticks simulados y no reales. Compruebe los registros del Probador de Estrategias.

Gracias Alain, estoy totalmente de acuerdo. Los datos de ticks están ahí en la interfaz de usuario, pero en el momento en que llega a la EA parece como si estuviera tomando el primer par Bid / Ask que encuentra y aplica que la propagación de la duración de los próximos minutos - o algo así.

De todos modos he echado un vistazo al log (adjunto) pero no estoy muy seguro de lo que espero ver, así que te agradecería si pudieras echarle un vistazo y ver si puedes ver lo que va mal. También he adjuntado el archivo CSV generado para información.

Muchas gracias, David.

Archivos adjuntos:
 
Mr David Frederick Roberts #:

Gracias Alain, estoy totalmente de acuerdo. Los datos de tick están ahí en la interfaz de usuario, pero en el momento en que llega a la EA parece como si estuviera tomando la primera oferta / demanda par que encuentra y se aplica que la propagación de la duración de los próximos minutos - o algo así.

De todos modos he echado un vistazo al registro (adjunto), pero no estoy muy seguro de lo que espero ver, así que estaría agradecido si pudiera echar un vistazo y ver si se puede ver lo que está pasando mal. También he adjuntado el archivo CSV generado para obtener información.

Muchas gracias, David.

En tu log pone "generando cada tick" lo que significa ticks artificiales. Debería ser "generando en base a ticks reales". Por favor, consulta la documentación del probador.

De nuevo, si quieres que alguien pruebe tu símbolo personalizado, proporciona un archivo CSV compatible, no de tu propio formato.

Strategy Testing - Algorithmic Trading, Trading Robots - MetaTrader 5 Help
Strategy Testing - Algorithmic Trading, Trading Robots - MetaTrader 5 Help
  • www.metatrader5.com
The Strategy Tester allows you to test and optimize trading strategies ( Expert Advisors ) before using them for live trading. During testing, an...
 
Stanislav Korotky #:

Tu registro dice "generando cada tick" lo que significa ticks artificiales. Debería ser "generando en base a ticks reales". Por favor, consulte la documentación de pruebas.

Una vez más, si desea que alguien más pruebe su símbolo personalizado, proporcione un archivo CSV compatible, no de su propio formato.

Gracias Stanislav, agradezco la ayuda de todos pero no consigo nada.

He revisado la documentación y no puedo encontrar nada que me diga por qué el probador generaría ticks artificiales cuando tiene un conjunto completo de datos de ticks disponibles. De hecho, dice...

Pruebas y optimización en ticks reales son lo más cercano a las condiciones reales como sea posible. En lugar de ticks generados basados en datos de minutos, es posible utilizar ticks reales acumulados por un broker. Se trata de ticks de bolsas y proveedores de liquidez.

Repito que los archivos CSV son la salida de mi EA de prueba que simplemente está escribiendo los precios de los ticks que recibe y no tienen nada que ver con los datos de ticks que he importado en el símbolo personalizado - por lo que su formato es completamente irrelevante.

Ok, lo que he hecho...

  1. Exportar los datos de tick del EURUSD desde mi MT4 "Tick Data Suite" en formato MT5 ( Tick Data Suite (eareview.net)) lo que genera un enorme archivo CSV (captura de pantalla de abajo).
  2. Importado ese archivo a un símbolo personalizado en MT5 que he llamado EURUSD_TDS.
  3. Tomado una captura de pantalla de una parte de las garrapatas resultantes como se ve en la interfaz de usuario MT5.
  4. Escribí un EA de prueba que simplemente escribe el precio Bid & Ask y el tiempo en cada llamada OnTick() a un archivo CSV (¡debería haberlo llamado archivo TXT!).
  5. Ejecute el EA de prueba en EURUSD_TDSutilizando la configuración que se muestra en la captura de pantalla que proporcioné en el archivo ZIP.
  6. Comparé los resultados en el archivo con los ticks en el MT5 UI para las mismas fechas - no coinciden.
  7. Busqué ayuda para saber por qué no coinciden.
  8. Descubrí que aparentemente el tester está generando ticks artificiales - pero no avancé más.



Tick Data Suite
  • eareview.net
Everything you need to make your Metatrader 4 backtests accurate, get 99% modeling quality and to immediately spot which expert advisor is worth your time. From download to backtest, everything has been streamlined in an easy-to-use format. Updated often and offering premium-level support, the Tick Data Suite also has an associated recurring...
 
Mr David Frederick Roberts #: He revisado la documentación y no encuentro nada que me indique por qué el probador generaría ticks artificiales cuando tiene un conjunto completo de datos de ticks disponibles. De hecho, dice...

Porque no ha seleccionado"Cada tick basado en ticks reales " en la configuración del probador:


 
Andrey Khatimlianskii #:

También me he encontrado con "HistoryCache: error de lectura de cabecera de contenedor [0]" seguido de "HistoryBase: se ha encontrado un contenedor no válido (1970.01.01)".

Esto elimina el historial de enero de 2022 del historial de la herramienta personalizada, obteniendo un hueco desde el 31 de diciembre hasta hoy.

Ocurre sólo en 2 ordenadores, los recursos son suficientes.

@Slava, ¿qué detalles necesitas para la reproducción?

Ha vuelto a ocurrir. Al pasar por medianoche, parece:

FK      3       23:59:27.790    HistoryCache    'BTCUSDT.bnf' container header read error [0]
PR      3       23:59:27.790    HistoryBase     'BTCUSDT.bnf' invalid container (1970.01.01) found (off: 3144282240, size: 86589, file: 1925419658)
HQ      3       23:59:28.071    HistoryCache    'LUNAUSDT.bnf' container header read error [0]
HD      3       23:59:28.071    HistoryBase     'LUNAUSDT.bnf' invalid container (1970.01.01) found (off: 3144242580, size: 86589, file: 1925434658)
RK      3       23:59:28.344    HistoryCache    'MANAUSDT.bnf' container header read error [0]
EJ      3       23:59:28.344    HistoryBase     'MANAUSDT.bnf' invalid container (1970.01.01) found (off: 3144247980, size: 86589, file: 1925447087)
CD      3       23:59:28.633    HistoryCache    'ATOMUSDT.bnf' container header read error [0]
KQ      3       23:59:28.633    HistoryBase     'ATOMUSDT.bnf' invalid container (1970.01.01) found (off: 3144177171, size: 86589, file: 1925399738)
HN      0       00:14:15.224    Terminal        MetaTrader 5 x64 build 3210 started for MetaQuotes Software Corp.
NS      0       00:14:15.225    Terminal        Windows 10 build 17763, 20 x Intel Xeon  E5-2650 v3 @ 2.30 GHz, 12 / 15 Gb memory, 53 / 111 Gb disk, admin, GMT+3

¿Por dónde cavar?

 
Fernando Carreiro #:

Porque no ha seleccionado"Cada tick basado en ticks reales " en la configuración del probador:


Aa, por fin :-)

Gracias Fernando, sospechaba que era algo estúpido lo que estaba haciendo pero simplemente no lo veía. Como ya he dicho estoy mucho más familiarizado con MT4 (unos 8 años) y no me había dado cuenta de que había dos opciones de "£Every Tick" en MT5. Simplemente la puse en marcha, vi que estaba en "Every Tick" y supuse que si tenía ticks reales los usaría.

Tenía que ser algo sencillo y te agradezco de nuevo que lo hayas detectado.

David.