Разделение объема на buy/sell volume


Разделение объема на buy/sell volume
Atom
1/24/2014


Добрый вечер,

Не знаю даже в какую ветку запостить данный вопрос, но он относится и к S#, и к обработке исходных данных от брокера.

Итак, я знаю, что CQG на русский рынок дает не только общий проторгованный объем, но и разбивку на buy volume (объем, прошедний по offer) и на sell volume (объем, прошедший по bid). Ворос, можно ли через Quik получить такую статистику (думаю, что нет), и вопрос можно ли realtime обрабатывать тиковые данные так, чтобы делить объем на buy/sell volume.

В теории, если мы имеем snapshots стаканов и тиковые данные, а также мы знаем, что на русском рынке нет crossed trades (либо OTC reported trades), то любой объем на ленте проходит либо через bid, либо через offer, а значит мы можем видеть через изменение DOM snapshot (изменение состояния стакана) после каждой сделки какой это был объем.

Как минимум это можно было бы закодить для истории и сравнить с данными CQG.

Если такое в принципе возможно, то было бы супер услышать от команды stocksharp как это можно было бы реализовать.



Thanks:


1 2  >
Mikhail Sukhov

Avatar
Date: 1/24/2014
Reply


devruss Go to

Итак, я знаю, что CQG на русский рынок дает не только общий проторгованный объем, но и разбивку на buy volume (объем, прошедний по offer) и на sell volume (объем, прошедший по bid). Ворос, можно ли через Quik получить такую статистику (думаю, что нет), и вопрос можно ли realtime обрабатывать тиковые данные так, чтобы делить объем на buy/sell volume.


Смотря что имеет ввиду под проторгованным объемом? Если имеется ввиду агрессор, то это Trade.OrderDirection. А если имеет ввиду именно сколько по рынку ударяли раз, то это можно в теории посмотреть через стаканы + тики. Но точнее только в ОЛ.

Российский рынок более открыт на данные, чем американский. И на нем можно получить значительно больше информации, чем на америке.
Thanks:

devruss

Avatar
Date: 1/24/2014
Reply


Допустим, мы смотрим на 5 минутные свечи. Если мы выведем просто volume - то он покажет, что объем был 1000 контрактов, например. Нам надо знать, сколько из этой 1000 были bid volume, а сколько ask volume. Например 800 ask volume, 200 bid volume.

Что-то вроде этого
Thanks:

Mikhail Sukhov

Avatar
Date: 1/25/2014
Reply


devruss Go to
Допустим, мы смотрим на 5 минутные свечи. Если мы выведем просто volume - то он покажет, что объем был 1000 контрактов, например. Нам надо знать, сколько из этой 1000 были bid volume, а сколько ask volume. Например 800 ask volume, 200 bid volume.


Судя по ответу, вы сами не совсем понимаете физического значения этих чисел. Могу лишь предположить, что вам нужно направление сделки.
Thanks:

devruss

Avatar
Date: 2/3/2014
Reply


Михаил,

Не стоит делать поспешных выводов насчет моей компетентности

Судя по вашему ответу, вы видите данную функциональность впервые.

Вот ссылка на видео с данной функциональностью http://www.youtube.com/watch?v=0y4a3h43oO0#t=19, и pdf с подробным описанием http://www.cqg.com/docs/TA.pdf
Thanks:

devruss

Avatar
Date: 3/23/2014
Reply


Изначально задача была следующей: "нужно разделять объем на VolumeAsk, VolumeBid
If the buyer has lifted the offer, it is counted as VolAsk or volume traded at the ask price. It is a measure of aggressive buyers.
If the seller has hit the bid, it is counted as VolBid or volume traded at the bid price. It is a measure of aggressive sellers."

Итак, после 2х месяцев изучения S#, переведу данный вопрос на язык S#:)

Задача сделать индикатор, который принимает значения (decimal Volume, var Aggressor) а на выходе дает значение decimal. Все индикаторы из S# принимают только значения decimal и все....

На входе подаются трейды (тиковые данные), из которых берется объем и значение агрессора (сделка прошла либо по биду, либо по офферу), на выходе должна формироваться агрегированное значение индикатора за 1 мин, например.

Как это сделать?
Thanks:

methyst

Avatar
Date: 3/23/2014
Reply


devruss, имеется ввиду Volume Breakdown?
то как вариант можно сравнивать только тики(как были 1-ые инди от Gomi под NT7 ). нынешнюю цену и прошлую
if (lastprice != 0)
{
if (price > lastprice) delta = volume;
if (price < lastprice) delta = -volume;
}
дальше суммировать эти тики в рамках заданного интервала(1мин например)
totaldelta+=delta;
Thanks:

devruss

Avatar
Date: 3/23/2014
Reply


Такой вариант рассматривался, но зачем реализовывать заведомо неточный индикатор, когда силами S# точно можно сделать верный Volume Breakdown... тот же CQG справляется с этой задачей великолепно
В твоем примере, неявно подразумевается, что bid/ask spread не может ползти вверх без трейдов - данное предположение допустимо с небольшой натяжкой для ликвидных рынков, но абсолютно неверно для неликвида, либо рынка с больших спредом.
Thanks:

Иван З.

Avatar
Date: 3/23/2014
Reply


methyst Go to
devruss, имеется ввиду Volume Breakdown?
то как вариант можно сравнивать только тики(как были 1-ые инди от Gomi под NT7 ). нынешнюю цену и прошлую
if (lastprice != 0)
{
if (price > lastprice) delta = volume;
if (price < lastprice) delta = -volume;
}
дальше суммировать эти тики в рамках заданного интервала(1мин например)
totaldelta+=delta;


Неправильных ответов будет процентов 10.

Если для Квика, то есть у сделки свойство OrderDirection, и Квик его транслирует. Как то так получится.

Code
var delta = trade.OrderDirection != OrderDirections.Buy ? -trade.Volume : trade.Volume;

дальше как писалось

methyst Go to

суммировать эти тики в рамках заданного интервала(1мин например)
totaldelta+=delta;


С историей другое дело, ее с направлением сделки так просто не найдешь. Надо самому Гидрой с Квика качать. Либо выше описанный methyst вариант, но он ошибки выдает.
Ну и как правило дельта рядом с профилем шагает. Я недавно у свечей такое свойство обнаружил.
Code
Candle candle = new TimeFrameCandle();
var priceLevels = candle.VolumeProfileInfo.PriceLevels;

Правда когда обнаружил оно не работало, сейчас не знаю, не проверял. Раз уж горизонтальные объемы в свече найти можно, надо и дельту сделать. Лучше два свойства TotalBuyVolume и TotalSellVolume. Ну и для полного счастья в VolumeProfileInfo.PriceLevels эти свойства тоже сделать, только для горизонтальных объемов.
Thanks: devruss

devruss

Avatar
Date: 3/23/2014
Reply


Вся история из Квика записана в Гидре вместе со стаканами

Код скорее должен выглядеть так:
Code

if (trade.OrderDirection == OrderDirections.Buy) 
              VolumeAsk += trade.Volume;
else 
              VolumeBid+= trade.Volume


Но чтобы сделать такой индикатор, в него надо передавать <trade.Volume, trade.OrderDirection>

Далее вопрос как суммировать по временному интервалу, чтобы он совпадал с временным интервалом свечки

По хорошему, конечно, надо бы добавить TotalBuyVolume и TotalSellVolume - это очень верное предложение.

Михаил, можем внести в очередь разработок доп функций?
Thanks:

Иван З.

Avatar
Date: 3/24/2014
Reply


devruss Go to

Но чтобы сделать такой индикатор, в него надо передавать <trade.Volume, trade.OrderDirection>
Далее вопрос как суммировать по временному интервалу, чтобы он совпадал с временным интервалом свечки

Способа связать сделки со свечками, походу нет. Простого и надежного способа реализации MarketDelta из свечей тоже нет.
Как вариант:
1) В индикатор надо передавать сделки trade
2) В индикаторе создать свойства OpenTime и TimeFrame на подобие свечных. OpenTime отправляем в ProcessValues для отрисовки.
3) Пока OpenTime < Trade.Time < (OpenTime + TimeFrame) считаем дельту.
4) Если((OpenTime + TimeFrame) < Trade.Time) OpenTime=(OpenTime + TimeFrame) начинаем считать дельту для новой свечи.
Конечно это туповатый костыль, но он простой.

devruss Go to

По хорошему, конечно, надо бы добавить TotalBuyVolume и TotalSellVolume - это очень верное предложение.
Михаил, можем внести в очередь разработок доп функций?


Судя по логике S# надо не только TotalBuyVolume и TotalSellVolume но и CloseOrderDirections. Так как candle.CloseVolume это объем последней сделки в свечи, тогда candle.CloseOrderDirections будет направление последней сделки в свечи. Тогда бы вам индикатор совсем просто было бы сделать.

От сюда вытекает второй вариант решения вашей проблемы, многим сложнее но думаю надежнее. Вам сюда http://www.stocksharp.co...e-bcaf-a0c832dce4de.htm . Создать свой тип свечей с этими свойствами. Реализации CandleBuilder в S# можно тут посмотреть http://stocksharp.codepl...ession/CandleBuilder.cs . Я своих свечей не делал, это только в теории.[smile]

Вообще MarketDelta, MarketProfile, VolumeProfile сейчас это модные веяния. S# стоит идти в ногу со временем, и дать возможность пользователям простой способ их реализации.[smile]
Thanks:
1 2  >

Attach files by dragging & dropping, , or pasting from the clipboard.

loading
clippy