← Zurück

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

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

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

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

War dieses Thema hilfreich?

Thema teilen

Kommentare (0)

Anmelden oder Konto erstellen, Melden Sie sich an oder registrieren Sie sich, um einen Kommentar zu hinterlassen

Noch keine Kommentare. Seien Sie der Erste!