Корректность Volume[0]

 

Правильные ли Volume[0] возвращает значения?

Вот небольшой советник для проверки

int t=0;
void OnTick()  {  
      t++;
      if (t<=15)
         Print("тик номер ",t,", объем бара Volume = ", Volume[0]);
}

Вот результаты при тесте на минутках:

тик номер 1, объем бара Volume = 1
тик номер 2, объем бара Volume = 2
тик номер 3, объем бара Volume = 3
тик номер 4, объем бара Volume = 4
тик номер 5, объем бара Volume = 5
тик номер 6, объем бара Volume = 6
тик номер 7, объем бара Volume = 7
тик номер 8, объем бара Volume = 1
тик номер 9, объем бара Volume = 3
тик номер 10, объем бара Volume = 4
тик номер 11, объем бара Volume = 5
тик номер 12, объем бара Volume = 7
тик номер 13, объем бара Volume = 1
тик номер 14, объем бара Volume = 2
тик номер 15, объем бара Volume = 3

Как можно заметить, Volume текущего бара возвращает не совсем корректные значения, например на предыдущем тике объем бара 225, а на следующем тике 227.

Пробовал на разных таймфреймах и валютных парах, везде пропуски.

В чём причина? 

 
ДЦ не все котировки присылает, вот и пропуски. Иногда на открытии вообще сразу с 3-4 и больше может быть, а не с 1.
 

Ну, дело в том что это протестировано в тестере стратегий на исторических данных.

Например вот сейчас запустил сову на 2014.07.15 00:00 и наблюдаю пропуск на втором минутном баре. Захожу в архив котировок и вижу что бар есть: H,L,O,С есть, объем указан 8. Значит тестер должен сгенерировать 8 тиков на этом баре, но по факту журнал пишет объемы 1,2,3,5,6,7,8 и далее следующий бар. Тестер генерирует не весь объем?  

 
tuner:

Ну, дело в том что это протестировано в тестере стратегий на исторических данных.

Например вот сейчас запустил сову на 2014.07.15 00:00 и наблюдаю пропуск на втором минутном баре. Захожу в архив котировок и вижу что бар есть: H,L,O,С есть, объем указан 8. Значит тестер должен сгенерировать 8 тиков на этом баре, но по факту журнал пишет объемы 1,2,3,5,6,7,8 и далее следующий бар. Тестер генерирует не весь объем?  


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

1. Свеча c Open == High == Low == Close.

2. Volume = 3. 

В итоге тестер генерирует свечу с Volume 1 и, соответственно, только одним тиком. Со стороны разработчиков был получен ответ, что такое поведение меняться не будет, т. к. неизвестно, каким образом моделировать еще 2 тика. Хотя понять, что этому мешает (почему нельзя генерировать три тика с одинаковой ценой?), не могу.

 

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

 

Scriptong

эта теория выглядит правдоподобно. Получается что тестер тупо пропускает повторные тики и функция OnTick() на них не вызывается.

Интересно как дела обстоят с тестированием на реальных тиках.

 
tuner:

Интересно как дела обстоят с тестированием на реальных тиках.

Кстати, интересный вопрос.

Проверил при помощи следующего кода (FXT-файл сгенерирован при помощи скрипта FXTFileMaker, реальные тики собраны с 01.06.2014):

   static double lastBid = 0;
   static datetime lastTime = 0;
   
   if (Bid == lastBid && lastTime >= Time[0])
      Print("Повторный тик!!! Новый тик (", Bid, "): ", TimeToString(TimeCurrent(), TIME_SECONDS), ", предыдущий тик (", lastBid, "): ", TimeToString(lastTime, TIME_SECONDS));
  
   lastBid = Bid;
   lastTime = TimeCurrent();

 В журнале видим:

