
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Подскажите, можно ли реализовать аналог RefreshRates() и дождаться обновления цен внутри OnTick()? В тестере этого сделать не получилось.
Если это невозможно, то как проще всего реализовать обработку ошибок торговых операций с проверкой котировок на обновление?
Шо то Вы странное спрашиваете)
Тестер обрабатывает все тики. На реальном счёте таки используйте RefreshRates перед получением данных.
Шо то Вы странное спрашиваете)
Тестер обрабатывает все тики.
Речь идет о получении данных котировок, которые возникают в то время, пока экспертом обрабатывается тик.
В MT4 для этого была функция RefreshRates(), она обновляла данные по инструменту.
В МТ5 обновить данные по инструменту во время обработки тика не получается.
а, в 5ке таки нет RefreshRates. SymbolInfoTick иль SymbolInfoDouble должны получать последние данные, в понедельник можно проверить
RefreshRates
Обновляет котировки по символу
В классе CSymbolInfo есть соответствующий метод, всегда использую при реквотах.
RefreshRates
Обновляет котировки по символу
Использовал аналогичный метод:
Но суть проблемы в том, что в тестере он не работает и соответственно протестировать обработку ошибок в тестере невозможно.
Для воспроизведения ошибки набросал код:
Результат:
Тоже самое через информацию об инструменте:
Результат:
Использовал аналогичный метод:
Но суть проблемы в том, что в тестере он не работает и соответственно протестировать обработку ошибок в тестере невозможно.
В тестере реквоты моделируются при выборе режима торговли 'Произвольная задержка'. Выдержки из журнала агента:
2011.08.02 05:29:44 Core 1 2011.03.31 23:59:59 ---------------Report-------------------2011.08.02 05:29:44 Core 1 2011.03.31 23:59:59 Balance=10000.00 Equite=13685.27 Profit=0.00 MarginLevel=0.00
2011.08.02 05:29:44 Core 1 2011.03.31 23:59:59 Ошибок открытия: 1 Ошибок закрытия: 0 Ошибок модификации: 13 Реквоты: 8
2011.08.02 05:29:44 Core 1 2011.03.31 23:59:59 Время работы: 1 min. 2 сек.
2011.08.02 05:29:06 Core 1 2011.01.25 21:22:20 vol= 0.12011.08.02 05:29:06 Core 1 2011.01.25 21:22:27 requote 1.36893 / 1.36908 / 1.36893 (instant sell 0.10 EURUSD at 1.36860 tp: 1.33926)
2011.08.02 05:29:06 Core 1 2011.01.25 21:22:27 CTrade::PositionOpen: instant sell 0.10 EURUSD at 1.36860 tp: 1.33926 [requote (1.36893/1.36908)]
2011.08.02 05:29:06 Core 1 2011.01.25 21:22:27 Error opening Short position by EURUSD : 'Requote'
2011.08.02 05:29:06 Core 1 2011.01.25 21:22:27 Open parameters : price=1.368600,TP=1.339260,SL=0.000000
2011.08.02 05:29:06 Core 1 2011.01.25 21:22:28 instant sell 0.10 EURUSD at 1.36893 tp: 1.33926 (1.36893 / 1.36908 / 1.36893)
2011.08.02 05:29:06 Core 1 2011.01.25 21:22:28 deal #121 sell 0.10 EURUSD at 1.36893 done (based on order #122)
2011.08.02 05:29:06 Core 1 2011.01.25 21:22:28 deal performed [#121 sell 0.10 EURUSD at 1.36893]
2011.08.02 05:29:06 Core 1 2011.01.25 21:22:28 order performed sell 0.10 at 1.36893 [#122 sell 0.10 EURUSD at 1.36893]
2011.08.02 05:29:06 Core 1 2011.01.25 21:22:28 CTrade::PositionOpen: instant sell 0.10 EURUSD at 1.36893 tp: 1.33926 [done at 0.00000]
2011.08.02 05:29:06 Core 1 2011.01.25 21:22:28 ShortPosition by EURUSD to be opened
2011.08.02 05:29:06 Core 1 2011.01.25 21:22:28 Margin Level= 612.22
2011.08.02 05:29:06 Core 1 2011.01.25 21:22:28 oldDealsTotal=120 newDealsTotal=121
2011.08.02 05:29:06 Core 1 2011.01.25 21:22:28 -----------------Deal #121 EURUSD Position Reopened
Тот же тест для 'Обычного' режима торговли:
2011.08.02 05:39:13 Core 1 2011.03.31 23:59:59 ---------------Report-------------------2011.08.02 05:39:13 Core 1 2011.03.31 23:59:59 Balance=10000.00 Equite=13717.80 Profit=0.00 MarginLevel=0.00
2011.08.02 05:39:13 Core 1 2011.03.31 23:59:59 Ошибок открытия: 0 Ошибок закрытия: 0 Ошибок модификации: 0 Реквоты: 0
2011.08.02 05:39:13 Core 1 2011.03.31 23:59:59 Время работы: 1 min. 5 сек.
В тестере реквоты моделируются при выборе режима торговли 'Произвольная задержка'. Выдержки из журнала агента:
То, что ошибки возникают итак понятно. Проблема с обработкой ошибок, когда нужно дождаться обновленных цен. В режиме тестирования внутри OnTick() их не дождаться.
То, что ошибки возникают итак понятно. Проблема с обработкой ошибок, когда нужно дождаться обновленных цен. В режиме тестирования внутри OnTick() их не дождаться.
Всё прекрасно обновляется, посмотрите мой пример, там получаем реквоту, обновляем цены, посылаем повторный запрос с новыми ценами, сделка совершается. И всё это в одном цикле, хоть в OnTick, хоть в OnTimer.
Приведенные выше примеры описывают конкретные случаи, когда при тестировании обновление данных не работает.
Так что "всё прекрасно обновляется" - как минимум не правда...
Приведенные выше примеры описывают конкретные случаи, когда при тестировании обновление данных не работает.
Так что "всё прекрасно обновляется" - как минимум не правда...
Читайте документацию:
Режим торговли
В данном поле указывает режим торговли, которая эмулируется тестером стратегий. На данный момент предусмотрены два режим торговли:
Обычный режим
В данном режиме все ордера исполняются по запрошенным ценам, отсутствуют реквоты и т.д.
Произвольная задержка
Режим произвольных задержек предусмотрен для тестирования экспертов в условиях, приближенных к реальным. С момента отсылки приказа и до его исполнения цена может измениться. В зависимости от отклонения, установленного в ордере, может произойти его исполнение по текущей цене (если она в пределах отклонения) или реквотирование. Тестирование в данном режиме позволит экспертописателю правильно запрограммировать обработку подобных ситуаций.
Имитация задержки осуществляется для всех торговых запросов, отсылаемых из терминала (выставление ордеров, изменение стоп-уровней, и т.д.). Задержка исполнения осуществляется по следующему принципу: случайным образом выбирается число от 0 до 9, и на такое число секунд осуществляется задержка; если выбранное число равно 9, то случайным образом выбирается еще одно число из такого же диапазона и прибавляется к первому. Таким образом, вероятность задержки исполнения на 0-8 секунд составляет 90%, а вероятность задержки на 9-18 секунд составляет 10%.
Вам надо не тупо обновлять цены внутри OnTick (как известно, пока не обработан текущий тик, следующие просто не попадут на вход) , а послать торговый запрос, дождаться ответа сервера, имитируемого тестером (а он придёт с задержкой), и только потом обновить цены. Чем меньше будет проскальзывание в запросе, тем больше получите реквот. И обрабатывайте их как Вам угодно.