Я некоторые функции, запускаю пробно как скрипт, нет ли ошибок при компиляции и какие, чтобы проверить работает или нет в терминале. Взял сегодня Функцию предварительного подсчёта баров в окне:
Естественно, выходит сообщение *Недостаточно баров*, но при новом тике я понимаю вновь до бесконечности будет появляться это сообщение.
Теперь я добавляю переменную и дописываю оператор if, а также в будущем блоке обработок ошибок Bloc_Error, всталяю оператор switchполучается это:
Вопрос такой что я тут неправильно наплёл в операторе switch, почему не вылазиет сообщение *Эксперт не работает*, и чтобы действительно советник прекращал работу?????
//+------------------------------------------------------------------+ switch()//?????????????? почему в switch не передаёте параметр {case3:// Неверные параметры:
Work=false;return(0);}
Не могу понять причину появления ошибки при работе советника. Тестирую один советник на 11 парах в одном терминале одновременно (демо-счет). Проверка условий на вход происходит в начале каждого часа, т.е. 11 советников начинают работать одновременно. Чтобы они друг другу не мешали используется функция IsTradeBusy() (отсюда https://www.mql5.com/ru/articles/1412). В последнее время вместо открытия позиции советник сообщает об ошибке при попытке изменить значение глоб.переменной TradeIsBusy. Вот часть кода:
// пытаемся менять значение TradeIsBusy с 0 на 1// если нам это удаётся, выходим из ф-ции, возвращая 1 - "успешное завершение"if(GlobalVariableSetOnCondition("TradeIsBusy",1.0,0.0))return(1);else// если нет, возможны 2 причины: TradeIsBusy = 1 (тогда надо ждать), либо // возникла ошибка (это мы и проверим){
_GetLastError =GetLastError();// если это всё таки ошибка, выводим информацию и пробуем ещё разif(_GetLastError !=0){Print("TradeIsBusy()-GlobalVariableSetOnCondition(\"TradeIsBusy\",1.0,0.0 )-Error #",
_GetLastError );continue;}}
Коды ошибок:
#4002 - "индекс массива - вне диапазона"
#4105 - "Ни один ордер не выбран"
Не понимаю, при каких условиях эти ошибки могут формироваться командой GlobalVariableSetOnCondition?
Не могу понять причину появления ошибки при работе советника. Тестирую один советник на 11 парах в одном терминале одновременно (демо-счет). Проверка условий на вход происходит в начале каждого часа, т.е. 11 советников начинают работать одновременно. Чтобы они друг другу не мешали используется функция IsTradeBusy() (отсюда https://www.mql5.com/ru/articles/1412). В последнее время вместо открытия позиции советник сообщает об ошибке при попытке изменить значение глоб.переменной TradeIsBusy. Вот часть кода:
Коды ошибок:
#4002 - "индекс массива - вне диапазона"
#4105 - "Ни один ордер не выбран"
Не понимаю, при каких условиях эти ошибки могут формироваться командой GlobalVariableSetOnCondition?
Терминал Broco Trader 4.0 build 225.
Может так глючить терминал ?
По данному куску кода сказать ничего нельзя. И как совет. В начале функции сбрасывать состояние последней ошибки. Она может возникать и в другом месте
GetLastError();//Сбрасываем состояние // пытаемся менять значение TradeIsBusy с 0 на 1// если нам это удаётся, выходим из ф-ции, возвращая 1 - "успешное завершение"if(GlobalVariableSetOnCondition("TradeIsBusy",1.0,0.0))return(1);else// если нет, возможны 2 причины: TradeIsBusy = 1 (тогда надо ждать), либо // возникла ошибка (это мы и проверим){
_GetLastError =GetLastError();// если это всё таки ошибка, выводим информацию и пробуем ещё разif(_GetLastError !=0){Print("TradeIsBusy()-GlobalVariableSetOnCondition(\"TradeIsBusy\",1.0,0.0 )-Error #",
_GetLastError );continue;}}
А если количество строк меняется динамически? И может быть весьма большим. Может что-то другое можно использовать вместо лэйбла?
И еще вот такой вопрос: допустим у меня скрипт который в бесконечном цикле что-то делает с задержкой например в секунду. Я когда пытаюсь его убрать - выбираю "удалить скрипт", он не снимается с графика, а начинает тарабанить вообще такое ощущение что без задержки. Жму еще раза "удалить" - и вот тогда убирается. В чем дело? Может что-то надо в код дописать чтобы корректно завершался?
А если количество строк меняется динамически? И может быть весьма большим. Может что-то другое можно использовать вместо лэйбла?
Alert, как вариант. Comment -- пожалуй подойдет.
И еще вот такой вопрос: допустим у меня скрипт который в бесконечном цикле что-то делает с задержкой например в секунду. Я когда пытаюсь его убрать - выбираю "удалить скрипт", он не снимается с графика, а начинает тарабанить вообще такое ощущение что без задержки. Жму еще раза "удалить" - и вот тогда убирается. В чем дело? Может что-то надо в код дописать чтобы корректно завершался?
А если количество строк меняется динамически? И может быть весьма большим. Может что-то другое можно использовать вместо лэйбла?
Нет. Если, конечно, comment не подходит. Напишите ф-ю, где будет производиться вывод, и пишите, что вам нужно через нее.
И еще вот такой вопрос: допустим у меня скрипт который в бесконечном цикле что-то делает с задержкой например в секунду. Я когда пытаюсь его убрать - выбираю "удалить скрипт", он не снимается с графика, а начинает тарабанить вообще такое ощущение что без задержки. Жму еще раза "удалить" - и вот тогда убирается. В чем дело? Может что-то надо в код дописать чтобы корректно завершался?
Поэтому и ошибки специально делаешь.
А специально, это прикольно... я бы рад увидеть эту ошибку да только не могу, её найти.
Я некоторые функции, запускаю пробно как скрипт, нет ли ошибок при компиляции и какие, чтобы проверить работает или нет в терминале. Взял сегодня Функцию предварительного подсчёта баров в окне:
Естественно, выходит сообщение *Недостаточно баров*, но при новом тике я понимаю вновь до бесконечности будет появляться это сообщение.
Теперь я добавляю переменную и дописываю оператор if, а также в будущем блоке обработок ошибок Bloc_Error, всталяю оператор switch получается это:
Вопрос такой что я тут неправильно наплёл в операторе switch, почему не вылазиет сообщение *Эксперт не работает*, и чтобы действительно советник прекращал работу?????Всем, привет!
Не могу понять причину появления ошибки при работе советника. Тестирую один советник на 11 парах в одном терминале одновременно (демо-счет). Проверка условий на вход происходит в начале каждого часа, т.е. 11 советников начинают работать одновременно. Чтобы они друг другу не мешали используется функция IsTradeBusy() (отсюда https://www.mql5.com/ru/articles/1412). В последнее время вместо открытия позиции советник сообщает об ошибке при попытке изменить значение глоб.переменной TradeIsBusy. Вот часть кода:
Коды ошибок:
#4002 - "индекс массива - вне диапазона"
#4105 - "Ни один ордер не выбран"
Не понимаю, при каких условиях эти ошибки могут формироваться командой GlobalVariableSetOnCondition?
Терминал Broco Trader 4.0 build 225.
Может так глючить терминал ?
Спасибо, разберусь.
Всем, привет!
Не могу понять причину появления ошибки при работе советника. Тестирую один советник на 11 парах в одном терминале одновременно (демо-счет). Проверка условий на вход происходит в начале каждого часа, т.е. 11 советников начинают работать одновременно. Чтобы они друг другу не мешали используется функция IsTradeBusy() (отсюда https://www.mql5.com/ru/articles/1412). В последнее время вместо открытия позиции советник сообщает об ошибке при попытке изменить значение глоб.переменной TradeIsBusy. Вот часть кода:
Коды ошибок:
#4002 - "индекс массива - вне диапазона"
#4105 - "Ни один ордер не выбран"
Не понимаю, при каких условиях эти ошибки могут формироваться командой GlobalVariableSetOnCondition?
Терминал Broco Trader 4.0 build 225.
Может так глючить терминал ?
По данному куску кода сказать ничего нельзя. И как совет. В начале функции сбрасывать состояние последней ошибки. Она может возникать и в другом месте
Как сделать перенос строки в тексте? Например я вывожу что-то на графике, в OBJ_LABEL, и хочу чтобы текст писался в несколько строк.
Как сделать перенос строки в тексте? Например я вывожу что-то на графике, в OBJ_LABEL, и хочу чтобы текст писался в несколько строк.
Выводить в несколько лейблов.
А если количество строк меняется динамически? И может быть весьма большим. Может что-то другое можно использовать вместо лэйбла?
И еще вот такой вопрос: допустим у меня скрипт который в бесконечном цикле что-то делает с задержкой например в секунду. Я когда пытаюсь его убрать - выбираю "удалить скрипт", он не снимается с графика, а начинает тарабанить вообще такое ощущение что без задержки. Жму еще раза "удалить" - и вот тогда убирается. В чем дело? Может что-то надо в код дописать чтобы корректно завершался?
А если количество строк меняется динамически? И может быть весьма большим. Может что-то другое можно использовать вместо лэйбла?
Alert, как вариант. Comment -- пожалуй подойдет.
И еще вот такой вопрос: допустим у меня скрипт который в бесконечном цикле что-то делает с задержкой например в секунду. Я когда пытаюсь его убрать - выбираю "удалить скрипт", он не снимается с графика, а начинает тарабанить вообще такое ощущение что без задержки. Жму еще раза "удалить" - и вот тогда убирается. В чем дело? Может что-то надо в код дописать чтобы корректно завершался?
Замените while(true) на while(!IsStopped())
А если количество строк меняется динамически? И может быть весьма большим. Может что-то другое можно использовать вместо лэйбла?
Нет. Если, конечно, comment не подходит. Напишите ф-ю, где будет производиться вывод, и пишите, что вам нужно через нее.
И еще вот такой вопрос: допустим у меня скрипт который в бесконечном цикле что-то делает с задержкой например в секунду. Я когда пытаюсь его убрать - выбираю "удалить скрипт", он не снимается с графика, а начинает тарабанить вообще такое ощущение что без задержки. Жму еще раза "удалить" - и вот тогда убирается. В чем дело? Может что-то надо в код дописать чтобы корректно завершался?
Так и должно быть.