Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Cейчас обновился и пытаюсь опять с этим разобраться. Принты поставил почти на каждой строчке. Результаты сообщу.
Вот прогон с Вашей вставкой, момент фиксации стоп-лосса:
2011.08.09 00:41:08 Core 1 2011.01.14 01:41:27 Long position by EURUSD to be closed of stop-loss2011.08.09 00:41:08 Core 1 2011.01.14 01:41:27 -----------------Deal #63 sl 1.33328
2011.08.09 00:41:08 Core 1 2011.01.14 01:41:27 oldDealsTotal=62 newDealsTotal=63
2011.08.09 00:41:08 Core 1 2011.01.14 01:41:27 CSampleExpert::Trade
2011.08.09 00:41:08 Core 1 2011.01.14 01:41:27 order performed sell 0.15 at 1.33328 [#63 sell 0.15 EURUSD at 1.33328]
2011.08.09 00:41:08 Core 1 2011.01.14 01:41:27 deal performed [#63 sell 0.15 EURUSD at 1.33328]
2011.08.09 00:41:08 Core 1 2011.01.14 01:41:27 deal #63 sell 0.15 EURUSD at 1.33328 done (based on order #63)
2011.08.09 00:41:08 Core 1 2011.01.14 01:41:27 stop loss triggered buy 0.15 EURUSD 1.32127 sl: 1.33328 tp: 1.35139 [#63 sell 0.15 EURUSD at 1.33328]
2011.08.09 00:41:08 Core 1 2011.01.13 18:32:00 Long position by EURUSD to be modified trailing
Выставляю отложенные ордера со сроком жизни 1 час. Через час ордера, которые не были активизированы, закрываются по времени истечения ордера. Если одновременно закрывается несколько ордеров и перед закрытием функция HistoryOrdersTotal() имела не нулевое значение, то она теряет некоторые ордера. Например, перед закрытием 8-ми ордеров, функция имела значение = 4, то после закрытия, она имеет значение 10. Два ордера потерялись.
Что значит "ордера потерялись"? Необходимо иметь ввиду, что сообщения, поступающие в OnTrade(), могут нести информацию не об одном торговом событии. Кроме того, если одновременно валится несколько сообщений, то при обработке первого сообщения исторический кеш может уже измениться, и у вам может появиться ощущение "потери событий".
Почитайте статью Торговые события в MetaTrader 5:
Заключение
Все операции в торгово-аналитической платформе MetaTrader 5 производятся асинхронно и отсылка сообщений обо всех изменениях на торговом счете производятся независимо друг от друга. Поэтому не нужно пытаться отслеживать одиночное событие по правилу "Один запрос - Одно торговое событие". Если требуется точно определить что именно изменилось по приходу события Trade, то нужно на каждом вызове обработчика OnTrade анализировать все сделки, позиции и ордера и сравнивать с тем состоянием, что было до его появления.Я специально до закрытия ордеров запросил значение HistoryOrdersTotal(), которое было равно 4. После закрытия 8-ми ордеров, значение HistoryOrdersTotal() должно было быть равно 12 (4+8), а оно равно 10. Я приложил лог файл, аналогичные ситуации в нем встречаются неоднократно. Также приложил эксперт, с помощью которого это получено. Сделайте это сами, и все увидете.
Попробуйте изменить функцию, что будет?
HTML-отчет по результатам прогона тестера не всегда сохраняется в файл?!
Опишите точнее. ПРи каких обстоятельствах.
Опишите точнее. ПРи каких обстоятельствах.
редко, примерно один из 20-30 прогонов тестера - открываю вкладку "Результаты"
клик сохранить отчет XML - получаю файл отчета, все ОК!
клик сохранить отчет HTML - всплывает окно сохранения файла, какое-то время(недолго) висит с пустым ProgressBar, потом ProgressBar быстро заполняется и окно закрывается... но файла отчета при этом не создается!
Ни каких закономерностей, когда именно это происходит указать не могу.
Попробуйте изменить функцию, что будет?
Ключевым является "нужно на каждом вызове обработчика OnTrade анализировать все сделки, позиции и ордера и сравнивать с тем состоянием, что было до его появления ". В рассматриваемом примере с отложниками это относится только к ордерам в истории. Чтобы ордера не терялись, я бы так изменил код:
Вводим глобальную переменную int oldHistoryOrders; а в Ontrade примерно так:
Я не так работаю с OnTrade() как Вы описали. В своем приложенном коде, я все убрал, оставив только ту часть, которая подчеркивает косяк функции. У меня в советнике практически нет циклов. Советник обрабатывает на одном тике один инструмент. Поэтому мне циклы не нужны. За 12 тиков, я обрабатываю все инструменты.
ПС: OnTrade() сообщает мне о торговом событии. А какое событие произошло, определяют мои функции без циклов.