стратегия на свечах для новичка

стратегия на свечах для новичка
Atom
12/11/2012
woodman11


Добрый день! Пытаюсь создать свечную стратегию.

 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 = "Стоп";
         }

в итоге новые свечи в стратегию не поступают.


Tags:


Thanks:




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

loading
clippy