Подскажите, пожалуйста, баг в коде. На сбере работает, а на газпроме не работает

 

Всем добрый день и заранее спасибо за ответ/совет/подсказку.

Я сам не разработчик, а Заказчик, поэтому заранее извиняюсь, если по коду у меня не супер знания.

Ранее советник был написан на фьючерсах, поэтому не замечал проблемы.

Сейчас пробую на акциях российской биржи из-за комиссий этого советника подобрать параметры.

Сразу отвечу на вопрос=) Понимаю, что "нормальные люди" на валютных парах торгуют))), но если мой советник имеет баг в коде выставления заявок, то какая разница на каком инструменте)


Логика советника простая (в приложенном файле), но почему-то он по-разному ведёт себя на двух похожих инструментах (сбер работает, а газпром не работает).  Видимо, где-то в коде проблема.

На газпроме п очему-то делает отступ или сдвиг на 30 секунд вместо того, чтобы откладывать ордера от начала свечи, то есть на первой секунде минутной свечи.  1 минута — это выбранный таймфрейм.
Мне непонятно, почему газпром так реагирует.  Вроде такой же ликвидный (голубая фишка).  Спреды адекватные.
Предположения:
предположение1_*Может, из-за низкой цены Газпрома (в 2 раза ниже, чем у Сбербанка) где-то в алгоритме есть скрытый баг.
По фьючерсу на юань (цена которого 13,734 руб.) такого нет. Но может, потому что это фьючерс
По Аэрофлоту цена 53 руб. — результат как с Газпромом))) тоже постоянный убыток (!!!)

предположение2_*по спредам я не заметил ничего ужасного.  Тем более что они по всему графику Газпрома и по ВСЕМ свечам торгуются криво.  Есть только убыток -0,10 за каждую свечу.



В архиве
1_сам вопрос со скринами и пояснениями
2_логика алгоритма
3_отчет сбербанка и газпрома.  Делал исторический прогон, как учили)) на «каждый чих на основе реальных тиков»
4_(на всякий случай) выгрузил график сбербанка и газпрома, бары и тики (проверить график), если вдруг дело в данных, но может дело и не в этом.
5_сам советник




 
igor_spb:
Аэрофлоту

пока не смотрел - из общего - делайте при открытии проверку ошибок и их обрабатывайте... вплоть до того - что открываете циклом - пока не откроет или ордер не выставит....

размер спреда учитывайте. Перед самым открытием запрашивайте актуализацию бид или аска. 

Циклом открывайте или ордера выставляйте - пока не открыт пока не выставлен. Далее в цикле пауза 1 сек если не выставлен и еще раз и так раз 10-15. 

Цены открытий или выставлений ордеров проверьте - запросите перед самым открытием выставлением.

Слиппадж проверьте- увеличьте.

Используйте CTrade библ. классы. 

 
igor_spb:


Прогоните в тестере, посмотрите сохраняется ли проблема.

Добавьте подробные принты в лог во всех логических развилках, например, при выходе из обработки тиков из-за больших спредов и т.д.

 

вот для примера - раньше по крайней мере в статье... код правильный (вроде правила особо и не менялись...))

пробуйте сравнивайте - смотрите...

https://www.mql5.com/ru/articles/2739

Пример разработки спредовой стратегии на фьючерсах Московской биржи
Пример разработки спредовой стратегии на фьючерсах Московской биржи
  • www.mql5.com
MetaTrader 5 позволяет разрабатывать и тестировать роботов, торгующих одновременно на нескольких инструментах. Встроенный в платформу тестер стратегий автоматически скачивает с торгового сервера брокера тиковую историю и учитывает спецификацию контрактов — разработчику ничего не нужно делать руками. Это позволяет легко и максимально достоверно воспроизводить все условия торгового окружения — вплоть до миллисекундных интервалов между поступлениями тиков на разных символах. В этой статье мы покажем, как провести разработку и тестирование спредовой стратегии на двух фьючерсах Московской биржи.
 
Станислав Короткий #:

Прогоните в тестере, посмотрите сохраняется ли проблема.

Добавьте подробные принты в лог во всех логических разветвлениях, например, при выходе из обработки тиков из-за больших спредов и т. д.

сохраняется проблема. Причем на разных инструментах, которые стоят меньше сбера

 
Роман Ширинченко #:

пока не смотрел — из общего — делайте при открытии проверку ошибок и обрабатывайте их... вплоть до того, что открываете циклом — пока не откроется или ордер не будет выставлен...

Учитывайте размер спреда. Перед самым открытием запрашивайте актуализацию бид или аск.

Открывайте или выставляйте ордера циклом — пока не открыт, пока не выставлен. Далее в цикле пауза 1 сек, если не выставлен, и еще раз, и так раз 10-15.

Цены открытия или выставления ордеров проверьте — запросите перед самым открытием или выставлением.

Слиппадж проверьте- увеличьте.

Используйте CTrade библ. классы.

у меня код компилируется и используются из этой библиотеки. но почему-то ошибку выдает именно по инструменту дешевле сбера

 
igor_spb #:

у меня код компилируется и используются из этой библиотеки. но почему-то ошибку выдает именно по инструменту дешевле сбера

Проверьте через вывод на экран по каким ценам пытаетесь открыть позицию и выставить ордер?

Если есть сл и тр то тоже проверьте их цены.
Распринтуйте и визуально сами убедитесь в актуальности их значений.

Сколько лот если акции и контрактов если фьючи входите в позицию или в выставляемом ордере сколько их...
 
igor_spb:

1_сам вопрос со скринами и пояснениями

Код не смотрел.Сорри.

Но думаю причина может крыться в разных размерах пункта с тиком, на акциях это часто бывает.

При нормализации цены часто ограничиваются NormalizeDouble(), но когда пункты не равны тикам этого не достаточно.

попробуйте нормализовать цену так:

//+------------------------------------------------------------------+
double NormalizePrice(string symb, double price)
  {
   double tick_size = SymbolInfoDouble(symb, SYMBOL_TRADE_TICK_SIZE);
   if(tick_size == 0)
      return 0;
   price = NormalizeDouble(MathRound(price / tick_size) * tick_size, (int)SymbolInfoInteger(symb, SYMBOL_DIGITS));
   return(price);
  }
//+------------------------------------------------------------------+
 
Aleksandr Slavskii #:

Код не смотрел.Сорри.

Но думаю причина может крыться в разных размерах пункта с тиком, на акциях это часто бывает.

При нормализации цены часто ограничиваются NormalizeDouble(), но когда пункты не равны тикам этого не достаточно.

попробуйте нормализовать цену так:

красиво - спс. Взял в копилку..... 

 

тут проверьте условия свои по этим подсказкам

https://www.mql5.com/ru/articles/2513

https://www.mql5.com/ru/articles/1683 


также проверьте уровни СЛ и ТР если выставляете на мин допустимые значения к цене позиции или ордера

С чего начать при создании торгового робота для Московской биржи MOEX
С чего начать при создании торгового робота для Московской биржи MOEX
  • www.mql5.com
Многие трейдеры на Московской бирже хотели бы автоматизировать свои торговые алгоритмы, но не знают с чего начать. Язык MQL5 предлагает не только огромный набор торговых функций, но и готовые классы, которые максимально облегчают первые шаги в алготрейдинге.
 
igor_spb #:

сохраняется проблема. Причем на разных инструментах, которые стоят меньше сбера

Раз в тестере проблема воспроизводится, под отладчиком (в том числе в пошаговом режиме) посмотрите как обрабатываются тики на баре - что-то в связке логика+данные вызывает пропуск начальных тиков на баре.