Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Создал простой "индикатор-шпион" SendEvent.mq5, отправляющий событие при поступлении новой котировки:
Создал простой советник, который получает события от этого индикатора и пытается совершить торговую операцию (привожу часть, полный текст в приложенном файле):
Советник получает события от индикатора, но в тестере (и с визуализацией и без нее) не может выполнить торговую операцию - возвращается ошибка "Invalid Request", код возврата 10013. В реальном времени работает нормально. Если в советнике торговую операцию совершать из OnTick() вместо OnChartEvent() - тоже работает нормально.
Вставил отправку торгового запроса в шаблон советника, предлагаемый автором статьи в CodeBase - тоже не работают торговые операции (та же ошибка).
Кто-нибудь подскажет в чем причина? Читал в этой ветке, что в тестере не обрабатывается OnChartEvent(), но, в данном случае события, присылаемые индикатором, в тестере обрабатываются, но невозможно выполнить в тестере торговую операцию из OnChartEvent().
Попробуйте довести до ума мою рыбу. Логика конечно не закончена и очень тупа, но вроде сильно походит на то что Вам нужно.
По крайней мере позиции с рынка открывает и в тестере и на демке.
Не знаю по чему (разбираться лень), но Ваш пример у меня при любом раскладе выдавал 10013.
PS
Лучше привязаться к стандартным объектам (таким как CAccountInfo и CTrade). Но, если у Вас терпения хватит самостоятельно все прописать буду только рад.
Кстати, реализацию самого шпиона лучше взять из статьи, либо сделать модифицируемую копию (я, к примеру, предлагаю заменить вот этот год "(long)_Period" на дату-время отправки события или иную полезную инфу). Ваш вариант как-то совсем "сыроват".
Попробуйте довести до ума мою рыбу. Логика конечно не закончена и очень тупа, но вроде сильно походит на то что Вам нужно.
Пытаюсь получить цены по трем парам EURUSD, EURGBP, GBPUSD. Все работает хорошо при выборе "Все тики", либо "Только цены открытия" в тестере стратегий. Но если я выбираю "Каждый тик на основе реальных тиков", то почему то в однму минуту по одному инструменту может прийти несколько событий "Новый бар".
Чтобы повторить, можно выбрать интервал, например с 2016.07.15 по 2016.07.19. Вот пример лога, смотрим 7-ую минуту, 9-ую минуту:
2016.07.15 00:05:00 > -> id=2: EURGBP CHARTEVENT_NEWBAR_M1 price=0.8333
2016.07.15 00:05:00 > -> id=0: EURUSD CHARTEVENT_NEWBAR_M1 price=1.1119
2016.07.15 00:05:00 > -> id=1: GBPUSD CHARTEVENT_NEWBAR_M1 price=1.33399
2016.07.15 00:06:00 > -> id=2: EURGBP CHARTEVENT_NEWBAR_M1 price=0.8334
2016.07.15 00:06:00 > -> id=0: EURUSD CHARTEVENT_NEWBAR_M1 price=1.1119
2016.07.15 00:06:00 > -> id=1: GBPUSD CHARTEVENT_NEWBAR_M1 price=1.33394
2016.07.15 00:07:19 > -> id=2: EURGBP CHARTEVENT_NEWBAR_M1 price=0.8333700000000001
2016.07.15 00:07:19 > -> id=0: EURUSD CHARTEVENT_NEWBAR_M1 price=1.11174
2016.07.15 00:07:19 > -> id=1: GBPUSD CHARTEVENT_NEWBAR_M1 price=1.33382
2016.07.15 00:07:19 > -> id=2: EURGBP CHARTEVENT_NEWBAR_M1 price=0.8333700000000001
2016.07.15 00:07:19 > -> id=0: EURUSD CHARTEVENT_NEWBAR_M1 price=1.11174
2016.07.15 00:07:19 > -> id=1: GBPUSD CHARTEVENT_NEWBAR_M1 price=1.33381
2016.07.15 00:07:19 > -> id=2: EURGBP CHARTEVENT_NEWBAR_M1 price=0.8333700000000001
2016.07.15 00:07:19 > -> id=0: EURUSD CHARTEVENT_NEWBAR_M1 price=1.11174
2016.07.15 00:07:19 > -> id=1: GBPUSD CHARTEVENT_NEWBAR_M1 price=1.33384
2016.07.15 00:08:00 > -> id=2: EURGBP CHARTEVENT_NEWBAR_M1 price=0.83329
2016.07.15 00:08:00 > -> id=0: EURUSD CHARTEVENT_NEWBAR_M1 price=1.11167
2016.07.15 00:08:00 > -> id=1: GBPUSD CHARTEVENT_NEWBAR_M1 price=1.33394
2016.07.15 00:09:00 > -> id=2: EURGBP CHARTEVENT_NEWBAR_M1 price=0.83327
2016.07.15 00:09:00 > -> id=0: EURUSD CHARTEVENT_NEWBAR_M1 price=1.11166
2016.07.15 00:09:00 > -> id=1: GBPUSD CHARTEVENT_NEWBAR_M1 price=1.33396
2016.07.15 00:09:00 > -> id=2: EURGBP CHARTEVENT_NEWBAR_M1 price=0.83327
2016.07.15 00:09:00 > -> id=0: EURUSD CHARTEVENT_NEWBAR_M1 price=1.11166
Пытаюсь получить цены по трем парам EURUSD, EURGBP, GBPUSD. Все работает хорошо при выборе "Все тики", либо "Только цены открытия" в тестере стратегий. Но если я выбираю "Каждый тик на основе реальных тиков", то почему то в однму минуту по одному инструменту может прийти несколько событий "Новый бар".
Чтобы повторить, можно выбрать интервал, например с 2016.07.15 по 2016.07.19. Вот пример лога, смотрим 7-ую минуту, 9-ую минуту:
С чем связано такое поведение при выборе режима "Все тики на основе реальных" ?Как отлавливаете событие "Новый бар"? В 1375 билде точность прихода тиков повышена до миллисекунд:
Tester: Добавлена поддержка времени с точностью до миллисекунд. Ранее в тестере стратегий квантом времени являлась одна секунда.
При тестировании на реальных тиках миллисекунды берутся из исходных тиковых данных. При генерации тиков проставление миллисекунд происходит в соответствии с тиковым объемом. Например, если в одной секунде умещается 3 тика, то им будет проставлено время 000, 333 и 666 миллисекунды.
Новый бар отлавливаю так, как написано в статье. То есть индикатор отправляет событие "Новый бар" таким образом (сравнивается с предыдущим временем минуты ,часы, дни, месяцы):
double price_current=price[rates_total-1];
TimeCurrent(time);
if(prev_calculated==0)
{
EventCustom(CHARTEVENT_INIT,price_current);
prev_time=time;
return(rates_total);
}
//--- new tick
if((flag_event & CHARTEVENT_TICK)!=0) EventCustom(CHARTEVENT_TICK,price_current);
//--- check change time
if(time.min==prev_time.min &&
time.hour==prev_time.hour &&
time.day==prev_time.day &&
time.mon==prev_time.mon) return(rates_total);
//--- new minute
if((flag_event & CHARTEVENT_NEWBAR_M1)!=0) EventCustom(CHARTEVENT_NEWBAR_M1,price_current);
UPDATE: Проблема ушла при установке билда 1375