во-первых, вы не можете использовать "exp" для int, это зарезервировано
во-вторых, вы выражаете "SL"
SL = MathFloor((iATR(NULL, PERIOD_D1, 7, 0)*MathPow(10,Digits-exp)+1)*0.1);
в разделе init, плохая идея
потому что если вы получите ошибку 4066, то "SL" = 0
тогда вы получите нулевое деление на "lots"
lots=MoneyRisk/SL/(MarketInfo(Symbol(), MODE_TICKVALUE)*multi);
и индикатор останавливается, и вам приходится перезагружать индикатор.
очевидно, что вы не можете избежать обновления ;-), но вы должны избежать ситуации "zero divide".
поэтому вы должны проверить, равна ли одна из переменных 0.... в случае избежания нулевого деления.
и поскольку вы не можете остановить индикатор, вы должны что-то придумать.
пример:
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);
Вы правы... Я не могу избежать этого. :-)
Я имел в виду, могу ли я дождаться завершения обновления, прежде чем продолжить расчет SL? Проблема в том, что я не могу дать SL случайное значение, потому что тогда весь индикатор будет бесполезен. Поэтому я хотел бы проверить ошибку 4066 и, если она возникнет, подождать и снова проверить, прежде чем продолжать.
Кстати, у меня такая же проблема с этим индикатором. Но почему этой проблемы не было в "старом" MetaTrader? Здесь я всегда получаю ноль для ATR(5). ПОЧЕМУ?!!! Раньше такого не было... Я ненавижу этот новый 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); }
Кажется, я нашел проблему! Это определенно проблема обновления. Когда я сейчас меняю валюту, индикатор работает. Но затем я открыл валютную пару, которую еще не открывал сегодня. Тогда я получил следующее сообщение:
Вы должны поместить что-то вроде
if(number==0)dothis; else dothis;
в файле ShowSpread.mq4
Просто найдите строку, где происходит это деление на ноль.
Кажется, я нашел проблему! Это определенно проблема обновления. Когда я сейчас меняю валюту, индикатор работает. Но затем я открыл валютную пару, которую еще не открывал сегодня. Тогда я получил следующее сообщение:
angevoyageur, я думаю, вы не видели это сообщение от меня:
Вы правы... Я не могу избежать этого :-)
"Я имел в виду, могу ли я дождаться завершения обновления, прежде чем продолжить SL-расчет? Проблема в том, что я не могу дать SL случайное значение, потому что тогда весь индикатор будет бесполезен. Поэтому я хотел бы проверить наличие ошибки 4066, и если она возникнет, я хотел бы как-то подождать и снова проверить, прежде чем продолжать."
Здесь вы можете видеть, что описано, что я не могу следовать совету, и поскольку я пришел к такому решению, вы также можете видеть, что я определенно проверил то, что посоветовал мне qjol.
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Привет кодеры,
Я сделал небольшой индикатор Moneymanagement, который отлично работал для меня. Но после выхода нового MQL4 он вызывает проблемы, с которыми я не могу справиться.
Когда вы перетаскиваете этот индикатор на свой график, справа от него появляются цифры. Первое число означает Stoploss в пунктах, а второе - размер лота. В опциях вы можете выбрать риск. Другое число - это уровни Stoploss. Но когда я меняю валютную пару, цифры исчезают. Вместо них я вижу несколько раз слово "Label". И когда я смотрю на список индикаторов, мой индикатор также исчезает. В общем, после смены валютной пары индикатор исчез, а вместо цифр остались Label.
Я в полном замешательстве. Раньше этот индикатор работал без проблем. За помощь буду очень признателен.
Вот код: