Тестируем 'CopyTicks' - страница 25

 
А может быть Вы его замучали? :)
 
prostotrader:
А может быть Вы его замучали? :)

Так и есть. Достается ему очень сильно. Надо отдать должное - в ступор хоть и впадает, но редко.

Симпатичный тиковый индикатор написал. Отлаживать редкие сбои лень. 

 
fxsaber:

Так и есть. Достается ему очень сильно. Надо отдать должное - в ступор хоть и впадает, но редко.

Симпатичный тиковый индикатор написал. Отлаживать редкие сбои лень. 

Удается каждый раз укладывать ровно все тики в свечу в реальном времени?

Добавлено:

В режиме COPY_TICKS_TRADE с проверкой по объемам. 

 
Alexey Kozitsyn:

Удается каждый раз укладывать ровно все тики в свечу в реальном времени?

Добавлено:

В режиме COPY_TICKS_TRADE с проверкой по объемам. 

У меня несколько другое. Типа "не имеет аналогов" и бла-бла-бла.

По производительности не думаю, т.к. в ближайшем билде обещано ее существенное улучшение.

 
fxsaber:

У меня несколько другое. Типа "не имеет аналогов" и бла-бла-бла.

По производительности не думаю, т.к. в ближайшем билде обещано ее существенное улучшение.

Да тут дело не в производительности... бывают такие ситуации, например сейчас:

Индикатор собирает тики и считает по ним объем. Потом сравнивает этот объем с объемом из volume[]. 

И случаются ошибки нескольких ситуаций:

1. Иногда некорректно просчитывается объем первой свечи дня (не совпадает с контрольным);

2. Иногда объем по тикам считается корректно, а volume возвращает некорректное значение;

3. Иногда объем по тикам считается некорректно, а volume возвращает некорректное значение;

Самое интересное, что если ошибки 1,2 или 3 случаются на истории, после перекомпиляции индикатора ошибка не пропадает. А в случае подключения к другому серверу - пропадает.

Короче, чудеса пока не заканчиваются.

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

 
Renat Fatkhullin:

Вот как надо тестировать CopyTicks:

MqlTick ExtArr[2048];
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnTick()
  {
   ulong from   =(TimeTradeServer()-1200)*1000;
   ulong ticks  =GetMicrosecondCount();
   int   records=CopyTicks(_Symbol,ExtArr,COPY_TICKS_INFO,from,2048);

   ticks=GetMicrosecondCount()-ticks;
   Print("Time: ",ticks," msc for ",records," records");
  }

Вот вывод в микросекундах: 95 микросекунд на выборку 2048 INFO тиков за прошлые 20 минут

2016.10.18 14:15:38.673 TEST (USDCHF,M1)        Time: 95 msc for 1206 records
Это кардинально отличается от заявленных вами десятком миллисекунд. Потому что вы меряли не CopyTicks.

Тормоза после закрытия рынка

MqlTick ExtArr[2048];
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnStart()
  {
   ulong from   =(TimeCurrent()-1200)*1000;
   ulong ticks  =GetMicrosecondCount();
   int   records=CopyTicks(_Symbol,ExtArr,COPY_TICKS_INFO,from,2048);

   ticks=GetMicrosecondCount()-ticks;
   Print("Time: ",ticks," msc for ",records," records");
  }

Результат

2016.10.29 00:31:10.952 Test (GBPUSD,M1)        Time: 85 msc for 1333 records
2016.10.29 00:31:05.435 Test (EURCHF,M1)        Time: 15283 msc for 874 records
2016.10.29 00:31:03.960 Test (EURCHF,M1)        Time: 11629 msc for 874 records
2016.10.29 00:31:02.128 Test (EURCHF,M1)        Time: 10127 msc for 874 records
2016.10.29 00:31:00.332 Test (EURCHF,M1)        Time: 7318 msc for 874 records

2016.10.29 00:30:52.049 Test (EURUSD,M1)        Time: 51 msc for 862 records

Может показаться, что это только на EURCHF. Но стоит взять EURUSD и позакачивать котиры. Как скрипт начинает и на EURSD выполняться десятки мс. Начались эти тормоза после закрытия рынка. До закрытия все было на порядки быстрее.

 

