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

 
Давно справшивал на 4-ке но так ответа и не получил кроме насмешек))

при неверном преобразовании StringToTime возвращает TimeGMT(); например при StringToTime("0") - когда аргумент не парсится.

И возвращает нормальное время когда аргумент парсится, например при StringToTime("24.10.2014") - D'2014.10.24 00:00:00'

Это нормально? Почему именно TimeGMT()? Это -2 часа от моего текущего времени в МТ4 и на компе.

 
давным давно поднимался вопрос об ошибке 4806 " Почему функция CopyBuffer, помещенная в пользовательском индикаторе, приводит к ошибке 4806,

в то время, как эта же функция с теми же самыми параметрами в коде эксперта работает нормально? "

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

зачем вообще нужны индикаторы типа iXXX, если их нельзя нормально использовать?

 
tyn:
давным давно поднимался вопрос об ошибке 4806 " Почему функция CopyBuffer, помещенная в пользовательском индикаторе, приводит к ошибке 4806,

в то время, как эта же функция с теми же самыми параметрами в коде эксперта работает нормально? "

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

зачем вообще нужны индикаторы типа iXXX, если их нельзя нормально использовать?

Добрый день. Данные для CopyBuffer берутся с того же ТФ, на котором запущен Ваш индикатор?

Пробовали пользоваться функцией BarsCalculated() для решения проблемы?

 
marketeer:
Как в MQL-ном ООП проверить тип указателя на принадлежность к конкретному классу - типа instanceof в JavaScript или typeid в C++?
CObject *ob;
datetime t;

typename(ob); // CObject
typename(t);  // datetime
Документация по MQL5: Основы языка / Объектно-ориентированное программирование / Шаблоны функций
Документация по MQL5: Основы языка / Объектно-ориентированное программирование / Шаблоны функций
  • www.mql5.com
Основы языка / Объектно-ориентированное программирование / Шаблоны функций - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Можно ли установить свое значение (которое отображается) для ценовой метки вместо цены, на которой она установлена? Если да то как?
 
Tapochun:

Добрый день. Данные для CopyBuffer берутся с того же ТФ, на котором запущен Ваш индикатор?

Пробовали пользоваться функцией BarsCalculated() для решения проблемы?

Спасибо за вопрос. Данные брал с iATR на Д1 основной индикатор работает на меньших таймфреймах, BarsCalculated() также возвращает -1 и ту же ошибку. Как я догадываюсь, функция есть, а инидикатора нет (в рантайме). Если создать индикатор в другом окне на том же инструменте, то все работает. В режиме отладки тоже работает. Но мой вопрос Это бага или я че то не понимаю?
 

День добрый.

Проблема с вызовами функций из системных dll. Задача -- написать простенький сервер TCP на MQL5, к-ый висит на определенном порту и просто принимает сообщения.

Импортировал из ws2_32.dll функции WSAStartup(), WSAClenup(), socket(), bind(), accept(), listen(), recv(). Все работает ровно до того, пока не попытаешься остановить сервер. После попытки остановит сервер и корректно завершить работу скрипта, терминал просто вылетает.

Методом научного тыка вышел на функцию recv().

в прикрепленном файле есть строчка (171):

  int bytesCnt = recv(clientSocket, rcvBuffer, RCVBUFFSIZE, 0);

если ее привести к виду:

  int bytesCnt = 10; //recv(clientSocket, rcvBuffer, RCVBUFFSIZE, 0);

то сервер останавливается безо всяких ошибок. Примеры использования ф-ий для работы с сетью смотрел на MSDN и все сделал по аналогии.

Есть ли у кого-нибудь идеи как решить проблему?

Файлы:
 
tyn:
Спасибо за вопрос. Данные брал с iATR на Д1 основной индикатор работает на меньших таймфреймах, BarsCalculated() также возвращает -1 и ту же ошибку. Как я догадываюсь, функция есть, а инидикатора нет (в рантайме). Если создать индикатор в другом окне на том же инструменте, то все работает. В режиме отладки тоже работает. Но мой вопрос Это бага или я че то не понимаю?

Сам недавно бился с этой проблемой. Решил, не знаю насколько оптимально, но решил. Только данные брал с iFractals, но это не важно. Почему спросил про ТФ. По моим наблюдениям, происходит следующая вещь. Например, индикатор работает на М15. Если данные по индикатору запрашиваются с M1 до М15 - все нормально, данные доступны сразу в момент обращения (если не первый вызов). Если же данные запрашиваются с М30 (повторюсь, сам индикатор работает на ТФ М15), то в момент обращения данных по М30 за новую свечу нет (либо нужен предварительный запрос, либо данные запаздывают на тик). Решил следующим образом. Запоминаю результат BarsCalculated() на текущей свече. Как только в следующий раз BarsCalculated() возвращает значение на 1 больше (образовалась новая свеча), запоминаем новое значение BarsCalculated() и копируем данные. Но этот момент (появления данных по индикатору на старшем ТФ) не совпадает с образованием новой свечи по текущему ТФ.

Да, BarsCalculated() возвращает -1, когда вообще нет данных, такое бывает, насколько мне известно, только при первом запуске. Т.е, когда получил handle индикатора и сразу запрашиваешь данные. Тоже нужно подождать. 

 

Сразу после создания хендла индикатора нельзя запрашивать данные, так как они не готовы. Процесс инициализации и перерасчета сложен и зависит от множества факторов.

Правильная стратегия: создать хендл в онините, а работать с данными по приходу первого тика.

 
Renat:

Сразу после создания хендла индикатора нельзя запрашивать данные, так как они не готовы. Процесс инициализации и перерасчета сложен и зависит от множества факторов.

Правильная стратегия: создать хендл в онините, а работать с данными по приходу первого тика.

Тогда такой вопрос. Если индикатор запущен на М15. Образовалась новая свеча. При запросе данных для М15 и М30 они должны быть доступны в один момент?
Причина обращения: