стратегия на свечах для новичка
Добрый день!
Пытаюсь создать свечную стратегию.
Код
class TestStrategy : Strategy
{
private readonly CandleSeries _series;
//private readonly CandleManager _candleManager;
private readonly Strategy _strategy;
private bool inDeal;
public TestStrategy(CandleSeries series)
{
_series = series;
}
private void OnNewOrderTrades(IEnumerable<MyTrade> trades)
{
foreach (MyTrade t in trades)
{
// выставляет тейк-профит в 40 пунктов
var takeProfit = new TakeProfitStrategy(t, 40);
// выставляет стоп-лосс в 20 пунктов
var stopLoss = new StopLossStrategy(t, 20);
var protectiveStrategy = new TakeProfitStopLossStrategy(takeProfit, stopLoss);
ChildStrategies.Add(protectiveStrategy);
}
}
protected override void OnStarted()
{
_series
.WhenCandlesFinished()
.Do(ProcessCandle)
.Apply(this);
base.OnStarted();
}
private void ProcessCandle(Candle candle)
{
// если наша стратегия в процессе остановки
if (ProcessState == ProcessStates.Stopping)
{
// отменяем активные заявки
CancelActiveOrders();
return;
}
if (!inDeal)
{
var order = this.BuyAtMarket(Volume);
order.WhenNewTrades().Do(OnNewOrderTrades).Apply(this);
}
}
}
вопрос: Как правильно инициировать передачу новых свечей стратегии. пробую так:
Код
_candleSeries = new CandleSeries(typeof(TimeFrameCandle), _instrument, _timeFrame);
// создаем торговую стратегию
_strategy = new TestStrategy(_candleSeries)
{
Volume = 1,
Security = _instrument,
Portfolio = _portfolio,
Trader = _trader,
};
_logManager.Sources.Add(_strategy);
_strategy.Log += OnLog;
_strategy.PropertyChanged += OnStrategyPropertyChanged;
_candlesElem = new ChartCandleElement();
// начинаем получать текущие сделки (для построения свечек реального времени)
_trader.RegisterTrades(_instrument);
// регистрируем запрос в SmartCOM для получения исторических данных по 5-минуткам за период в 5 дней
_trader.RegisterHistoryCandles(_instrument
, SmartTimeFrames.Minute5,
new Range<DateTime>(DateTime.Today - TimeSpan.FromDays(5), _instrument.GetMarketTime()));
_lastHistoryCandle = _timeFrame.GetCandleBounds(_instrument).Min;
}
if (_strategy.ProcessState == ProcessStates.Stopped)
{
// запускаем процесс получения стакана, необходимый для работы алгоритма котирования
_trader.RegisterMarketDepth(_strategy.Security);
_strategy.Start();
menuItemStart.Header = "Стоп";
}
в итоге новые свечи в стратегию не поступают.