Mikhail Sukhov
|
Дата: 24.01.2014
devruss:
Итак, я знаю, что CQG на русский рынок дает не только общий проторгованный объем, но и разбивку на buy volume (объем, прошедний по offer) и на sell volume (объем, прошедший по bid). Ворос, можно ли через Quik получить такую статистику (думаю, что нет), и вопрос можно ли realtime обрабатывать тиковые данные так, чтобы делить объем на buy/sell volume.
Смотря что имеет ввиду под проторгованным объемом? Если имеется ввиду агрессор, то это Trade.OrderDirection. А если имеет ввиду именно сколько по рынку ударяли раз, то это можно в теории посмотреть через стаканы + тики. Но точнее только в ОЛ.
Российский рынок более открыт на данные, чем американский. И на нем можно получить значительно больше информации, чем на америке.
|
|
|
|
Спасибо:
|
|
|
|
|
|
devruss
|
Дата: 24.01.2014
Допустим, мы смотрим на 5 минутные свечи. Если мы выведем просто volume - то он покажет, что объем был 1000 контрактов, например. Нам надо знать, сколько из этой 1000 были bid volume, а сколько ask volume. Например 800 ask volume, 200 bid volume.
Что-то вроде этого 
|
|
|
|
Спасибо:
|
|
|
|
|
|
Mikhail Sukhov
|
Дата: 25.01.2014
devruss:
Допустим, мы смотрим на 5 минутные свечи. Если мы выведем просто volume - то он покажет, что объем был 1000 контрактов, например. Нам надо знать, сколько из этой 1000 были bid volume, а сколько ask volume. Например 800 ask volume, 200 bid volume.
Судя по ответу, вы сами не совсем понимаете физического значения этих чисел. Могу лишь предположить, что вам нужно направление сделки.
|
|
|
|
Спасибо:
|
|
|
|
|
|
devruss
|
Дата: 03.02.2014
|
|
|
|
Спасибо:
|
|
|
|
|
|
devruss
|
Дата: 23.03.2014
Изначально задача была следующей: "нужно разделять объем на 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 мин, например.
Как это сделать?
|
|
|
|
Спасибо:
|
|
|
|
|
|
methyst
|
Дата: 23.03.2014
devruss, имеется ввиду Volume Breakdown?
то как вариант можно сравнивать только тики(как были 1-ые инди от Gomi под NT7 ). нынешнюю цену и прошлую
if (lastprice != 0)
{
if (price > lastprice) delta = volume;
if (price < lastprice) delta = -volume;
}
дальше суммировать эти тики в рамках заданного интервала(1мин например)
totaldelta+=delta;
|
|
|
|
Спасибо:
|
|
|
|
|
|
devruss
|
Дата: 23.03.2014
Такой вариант рассматривался, но зачем реализовывать заведомо неточный индикатор, когда силами S# точно можно сделать верный Volume Breakdown... тот же CQG справляется с этой задачей великолепно
В твоем примере, неявно подразумевается, что bid/ask spread не может ползти вверх без трейдов - данное предположение допустимо с небольшой натяжкой для ликвидных рынков, но абсолютно неверно для неликвида, либо рынка с больших спредом.
|
|
|
|
Спасибо:
|
|
|
|
|
|
Иван З.
|
Дата: 23.03.2014
|
|
|
|
|
methyst:
devruss, имеется ввиду Volume Breakdown?
то как вариант можно сравнивать только тики(как были 1-ые инди от Gomi под NT7 ). нынешнюю цену и прошлую
if (lastprice != 0)
{
if (price > lastprice) delta = volume;
if (price < lastprice) delta = -volume;
}
дальше суммировать эти тики в рамках заданного интервала(1мин например)
totaldelta+=delta;
Неправильных ответов будет процентов 10.
Если для Квика, то есть у сделки свойство OrderDirection, и Квик его транслирует. Как то так получится.
var delta = trade.OrderDirection != OrderDirections.Buy ? -trade.Volume : trade.Volume;
дальше как писалось
methyst:
суммировать эти тики в рамках заданного интервала(1мин например)
totaldelta+=delta;
С историей другое дело, ее с направлением сделки так просто не найдешь. Надо самому Гидрой с Квика качать. Либо выше описанный methyst вариант, но он ошибки выдает.
Ну и как правило дельта рядом с профилем шагает. Я недавно у свечей такое свойство обнаружил.
Candle candle = new TimeFrameCandle();
var priceLevels = candle.VolumeProfileInfo.PriceLevels;
Правда когда обнаружил оно не работало, сейчас не знаю, не проверял. Раз уж горизонтальные объемы в свече найти можно, надо и дельту сделать. Лучше два свойства TotalBuyVolume и TotalSellVolume. Ну и для полного счастья в VolumeProfileInfo.PriceLevels эти свойства тоже сделать, только для горизонтальных объемов.
|
|
|
|
|
|
|
devruss
|
Дата: 23.03.2014
Вся история из Квика записана в Гидре вместе со стаканами
Код скорее должен выглядеть так:
if (trade.OrderDirection == OrderDirections.Buy)
VolumeAsk += trade.Volume;
else
VolumeBid+= trade.Volume
Но чтобы сделать такой индикатор, в него надо передавать <trade.Volume, trade.OrderDirection>
Далее вопрос как суммировать по временному интервалу, чтобы он совпадал с временным интервалом свечки
По хорошему, конечно, надо бы добавить TotalBuyVolume и TotalSellVolume - это очень верное предложение.
Михаил, можем внести в очередь разработок доп функций?
|
|
|
|
Спасибо:
|
|
|
|
|
|
Иван З.
|
Дата: 24.03.2014
|
|
|
|
|
devruss:
Но чтобы сделать такой индикатор, в него надо передавать <trade.Volume, trade.OrderDirection>
Далее вопрос как суммировать по временному интервалу, чтобы он совпадал с временным интервалом свечки
Способа связать сделки со свечками, походу нет. Простого и надежного способа реализации MarketDelta из свечей тоже нет.
Как вариант:
- В индикатор надо передавать сделки trade
- В индикаторе создать свойства OpenTime и TimeFrame на подобие свечных. OpenTime отправляем в ProcessValues для отрисовки.
- Пока OpenTime < Trade.Time < (OpenTime + TimeFrame) считаем дельту.
- Если((OpenTime + TimeFrame) < Trade.Time) OpenTime=(OpenTime + TimeFrame) начинаем считать дельту для новой свечи.
Конечно это туповатый костыль, но он простой.
devruss:
По хорошему, конечно, надо бы добавить TotalBuyVolume и TotalSellVolume - это очень верное предложение.
Михаил, можем внести в очередь разработок доп функций?
Судя по логике S# надо не только TotalBuyVolume и TotalSellVolume но и CloseOrderDirections. Так как candle.CloseVolume это объем последней сделки в свечи, тогда candle.CloseOrderDirections будет направление последней сделки в свечи. Тогда бы вам индикатор совсем просто было бы сделать.
От сюда вытекает второй вариант решения вашей проблемы, многим сложнее но думаю надежнее. Вам сюда http://www.stocksharp.com/doc/?topic=html/99da6499-9ac1-4e7e-bcaf-a0c832dce4de.htm . Создать свой тип свечей с этими свойствами. Реализации CandleBuilder в S# можно тут посмотреть http://stocksharp.codeplex.com/SourceControl/latest#Sources/Algo/Candles/Compression/CandleBuilder.cs . Я своих свечей не делал, это только в теории.[smile]
Вообще MarketDelta, MarketProfile, VolumeProfile сейчас это модные веяния. S# стоит идти в ногу со временем, и дать возможность пользователям простой способ их реализации.[smile]
|
|
|
|
Спасибо:
|
|
|
|
|