Как в 4.1 формировать свечки из тиков в реал тайме?
Как теперь формировать свечки из тиков в реальном времени?
Мне нужно самому генерировать тики (сделки), без 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;
}
}
}