Posible error del probador de Estrategia MT5 en la gestión riesgo calculando el lotaje con la función OrderProfitCheck

 

Me estreno por aquí con este hilo, quiero compartirles mi experiencia con la gestión de riesgo automatizada, después de darle muchas vueltas al asunto probando muchas cosas, me encontré con esta función OrderProfitCheck que pertenece a la clase de gestión de riesgo MoneyFixedRisk, antes de explicar que hace esta función, les pongo en contexto que hace mi estrategia, Mi estrategia busca entradas, cuando encuentra una entrada, calcula un SL adecuado, con estos dos datos y parametrizando un 1% del balance como máxima pérdida de una operación, OrderProfitCheck me ayuda a proyectar cuanto lotaje necesito para no arriesgar mas del 1% de mi balance.

Loss=-m_account.OrderProfitCheck(m_symbol.Name(),ORDER_TYPE_SELL,1.0,m_symbol.Bid(),sl);
aLots = MathFloor(m_account.Balance()*MaximumRisk/Loss/100.0/stepvol)*stepvol;

Hasta ese momento pensé´que se habían solucionado mis problemas de gestión de riesgo, entré al probador de estrategias y resulta que a veces funciona y muchas veces no lo hace, después de muchas pruebas y no encontrar el problema, decidí probar en datos reales y resulta que funciona a las mil maravillas, no he tenido inconvenientes mayores salvo el tema del spread que hace variar un poco la pérdida.


¿Quisiera saber si alguien ya pasó por esto y si existe una solución para poder utilizarlo en el simulador?, saludos

 

Hola Amigo, y paisano

Fijate que nunca habia visto esta funcion, y aun no la manejo, pero viendo tu codigo pregunto 2 cosas para descartar:
1. No sera que parte de los resultados no coinciden por que estas calculando las COMPRAS tambien sobre el BID y no sobre el ASK, como deberia de ser?
2. Que tan grandes o cuanta diferencia hay en los resultados malos (estamos hablando de que quieres algo muy muy preciso y no te alcanza, o estamos hablando de que el error es muy muy myu amplio)?

Lo otro que yo veo, con el poco codigo que has puesto, es que  tu formula no esta tan bien planteada, porque estas calculando  algo, basado en el  total ganado de una operacion  que teoricamente se hace con 1.0 lotes, y la operacion final no sera de 1.0  lotes 
De hecho, esa es la pregunta  a resolver , (cual es el lotaje a usar), y tambien pienso que por eso divides por 100. pero no esta completa esa formula.

yo te pasare una formula que uso para eso, pero en Mql4, pasala a MQL5

double ValorAGanar=(AccountEquity()*Porcentaje_Riesgo_PorOperacion)/100;
double Valor_Tick_Microlote=MarketInfo(Symbol(),16)/100;
double Microlote_Por_Puntos_Objetivos=Valor_Tick_Microlote*((BID-SL)/Point);
double Microlotes_totales=NormalizeDouble(MathFloor(ValorAGanar/Microlote_Por_Puntos_Objetivos),2);
double LotajeArriesgado=Microlotes_totales*0.01;

Espero te sirva, saludos!

 
Miguel Antonio Rojas Martinez:

Hola Amigo, y paisano

Fijate que nunca habia visto esta funcion, y aun no la manejo, pero viendo tu codigo pregunto 2 cosas para descartar:
1. No sera que parte de los resultados no coinciden por que estas calculando las COMPRAS tambien sobre el BID y no sobre el ASK, como deberia de ser?
2. Que tan grandes o cuanta diferencia hay en los resultados malos (estamos hablando de que quieres algo muy muy preciso y no te alcanza, o estamos hablando de que el error es muy muy myu amplio)?

Lo otro que yo veo, con el poco codigo que has puesto, es que  tu formula no esta tan bien planteada, porque estas calculando  algo, basado en el  total ganado de una operacion  que teoricamente se hace con 1.0 lotes, y la operacion final no sera de 1.0  lotes 
De hecho, esa es la pregunta  a resolver , (cual es el lotaje a usar), y tambien pienso que por eso divides por 100. pero no esta completa esa formula.

yo te pasare una formula que uso para eso, pero en Mql4, pasala a MQL5

Espero te sirva, saludos!

Hola @Miguel Antonio Rojas Martinez 


Saludos desde Villavicencio, como te dije, haciendo operaciones en tiempo real funciona muy bien, obviamente hay un muy pequeño margen de error, porque uno es el spread con el que iniciamos la operación y otro con el que se cierra la operación, entonces hay unos pips que se escapan, por ejemplo, la apertura de una operación la abrimos con 5 pip de spread, esos los tiene en cuenta la fórmula, pero al cerrar puede ser que esté en 6 pips de spread, es un pip que no se puede calcular de inicio, en fin, la función que tengo es algo mas completa y tiene en cuenta los rangos de tolerancia del lote, ya está probada en "real demo", todo bien, pero en simulación es otra cosa, me ha pasado que ha funcionado y de un momento a otro deja de funcionar, y hago los cálculos manualmente del lotaje de acuerdo al stop loss y el riesgo y está bien calculado, coloca correctamente el lotaje pero se traga los fondos en pocas operaciones, voy ha hacer pruebas hoy haber que sucede pero creo que esto puede ser un bug del simulador, saludos.    

 
japarradog:

Hola @Miguel Antonio Rojas Martinez 


Saludos desde Villavicencio, como te dije, haciendo operaciones en tiempo real funciona muy bien, obviamente hay un muy pequeño margen de error, porque uno es el spread con el que iniciamos la operación y otro con el que se cierra la operación, entonces hay unos pips que se escapan, por ejemplo, la apertura de una operación la abrimos con 5 pip de spread, esos los tiene en cuenta la fórmula, pero al cerrar puede ser que esté en 6 pips de spread, es un pip que no se puede calcular de inicio, en fin, la función que tengo es algo mas completa y tiene en cuenta los rangos de tolerancia del lote, ya está probada en "real demo", todo bien, pero en simulación es otra cosa, me ha pasado que ha funcionado y de un momento a otro deja de funcionar, y hago los cálculos manualmente del lotaje de acuerdo al stop loss y el riesgo y está bien calculado, coloca correctamente el lotaje pero se traga los fondos en pocas operaciones, voy ha hacer pruebas hoy haber que sucede pero creo que esto puede ser un bug del simulador, saludos.    

Adjunto ejemplo con el error en el simulador.

Archivos adjuntos:
 

Amigo, ahora si es mas claro tu problema, porque obviamente mas  alla  de la funcion para calcular el lotaje, el error es el resultado que esta dando el tester

Has evidenciado ese error tanto para compras, como para ventas?
Te genera ese error con "distintos lotajes" de la operacion?
si repites el test, te genera el error en la misma transaccion o es "aleatrorio"?



 
Miguel Antonio Rojas Martinez:

Amigo, ahora si es mas claro tu problema, porque obviamente mas  alla  de la funcion para calcular el lotaje, el error es el resultado que esta dando el tester

Has evidenciado ese error tanto para compras, como para ventas?
Te genera ese error con "distintos lotajes" de la operacion?
si repites el test, te genera el error en la misma transaccion o es "aleatrorio"?




Hola Miguel, ya está solucionado el problema, tengo que deshabilitar esta opción para poder hacer la gestión de riesgo adecuadamente.

 
  
Razón de la queja: