primero no puedes usar "exp" para un int, está reservado
segundo expresas el "SL"
SL = MathFloor((iATR(NULL, PERIOD_D1, 7, 0)*MathPow(10,Digits-exp)+1)*0.1);
en la sección init, mala idea
porque si obtienes el error 4066 el "SL" = 0
entonces usted consigue cero dividir en "lotes"
lots=MoneyRisk/SL/(MarketInfo(Symbol(), MODE_TICKVALUE)*multi);
y el indicador se detiene y tienes que recargar el indicador
obviamente no puedes evitar la actualización ;-) pero tienes que evitar una situación de "división por cero"
así que tienes que comprobar si una de las variables es igual a 0.... en caso de evitar la división por cero
y como no puedes parar un indicador tienes que averiguar algo
ejemplo:
SL = MathFloor((iATR(NULL, PERIOD_D1, 7, 0)*MathPow(10,Digits-exp)+1)*0.1); if (SL == 0) // because error 4066 (for example) { SL = Someting; } lots=MoneyRisk/SL/(MarketInfo(Symbol(), MODE_TICKVALUE)*multi);
Tienes razón... No puedo evitarlo. :-)
Lo que quería decir es que si puedo esperar a que se complete la actualización antes de seguir con el cálculo del SL. El problema es que no puedo darle a SL un valor aleatorio porque entonces todo el indicador es inútil. Así que me gustaría comprobar el error 4066 y si se produce, me gustaría esperar de alguna manera y comprobar de nuevo antes de continuar.
Por cierto, tengo el mismo problema con este indicador. ¿Pero por qué no era un problema en el "viejo" MetaTrader? Aquí siempre recibo un cero para el ATR(5). ¿¡POR QUÉ!? Eso nunca sucedió antes .. ¡Odio este nuevo MetaTrader...!
int start() //---- { double Spread = MarketInfo(Symbol(), MODE_SPREAD); double ATR = iATR(NULL, PERIOD_D1, 5, 0); int exp1 = 0; if (Digits==5 || Digits==3) { Spread=Spread*0.1; exp1 = 1; } Comment ( "ADR(5): ",DoubleToStr(ATR*MathPow(10,Digits-exp1),1), " || TODAY: ",(iHigh(NULL, PERIOD_D1, 0)-iLow(NULL, PERIOD_D1, 0))*MathPow(10,Digits-exp1), " || ", DoubleToStr(((iHigh(NULL, PERIOD_D1, 0)-iLow(NULL, PERIOD_D1, 0))*MathPow(10,Digits-exp1)/(ATR*MathPow(10,Digits-exp1))*100), 2), "%", "\n" + "SPREAD: ", Spread, " || RATIO: ",DoubleToStr((Spread/ATR)*MathPow(10,-(Digits-exp1-2)), 2),"%" ); //---- return(0); }
Creo que he encontrado el problema. Definitivamente es un problema de actualización. Cuando ahora cambio de divisas, el indicador funciona. Pero entonces abrí un par de divisas que aún no había abierto hoy. Entonces recibí este mensaje:
Tienes que poner algo como
if(number==0)dothis; else dothis;
en ShowSpread.mq4
Busca la línea en la que se produce esta división de cero.
Creo que he encontrado el problema. Definitivamente es un problema de actualización. Cuando ahora cambio de divisas, el indicador funciona. Pero entonces abrí un par de divisas que aún no había abierto hoy. Entonces recibí este mensaje:
angevoyageur, creo que no has visto este post mío:
Tienes razón... No puedo evitarlo :-)
"Lo que quería decir es que si puedo esperar a que se complete la actualización para seguir con el cálculo del SL. El problema es que no puedo darle a SL un valor aleatorio porque entonces todo el indicador es inútil. Así que me gustaría comprobar el error 4066 y si se produce, me gustaría esperar de alguna manera y comprobar de nuevo antes de continuar."
Ahí puedes ver que describió que no puedo seguir el consejo y como llegué a esa solución también puedes ver que definitivamente comprobé lo que me aconsejó qjol.

- 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 codificadores,
Hice un pequeño indicador de Moneymanagement que me funcionaba bien. Pero desde el nuevo MQL4 causa problemas que no puedo manejar.
Cuando se arrastra este indicador a su gráfico algunos números se imprimen en el lado derecho. El primer número significa el Stoploss en pips y el segundo es el tamaño del lote. En las opciones puedes elegir el riesgo. El otro número son los niveles de Stoploss. Pero cuando cambio el par de divisas los números desaparecen. En su lugar veo varias veces la palabra "Etiqueta". Y cuando miro a la lista de indicadores, mi indicador también ha desaparecido. Así que, en resumen, después de cambiar el par de divisas, el indicador se ha ido y ha dejado etiquetas en lugar de números.
Estoy totalmente confundido. Este indicador solía funcionar sin ningún problema. La ayuda es muy apreciada.
Aquí está el código: