Discusión sobre el artículo "Cómo transferir los cálculos de cualquier indicador al código de un asesor experto"

 

Artículo publicado Cómo transferir los cálculos de cualquier indicador al código de un asesor experto:

Las razones para transferir el código de un indicador a un asesor pueden ser muchas. ¿Cómo valorar las ventajas y desventajas de este enfoque? En este artículo ofrecemos una tecnología para transferir el código del indicador a un asesor. Asimismo, se han realizado varios experimentos para evaluar la velocidad de funcionamiento del asesor.

Los resultados de la simulación han demostrado un ahorro significativo de tiempo al usar los cálculos dentro del asesor. En lo que respecta al consumo de tiempo, la más costosa ha sido la obtención de datos de un indicador personalizado.


Preste atención: en el experimento se ha calculado una MA al precio de cierre. Los cálculos de este indicador son bastante sencillos. Así que surge la siguiente pregunta: ¿cómo cambiará la situación si los cálculos se vuelven más complicados? Lo descubriremos después de otro experimento.

Autor: Dmitriy Gizlyk

 

Gracias, bien hecho.

bool CIndicator::LoadHistory(void)
  {
   datetime cur_date=(datetime)SeriesInfoInteger(m_Symbol,m_Timeframe,SERIES_LASTBAR_DATE);
   if(m_last_load>=cur_date && ArraySize(m_source_data)>=m_history_len)
      return true;

De este código resulta que no habrá recálculo en los ticks. Sólo en la aparición de nuevas barras. ¿O no he entendido bien la implementación?

 
fxsaber:

Gracias, bien hecho.

De este código resulta que no habrá recálculo en los ticks. Sólo en la aparición de nuevas barras. ¿O no he entendido bien la implementación?

Sí, el artículo dice directamente que el cálculo se hace en velas cerradas. Para calcular en cada tick, hay que quitar del código la comprobación de apertura de una nueva barra y copiar el histórico desde la barra "0", no desde la "1", como es ahora.
 
Dmitriy Gizlyk:
Sí, el artículo dice de entrada que el cálculo se basa en velas cerradas. Para calcular en cada tick, es necesario eliminar del código la comprobación de apertura de nueva barra y copiar el historial desde la barra "0", no desde la "1", como es ahora.

Es una pena que no hayan hecho la comparación en modo tick.

Como añadido, en este modo no podemos prescindir de CopyTicks en la implementación para que los "indicadores" funcionen correctamente.

 
fxsaber:

Lástima que no hayan hecho la comparación en potic.

Como añadido, en este modo no se puede prescindir de CopyTicks en la implementación para que los "indicadores" funcionen correctamente.

No se de que indicador estamos hablando. Pero normalmente los indicadores funcionan por precios de barra y redibujan la última barra. En este caso, no puedes cargar CopyTicks, sino utilizar la misma carga de datos históricos. Sin embargo, en este caso tendrá que añadir el recálculo del último valor en la clase.

 
Dmitriy Gizlyk:

No sé de qué indicador estamos hablando. Pero normalmente los indicadores trabajan sobre precios de barra y redibujan la última barra. En este caso, no se puede cargar CopyTicks, pero el uso de la misma carga de datos históricos. Sin embargo, en este caso tendrá que añadir el recálculo del último valor en la clase.

El indicador incorporado en el Asesor Experto se saltará los ticks. Para evitar que esto suceda, necesitamos CopyTicks para obtener los ticks entre las llamadas vecinas OnTick, OnTimer, etc.

De lo contrario, puede perder seriamente la información

órdenes de trading frecuentes (varias veces por minuto) y 100 ms de ping en modo estándar de operación pierde ~5% de ticks.

 
fxsaber:

El indicador incorporado en el EA se saltará los ticks. Para evitar que esto suceda, necesitamos CopyTicks para obtener los ticks entre las llamadas vecinas OnTick, OnTimer, etc.

De lo contrario, puede perder seriamente la información

Sí, hay un gran riesgo de perder información de ticks. Pero la cuestión es el valor de esta información para la estrategia. Después de todo, un indicador habitual (como el presentado en el artículo) calcula barras, no ticks. Y al final, sólo se utilizan los datos finales de las velas, los ticks intermedios simplemente se "sobrescriben". Otra pregunta es si guarda y utiliza la información de los ticks en su indicador, es decir, construye el indicador no por barras, sino por ticks.

 

Hola, gracias por su artículo.

Usted escribe: "Al principio del código del indicador, se declaran arrays-buffers para el intercambio de datos con otros programas. Estas matrices son series temporales, y sus elementos tienen una conexión con las barras de precios. Esta conexión es soportada directamente por el terminal. El indicador guarda los resultados de los cálculos en estas matrices, sin preocuparse de cambiar su tamaño y de transferir los datos cuando aparece una nueva vela. No existen tales matrices en el Asesor Experto, lo que significa que al transferir el código del indicador al Asesor Experto, será necesario crearlas. Además de la parte de cálculo en sí, es necesario organizar la conexión entre los elementos de la matriz y las barras en el gráfico ".

Desafortunadamente, en los ejemplos de prueba es la organización de la conexión entre los elementos de la matriz y las barras en el gráfico lo que no está claro y no es visible, todo lo demás está claro. ¿Cómo organizar y ver exactamente los puntos (o símbolos) necesarios en el gráfico? Me gustaría aclarar este punto. ¡¡¡Gracias de nuevo!!!

 
Estaba buscando algo así. Muchas gracias. Excelente artículo.
 
IuriiPrugov:

Hola, gracias por su artículo.

Usted escribe: "Al principio del código del indicador, se declaran arrays-buffers para el intercambio de datos con otros programas. Estas matrices son series temporales, y sus elementos tienen una conexión con las barras de precios. Esta conexión es soportada directamente por el terminal. El indicador guarda los resultados de los cálculos en estas matrices, sin preocuparse de cambiar su tamaño y de transferir los datos cuando aparece una nueva vela. No existen tales matrices en el Asesor Experto, lo que significa que al transferir el código del indicador al Asesor Experto, tendrá que crearlas. Además de la parte de cálculo en sí, es necesario organizar la conexión entre los elementos de la matriz y las barras en el gráfico.

Desafortunadamente, en los ejemplos de prueba, la organización de la conexión entre los elementos de la matriz y las barras en el gráfico no es clara ni visible, todo lo demás está claro. ¿Cómo organizar y ver exactamente los puntos (o símbolos) necesarios en el gráfico? Me gustaría aclarar este punto. ¡¡¡Gracias de nuevo!!!

Buenos días, Yuri.
En primer lugar, pido disculpas por el retraso en la respuesta. En MQL, cuando se accede a series temporales, se acostumbra a considerar la barra actual con el índice "0", y los datos históricos van con índice creciente. Puede leer más sobre esto en la documentación en el enlace. Un enfoque similar se organizó al acceder a los datos calculados del indicador. Es decir, en cualquier momento al acceder a los datos de la última vela cerrada se especifica el índice "1".

 

Hola, en primer lugar enhorabuena por su artículo.

Tengo una pregunta simple.

En un artículo, se utilizó un indicador con un solo búfer. ¿Cómo hacer para los indicadores con más de 1 búfer? ¿Necesitamos crear una clase CArrayBuffer para cada indicador?

¿Tienes algún ejemplo?

Gracias