Level2 данные
Доступ к совокупным и неагрегированным коллекциям книги заказов.

Теория

Книга заказов (или level2) - это набор заявок на покупку и продажу для определенных инструментов, организованных по уровню цен. У каждого уровня есть три важных значения - цена, размер и сторона. Эта коллекция динамична, то есть постоянно обновляется в реальном времени в течение дня.
Многие профессиональные трейдеры разрабатывают свои стратегии, используя данные книги заказов. Quantower API предоставляет пользователям простой способ получить агрегированные и неагрегированные снимки книги заказов. ** Чтобы использовать его, вам просто нужно выполнить метод GetDepthOfMarketAggregatedCollections и передать нужные вам параметры. Этот метод находится в классе «DepthOfMarket». У каждого инструмента есть свой объект DepthOfMarket.

Загрузки

Есть два метода загрузки
1
public DepthOfMarketAggregatedCollections GetDepthOfMarketAggregatedCollections(GetLevel2ItemsParameters parameters = null)
Copied!
Этот метод принимает объект GetLevel2ItemsParameters со свойствами:
  • AggregatedMethod - перечисление, тип агрегирования (по умолчанию «Уровень цен»)
  • CustomTickSize - шаг агрегирования (не может быть меньше размера тика символа)
  • LevelsCount - количество необходимых уровней
  • CalculateCumulative - установите значение true, если вам нужно кумулятивное значение для каждого уровня цен.
1
public DepthOfMarketAggregatedCollections GetDepthOfMarketAggregatedCollections(GetDepthOfMarketParameters parameters)
Copied!
Этот метод принимает объект «GetDepthOfMarketParameters» со свойствами:
  • GetLevel2ItemsParameters - объект, описанный выше.
  • CalculateImbalancePercent - установите значение «истина», если вам необходимо значение «дисбаланса» для каждого уровня цен.
Эти методы возвращают объект DepthOfMarketAggregatedCollections с двумя списками - Asks и Bids. Каждая коллекция содержит экземпляры класса Level2Item. Есть наши уровни цен.

Практика

В этом разделе мы разработаем простой индикатор, который будет рисовать «кумулятивные» значения в виде гистограммы.

Входные параметры

Во-первых, давайте определим входные параметры. Мы хотим управлять количеством уровней и устанавливать собственный размер тика.
1
[InputParameter("Level count", 10, 1, 9999, 1, 0)]
2
public int InputLevelsCount = 10;
3
4
[InputParameter("Custom tick size", 30, 0.0001, 9999, 0.0001, 4)]
5
public double InputCustomTicksize = 0.0001;
Copied!

Конструктор класса

Заполните конструктор нашего класса. Задайте имя и добавьте серию строк.
1
Name = "Level2 cumulative";
2
3
AddLineSeries("Asks cumulative", Color.DarkRed, 10, LineStyle.Histogramm);
4
AddLineSeries("Bids cumulative", Color.DarkGreen, 10, LineStyle.Histogramm);
5
6
SeparateWindow = true;
Copied!

OnInit метод

Обращать внимание! В методе OnInit нам нужно подписаться на событие NewLevel2. Это необходимо для того, чтобы терминал отправил поставщику запрос подписки на «книгу заказов». Метод Symbol_NewLevel2Handler мы оставляем пустым.
1
protected override void OnInit()
2
{
3
this.Symbol.NewLevel2 += Symbol_NewLevel2Handler;
4
}
5
6
private void Symbol_NewLevel2Handler(Symbol symbol, Level2Quote level2, DOMQuote dom)
7
{
8
9
}
Copied!

OnUpdate метод

В методе OnUpdate мы пропускаем историческую часть, а затем получаем снимок уровня 2. Обязательно проверьте, что коллекции Ask / Bid имеют значения. Затем мы получаем требуемые уровни и устанавливаем «Накопительные» значения в наши индикаторные буферы.
1
protected override void OnUpdate(UpdateArgs args)
2
{
3
// skip historical part
4
if (args.Reason == UpdateReason.HistoricalBar)
5
return;
6
7
// get current 'order book' snapshot
8
var dom = this.Symbol.DepthOfMarket.GetDepthOfMarketAggregatedCollections(new GetLevel2ItemsParameters()
9
{
10
AggregateMethod = AggregateMethod.ByPriceLVL,
11
LevelsCount = this.InputLevelsCount,
12
CalculateCumulative = true,
13
CustomTickSize = this.InputCustomTicksize
14
});
15
16
if (dom.Asks.Length > 0)
17
SetValue(dom.Asks.Last().Cumulative, 0);
18
19
if (dom.Bids.Length > 0)
20
SetValue(-dom.Bids.Last().Cumulative, 1);
21
}
Copied!

OnClear метод

В «OnClear» не забудьте отказаться от подписки на «NewLevel2».
1
protected override void OnClear()
2
{
3
this.Symbol.NewLevel2 -= Symbol_NewLevel2Handler;
4
}
Copied!