Уважаемые разработчики! Проблема CopyTicks(), а в частности, синхронизация объемов на свече (укладывание всех объемов тиков свечи в свечу и сравнение с volume[] этой свечи). Продолжается.

Сейчас снова вылезло 2 ошибки:

1. Стабильно возникает ошибка контроля объемов на свече открытия (10.00). Тестирую по RTS, SBRF, Si (все -12.16). Ошибка по каждому из этих инструментов! 

2. Если по какой-то причине возникает ошибка контроля объемов на свече после 10.00 в реальном времени, то эта же ошибка возникает и на истории. Однако! Если изменить сервер - ошибка на истории пропадает. 

 

Пример к предыдущему посту (по ошибке 2):

2016.10.31 12:13:43.699 (Si-12.16,M1)   VolumeControl: Контроль свечи 2016.10.31 10:05 пройден! Контрольная сумма = 3480 (1353+2127)
2016.10.31 12:13:43.699 (Si-12.16,M1)   VolumeControl: Контроль свечи 2016.10.31 10:06 пройден! Контрольная сумма = 4103 (2236+1867)
2016.10.31 12:13:43.699 (Si-12.16,M1)   VolumeControl: ОШИБКА на свече 2016.10.31 10:07! Сумма объемов на покупку = 1074, сумма объемов на продажу = 3917, контрольная сумма (покупки+продажи) = 5009
2016.10.31 12:13:43.699 (Si-12.16,M1)   VolumeControl: Контроль свечи 2016.10.31 10:08 пройден! Контрольная сумма = 3121 (1479+1642)
2016.10.31 12:13:43.699 (Si-12.16,M1)   VolumeControl: Контроль свечи 2016.10.31 10:09 пройден! Контрольная сумма = 3760 (1046+2714)

Это до смены сервера. А вот лог после смены сервера:

2016.10.31 12:18:12.109 (Si-12.16,M1)   VolumeControl: Контроль свечи 2016.10.31 10:05 пройден! Контрольная сумма = 3480 (1353+2127)
2016.10.31 12:18:12.109 (Si-12.16,M1)   VolumeControl: Контроль свечи 2016.10.31 10:06 пройден! Контрольная сумма = 4103 (2236+1867)
2016.10.31 12:18:12.109 (Si-12.16,M1)   VolumeControl: Контроль свечи 2016.10.31 10:07 пройден! Контрольная сумма = 5009 (1082+3927)
2016.10.31 12:18:12.109 (Si-12.16,M1)   VolumeControl: Контроль свечи 2016.10.31 10:08 пройден! Контрольная сумма = 3121 (1479+1642)
2016.10.31 12:18:12.110 (Si-12.16,M1)   VolumeControl: Контроль свечи 2016.10.31 10:09 пройден! Контрольная сумма = 3760 (1046+2714)

Вот он, локализованный "КОСЯК"! Я сам тут контроли не рисую, значения в скобках не подгоняю, мне это не нужно. Но ошибка есть, и исправляется она путем смены сервера!

Это лог с контроля истории (при запуске индикатора/нажатия кнопки "обновить").
 

 

А теперь замечания по ошибке №1.

Через некоторое время после открытия рынка (сейчас прошло около 40 минут). При полном пересчете индикатора - ошибки контроля свечи в 10.00 уже нет! Даже без переключения сервера. Как будто кто-то на сервер дозакачал историю. 

 

Еще наблюдение по ошибке №2:

Если по какой-то причине возникает ошибка контроля объемов на свече после 10.00 в реальном времени, то эта же ошибка возникает и на истории. Однако! Если изменить сервер - ошибка на истории пропадает. 

Похоже, что тики, которые были ранее получены локально кэшируются на машине и перезаписываются только после смены сервера. Это было бы хорошо, но в случае, если бы они поступали в полном объеме! А так получается, что ошибки в истории накапливаются. И избавиться от них можно лишь изменив торговый сервер (по крайней мере я знаю лишь этот способ).