﻿<?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/3288/ne-mogu-ponyat-pochemu-ne-vidno-svechei/</id>
  <rights type="text">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  <updated>2026-06-22T11:43:46Z</updated>
  <logo>https://stocksharp.ru/images/logo.png</logo>
  <link href="https://stocksharp.ru/handlers/atom.ashx?category=topic&amp;id=3288" rel="self" type="application/rss+xml" />
  <entry>
    <id>https://stocksharp.ru/posts/m/23270/</id>
    <title type="text">Геннадий Ванин (Gennady Vanin): RoboKrolik: Выдает вот такое когда свечи хочу отрисовать: _chart.Pro...</title>
    <published>2013-01-09T14:59:08Z</published>
    <updated>2013-01-09T14:59:08Z</updated>
    <author>
      <name>RoboKrolik</name>
      <uri>https://stocksharp.ru/users/16730/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="@message(23266)" rel="nofollow" target="_blank"&gt;Геннадий Ванин (Gennady Vanin)&lt;/a&gt;:&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="@message(23260)" rel="nofollow" target="_blank"&gt;RoboKrolik&lt;/a&gt;:&lt;/strong&gt;
Выдает вот такое когда свечи хочу отрисовать:
_chart.ProcessCandle((ChartCandleElement)_chart.Areas[0].Elements[0], candle);
А вы вообще нигде не добавляете элементы в &lt;strong&gt;_chart.Areas[0]&lt;/strong&gt; ?!&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="@message(23260)" rel="nofollow" target="_blank"&gt;RoboKrolik&lt;/a&gt;:&lt;/strong&gt;
Или вот такое когда хочу цену закрытия получить свечи:
Label3.Content = Convert.ToString(series.GetCandle&amp;lt;TimeFrameCandle&amp;gt;(1).ClosePrice);&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;gt;	WpfApplication1.exe!WpfApplication1.MainWindow.StartRobo_Click(object sender, System.Windows.RoutedEventArgs e) Line 169 + 0x28 bytes	C#&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Вы же получаете цену закрытия 2й минутной свечки?&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-csharp"&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;p&gt;private TimeSpan _timeFrame = TimeSpan.FromMinutes(1); // таймфрейм&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;gt; Это, ИМО, возможно не немедленно, а Вы сразу дёргаете?
&amp;gt; 
&amp;gt; Кроме того, если Вы работаете через учебный сервер, то таблица всех сделок может быть пустая, её заполнение нужно специально запрашивать

**Спасибо за помощь. Понял свою ошибку. Пытался обратится к свече раньше чем она создалась и заполнилась.**
&lt;/code&gt;&lt;/pre&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/23269/</id>
    <title type="text">Геннадий Ванин (Gennady Vanin): Кроме того, если Вы работаете через учебный сервер, то таблица всех ...</title>
    <published>2013-01-09T12:40:34Z</published>
    <updated>2013-01-09T12:40:34Z</updated>
    <author>
      <name>VassilSanych</name>
      <uri>https://stocksharp.ru/users/6491/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="@message(23266)" rel="nofollow" target="_blank"&gt;Геннадий Ванин (Gennady Vanin)&lt;/a&gt;:&lt;/strong&gt;
Кроме того, если Вы работаете через учебный сервер, то таблица всех сделок может быть пустая, её заполнение нужно специально запрашивать
У некоторых брокеров (например, у Уралсиба) её и на боевом нужно специально запрашивать.&lt;/p&gt;
&lt;/blockquote&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/23266/</id>
    <title type="text">RoboKrolik: Выдает вот такое когда свечи хочу отрисовать: _chart.ProcessCandle((ChartCandleElement)_...</title>
    <published>2013-01-08T20:58:05Z</published>
    <updated>2013-01-08T22:00:59Z</updated>
    <author>
      <name>Геннадий Ванин (Gennady Vanin)</name>
      <uri>https://stocksharp.ru/users/6413/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="@message(23260)" rel="nofollow" target="_blank"&gt;RoboKrolik&lt;/a&gt;:&lt;/strong&gt;
Выдает вот такое когда свечи хочу отрисовать:
_chart.ProcessCandle((ChartCandleElement)_chart.Areas[0].Elements[0], candle);
А вы вообще нигде не добавляете элементы в &lt;strong&gt;_chart.Areas[0]&lt;/strong&gt; ?!&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="@message(23260)" rel="nofollow" target="_blank"&gt;RoboKrolik&lt;/a&gt;:&lt;/strong&gt;
Или вот такое когда хочу цену закрытия получить свечи:
Label3.Content = Convert.ToString(series.GetCandle&amp;lt;TimeFrameCandle&amp;gt;(1).ClosePrice);&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;gt;	WpfApplication1.exe!WpfApplication1.MainWindow.StartRobo_Click(object sender, System.Windows.RoutedEventArgs e) Line 169 + 0x28 bytes	C#&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Вы же получаете цену закрытия 2й минутной свечки?&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-csharp"&gt;private TimeSpan _timeFrame = TimeSpan.FromMinutes(1); // таймфрейм
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Это, ИМО, возможно не немедленно, а Вы сразу дёргаете?&lt;/p&gt;
&lt;p&gt;Кроме того, если Вы работаете через учебный сервер, то таблица всех сделок может быть пустая, её заполнение нужно специально запрашивать&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/23257/</id>
    <title type="text">Пишу каркас для торговой стратегии. Вот так создаю свечи: public partial class MainWindow : Window {...</title>
    <published>2013-01-08T15:49:09Z</published>
    <updated>2013-01-08T16:46:51Z</updated>
    <author>
      <name>RoboKrolik</name>
      <uri>https://stocksharp.ru/users/16730/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;p&gt;Пишу каркас для торговой стратегии.&lt;/p&gt;
&lt;p&gt;Вот так создаю свечи:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-csharp"&gt;
public partial class MainWindow : Window
    {

        // Объявление переменных
       
        private CandleManager _candleManager; // менеджер свечек

private void Connect_Click(object sender, RoutedEventArgs e)   // жму на кнопку подключения
        {

                _candleManager = new CandleManager(_trader); // создаем менеджер свечек для Трейдера

                _candleManager.Processing += DrawCandle; // подписываемся на событие

private void StartRobo_Click(object sender, RoutedEventArgs e)  // жму на кнопку запуска страты
        {

               CandleSeries series;

                series = new CandleSeries(typeof(TimeFrameCandle), _security, _timeFrame);

                _candleManager.Start(series);
                
                Label3.Content = Convert.ToString(series.GetCandle&amp;lt;TimeFrameCandle&amp;gt;(1).ClosePrice);

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;При запуске стратегии выскакивает вот такая ошибка&lt;/p&gt;
&lt;p&gt;**An unhandled exception of type 'System.NullReferenceException' occurred in WpfApplication1.exe&lt;/p&gt;
&lt;p&gt;Additional information: Ссылка на объект не указывает на экземпляр объекта.**&lt;/p&gt;
&lt;p&gt;Не знаю что и делать. Я так понял что свечи не экспортируются.&lt;/p&gt;
&lt;p&gt;Какой экземпляр я не создал?&lt;/p&gt;
&lt;p&gt;Что делать?&lt;/p&gt;
&lt;p&gt;Код основного окна&lt;/p&gt;
&lt;details&gt;&lt;summary&gt;using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Configuration;&lt;/summary&gt;
&lt;p&gt;// using S#
using Ecng.Common;
using Ecng.ComponentModel;
using Ecng.Xaml;
using Ecng.Serialization;
using Ecng.Collections;
using StockSharp.Algo;
using StockSharp.Algo.Indicators;
using StockSharp.Algo.Indicators.Trend;
using StockSharp.Algo.Candles;
using StockSharp.Algo.Strategies;
using StockSharp.BusinessEntities;
using StockSharp.Quik;
using StockSharp.Logging;
using StockSharp.Xaml;&lt;/p&gt;
&lt;p&gt;namespace WpfApplication1
{&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;public partial class MainWindow : Window
{

    // Объявление переменных

    private QuikTrader _trader;   // квик трейдер

    private TimeSpan _timeFrame = TimeSpan.FromMinutes(1);  // таймфрейм
    private TimeSpan _timeRefreshStrategy = TimeSpan.FromSeconds(1);  // частота обновления стратегии
    
    int _sharecount; // количество торгуемых контрактов
    private DartWeiderStretegy _strategy; // обявляем стратегию
    
    private Security _security; // инструмент
    private Portfolio _portfolio; // портфель

    private CandleManager _candleManager; // менеджер свечек
                          

    public MainWindow()
    {
        InitializeComponent();
      

    }

    // Кнопка &amp;quot;Подключение&amp;quot; - Метод подключения к квику
    private void Connect_Click(object sender, RoutedEventArgs e)
    {
        if (_trader == null)
        {
            _trader = new QuikTrader(QuikTerminal.GetDefaultPath());

            //Подписываемся на событие появления новых портфелей
            _trader.NewPortfolios += portfolios =&amp;gt; this.GuiAsync(() =&amp;gt; {Portfolios.ItemsSource = _trader.Portfolios;});

            //Подписываемся на событие появления новых инстументов
            _trader.NewSecurities += securities =&amp;gt; this.GuiAsync(() =&amp;gt; {Securities.ItemsSource = _trader.Securities;});
           
        }

        try
        {
            // подключаем квик
            _trader.Connect();
        }
        catch (System.IO.IOException err)
        {
            MessageBox.Show(&amp;quot;Не удается подключиться к квику&amp;quot; + err.Message);
        }

        //Начинаем Экспорт данных

            _trader.StartExport(); //получение он-лайн данных из квика Инструменты,Заявки , Портфели и так далее

            _candleManager = new CandleManager(_trader); // создаем менеджер свечек для Трейдера

            _candleManager.Processing += DrawCandle; // подписываемся на событие


    }


    private void DrawCandle(CandleSeries series, Candle candle)
    {
        this.GuiAsync(() =&amp;gt;
        {

          //  _chart.ProcessCandle((ChartCandleElement)_chart.Areas[0].Elements[0], candle);

        });
    }

    // Кнопка &amp;quot;Остановка&amp;quot; - Метод остановки робота
    private void StopRobot_Click(object sender, RoutedEventArgs e)
    {
        if (_trader != null)
        {
            //отключаем экспорт со стакана и останавливаем стратегию
            _trader.UnRegisterMarketDepth(_security);
            if (_strategy.ProcessState == ProcessStates.Started) _strategy.Stop();
            if (_trader.Orders != null) _trader.CancelOrders();
            _trader.StopExport();              
        }
    }

    // Метод на случай закрытия окна робота
    private void ProgramWindow_Closing(object sender, System.ComponentModel.CancelEventArgs e)
    {
        if (_trader != null)
        {
            //отключаем экспорт со стакана и останавливаем стратегию
            _trader.UnRegisterMarketDepth(_security);
            if (_strategy.ProcessState == ProcessStates.Started) _strategy.Stop();
            if (_trader.Orders != null) _trader.CancelOrders();
            _trader.StopExport();
        }
    }

    // Кнопка &amp;quot;Запуск робота&amp;quot; - метод запуск робота
    private void StartRobo_Click(object sender, RoutedEventArgs e)
    {
        // проверяем подключен ли квик трейдер, задан ли портфель, инструмент
        if (_trader == null)
        {
            MessageBox.Show(&amp;quot;Терминал не задан&amp;quot;);
            return;
        }

        if (_trader.Portfolios == null)
        {
            MessageBox.Show(&amp;quot;Портфель не задан&amp;quot;);
            return;
        }

        if (_trader.Securities == null)
        {
            MessageBox.Show(&amp;quot;Инструмент не задан&amp;quot;);
            return;
        }

        // код запуска стратегии

        if (_strategy == null)
        {

            CandleSeries series;

            series = new CandleSeries(typeof(TimeFrameCandle), _security, _timeFrame);

            _candleManager.Start(series);


            Label3.Content = Convert.ToString(series.GetCandle&amp;lt;TimeFrameCandle&amp;gt;(1).ClosePrice);
            
            this.GuiAsync(() =&amp;gt;
            {



            _strategy = new DartWeiderStretegy(_candleManager, _timeFrame)
            {
                Volume = _sharecount,
                Security = _security,
                Portfolio = _portfolio,
                Trader = _trader,
                Interval = _timeRefreshStrategy
            };



                
            });

       

        }


        if (_strategy.ProcessState == ProcessStates.Stopped)
        {
            // запускаем процесс получения стакана, необходимый для работы алгоритма котирования
            //_trader.RegisterQuotes(_strategy.Security);
            _trader.RegisterMarketDepth(_security);
            _strategy.Start();
        }

    }


    private void Securities_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        string sec = Convert.ToString(Securities.SelectedItem);
        sec = sec.Replace(&amp;quot;@RTS&amp;quot;, string.Empty);
        _security = _trader.Securities.First(s =&amp;gt; s.Code == sec &amp;amp;&amp;amp; s.Type == SecurityTypes.Future);
    }

    private void Portfolios_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        _portfolio = _trader.Portfolios.FirstOrDefault(p =&amp;gt; p.Name == Convert.ToString(Portfolios.SelectedItem));
    }

    private void PositionSize_TextChanged(object sender, TextChangedEventArgs e)
    {
        try
        {
            _sharecount = Convert.ToInt32(PositionSize.Text);
        }
        catch
        {
        MessageBox.Show(&amp;quot;Неправильный размер позиции&amp;quot;);
        }
    }

    private void Button_Click_1(object sender, RoutedEventArgs e)
    {
        


    }

}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;}&lt;/p&gt;
&lt;/details&gt;
&lt;p&gt;Код стратегии&lt;/p&gt;
&lt;details&gt;&lt;summary&gt;using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;&lt;/summary&gt;
&lt;p&gt;using StockSharp.Algo;
using StockSharp.Algo.Strategies;
using StockSharp.Algo.Candles;
using Ecng.Xaml;
using StockSharp.Quik;
using StockSharp.BusinessEntities;&lt;/p&gt;
&lt;p&gt;namespace WpfApplication1
{
class DartWeiderStretegy : TimeFrameStrategy
{&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;    decimal openPrice; // цена открытия свечи
    decimal lastPrice; // цена предПРЕДпоследней свечи

    private Order _order;   // текущая заявка

    private TimeSpan _timeFrame;  // таймфрейм

    private CandleManager _candleManager;

    // конструктор для работы стратегии
    public DartWeiderStretegy(CandleManager candleManager, TimeSpan timeFrame) : base(timeFrame)
    {
        _candleManager = candleManager;

        _timeFrame = TimeFrame;
    }

    /// &amp;lt;summary&amp;gt;
    /// Запуск стратегии
    /// &amp;lt;/summary&amp;gt;
    protected void OnStarting()
    {
        base.OnStarted();
    }

    // Выполнение стратегии
    protected override ProcessResults OnProcess()
    {

      

        /*

        //Определяем количество открытых позиций по инструменту
        int openPos = Convert.ToInt32(this.MyTrades.GetPosition());
        
        //Получаем цену открытия этой свечи
        openPrice = _lastCandle1.ClosePrice;

        //Получаем цену открытия предПРЕДпоследней свечи
        lastPrice = _lastCandle2.ClosePrice;

        //Если есть 2 свечи и нет открытых позиций
        if (_lastCandle1!=null &amp;amp;&amp;amp; _lastCandle2!=null &amp;amp;&amp;amp; openPos == 0)
        {
            // Если свеча выше предыдущей открываем лонг
            if (openPrice &amp;gt; lastPrice)
            {
                // создаем заявку на покупку
                _order = this.CreateOrder(OrderDirections.Buy, base.Security.GetMarketPrice(OrderDirections.Buy), base.Volume);
                
                // регистрируем ее
                base.RegisterOrder(_order);

                if (_order.IsMatched() == true)
                {

                    //Выставляем стоп-лосс и тейкпрофит через метод
                    _order = this.CreateStopLimitAndTakeProfit(openPrice);

                    // регистрируем его
                    base.RegisterOrder(_order);
                }
            }
        }
         * 
         * */


        return ProcessResults.Continue;
    }


    private Order CreateStopLimitAndTakeProfit(decimal openPrice2)
    {
        decimal stopPrice = Convert.ToDecimal(openPrice2) - 20;
        decimal tpPrice = Convert.ToDecimal(openPrice2) + 20;

        return new Order
        {
            Type = OrderTypes.Conditional,
            Volume = base.Volume,
            Price = Convert.ToDecimal(stopPrice),
            Security = base.Security,
            Portfolio = base.Portfolio,
            Direction = OrderDirections.Sell,
            StopCondition = new QuikStopCondition
            {
                Type = QuikStopConditionTypes.LinkedOrder,
                LinkedOrderPrice = tpPrice,
            },
        };
    }


     
     
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;}&lt;/p&gt;
&lt;/details&gt;</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/23260/</id>
    <title type="text">VassilSanych: RoboKrolik: Что делать? Смотреть stack trace Выдает вот такое когда свечи хочу отрисов...</title>
    <published>2013-01-08T16:14:18Z</published>
    <updated>2013-01-08T16:14:18Z</updated>
    <author>
      <name>RoboKrolik</name>
      <uri>https://stocksharp.ru/users/16730/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="@message(23258)" rel="nofollow" target="_blank"&gt;VassilSanych&lt;/a&gt;:&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="@message(23257)" rel="nofollow" target="_blank"&gt;RoboKrolik&lt;/a&gt;:&lt;/strong&gt;
Что делать?
Смотреть stack trace&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/blockquote&gt;
&lt;p&gt;Выдает вот такое когда свечи хочу отрисовать:
_chart.ProcessCandle((ChartCandleElement)_chart.Areas[0].Elements[0], candle);&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;gt;	WpfApplication1.exe!WpfApplication1.MainWindow.DrawCandle.AnonymousMethod__6() Line 105 + 0x31 bytes	C#&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Или вот такое когда хочу цену закрытия получить свечи:
Label3.Content = Convert.ToString(series.GetCandle&amp;lt;TimeFrameCandle&amp;gt;(1).ClosePrice);&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;gt;	WpfApplication1.exe!WpfApplication1.MainWindow.StartRobo_Click(object sender, System.Windows.RoutedEventArgs e) Line 169 + 0x28 bytes	C#&lt;/strong&gt;&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/23258/</id>
    <title type="text">RoboKrolik: Что делать? Смотреть stack trace </title>
    <published>2013-01-08T16:00:58Z</published>
    <updated>2013-01-08T16:00:58Z</updated>
    <author>
      <name>VassilSanych</name>
      <uri>https://stocksharp.ru/users/6491/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="@message(23257)" rel="nofollow" target="_blank"&gt;RoboKrolik&lt;/a&gt;:&lt;/strong&gt;
Что делать?
Смотреть stack trace&lt;/p&gt;
&lt;/blockquote&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
</feed>