Discusión sobre el artículo "Experto comercial universal: Los modos comerciales de las estrategias (Parte 1)"

 

Artículo publicado Experto comercial universal: Los modos comerciales de las estrategias (Parte 1):

Cada escritor de expertos, independientemente de su nivel de preparación, se encuentra todos los días con las mismas tareas comerciales y problemas algorítmicos, que debe resolver de una forma u otra para organizar un proceso comercial fiable. Este artículo describe las capacidades del motor comercial CStrategy, capaz de ocuparse de la resolución de estas tareas y de proporcionar al usuario mecanismos cómodos para describir sus ideas sobre trading.

Las tareas que surgen durante la implementación de un algoritmo de comercio automático, son diversas. Se trata tanto del análisis del entorno y la obtención de señales en la entrada en el mercado, como del cierre de una posición ya existente. Comprende igualmente el control de la corrección de las acciones realizadas por el experto y el procesamiento adecuado de los errores comerciales. Y al fin, se trata también del acceso cómodo y sencillo a los datos del mercado y a las posiciones comerciales del propio experto. Todas estas tareas se implementan directamente en el código fuente del asesor.

Por otra parte, es conveniente separar la realización técnica del proceso comercial, y la propia idea implementada en el asesor de usuario. Gracias el enfoque orientado a objetos, se pueden separar estas dos tareas, distintas en esencia, y delegar la cobertura del proceso comercial en una clase especial común para todas las estrategias, a veces conocida también como motor comercial.

Este artículo inaugura una serie dedicada a la descripción del funcionamiento de uno de esos motores, que podemos llamar de manera convencional "Experto universal". Este nombre une un conjunto de clases que permiten escribir algoritmos comerciales con un sencillo método: una enumeración normal de las condiciones de entrada y salida de la posición. Además, no resulta imprescindible proporcionar a su experto los datos necesarios y una lógica comercial parecida a la iteración de posiciones, todo esto lo hará por usted el motor comercial.

Modos comerciales de la estrategia

Con mucha frecuencia, debemos limitar al experto en sus acciones comerciales. El ejemplo más claro de ello es prohibir al experto realizar operaciones cortas, o al revés, largas. En MetaTrader 4 se dispone de un interruptor estándar para tales modos. Se encuentra directamente en la pestaña de la ventana de propiedades del experto que aparece al iniciarse:

Fig. 2. Modos de comercio en MetaTrader 4

Fig. 2. Modos de comercio en MetaTrader 4

Sin embargo, la cantidad de modos puede ser mayor. Además, pueden usarse instrumentos más flexibles para configurar estos modos. Por ejemplo, en ciertos expertos, es necesario detener temporalmente el comercio en determinados momentos. Supongamos que durante la sesión del Pacífico en el mercado Forex, un asesor experto debe ignorar la llegada de nuevas señales a la entrada en la posición. Este enfoque es un método clásico de limitación del asesor experto en los momentos de poca volatilidad en el mercado Forex. ¿Cómo organizar mejor este modo de comercio y hacerlo a la vez opcional? De nuevo la organización de cuatro bloques de la lógica comercial nos ayudará mucho.

Autor: Vasiliy Sokolov

 

Lógico, interesante...pero hace tiempo que renuncié a funciones innecesarias en los Asesores Expertos (horarios, noticias y otras cosas externas).

Hay una solución más bonita - es más conveniente establecer el modo del Asesor Experto a través de variables terminales. Varios nombres de variables se dan en los parámetros del Asesor Experto, y utiliza sus valores para orientarse.

 
Maxim Kuznetsov:

Lógico, interesante...pero hace tiempo que renuncié a funciones innecesarias en los Asesores Expertos (horarios, noticias y otras cosas externas).

Hay una solución más bonita - es más conveniente establecer el modo del Asesor Experto a través de variables terminales. Varios nombres de variables se dan en los parámetros del Asesor Experto, y éste utiliza sus valores para orientarse.

La idea es ocultar estos trucos dentro de módulos auxiliares. El usuario hace una descripción formal del TS, y el motor de negociación hace todo lo demás por él.

Por cierto, los "modos de negociación" son sólo una consecuencia de la organización propuesta de la lógica del EA. Si describe la lógica de negociación de un EA mediante cuatro acciones, los modos de negociación aparecerán por sí solos. Si aprende a escribir un EA utilizando estas cuatro acciones, la velocidad de escritura de un Asesor Experto aumenta varias veces y el número de errores tiende a cero - se ha probado muchas veces.

 
Vasiliy Sokolov:

La idea es ocultar estos trucos dentro de módulos auxiliares. El usuario hace una descripción formal del EA, y el motor de negociación hace el resto por él.

Por cierto, los "modos de negociación" son sólo una consecuencia de la organización propuesta de la lógica del EA. Si describe la lógica de negociación de un EA con cuatro acciones, los modos de negociación aparecerán por sí solos. Si aprendes a escribir un TS con la ayuda de estas cuatro acciones, la velocidad de escritura del EA aumenta varias veces y el número de errores tiende a cero - se ha probado muchas veces.

El hecho de que los modos de negociación aparecen es innegable. Pero es mejor establecer estos modos desde el exterior, en general, por medios externos. De esta forma, el EA "deja" código innecesario, se mire por donde se mire, y se come recursos (computacionales, de desarrollo, de soporte, etc.). Pero en lugar de un EA tienes una especie de "centro comercial", donde puedes controlar varios búhos desde un mismo mando a distancia.
 
Maxim Kuznetsov:
Es innegable que aparecen modos de comercio. Pero es mejor configurar estos modos desde fuera, por medios externos. De esta forma, el EA "deja" código innecesario, se mire por donde se mire, y se come recursos (computacionales, de desarrollo, de soporte, etc.). Pero en lugar de un EA tienes una especie de "centro comercial", donde puedes controlar varios búhos desde un mando a distancia.

En general, se configuran desde el exterior. Usted puede, por ejemplo, crear una forma visual de los modos de negociación. Se puede hacer incluso en Win32. También es posible colocar los modos de comercio como parámetros. El motor en sí no posee modos de comercio. Y gracias a esto, se logra lo que usted escribe: la independencia de la estrategia de los complementos y extensiones - se pueden utilizar o no, son simplemente escrito y descrito, y se puede utilizar si es necesario.

 
La idea me ha parecido muy interesante, seguiré leyendo. Gracias por el artículo.
 
Maxim Kuznetsov:
Es innegable que aparecen modos de comercio. Pero es mejor establecer estos modos externamente, por medios externos. De esta forma, el EA "deja" código innecesario, se mire por donde se mire, y se come recursos (computacionales, de desarrollo, de soporte, etc.). Pero en lugar de un EA tienes una especie de "complejo de trading", donde puedes controlar varios búhos desde un mando a distancia.

¿Qué te hace pensar que es mejor? ¡Tu enfoque es repugnante! Dime más sobre lo realista que eres y que no utilizas un tester.

Tienes un montón de funciones que determinan el resultado del trabajo del EA, pero que no se pueden comprobar en el tester.

Todo lo que cambia el trabajo del EA debe ser regulado a través de la ventana de propiedades del EA.

 

Gran artículo, ¿dónde está el seguimiento? ¡Date prisa y tradúcelo!


 

Acabo de empezar a entenderlo. Me gustaría una descripción de la estrategia XML - lo que hay donde. Y al menos algún archivo XML. IMHO, que falta en el archivo.

Gracias.

 
Yuriy Asaulenko:

Acabo de empezar a entenderlo. Me gustaría una descripción de la estrategia XML - lo que hay donde. Y al menos algún archivo XML. IMHO, que falta en el archivo.

Gracias.

Ejemplo de serialización XML de estrategias:

<Global>
        <Strategies>
                <Strategy Name="MovingAverage" Magic="100" Timeframe="PERIOD_M1" Symbol="Si">
                        <TradeStateStart> Stop</TradeStateStart>
                        <Params>
                                <FastMA> 1</FastMA>
                                <SlowMA> 3</SlowMA>
                                <Shift> 0</Shift>
                                <Method> MODE_SMA</Method>
                                <AppliedPrice> PRICE_CLOSE</AppliedPrice>
                        </Params>
                </Strategy>
                <Strategy Name="MovingAverage" Magic="101" Timeframe="PERIOD_M5" Symbol="SBRF">
                        <TradeStateStart> BuyOnly</TradeStateStart>
                        <Params>
                                <FastMA> 15</FastMA>
                                <SlowMA> 21</SlowMA>
                                <Shift> 0</Shift>
                                <Method> MODE_SMA</Method>
                                <AppliedPrice> PRICE_CLOSE</AppliedPrice>
                        </Params>
                </Strategy>
                <Strategy Name="BollingerBands" Magic="102" Timeframe="PERIOD_M15" Symbol="GAZR">
                        <TradeStateStart> BuyAndSell</TradeStateStart>
                        <Params>
                                <Period> 30</Period>
                                <StdDev> 1.5</StdDev>
                        </Params>
                </Strategy>
                <Strategy Name="BollingerBands" Magic="103" Timeframe="PERIOD_M30" Symbol="ED">
                        <TradeStateStart> BuyAndSell</TradeStateStart>
                        <Params>
                                <Period> 20</Period>
                                <StdDev> 2.0</StdDev>
                        </Params>
                </Strategy>
        </Strategies>
</Global>

El tema de la serialización de estrategias se trata en las siguientes partes. Este ejemplo está presente allí.

 

Hola,

El código fuente del artículo no compila.
El error devuelto es:

cannot cast 'DoubleValue' to 'ULongValue' Dictionary.mqh 210 14

     lValue=(ULongValue)dValue;


Gracias por su ayuda,
Pierre8r