﻿<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type='text/css' href='https://stocksharp.com/css/style.css'?>
<?xml-stylesheet type='text/css' href='https://stocksharp.com/css/bbeditor.css'?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title type="html">стратегия на свечах для новичка</title>
  <id>~/topic/3233/strategiya-na-svechah-dlya-novichka/</id>
  <rights type="text">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  <updated>2026-06-18T01:01:55Z</updated>
  <logo>https://stocksharp.com/images/logo.png</logo>
  <link href="https://stocksharp.com/handlers/atom.ashx?category=topic&amp;id=3233" rel="self" type="application/rss+xml" />
  <entry>
    <id>https://stocksharp.com/posts/m/22912/</id>
    <title type="text">Добрый день! Пытаюсь создать свечную стратегию. class TestStrategy : Strategy { private readonly Can...</title>
    <published>2012-12-11T10:56:47Z</published>
    <updated>2012-12-11T10:56:47Z</updated>
    <author>
      <name>woodman11</name>
      <uri>https://stocksharp.com/users/28560/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;p&gt;Добрый день!
Пытаюсь создать свечную стратегию.&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-csharp"&gt; 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&amp;lt;MyTrade&amp;gt; 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);
            }

        }

    }
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;вопрос: Как правильно инициировать передачу новых свечей стратегии. пробую так:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-csharp"&gt;_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&amp;lt;DateTime&amp;gt;(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 = &amp;quot;Стоп&amp;quot;;
         }
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;в итоге новые свечи в стратегию не поступают.&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
</feed>