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

 
 Раз в выходные котировок нет, означает ли это, что сервер и историю не отдаёт? По-моему, маловероятное предположение, но основания думать так всё же неоднократно возникали, потому что в выходные индикатор либо не срабатывает, либо после нудных и упорных переходов по ТФам и переключений входных параметров индикатора в окне настроек происходила долгожданная отработка, хотя она должна была происходить при любых настроечных конфигурациях.
Торговые советники и собственные индикаторы - Алгоритмический трейдинг, торговые роботы - Справка по MetaTrader 5
Торговые советники и собственные индикаторы - Алгоритмический трейдинг, торговые роботы - Справка по MetaTrader 5
  • www.metatrader5.com
Среди программ для автоматического трейдинга можно выделить две большие категории: торговые роботы и индикаторы. Первые предназначены для совершения торговых операций на рынках, а вторые — для анализа котировок и выявления закономерностей в их изменении. При этом индикаторы могут использоваться непосредственно в роботах, образуя полноценную...
 
x572intraday:

 Да, я прекрасно помню: делать попытку предварительной фэйковой загрузки истории в OnInit. Не помогло ни там, ни в OnCalculate, даже в цикле с сотней повторов. Не знаю, как на самом деле, но внешне никакой обещанной подгрузки истории (хоть и с опозданием) не наблюдалось, результат до конца оставался неудовлетворительным.

 Более того, были другие случаи, когда многократно возвращался ответ:

но в итоге продолжения отработки индикатора не было, в ответ была тишина.

Не нужно делать циклов с повторами.

Если это индикатор, то делайте однократный запрос нужного символа-периода в OnCalculate. Если не получилось, то return(0)

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

В зависимости от тормознутости и загруженности ресурсов вашего компьютера может пройти не одна сотня OnCalculate.

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

 
x572intraday:
 Раз в выходные котировок нет, означает ли это, что сервер и историю не отдаёт? По-моему, маловероятное предположение, но основания думать так всё же неоднократно возникали, потому что в выходные индикатор либо не срабатывает, либо после нудных и упорных переходов по ТФам и переключений входных параметров индикатора в окне настроек происходила долгожданная отработка, хотя она должна была происходить при любых настроечных конфигурациях.

Сервер историю отдаёт даже в выходные.

Контролируйте построение баров по времени последнего тика соответствующего символа

 
Slava:

Если это индикатор, то делайте однократный запрос нужного символа-периода в OnCalculate. Если не получилось, то return(0)

 Ну return(false) в случае неудачи — это же классика. Так и делаю. Всё бы хорошо, но проблема в том, что дальнейшие расчёты у меня завязаны на успешную загрузку истории (и эту логику не изменить), а в случае неудачи и возврата из функции расчётов они просто не осуществятся и дальнейшие графические построения не получат нужных координат, всё сползёт. Как этого избежать — пока не придумал и надежд что-то изменить тоже не предвидится. Пока что у меня так: либо вся история загружена и все таймсерии по всем ТФам построены и индикатор срабатывает почти мгновенно и без пропущенных из-за return(false) расчётов, либо части истории не хватает, код по return возвращается в функцию более высокого уровня и там в бесконечном цикле пытается запросить недостающую историю, что ни к чему не приводит. От третьего варианта — без return — и провала некоторых расчётов, из-за которых отрисовка графики получается неполноценной, я попросту отказался.

 Продолжая немного сидеть в танке, всё ещё недоумеваю... Реально ли организовать беззадержечную MQL-логику индикатора для работы только с локальной историей, без необходимости докачивать недостающую и терпеть связанные с этим задержки? Или любые функции Copy... неизбежно вынуждены обращаться к серверу для докачки даже той части истории, которая мне не нужна для обработки? Проще говоря, стандартные же индикаторы моментально отрисовываются на имеющейся на ПК истории, безо всякой докачки (я прошёлся поиском по индикаторам в папке Examples — там от силы используется только CopyBuffer(), и то далеко не во всех)... или же докачка скрыта от глаз? Но тогда для чего она нужна?

 Спасибо. Над Вашими рекомендациями обязательно поразмышляю — возможно, они мне пригодятся.

Документация по MQL5: Константы, перечисления и структуры / Константы индикаторов / Стили рисования
Документация по MQL5: Константы, перечисления и структуры / Константы индикаторов / Стили рисования
  • www.mql5.com
Стили рисования - Константы индикаторов - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 

Несколько часов был не у компа. В это время возникла нештатная ситуация и робот стал строчит очень много принтов. В итоге забился полностью диск. А это нарушает работу Терминалов, т.к. они не могут скинуть на диск свою историю цен.


Нужно недопустить подобного забивания диска. Один вариант - запрет записи в папку. Т.е. жить без логов на диске всегда. Другой - убивать лог-файлы, когда осталось мало свободного места.

Кто-нибудь решал такую проблему.

 
Slava:

Если это индикатор, то делайте однократный запрос нужного символа-периода в OnCalculate. Если не получилось, то return(0)

А если нужно запустить индикатор на выходных?

Только принудительный вызов ОнКалкулейт из таймера (со всеми вытекающими костылями в виде копирования массивов для передачи по ссылке)?

 
x572intraday:

Реально ли организовать беззадержечную MQL-логику индикатора для работы только с локальной историей, без необходимости докачивать недостающую и терпеть связанные с этим задержки? Или любые функции Copy... неизбежно вынуждены обращаться к серверу для докачки даже той части истории, которая мне не нужна для обработки?

Можно сделать свой кэш (записывать в файлы).

Когда такое предложили мне, я, конечно, покрутил у виска, но это действительно лучше, чем ждать изменения подхода к работе с тайм-сериями от MQ.

 
fxsaber:

Несколько часов был не у компа. В это время возникла нештатная ситуация и робот стал строчит очень много принтов. В итоге забился полностью диск. А это нарушает работу Терминалов, т.к. они не могут скинуть на диск свою историю цен.


Нужно недопустить подобного забивания диска. Один вариант - запрет записи в папку. Т.е. жить без логов на диске всегда. Другой - убивать лог-файлы, когда осталось мало свободного места.

Кто-нибудь решал такую проблему.

 Ради интереса метнулся у себя проверить и ударил пол челюстью: 183 Гб! Это почти 4/5 от моего SSD. Образы виртуальной машины меньше занимают. Зато будет что в старости почитать...

Виртуальный хостинг для MetaTrader 5
Виртуальный хостинг для MetaTrader 5
  • www.mql5.com
Самый быстрый виртуальный выделенный сервер (VPS) для трейдинга на форексе от производителей терминала MetaTrader 4/5
 
x572intraday:

 Ради интереса метнулся у себя проверить и ударил пол челюстью: 183 Гб! Это почти 4/5 от моего SSD. Образы виртуальной машины меньше занимают. Зато будет что в старости почитать...

Print и Alert - потенциально опасные функции.

 
 Все цены выводятся с точностью до пятого знака после запятой, а одной почему-то в том же списке вздумалось вывестись вот так: 
Price=0.7235200000000001
 С какой стати? Ошибка или надо вывод причёсывать к единому виду? Ну, положим, PrintFormat'ом или fprint'ом я причешу, но в принципе такое не является некорректным представлением числа?
Причина обращения: