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


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

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



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

Теги:


Спасибо:




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

loading
clippy