Как в 4.1 формировать свечки из тиков в реал тайме?

Как в 4.1 формировать свечки из тиков в реал тайме?
Atom
5/30/2012
ionn


Как теперь формировать свечки из тиков в реальном времени? Мне нужно самому генерировать тики (сделки), без ITrader.

в 3 версии, я делал так:

определял источник свечек, с методом AddNewTrade() и через него скармливал тики. CandleManager соответственно строил свечки, а теперь?


public abstract class MyCandleSource : Disposable, ICandleSource

public class ParallelMyTraderCandleSource : MyCandleSource
    {
        private readonly SynchronizedList<Trade> _newTrades = new SynchronizedList<Trade>();

        private bool _isInProcess;
        private readonly Timer _timer;

        /// <summary>
        /// Создать <see cref="ParallelTraderCandleSource"/>.
        /// </summary>
        /// <param name="trader">Торговый шлюз, у которого используется событие <see cref="ITrader.NewTrades"/>.</param>
        public ParallelMyCandleSource()
            : this(TimeSpan.FromMilliseconds(300))
        {        }

        /// <summary>
        /// Создать <see cref="ParallelTraderCandleSource"/>.
        /// </summary>
        /// <param name="trader">Торговый шлюз, у которого используется событие <see cref="ITrader.NewTrades"/>.</param>
        /// <param name="interval">Интервал отправки новых сделок.</param>
        public ParallelMyCandleSource(TimeSpan interval)
            : base(int.MaxValue, int.MaxValue)
        {         

            _timer = interval.CreateTimer(OnProcessTrades);
        }

        /// <summary>
        /// Обработчик события <see cref="ITrader.NewTrades"/>.
        /// </summary>
        /// <param name="trades">Новые сделки.</param>
        protected override void OnNewTrades(IEnumerable<Trade> trades)
        {
            base.OnNewTrades(trades);

            _newTrades.AddRange(trades);
        }


        public override void AddNewTrades(Trade trade)
        {
            base.AddNewTrades(trade);

            _newTrades.Add(trade);
        }

        private void OnProcessTrades()
        {
            if (_isInProcess)
                return;

            _isInProcess = true;

            try
            {
                var newTrades = _newTrades.SyncGet(c =>
                {
                    var retVal = c.ToArray();
                    c.Clear();
                    return retVal;
                });

                if (newTrades.Length > 0)
                    base.RaiseNewTrades(newTrades);
            }
            finally
            {
                _isInProcess = false;
            }
        }        
    }


Tags:


Thanks:


Alexander

Avatar
Date: 5/31/2012
Reply


Теперь необходимо конвертировать данные в ICandleBuilderSourceValue. Смотрите в сторону класса ConvertableCandleBuilderSource.

Thanks:

Alexander

Avatar
Date: 6/1/2012
Reply


TraderHelper.ToCandles в последней версии на codeplex

Thanks:


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

loading
clippy