Пользовательские символы. Ошибки, баги, вопросы, предложения. - страница 46

 
fxsaber #:

Кастомные символы для Тестера так готовлю.

  1. С нуля создаю символ.
  2. Один раз CustomTicksReplace.
  3. Один раз CustomRatesReplace.
После этого все идеально в Тестере. Другие варианты не пробовал.

Да, CustomTicksAdd - крайне глючная, но без неё, к сожалению, не обойтись при эмуляции онлайн графиков, а делать 2 разные программы - одну для тестера, а другую для онлайна - это чревато ошибками и тем, что результаты их работы будут отличаться. В общем, засада.

Насколько я вижу по тестам, CustomTicksAdd откладывает тики в какой-то промежуточный ящик, который не гарантирует последовательности записи тиков и вообще их запись в историю.

 
Stanislav Korotky #:

Да, CustomTicksAdd - крайне глючная, но без неё, к сожалению, не обойтись при эмуляции онлайн графиков, а делать 2 разные программы - одну для тестера, а другую для онлайна - это чревато ошибками и тем, что результаты их работы будут отличаться. В общем, засада.

Насколько я вижу по тестам, CustomTicksAdd откладывает тики в какой-то промежуточный ящик, который не гарантирует последовательности записи тиков и вообще их запись в историю.

Покажите примеры глюков, пожалуйста, так как я глюков в  CustomTicksAdd не нашёл.

Проблема есть при подсчёте тиков (тиковые обёмы), если бары строятся исключительно по тикам  с помощью CustomTicksAdd , то всё что в онлайне всё работает корректно,

а вот историю записывает с ошибками и вместо тикового объёма (изменение бида) выводит общее количество тиков. Но если почитать справку, то мы видим, что при записи тиков с истории,  CustomTicksAdd начинает работать как CustomTicksReplace. 

То есть в онлайне на основе тиков, бары строятся корректно, на истории баг.

 
Aleksandr Slavskii #:

Покажите примеры глюков, пожалуйста, так как я глюков в  CustomTicksAdd не нашёл.

Публичный тест-кейс готовить нет времени. Попробуйте формировать историю, вызывая CustomTicksAdd с большим массивом тиков или чередуя с CustomTicksReplace - последовательность тиков будет нарушена, а одиночные тики на бар с помощью CustomTicksAdd вообще пропадают (с помощью CustomTicksReplace записываются).

 

Расскажите мне, как тестер формирует бары из тиков (в режиме по реальным тикам) для кастом-символов.

Ко мне обращается пользователь, потому что его робот криво открывает сделки по стратегии, которая анализирует 3 графика ренко разных размеров.

Бары и тики в базе символов записаны, но во время тестового прогона наблюдается такая картина.

bool WaitSync(const string symbol, const ENUM_TIMEFRAMES tf = PERIOD_M1)
{
  MqlTick t;
  SymbolInfoTick(symbol, t);
  const bool result = (t.time / 60 * 60 != iTime(symbol, tf, 0));
  if(result) // if bar is not yet constructed from the tick
  {
    static string msg = "";
    string update = StringFormat("unsync: %s %s %s %f", symbol, (string)t.time, (string)iTime(symbol, tf, 0), iClose(symbol, tf, 0));
    if(update != msg) // output bad status once for every unique point
    {
      Print(update);
      msg = update;
    }
  }
  return result;
}

void OnTick()
{
   // wait until new ticks takes effect on all timeseries used in the strategy!
   if(WaitSync(Custom_1) || WaitSync(Custom_2) || WaitSync(Custom_3)) return;
   ...
}

Здесь мы ждем, когда для всех кастом символов время последнего бара станет равным времени последнего тика (округленной до минуты, все происходит на M1). Ситуация рассинхронизации может действительно возникать, но на краткое время (как правило - запаздывание не более одного тика), после чего бар появляется. Однако в логе мы видим (желтые - тики, розовые - бары):

PQ      0       18:46:34.995    Core 01 EURUSD_T_r100 : real ticks begin from 2023.01.01 00:00:00
FD      0       18:46:34.995    Core 01 EURUSD_T_r200 : real ticks begin from 2023.01.02 00:00:00
KN      0       18:46:34.995    Core 01 EURUSD_T_r300 : real ticks begin from 2023.01.02 00:00:00
GS      0       18:46:34.995    Core 01 2023.01.02 06:55:45   unsync: EURUSD_T_r200 2023.01.02 06:55:45 2022.12.30 17:01:00 1.066000
ER      0       18:46:41.099    Core 01 2023.01.03 07:48:29   unsync: EURUSD_T_r300 2023.01.03 07:56:00 2022.12.30 17:42:00 1.065000
GE      0       18:46:41.099    Core 01 2023.01.03 07:56:12   2023.01.03 07:56:00, 11 // <- это выводится при успешной синхронизации в начале торгового кода из многоточия выше

что все тики с 6:55 до 7:48 так и не сформировали бар для 6:55 на символе 200пт, а тики с 7:48 до 7:56 - так и не сформировали бар 7:48 на символе 300пт.

Таких случаев очень много, но это все-таки происходит не всегда - 50 на 50.

Явно что-то идет не так в тестере.

 
Stanislav Korotky #:

Расскажите мне, как тестер формирует бары из тиков (в режиме по реальным тикам) для кастом-символов.

Сравниваю тики Терминала (CopyTicksRange) и Тестера (SymbolInfoTick по одному символу) - полное совпадение у кастомных. У реальных символов - конечно, совпадения не будет.

 

SymbolInfoTick вернул тик из будущего?

 
Stanislav Korotky #:

все тики с 6:55 до 7:48 так и не сформировали бар для 6:55 на символе 200пт

Судя по коду и логам, по этому символу после первого тика больше не было тиков до 07:56.

 
fxsaber #:

SymbolInfoTick вернул тик из будущего?

Вот это интересное наблюдение. У меня только одна догадка. Время в левой колонке выводит сам логгер терминала и это время запаздывает от тех тиков, которые поступают в торговлю. Так что это не SymbolInfoTick вернул время из будущего, а логгер тормозит.

 
fxsaber #:

Судя по коду и логам, по этому символу после первого тика больше не было тиков до 07:56.

Это не так. Дело в том, что из-за специфики ренко, внутри каждого бара все тики имеют идентичное время. Если бы в тиках менялось время, можно было бы быстро выйти за пределы бара M1, которым изображается кирпич ренко, и тогда рисунок ренко был бы испорчен (потому что по таким тикам терминал и тестер создаст стандартным образом дополнительные бары).

Там в каждом баре вагон тиков. Но некоторые бары синхронизируются, а некоторые - нет.

 
Хотел экспортировать тики в csv, чтобы тут тест-кейс выложить, но диалог Символы почему-то показывает всего 2 сотни тысяч тиков (за пару дней), хотя их гораздо больше и диапазон дат больше года. В общем, глюк на глюке.
Причина обращения: