﻿<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type='text/css' href='https://stocksharp.ru/css/style.css'?>
<?xml-stylesheet type='text/css' href='https://stocksharp.ru/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-04-26T13:17:52Z</updated>
  <logo>https://stocksharp.ru/images/logo.png</logo>
  <link href="https://stocksharp.ru/handlers/atom.ashx?category=topic&amp;id=3233" rel="self" type="application/rss+xml" />
  <entry>
    <id>https://stocksharp.ru/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.ru/users/28560/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">Добрый день!&lt;br /&gt;Пытаюсь создать свечную стратегию.&lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;&lt;strong&gt;Код&lt;/strong&gt;&lt;div class="innercode"&gt;&lt;pre class="brush: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;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;вопрос: Как правильно инициировать передачу новых свечей стратегии. пробую так:&lt;br /&gt;&lt;br /&gt;   &lt;div class="code"&gt;&lt;strong&gt;Код&lt;/strong&gt;&lt;div class="innercode"&gt;&lt;pre class="brush: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;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;в итоге новые свечи в стратегию не поступают.</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
</feed>