15:48:10 2014.06.02 00:59  Blank EURUSD,M1: Повторный тик!!! Новый тик (1.3632): 00:59:35, предыдущий тик (1.3632): 00:59:34
15:48:10 2014.06.02 03:23  Blank EURUSD,M1: Повторный тик!!! Новый тик (1.3622): 03:23:35, предыдущий тик (1.3622): 03:23:34
15:48:10 2014.06.02 04:31  Blank EURUSD,M1: Повторный тик!!! Новый тик (1.3621): 04:31:56, предыдущий тик (1.3621): 04:31:54
15:48:10 2014.06.02 04:32  Blank EURUSD,M1: Повторный тик!!! Новый тик (1.3622): 04:32:01, предыдущий тик (1.3622): 04:32:01
15:48:10 2014.06.02 04:32  Blank EURUSD,M1: Повторный тик!!! Новый тик (1.3622): 04:32:03, предыдущий тик (1.3622): 04:32:01
15:48:10 2014.06.02 04:32  Blank EURUSD,M1: Повторный тик!!! Новый тик (1.3622): 04:32:03, предыдущий тик (1.3622): 04:32:03
15:48:10 2014.06.02 04:32  Blank EURUSD,M1: Повторный тик!!! Новый тик (1.3622): 04:32:14, предыдущий тик (1.3622): 04:32:03
15:48:10 2014.06.02 04:32  Blank EURUSD,M1: Повторный тик!!! Новый тик (1.3621): 04:32:27, предыдущий тик (1.3621): 04:32:27
15:48:10 2014.06.02 04:32  Blank EURUSD,M1: Повторный тик!!! Новый тик (1.3621): 04:32:27, предыдущий тик (1.3621): 04:32:27
15:48:10 2014.06.02 04:32  Blank EURUSD,M1: Повторный тик!!! Новый тик (1.3621): 04:32:27, предыдущий тик (1.3621): 04:32:27
15:48:10 2014.06.02 04:32  Blank EURUSD,M1: Повторный тик!!! Новый тик (1.3621): 04:32:27, предыдущий тик (1.3621): 04:32:27
15:48:10 2014.06.02 04:32  Blank EURUSD,M1: Повторный тик!!! Новый тик (1.3621): 04:32:27, предыдущий тик (1.3621): 04:32:27
15:48:10 2014.06.02 04:32  Blank EURUSD,M1: Повторный тик!!! Новый тик (1.3621): 04:32:34, предыдущий тик (1.3621): 04:32:27
15:48:10 2014.06.02 04:32  Blank EURUSD,M1: Повторный тик!!! Новый тик (1.3621): 04:32:41, предыдущий тик (1.3621): 04:32:34
15:48:10 2014.06.02 04:32  Blank EURUSD,M1: Повторный тик!!! Новый тик (1.3621): 04:32:44, предыдущий тик (1.3621): 04:32:41
15:48:10 2014.06.02 04:32  Blank EURUSD,M1: Повторный тик!!! Новый тик (1.3621): 04:32:46, предыдущий тик (1.3621): 04:32:44
15:48:10 2014.06.02 04:32  Blank EURUSD,M1: Повторный тик!!! Новый тик (1.3621): 04:32:49, предыдущий тик (1.3621): 04:32:46
15:48:10 2014.06.02 04:32  Blank EURUSD,M1: Повторный тик!!! Новый тик (1.3621): 04:32:53, предыдущий тик (1.3621): 04:32:49
15:48:10 2014.06.02 04:32  Blank EURUSD,M1: Повторный тик!!! Новый тик (1.3621): 04:32:56, предыдущий тик (1.3621): 04:32:53
15:48:10 2014.06.02 04:32  Blank EURUSD,M1: Повторный тик!!! Новый тик (1.3621): 04:32:59, предыдущий тик (1.3621): 04:32:56
15:48:10 2014.06.02 04:33  Blank EURUSD,M1: Повторный тик!!! Новый тик (1.3621): 04:33:10, предыдущий тик (1.3621): 04:33:04
15:48:10 2014.06.02 04:33  Blank EURUSD,M1: Повторный тик!!! Новый тик (1.3621): 04:33:12, предыдущий тик (1.3621): 04:33:10
15:48:10 2014.06.02 04:33  Blank EURUSD,M1: Повторный тик!!! Новый тик (1.3621): 04:33:16, предыдущий тик (1.3621): 04:33:12
15:48:10 2014.06.02 04:33  Blank EURUSD,M1: Повторный тик!!! Новый тик (1.3621): 04:33:18, предыдущий тик (1.3621): 04:33:16
15:48:10 2014.06.02 04:33  Blank EURUSD,M1: Повторный тик!!! Новый тик (1.3621): 04:33:25, предыдущий тик (1.3621): 04:33:18
15:48:10 2014.06.02 04:33  Blank EURUSD,M1: Повторный тик!!! Новый тик (1.3621): 04:33:35, предыдущий тик (1.3621): 04:33:25
15:48:10 2014.06.02 04:33  Blank EURUSD,M1: Повторный тик!!! Новый тик (1.3621): 04:33:38, предыдущий тик (1.3621): 04:33:35
15:48:10 2014.06.02 04:33  Blank EURUSD,M1: Повторный тик!!! Новый тик (1.3621): 04:33:40, предыдущий тик (1.3621): 04:33:38
15:48:10 2014.06.02 04:33  Blank EURUSD,M1: Повторный тик!!! Новый тик (1.3621): 04:33:47, предыдущий тик (1.3621): 04:33:40
15:48:10 2014.06.02 08:40  Blank EURUSD,M1: Повторный тик!!! Новый тик (1.3628): 08:40:56, предыдущий тик (1.3628): 08:40:53

 И таких записей довольно много. То есть тестер без проблем справляется с обработкой одинаковых тиков, идущих подряд. Так что мое предположение (о том, что тестер пропускает два одинаковых тика), видимо, неверно. Хотя дело может быть и в алгоритме моделирования тиков. И именно там возникает проблема, при которой не пишется два одинаковых тика подряд.

 

Ну а может быть тестер пропускает повторные тики только если они генерируются самим тестером? А с реальными тиками все ок.

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

 
tuner:

Ну а может быть тестер пропускает повторные тики только если они генерируются самим тестером? А с реальными тиками все ок.

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


На повторные тики терминал нормально реагирует: индикатор обрабатывает все тики (история тиков собирается при помощи индикатора), а советник все, которые успевает. То есть у советника как раз возможны пропуски тиков, но не по вине терминала.
Причина обращения: