[ВНИМАНИЕ, ТЕМА ЗАКРЫТА!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда. - страница 323

 
Vinin писал(а) >>

Поэтому и ошибки специально делаешь.

А специально, это прикольно... я бы рад увидеть эту ошибку да только не могу, её найти.

 
Daiver2 >>:

Я некоторые функции, запускаю пробно как скрипт, нет ли ошибок при компиляции и какие, чтобы проверить работает или нет в терминале. Взял сегодня Функцию предварительного подсчёта баров в окне:

Естественно, выходит сообщение *Недостаточно баров*, но при новом тике я понимаю вновь до бесконечности будет появляться это сообщение.

Теперь я добавляю переменную и дописываю оператор if, а также в будущем блоке обработок ошибок Bloc_Error, всталяю оператор switch получается это:

Вопрос такой что я тут неправильно наплёл в операторе switch, почему не вылазиет сообщение *Эксперт не работает*, и чтобы действительно советник прекращал работу?????
//+------------------------------------------------------------------+      
    switch()//?????????????? почему в switch не передаёте параметр 
      {
      case 3:          // Неверные параметры:
      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? 

Терминал Broco Trader 4.0 build 225.

Может так глючить терминал ?

 
Urain писал(а) >>

Спасибо, разберусь.

 
OAndrey писал(а) >>

Всем, привет!

Не могу понять причину появления ошибки при работе советника. Тестирую один советник на 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;
      }
   }
 

Как сделать перенос строки в тексте? Например я вывожу что-то на графике, в OBJ_LABEL, и хочу чтобы текст писался в несколько строк.

 
Mathers >>:

Как сделать перенос строки в тексте? Например я вывожу что-то на графике, в OBJ_LABEL, и хочу чтобы текст писался в несколько строк.

Выводить в несколько лейблов.

 

А если количество строк меняется динамически? И может быть весьма большим. Может что-то другое можно использовать вместо лэйбла?


И еще вот такой вопрос: допустим у меня скрипт который в бесконечном цикле что-то делает с задержкой например в секунду. Я когда пытаюсь его убрать - выбираю "удалить скрипт", он не снимается с графика, а начинает тарабанить вообще такое ощущение что без задержки. Жму еще раза "удалить" - и вот тогда убирается. В чем дело? Может что-то надо в код дописать чтобы корректно завершался?

 
Mathers >>:

А если количество строк меняется динамически? И может быть весьма большим. Может что-то другое можно использовать вместо лэйбла?

Alert, как вариант. Comment -- пожалуй подойдет.

И еще вот такой вопрос: допустим у меня скрипт который в бесконечном цикле что-то делает с задержкой например в секунду. Я когда пытаюсь его убрать - выбираю "удалить скрипт", он не снимается с графика, а начинает тарабанить вообще такое ощущение что без задержки. Жму еще раза "удалить" - и вот тогда убирается. В чем дело? Может что-то надо в код дописать чтобы корректно завершался?

Замените while(true) на while(!IsStopped())

 
Mathers >>:

А если количество строк меняется динамически? И может быть весьма большим. Может что-то другое можно использовать вместо лэйбла?

Нет. Если, конечно, comment не подходит. Напишите ф-ю, где будет производиться вывод, и пишите, что вам нужно через нее.

И еще вот такой вопрос: допустим у меня скрипт который в бесконечном цикле что-то делает с задержкой например в секунду. Я когда пытаюсь его убрать - выбираю "удалить скрипт", он не снимается с графика, а начинает тарабанить вообще такое ощущение что без задержки. Жму еще раза "удалить" - и вот тогда убирается. В чем дело? Может что-то надо в код дописать чтобы корректно завершался?

Так и должно быть.