Mikhail Sukhov
|
Date: 1/24/2014
devruss Итак, я знаю, что CQG на русский рынок дает не только общий проторгованный объем, но и разбивку на buy volume (объем, прошедний по offer) и на sell volume (объем, прошедший по bid). Ворос, можно ли через Quik получить такую статистику (думаю, что нет), и вопрос можно ли realtime обрабатывать тиковые данные так, чтобы делить объем на buy/sell volume.
Смотря что имеет ввиду под проторгованным объемом? Если имеется ввиду агрессор, то это Trade.OrderDirection. А если имеет ввиду именно сколько по рынку ударяли раз, то это можно в теории посмотреть через стаканы + тики. Но точнее только в ОЛ. Российский рынок более открыт на данные, чем американский. И на нем можно получить значительно больше информации, чем на америке.
|
|
Thanks:
|
|
|
|
|
devruss
|
Date: 1/24/2014
Допустим, мы смотрим на 5 минутные свечи. Если мы выведем просто volume - то он покажет, что объем был 1000 контрактов, например. Нам надо знать, сколько из этой 1000 были bid volume, а сколько ask volume. Например 800 ask volume, 200 bid volume. Что-то вроде этого
|
|
Thanks:
|
|
|
|
|
Mikhail Sukhov
|
Date: 1/25/2014
devruss Допустим, мы смотрим на 5 минутные свечи. Если мы выведем просто volume - то он покажет, что объем был 1000 контрактов, например. Нам надо знать, сколько из этой 1000 были bid volume, а сколько ask volume. Например 800 ask volume, 200 bid volume. Судя по ответу, вы сами не совсем понимаете физического значения этих чисел. Могу лишь предположить, что вам нужно направление сделки.
|
|
Thanks:
|
|
|
|
|
devruss
|
Date: 2/3/2014
|
|
Thanks:
|
|
|
|
|
devruss
|
Date: 3/23/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 мин, например.
Как это сделать?
|
|
Thanks:
|
|
|
|
|
methyst
|
Date: 3/23/2014
devruss, имеется ввиду Volume Breakdown? то как вариант можно сравнивать только тики(как были 1-ые инди от Gomi под NT7 ). нынешнюю цену и прошлую if (lastprice != 0) { if (price > lastprice) delta = volume; if (price < lastprice) delta = -volume; } дальше суммировать эти тики в рамках заданного интервала(1мин например) totaldelta+=delta;
|
|
Thanks:
|
|
|
|
|
devruss
|
Date: 3/23/2014
Такой вариант рассматривался, но зачем реализовывать заведомо неточный индикатор, когда силами S# точно можно сделать верный Volume Breakdown... тот же CQG справляется с этой задачей великолепно В твоем примере, неявно подразумевается, что bid/ask spread не может ползти вверх без трейдов - данное предположение допустимо с небольшой натяжкой для ликвидных рынков, но абсолютно неверно для неликвида, либо рынка с больших спредом.
|
|
Thanks:
|
|
|
|
|
Иван З.
|
Date: 3/23/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, и Квик его транслирует. Как то так получится. Code
var delta = trade.OrderDirection != OrderDirections.Buy ? -trade.Volume : trade.Volume;
дальше как писалось methyst суммировать эти тики в рамках заданного интервала(1мин например) totaldelta+=delta; С историей другое дело, ее с направлением сделки так просто не найдешь. Надо самому Гидрой с Квика качать. Либо выше описанный methyst вариант, но он ошибки выдает. Ну и как правило дельта рядом с профилем шагает. Я недавно у свечей такое свойство обнаружил. Code
Candle candle = new TimeFrameCandle();
var priceLevels = candle.VolumeProfileInfo.PriceLevels;
Правда когда обнаружил оно не работало, сейчас не знаю, не проверял. Раз уж горизонтальные объемы в свече найти можно, надо и дельту сделать. Лучше два свойства TotalBuyVolume и TotalSellVolume. Ну и для полного счастья в VolumeProfileInfo.PriceLevels эти свойства тоже сделать, только для горизонтальных объемов.
|
|
|
|
|
devruss
|
Date: 3/23/2014
Вся история из Квика записана в Гидре вместе со стаканами Код скорее должен выглядеть так: Code
if (trade.OrderDirection == OrderDirections.Buy)
VolumeAsk += trade.Volume;
else
VolumeBid+= trade.Volume
Но чтобы сделать такой индикатор, в него надо передавать <trade.Volume, trade.OrderDirection> Далее вопрос как суммировать по временному интервалу, чтобы он совпадал с временным интервалом свечки По хорошему, конечно, надо бы добавить TotalBuyVolume и TotalSellVolume - это очень верное предложение. Михаил, можем внести в очередь разработок доп функций?
|
|
Thanks:
|
|
|
|
|
Иван З.
|
Date: 3/24/2014
|
|
|
|
devruss Но чтобы сделать такой индикатор, в него надо передавать <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 По хорошему, конечно, надо бы добавить 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:
|
|
|
|