Usa Comment o Print y asegúrate de que está calculando todos los valores correctamente.
De todas formas en OHLC M1 por su propia naturaleza nunca es exacto y cuanto mayor sea el balance de la cuenta y por ende el volumen, mayor será el desfase.
En 1 minuto puede haber un desfase de varios pips que se traduce a decenas, cientos o incluso miles de $ según el caso.
Usa Comment o Print y asegúrate de que está calculando todos los valores correctamente.
De todas formas en OHLC M1 por su propia naturaleza nunca es exacto y cuanto mayor sea el balance de la cuenta y por ende el volumen, mayor será el desfase.
En 1 minuto puede haber un desfase de varios pips que se traduce a decenas, cientos o incluso miles de $ según el caso.
Hola Miguel, gracias por tu respuesta. El caso es que he tocado y retocado el código de mil maneras y no consigo que funcione correctamente, te muestro dos resultados idénticos en Tick y OHLC:
OHLC
Todos los ticks
Esta vez el riesgo es del 20%:
if(HardStopLoss==true){ //HardStop=(int)MathRound(RiskFactor*MathPow(1.618,5)); if(MathAbs(TotalProfit)>=20*Balance/100){ // HardStop. if(!trade.PositionClose(iTicket,ULONG_MAX)){ Print("PositionClose error ",trade.ResultRetcode()); return; } else{i--;} } //break; }
Edito: está programado para operar en la apertura de una nueva barra (M1), después de haber sacado la función de Stop() fuera de la condición NewBar() tengo resultados muy diferentes. Ahí estaba el problema.
Quiero aprovechar para lanzar otra pregunta:
Si un sistema se llega a multiplicar por 8 en poco tiempo como es el caso y, digamos que una vez al año, la cuenta se quema inevitablemente, ¿habría alguna forma de sacarle rendimiento mediante retiros periódicos? He visto una estrategia parecida con el Hamster que convenció a mucha gente.
Vayamos por partes...
Normaliza los números (NormalizeDouble), eso lo primero. Después como te comente yo usaría Comments y en el modo visual me aseguraría que cada cálculo como el balance, el resultado del TotalProfit, etc, lo está dando correctamente.
También date cuenta de que estás usando un void... asegurate de llamarlo en el momento correcto. Lo mejor es que el muestreo lo haga tick a tick sin ser llamado. Simplemente que si la input del HardSL es mayor a cero, que entre en juego la función sin necesidad de ser llamada y que por lo que sea no lo estés llamando correctamente.
Y por último...usa TesterWithdrawal() para simular retiros.
Vayamos por partes...
Normaliza los números (NormalizeDouble), eso lo primero. Después como te comente yo usaría Comments y en el modo visual me aseguraría que cada cálculo como el balance, el resultado del TotalProfit, etc, lo está dando correctamente.
También date cuenta de que estás usando un void... asegurate de llamarlo en el momento correcto. Lo mejor es que el muestreo lo haga tick a tick sin ser llamado. Simplemente que si la input del HardSL es mayor a cero, que entre en juego la función sin necesidad de ser llamada y que por lo que sea no lo estés llamando correctamente.
Y por último...usa TesterWithdrawal() para simular retiros.
Creo que la única manera de hacerlo bien (otra cosa es que luego dé mejores resultados haciéndolo mal), es insertar la llamada aquí:
if(TestMode==CurrentSymbol){ if(NewBar(Symbol())){ Trade(Symbol()); } HardStop(); } return;
Porque NewBar trabaja sólo la apertura en M1, y así se provoca el deslizamiento que comentabas.
De todas formas voy a probar sólo normalizando los valores porque esos 8000 euros que daba son muy golosos.
![MQL5 - Lenguaje de estrategias comerciales para el terminal de cliente MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- 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
Hola a todos, tengo problemas con esta función HardSL() para limitar las pérdidas pues parece que no siempre cierra en el porcentaje fijado en los parámetros pudiendo incluso caer hasta el stop out. Éste es el código que he programado:
Aquí un ejemplo en OHLC,M1 de la curva que me da para un límite de pérdidas al 24%:
Como he mencionado, algunas caídas superan el porcentaje fijado y al final termina por stop out.
¿Alguna idea sobre qué está fallando aquí? Gracias de antemano.