Discusión sobre el artículo "Desarrollamos un Asesor Experto multidivisas (Parte 5): Tamaños de posición variables"
Echa un vistazo al nuevo artículo: Desarrollo de un Asesor Experto multidivisa (Parte 5): Tamaños de posición variables.
Autor: Yuriy Bykov
Cuando ejecuto el EA SimpleVolumesExpert con (3+3+3) y escalado 2.18, El registro muestra operaciones virtuales abiertas pero no operaciones reales en el probador de estrategias. ¿Me he perdido algo?
Cuando ejecuto SimpleVolumesExpert con (3+3+3) y escalado 2.18, el registro muestra operaciones virtuales abiertas, pero no operaciones reales en el probador de estrategias. ¿Quizás me he perdido algo?
Compruebe que el saldo inicial en el probador es de $10000 o más. Tengo este comportamiento cuando el saldo no es lo suficientemente grande. En este caso, no todas las posiciones virtuales generan una posición real. Pero la razón es probablemente otra, ya que su saldo es probablemente correcto.
¿Hay operaciones reales si el EA se ejecuta con otras variantes de agrupación de estrategias?
Buenas tardes. Gracias por su trabajo. Estoy muy interesado en su arquitectura y estoy tratando de entenderlo paso a paso. He cambiado sólo la clase de estrategia - Yo uso mi propia. Pero en esta etapa he tenido dificultades con el escalado de la estrategia. Para la pureza del experimento, he utilizado una instancia de la estrategia y dos variantes de la escala multiplier_ 1 y 2 (fixedBalance_ = 0;). En ambos casos, el resultado es el mismo - el tamaño del lote no cambia. El lugar en el código donde se determina el tamaño del lote
//+------------------------------------------------------------------+ //| Determinar el tamaño real de la posición virtual || //+------------------------------------------------------------------+ double CMoney::Volume(CVirtualOrder *p_order) { // Solicitar el balance normalizado de la estrategia para esta posición virtual double fittedBalance = p_order.FittedBalance(); // Si es igual a 0, el volumen real es igual al volumen virtual if(fittedBalance == 0.0) { return p_order.Volume(); } // En caso contrario, hallamos el valor de la balanza comercial total double totalBalance = s_fixedBalance > 0 ? s_fixedBalance : AccountInfoDouble(ACCOUNT_BALANCE); // Devuelve el volumen real calculado por el volumen virtual return p_order.Volume() * totalBalance * s_depoPart / fittedBalance ; } //+------------------------------------------------------------------+
Sin embargo, los parámetros m_fittedBalance y m_fixedLot se establecen por defecto en el constructor de la estrategia virtual.
//+------------------------------------------------------------------+ //| Constructor| //+------------------------------------------------------------------+ CVirtualStrategy::CVirtualStrategy(double p_fittedBalance = 0, double p_fixedLot = 0.01) : m_fittedBalance(p_fittedBalance), m_fixedLot(p_fixedLot) {}
por lo que el tamaño del lote no cambia.
// Si es igual a 0, el volumen real es igual al volumen virtual if(fittedBalance == 0.0) { return p_order.Volume(); }
Aunque lógicamente debería escalar. ¿Pueden decirme cuál es la razón? No quiero entrometerme con mis propias ediciones para no romperlo, y ya he añadido algunos métodos a la clase CVirtualOrder porque mi estrategia prevé el cierre parcial, el stop loss y el cierre en la señal del contador.
Hola.
Todo es correcto, para operar con lote variable es necesario que a una instancia de la estrategia se le de el valor de m_fittedBalance > 0. Esto lo hacen los herederos de la clase base de la estrategia de trading. Se les pasa este parámetro y lo sustituyen en la llamada al constructor de CVirtualStrategy:
class CSimpleVolumesStrategy : public CVirtualStrategy { ... public: //--- Métodos públicos CSimpleVolumesStrategy( string p_symbol, ENUM_TIMEFRAMES p_timeframe, int p_signalPeriod, double p_signalDeviation, double p_signaAddlDeviation, int p_openDistance, double p_stopLevel, double p_takeLevel, int p_ordersExpiration, int p_maxCountOfOrders, double p_fittedBalance = 0 ); // Constructor ... }; ... //+------------------------------------------------------------------+ //| Constructor| //+------------------------------------------------------------------+ CSimpleVolumesStrategy::CSimpleVolumesStrategy( string p_symbol, ENUM_TIMEFRAMES p_timeframe, ... int p_maxCountOfOrders, double p_fittedBalance = 0) : // Lista de inicialización CVirtualStrategy(p_fittedBalance, 0.01), m_symbol(p_symbol), m_timeframe(p_timeframe), ... }
Cuando creamos instancias, especificamos un valor específico para el último parámetro para que el valor por defecto de 0 no sea sustituido en él:
//+------------------------------------------------------------------+ //| Función de inicialización experta| //+------------------------------------------------------------------+ int OnInit() { // Establecer parámetros en la clase de gestión de capital CMoney::DepoPart(expectedDrawdown_ / 10.0); CMoney::FixedBalance(fixedBalance_); // Crear un Asesor Experto que trabaje con posiciones virtuales expert = new CVirtualAdvisor(magic_, "SimpleVolumes_" + EnumToString(group_)); // Crear y rellenar un array de todas las instancias de estrategia CVirtualStrategy *strategies[] = { new CSimpleVolumesStrategy("EURGBP", PERIOD_H1, 13, 0.3, 1.0, 0, 10500, 465, 1000, 3, 1600), new CSimpleVolumesStrategy("EURGBP", PERIOD_H1, 17, 1.7, 0.5, 0, 16500, 220, 1000, 3, 900), new CSimpleVolumesStrategy("EURGBP", PERIOD_H1, 51, 0.5, 1.1, 0, 19500, 370, 22000, 3, 1600), ... }; ... return(INIT_SUCCEEDED); }
En el Asesor Experto SimpleVolumesExpertSingle.mq5 no hacemos esto, ya que la optimización sólo se realiza sobre un tamaño de posición inicial fijo. Tenga en cuenta que el parámetro m_fixedLot no tiene que ser utilizado en la estrategia exclusivamente como el tamaño de todas las posiciones virtuales abiertas. Es sólo un valor base a partir del cual podemos calcular cualquier otro. En la estrategia modelo del artículo, simplemente los tamaños de todas las posiciones son iguales y este parámetro se utiliza sin transformación. Pero nada impide abrir una posición virtual de tamaño 10*m_fixedLot en otra estrategia y luego aplicar su cierre gradual.
Hola.
Todo es correcto, para operar con lote variable es necesario que a una instancia de la estrategia se le de el valor de m_fittedBalance > 0. Esto lo hacen los herederos de la clase base de la estrategia de trading. Se les pasa este parámetro y lo sustituyen en la llamada al constructor de CVirtualStrategy:
Cuando creamos instancias, especificamos un valor específico para el último parámetro para que el valor por defecto de 0 no sea sustituido en él:
En el Asesor Experto SimpleVolumesExpertSingle.mq5 no hacemos esto, ya que la optimización sólo se realiza sobre un tamaño de posición inicial fijo. Tenga en cuenta que el parámetro m_fixedLot no tiene que ser utilizado en la estrategia exclusivamente como el tamaño de todas las posiciones virtuales abiertas. Es sólo un valor base a partir del cual podemos calcular cualquier otro. En la estrategia modelo del artículo, simplemente los tamaños de todas las posiciones son iguales y este parámetro se utiliza sin transformación. Pero nada impide abrir una posición virtual de tamaño 10*m_fixedLot en otra estrategia y luego aplicar su cierre gradual.

- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Usted acepta la política del sitio web y las condiciones de uso
Artículo publicado Desarrollamos un Asesor Experto multidivisas (Parte 5): Tamaños de posición variables:
En las partes anteriores, el Asesor Experto (EA) en desarrollo sólo podía utilizar un tamaño de posición fijo para operar. Esto es aceptable para las pruebas, pero no es aconsejable cuando se opera en una cuenta real. Hagamos posible el comercio utilizando tamaños de posición variables.
En la parte anterior, añadimos la capacidad de restaurar el estado del EA después de un reinicio. No importa cuál fue la razón - reiniciar el terminal, cambiar el marco de tiempo en el gráfico con el EA, lanzar una versión más reciente del EA - en todos los casos, restaurar el estado permitió que el EA no comenzara a trabajar desde cero y no perdiera las posiciones ya abiertas, sino que continuara manejándolas.
Sin embargo, el tamaño de las posiciones abiertas permaneció invariable para cada instancia de la estrategia durante todo el periodo de prueba. Su tamaño se fijó en el lanzamiento de EA. Si, como resultado del funcionamiento del EA, el saldo de la cuenta de operaciones aumentara, entonces esto permitiría utilizar un tamaño de posición mayor sin aumentar el riesgo. Sería razonable aprovechar esto, así que empecemos a implementar el uso de tamaños de posición variables.
Autor: Yuriy Bykov