Ошибки, баги, вопросы - страница 624

 
ivandurak:

Ошибка загрузки файла в советнике .  Из разряда найдите 10 отличий . Первый код относится к срипту .Второй к советнику , они идентичны Ctrl-C   Ctrl-V. В скрипте код работает , в советнике нет.

 

Чтобы найти 10 отличий, надо посмотреть код открытия файла. (и добавить в этот код открытия вывод кода ошибки при неудаче)

Во-вторых, если Вы хотите тестировать эксперта с этим файлом добавьте в код эксперта строчку #property tester_file "KitMaRsi.csv"

 
Здравствуйте. В MQL4  при выполнении программы может возникнуть такая ошибка ERR_HISTORY_WILL_UPDATED(4066), код которой вернет функция GetLastError(). Подскажите, а в MQL5 есть аналогичная ошибка? Смотрел здесь  https://www.mql5.com/ru/docs/constants/errorswarnings/errorcodes но не чего похожего не нашел.
Документация по MQL5: Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений / Ошибки времени выполнения
Документация по MQL5: Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений / Ошибки времени выполнения
  • www.mql5.com
Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений / Ошибки времени выполнения - Документация по MQL5
 
Druide:
Здравствуйте. В MQL4  при выполнении программы может возникнуть такая ошибка ERR_HISTORY_WILL_UPDATED(4066), код которой вернет функция GetLastError(). Подскажите, а в MQL5 есть аналогичная ошибка? Смотрел здесь  https://www.mql5.com/ru/docs/constants/errorswarnings/errorcodes но не чего похожего не нашел.

За ошибку не скажу. Терминал сам следит за тем чтобы данные были синхронизированы, програмно можно синхронизировать (загрузить) данные и проверить синхронизирована или нет история.

Организация доступа к данным описана тут (есть пример скрипта загрузки истории).

Функции которые могут понадобится: SeriesInfoInteger и SymbolIsSynchronized

 
awkozlov:

Как то не работает switch с символьными переменными...

Вместо:

'type' - illegal switch expression type  
'Buy' - constant expression is not integral


Используйте идентификаторы, а не текст. Что будет проще и логичней...

//Что-то типа такого (или свои идентификаторы). Написать функцию конвертирующую текст в идентификатор и обратно (при необходимости) достаточно просто.
//Да и выглядит это более профессионально в конечном итоге.
  switch(type)
  {
  case ORDER_TYPE_BUY: {direction = type;  price = SymbolInfoDouble(zSymbol,SYMBOL_ASK); break;}
  case ORDER_TYPE_SELL: {direction = type; price = SymbolInfoDouble(zSymbol,SYMBOL_BID); break;}
  default: {return(lot_value);}
  }

  switch(type)
  {
  case OP_BUY: {direction = ORDER_TYPE_BUY;  price = SymbolInfoDouble(zSymbol,SYMBOL_ASK); break;}
  case OP_SELL: {direction = RDER_TYPE_SELL; price = SymbolInfoDouble(zSymbol,SYMBOL_BID); break;}
  default: {return(lot_value);}
  }
 
awkozlov:

Как то не работает switch с символьными переменными...

Вместо:

'type' - illegal switch expression type  
'Buy' - constant expression is not integral

Приходится рисовать так:

что не так наглядно да и кривовато.

На других языках прокатывает...

Надо как-то по другому писать?

я сделал так 

#define  OP_BUY               0
#define  OP_SELL              1
#define  OP_BUYLIMIT          2
 
Interesting:

За ошибку не скажу. Терминал сам следит за тем чтобы данные были синхронизированы, програмно можно синхронизировать (загрузить) данные и проверить синхронизирована или нет история.

Организация доступа к данным описана тут (есть пример скрипта загрузки истории).

Функции которые могут понадобится: SeriesInfoInteger и SymbolIsSynchronized

Спасибо! Разобрался.
 

Есть ли в MQL5 аналоги таким библиотекам, как stdlib.mqh, WinUser32.mqh, stderror.mqh, в частности интересует функция PostMessageA?

 

 

При оптимизации с несколькими агентами результаты на график выводятся в порядке их обработки, т.е. вперемежку. Можно ли сделать порядок вывода результатов в соответствии с выборкой параметров, как это было в МТ4? Т.е. пришедший позже результат вставлялся в нужное место. Это к тому, что неудобно отслеживать тенденции и закономерности в процессе оптимизации, а анализ результатов можно делать только после окончания расчетов.

++: Это все про оптимизацию с полным перебором - на генетике это, естественно, не имеет смысла.

 
Konstantin83:

Описание в справочнике

В действительности

bool ObjectCreate(
long chart_id, // идентификатор графика
string name, // имя объекта
ENUM_OBJECT type, // тип объекта
intn win, // индекс окна);


Спасибо, поправили
 
x100intraday писал https://www.mql5.com/ru/forum/1111/page610#comment_130250:

 Запустим на M1 код примера iFractals из справки, где используется вторая - полная - форма вызова функции OnCalculate(). Но перед этим внутри этой функции исправим

на

для того, чтобы не упустить из виду ни одной строки с выводимыми результатами (если оставить как есть, визуально всегда будет видна 1, поскольку другие значения бывают редко и сразу же сменяются единицей, поэтому кажется, что единица выводится всегда). После запуска убеждаемся, что не единичные значения появляются каждую минуту, то есть на каждом новом баре, из чего недвусмысленно явствует, что индикатор перерисовывается ежеминутно полностью, несмотря на то, что в коде используется экономный алгоритм. Сомневающиеся могут добавить несколько строк кода, рисующего на каждом фрактале, скажем, вертикальные линии, затем, после первой отрисовки, удалить их, дождавшись через минуту, с появлением нового бара, появления полного набора таких же линий. Ни о какой дорисовке только последнего фрактала или линии речи почему-то не идёт.

Да, действительно, индикатора из примера у функции iFractals() обновляет заново свои индикатрные буфера значениями из встроенного индикатора. "Виновато" в этом второе условие в строчке (выделено желтым):

//--- если это первый запуск вычислений нашего индикатора или изменилось количество значений в индикаторе iFractals
//--- или если необходимо рассчитать индикатор для двух или более баров (значит что-то изменилось в истории)
   if(prev_calculated==0 || calculated!=bars_calculated || rates_total>prev_calculated+1)
     {

Объяснение: на каждом тике сравниваются эти два значения и в конце функции стоит присваивание

//--- запомним количество значений в индикаторе Fractals
   bars_calculated=calculated;

И разница между ними может возникнуть в дух случаях:

  1. изменилась сама история, на которой считается индикатор фракталов (подкачка истории пользователем)
  2. наступление события новый бар

В данном случае не сделано разделение этих двух событий, вы это обнаружили. Пока не могу сказать, будем ли мы править данный пример, чтобы не возникало таких вопросов.

Причина обращения: