Бета-версия платформы MetaTrader 5 build 1845: Функции для работы с барами в MQL5 и улучшения в тестере стратегий - страница 6
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
ExpertRemove()
Для индикаторов такого, к сожалению, нет.
нее, удалять эксперта не нужно, а нужно лишь прекратить выполнение mq-программы из любого места, вот к примеру:
я при выставлении ордеров проверяю разрешение на торговые операции путем вызова функции if(ServerDisable()) return;, заодно и обновляю котировки
если сервер недоступен, то будет последовательный выход из функции открытия ордера и потом буду еще проверять выставлен ли ордер в OnTick()....
а реально то нечего не нужно больше ни проверять ни делать - нет связи с сервером, значит нужно ждать следующего тика, а значит нужно просто передать управление терминалу
вот типа так:
нее, удалять эксперта не нужно, а нужно лишь прекратить выполнение mq-программы из любого места, вот к примеру:
я при выставлении ордеров проверяю разрешение на торговые операции путем вызова функции ServerDisable(), заодно и обновляю котировки
если сервер недоступен, то будет последовательный выход из функции открытия ордера и потом буду еще проверять выставлен ли ордер в OnTick()....
а реально то нечего не нужно больше ни проверять ни делать - нет связи с сервером, значит нужно ждать следующего тика, а значит нужно просто передать управление терминалу
вот типа так:
В начале OnTick() проверка, если не прошли её - return; что и будет соответствовать передаче управления терминалу до след.тика.
да все это ясно, так все и делается, но вот Вы проверили, что торговые операции разрешены, затем начинаете считать ордера, проверять что закрыть, проверять что там с сигналами на открытие, а потом собрались выставить ордер, тут 2 варианта:
1. не проверяете больше доступность торговых операций - имхо не корректно, я проверяю непосредственно перед попыткой выставления ордера
2. проверяете еще раз доступность торговых операций - имхо, правильно, но если сервер не дает выставить ордер, то потом начинаем выходить различными способами из mql-программы с передачей управления терминалу
я же предлагаю иметь возможность в любом месте выполнения mql-программы прекратить работу mql-программы
ЗЫ: на кой это? ну как бы есть ECN, там не факт, что успели на одном тике выставить ордер и не факт, что на этом тике сможете закрыть другой ордер, или модифицировать тейк и стоплосс выставленного ордера, для некоторых стратегий не нужно сервер "долбить запросами", проще все это сделать на следующем тике, если с первого раза не получилось
я же предлагаю иметь возможность в любом месте выполнения mql-программы прекратить работу mql-программы
Вам уже указали, как это сделать: ExpertRemove. Прекращение работы - это и есть выгрузка программы, другого варианта быть не может.
А то что вы тут навыдумывали с "передачей управления терминалу" через вызов функции - это приведёт к рекурсии.
Вам уже указали, как это сделать: ExpertRemove. Прекращение работы - это и есть выгрузка программы, другого варианта быть не может.
А то что вы тут навыдумывали с "передачей управления терминалу" через вызов функции - это приведёт к рекурсии.
ничего я не выдумывал, в Делфи всегда был Halt, Abort и Exit, вот и предложил по аналогии
iLowest и iHighest работают с ошибками. Если iHighest работает еще более-менее сносно, то iLowest работает совсем некорректно и ужасно тормозит. Код скрипта для проверки:
При bars=1, iHighest отрабатывает корректно и моментально. iLowest выполняет код более 16-ти секунд! И выдает некорректные значения. Должны выдаваться номера баров по порядку начиная с нулевого.
При bars=0 или отрицательном значении, обе функции вообще виснут. В MQL4 они в этом случае искали минимальное и максимальное значение среди всей доступной истории баров.
Для чего вы ставите в начале кода эту строчку?:
Это ведь ведёт к перерисовке графика. Оно вам надо, создавать такую лишнюю нагрузку?
Я могу понять, когда ставят такую строчку в коды, в которых функция Comment() вообще не выводит комментарии на график, от слова совсем. Поскольку, видимо, это сродни некоторому вампиризму./* Подпитаться возмущёнными эмоциями каких-то пользователей, когда такой код удалит какой-то нужный комментарий, оставленный на графике другой программой.*/
Но у вас не такая ситуация.
P./S.:
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Ошибки, баги, вопросы
Renat Fatkhullin, 2017.12.05 02:51
...
В МТ5 функция Comment явным образом вызывает перерисовку чарта, так как в приоритет ставится именно отображение коммента на чарте. Иначе функция бесполезна.
...
Отсюда дополнительные выводы при проведении бенчмарков:
по сути некоторые тесты могут вылиться в тестирование графической карты, а не алгоритмов или функций. тест на ноутбуке и стационарном компьютере могут показать кратно разные результаты просто из-за 3-5 кратно медленной видеокарты
...
Для чего вы ставите в начале кода эту строчку?:
Это ведь ведёт к перерисовке графика. Оно вам надо, создавать такую лишнюю нагрузку?
Как работает функция Comment я знаю. Поэтому и поставил ее чтобы принудительно очищать экран от предыдущих результатов теста. Я проводил многократные тесты с различными параметрами и т.к. функция iLowest работает по несколько секунд, или скрипт мог вообще зависнуть, то было не совсем понятно, вижу ли я всё ещё старые данные от старых тестов или же это уже появились новые данные. Самый простой и удобный, на мой взгляд, выход из этого был через принудительную очистку в начале теста. Естественно что в реальной программе такого не будет.
P.S. Про создание лишней однократной нагрузки при запуске тестового скрипта в течении нескольких микросекунд функцией Comment, это конечно смешно. Мой компьютер это героически вынес. Тут как говорится "No Comments" :)
Как работает функция Comment я знаю. Поэтому и поставил ее чтобы принудительно очищать экран от предыдущих результатов теста. Я проводил многократные тесты с различными параметрами и т.к. функция iLowest работает по несколько секунд, или скрипт мог вообще зависнуть, то было не совсем понятно, вижу ли я всё ещё старые данные от старых тестов или же это уже появились новые данные. Самый простой и удобный, на мой взгляд, выход из этого был через принудительную очистку в начале теста. Естественно что в реальной программе такого не будет.
P.S. Про создание лишней однократной нагрузки при запуске тестового скрипта в течении нескольких микросекунд функцией Comment, это конечно смешно. Мой компьютер это героически вынес. Тут как говорится "No Comments" :)
Два раза по тридцать оборотов у вас работают по несколько секунд или скрипт может вообще зависнуть?
Вы что-то путаете.
У вас что может вызывать замедление (но вряд ли такое, какое описываете), к примеру: - это то, что при формировании текстовых строк, вы прямо в них вызываете довольно мощные функции (iHighest и iLowest)