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


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

Не знаю даже в какую ветку запостить данный вопрос, но он относится и к 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 как это можно было бы реализовать.


Теги:


Спасибо:


< 1 2 
Иван З.

Фотография
Дата: 25.03.2014
Ответить


Короче, скажу так, зря мы на S# наезжаем, и умничаем. Все есть и все работает. Приношу свои извинения. [blush] Кто не верит вот код для проверки

                if (candle.State == CandleStates.Finished)
                {
                    var Volume = candle.TotalVolume;
                    var BuyVolume = candle.VolumeProfileInfo.PriceLevels.Select(level => level.BuyVolume).Sum();
                    var SellVolume = candle.VolumeProfileInfo.PriceLevels.Select(level => level.SellVolume).Sum();
                    var TotalVolume = BuyVolume + SellVolume;

                }

Но очень за мудрили и спрятали.[biggrin]

Спасибо: whitebar devruss methyst

devruss

Фотография
Дата: 25.03.2014
Ответить


Иван З.: Короче, скажу так, зря мы на S# наезжаем, и умничаем. Все есть и все работает. Приношу свои извинения. [blush] Кто не верит вот код для проверки

            if (candle.State == CandleStates.Finished)
            {
                var Volume = candle.TotalVolume;
                var BuyVolume = candle.VolumeProfileInfo.PriceLevels.Select(level => level.BuyVolume).Sum();
                var SellVolume = candle.VolumeProfileInfo.PriceLevels.Select(level => level.SellVolume).Sum();
                var TotalVolume = BuyVolume + SellVolume;

            }
> Но очень за мудрили и спрятали.[biggrin]

Иван действительно нашел решение!

[Сравнение с CQG](http://gyazo.com/ad430475ee54f7ff7f8bb9b0d5f3fd06)
Вывод - картинка действительно правдоподобная. Данные в S# пришли из Гидры, записанные вживую из Финама.
Различия конечно есть, но кто прав сказать сложно, главное, что различия несущественные и профиль объемов один и тот же.
Спасибо:

methyst

Фотография
Дата: 28.03.2014
Ответить


Иван З.: Кто не верит вот код для проверки

Спасибо, работает. ЗЫ: Код вроде просили, после проверки.



namespace StockSharp.Algo.Indicators.Misc
{
    using System.Linq;
    using System.ComponentModel;
    using StockSharp.Algo.Candles;

    /// <summary>
    /// Объем свечки.
    /// </summary>
    [DisplayName("Дельта")]
    [Description("Дельта свечки.")]
    public class DeltaIndicator: BaseIndicator<decimal>
    {
        /// <summary>
        /// Создать <see cref="DeltaIndicator"/>.
        /// </summary>
        public DeltaIndicator()
            : base(typeof(Candle))
        {
            Volume = new VolumeIndicator();
        }

        public VolumeIndicator Volume { get; private set; }
        /// <summary>
        /// Сформирован ли индикатор.
        /// </summary>
        public override bool IsFormed
        {
            get { return Volume.IsFormed; }
        }

        /// <summary>
        /// Обработать входное значение.
        /// </summary>
        /// <param name="input">Входное значение.</param>
        /// <returns>Результирующее значение.</returns>
        protected override decimal OnProcess(IIndicatorValue input)
        {
            var candle = input.GetValue<Candle>();           
            var result = candle.VolumeProfileInfo.PriceLevels.Select(level => level.BuyVolume - level.SellVolume).Sum();
            return result;
        }
    }
}

картинка

Спасибо:
< 1 2 

Добавить файлы через драг-н-дроп, , или вставить из буфера обмена.

loading
clippy