Кастомные символы, откуда берется спред и как его сделать равным 0?

 

Непонятная ситуация с кастомными символами. Создаю свой символ, хочу прогнать по нему робота в тестере. Загружаю историю баров и в тестере откуда-то берется спред 2 пункта. Что я делаю не так, не могу понять, как мне убрать спред и откуда он берет эти 2 пункта? В настройках символа поставить 0, нельзя, ставится только плавающий, в истории у меня везде нули в столбце спред. Может кто-то знает в чем дело?

 

 
Вчера пол дня возился, так и не понял, подскажите пожалуйста, кто знает, как решить проблему.
 
кажется разобрался, почему спред не получается сделать равным нулю. Его в принципе нельзя сделать равным 0. У терминала какая-то хитрая особенность, если в файле с историей спред равен 0, то он ставит его равным 2, причем это тоже как-то не явно работает. В итоге ,чтобы сделать спред близким у нулю, нужно делать котировку в формате 25.59851, тогда можно в истории спред указать 1 и он будет равен 0.00001. И что еще странно, нельзя сделать котировку в формате 25.00001 по тому что получается тогда спред =1.00000. На мой взгляд это достаточно не очевидно, в справке я этого не нашел и пришлось долго повозиться, чтобы догадаться.
 
Мда, явно какая то недоработка.
 

Интересное кино:

EURUSD_22



И вот снимок тиковой базы:

Тиковая база


Логи Тестера:

2020.05.27 00:35:57.320 2020.04.07 00:14:06   market buy 0.01 EURUSD_22 sl: 1.07732 tp: 1.08432 (1.07932 / 1.07932)
2020.05.27 00:35:57.320 2020.04.07 00:14:06   deal #2 buy 0.01 EURUSD_22 at 1.07932 done (based on order #2)
2020.05.27 00:35:57.320 2020.04.07 00:14:06   deal performed [#2 buy 0.01 EURUSD_22 at 1.07932]
2020.05.27 00:35:57.320 2020.04.07 00:14:06   order performed buy 0.01 at 1.07932 [#2 buy 0.01 EURUSD_22 at 1.07932]
2020.05.27 00:35:57.326 2020.04.07 00:14:06   CTrade::OrderSend: market buy 0.01 EURUSD_22 sl: 1.07732 tp: 1.08432 [done at 1.07932]

Писал один писатель про кастомные символы. Там есть метод:

bool CiCustomSymbol::ChangeSpread(const uint _spread_size,const uint _spread_markup=0,const ENUM_SPREAD_BASE _spread_base=SPREAD_BASE_BID)

Подшаманил его, удалось зарядить нулевой спред. Вот такие пироги...

 
Denis Kirichenko:

Интересное кино:

И вот снимок тиковой базы:

Логи Тестера:

Писал один писатель про кастомные символы. Там есть метод:

Подшаманил его, удалось зарядить нулевой спред. Вот такие пироги...

Так через код можно любой спред сделать.
При заполнении структуры цен, для Ask присвоить цену Bid, и будет нулевой спред.

 
Maxim Romanov:

Непонятная ситуация с кастомными символами. Создаю свой символ, хочу прогнать по нему робота в тестере. Загружаю историю баров и в тестере откуда-то берется спред 2 пункта. Что я делаю не так, не могу понять, как мне убрать спред и откуда он берет эти 2 пункта? В настройках символа поставить 0, нельзя, ставится только плавающий, в истории у меня везде нули в столбце спред. Может кто-то знает в чем дело?

Ещё как вариант загрузить не историю баров, а историю тиков с нулевыми спредами. Тогда всё получится. В Тестере спред всегда плавающий. Видимо, при генерации тиков из истории минутных котировок МТ5 добавляет какой-то минимум к спреду. Да, и что важно. Что при этом тип моделирования = "Все тики". Если есть своя тиковая история, то в режиме "Каждый тик на основе реальных тиков" нулевой спред доступен. А если тут же переключиться на режим искуственной генерации тиков - "Все тики", то снова нулевой спред изменится на внутренний минимум.

 
Denis Kirichenko:

Ещё как вариант загрузить не историю баров, а историю тиков с нулевыми спредами. Тогда всё получится. В Тестере спред всегда плавающий. Видимо, при генерации тиков из истории минутных котировок МТ5 добавляет какой-то минимум к спреду. Да, и что важно. Что при этом тип моделирования = "Все тики". Если есть своя тиковая история, то в режиме "Каждый тик на основе реальных тиков" нулевой спред доступен. А если тут же переключиться на режим искуственной генерации тиков - "Все тики", то снова нулевой спред изменится на внутренний минимум.

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

 

Вот тут у меня допустим 2018.11.23 04:58:00.001, за  эту дату стоят бид = аск = 1247. Терминал на этой же дате показывает только цену аск и таких пропусков много. Соответственно, где пропуски, там он делает непонятный спред может поставить положительный, а может отрицательный. Я уже думаю, что это терминал косячит, по тому что не понимаю как так и что я делаю не так. На всякий случай прикрепил свой файл с историей.

и вот что получается в тестере, я прикрепил gif. Кстати как gif прикреплять к сообщению? У меня вставляется как картинка.

Файлы:
t71lwt2.gif  559 kb
50i_80kslq3.zip  3614 kb
 
Кто-нибудь разобрался как без тиков получить 0 спред? Или хотя бы 1 пипс.
 

Еще из "фич", если делать график с помощью CustomTicksReplace, и время брать раз в минуту, если при этом MqlTick заполнять time_msc, то график не отобразиться, а если заполять time, то отобразиться. Но тестить на м1 все равно не полючится, хотя на м5 уже можно.

Rorschach:
Кто-нибудь разобрался как без тиков получить 0 спред? Или хотя бы 1 пипс.

Кэш надо чистить

Причина обращения: