Discusión sobre el artículo "Experto comercial universal: Indicador CUnIndicator y trabajo con órdenes pendientes (parte 9)"

 

Artículo publicado Experto comercial universal: Indicador CUnIndicator y trabajo con órdenes pendientes (parte 9):

En este artículo se describe el trabajo con indicadores usando la clase universal CUnIndicator. Además de eso, han sido examinados nuevos métodos de trabajo con las órdenes pendientes. Obsérvese, a partir de este momento, la la estructura del proyecto CStrategy ha sufrido cambios considerables. Ahora, todos sus archivos se ubican en el mismo directorio para la comodidad de los usuarios.

Un fragmento de la simulación de la estrategia CIpmulse 2.0 en el Probador de estrategias se muestra en la siguiente captura de pantalla. Ahí se puede observar las órdenes pendientes colocadas y el trabajo con ellas:


Fig. 1. Trabajo con las órdenes pendientes durante la prueba de la estrategia Impulse 2.0

Autor: Vasiliy Sokolov

 

Es simplemente impresionante! Estoy hablando de la envoltura del indicador

Lo único que personalmente echo en falta en su maravilloso Asesor Experto universal es la posibilidad de trabajar en FORTS en una cuenta con muchos Asesores Expertos diferentes, es decir, llevar un seguimiento de las posiciones por Asesores Expertos por arte de magia, no por medios estándar.

Por lo tanto, por el momento estoy usando mis propias soluciones

 
Viktor Vlasenko:

Es simplemente impresionante! Estoy hablando de la envoltura del indicador

La única cosa que personalmente me falta en su maravilloso Asesor Experto universal es la posibilidad de trabajar en FORTS en una cuenta con muchos Asesores Expertos diferentes, es decir, hacer un seguimiento de las posiciones por Asesores Expertos por arte de magia, no por medios estándar.

Por lo tanto, hasta ahora estoy usando mis propias soluciones

Para ello existe HedgeTerminal, cuya API está integrada con el Asesor Experto universal por cierto. Por cierto, el experto universal fue creado originalmente como una envoltura para HedgeTerminal. Pero con el fin de popularizar el motor, lo separé de HT y empecé a desarrollarlo como un proyecto independiente.

 
Vasiliy Sokolov:

Para ello existe HedgeTerminal, cuya API, por cierto, está integrada con el Asesor Experto Universal. Por cierto, el experto universal fue creado originalmente como una envoltura para HedgeTerminal. Pero para popularizar el motor, lo desvinculé de HT y empecé a desarrollarlo como un proyecto independiente.

gracias, leí sobre HedgeTerminal - es redundante para mis necesidades, y no quiero trabajar con la herramienta cerrada de otra persona.

y me gusta mucho el cambio de estructura de archivos-carpetas en la versión actual.

 

¿Qué quiere decir con experto universal? Creo que partimos del hecho de que es tanto para MT4 como para MT5. Pero no está compilado para MT4 y sus librerías están todas en MQL5.

 
void CUnIndicator::PushName(string name)
{
   int old_size = ArraySize(m_params);
   int size = ArrayResize(m_params, ArraySize(m_params) + 1);
   for(int i = 0; i < old_size; i++)
      m_params[i+1] = m_params[i];
   m_params[0].type = TYPE_STRING;
   m_params[0].string_value = name;
}

Sospecho que aquí toda la matriz m_params está obstruida por el primer parámetro que se le aplica

 

void CUnIndicator::PushName(string name)
{
int old_size = ArraySize(m_params);
int size = ArrayResize(m_params, ArraySize(m_params) + 1);
for(int i = 0; i < tamaño_antiguo; i++)
m_params[i+1] = m_params[i];
m_params[0].type = TYPE_STRING;
m_params[0].string_value = name;
m_params_count++;
}

Me parece que debería ser así, atención a m_params_count++; aumentamos el tamaño del array de parámetros pasados, por lo que aumentamos el contador de parámetros pasados, al menos al llamar al indicador sin parámetros funcionaba así. En otros casos, parece que el último parámetro no fue percibido al inicio del indicador.

 

Sí, y en la misma función

For(int i = tamaño_antiguo-1; i >= 0; i--)
m_params[i+1] = m_params[i];

 

Buen artículo.

Cuando se utiliza el método Create de la clase CUnIndicator para un indicador definido por el cliente, ese código tiene una llamada a PushName(), que es una función con errores.

Cuando se crea un indicador definido por el usuario, el primer elemento del MqlParam parameters_array[] debe contener el nombre del indicador personalizado.

Todos los elementos deben moverse una posición a la derecha para liberar el elemento 0 para el nombre del indicador personalizado.

Modifique lo siguiente:

void CUnIndicator::PushName(string name)
{
   int old_size = ArraySize(m_params);
   int size = ArrayResize(m_params, ArraySize(m_params) + 1);
   //for(int i = 0; i < old_size; i++) m_params[i+1] = m_params[i]; // es incorrecto escribirlo así
   for(int i=old_size-1;i>=0;i--) m_params[i+1] = m_params[i]; //Así es.
   m_params[0].type = TYPE_STRING;
   m_params[0].string_value = name; // Nombre personalizado del indicador
   m_params_count++;// Número de parámetros más uno 
}
 
Pregunta al autor: Deme una dirección: ¿cómo hacer que los indicadores llamados vía CUnIndicat sean cargables?
 

Buenos días.

Pregunta al autor: se ha descargado la última versión del motor de negociación adjunto al artículo, se está probando la estrategia adjunta Impluse 2.0.

1. En el probador de estrategias en el modo de visualización, ¿debe funcionar el panel de control de los modos de negociación?

2. ¿Deben ejecutarse los modos de negociación establecidos mediante el método TradeState.SetTradeState?

Cuando se opera en la cuenta, el panel funciona y los modos se cambian, pero en el probador de estrategias no.