﻿<?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">Charting to build custom chart</title>
  <id>~/topic/8481/charting-to-build-custom-chart/</id>
  <rights type="text">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  <updated>2026-04-08T01:50:17Z</updated>
  <logo>https://stocksharp.ru/images/logo.png</logo>
  <link href="https://stocksharp.ru/handlers/atom.ashx?category=topic&amp;id=8481" rel="self" type="application/rss+xml" />
  <entry>
    <id>https://stocksharp.ru/posts/m/40651/</id>
    <title type="text">Hi can you please tell if stocksharp chart are capable to draw point and figure chart? Also if possi...</title>
    <published>2017-08-21T16:58:47Z</published>
    <updated>2017-08-21T16:58:47Z</updated>
    <author>
      <name>np74</name>
      <uri>https://stocksharp.ru/users/96813/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">Hi &lt;br /&gt;&lt;br /&gt;can you please tell if stocksharp chart are capable to draw point and figure chart?&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Also if possible can you please share some pseudo code or something to draw pnf chart?&lt;br /&gt;&lt;br /&gt;Thanks </content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/40616/</id>
    <title type="text">Hi I just modified existing sample SampleChartActivOrders as follows to show the pnf chart but i don...</title>
    <published>2017-08-15T00:05:12Z</published>
    <updated>2017-08-15T00:05:12Z</updated>
    <author>
      <name>np74</name>
      <uri>https://stocksharp.ru/users/96813/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">Hi&lt;br /&gt;&lt;br /&gt;I just modified existing sample SampleChartActivOrders as follows to show the pnf chart but i dont see it can you see why? i cant see candle chart though&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;public partial class MainWindow&lt;br /&gt;	{&lt;br /&gt;		public ObservableCollection&amp;lt;Order&amp;gt; Orders { get; }&lt;br /&gt;&lt;br /&gt;		private ChartArea _area;&lt;br /&gt;		private ChartCandleElement _candleElement;&lt;br /&gt;        private ChartCandleElement _pnfCandleElement;&lt;br /&gt;        private ChartActiveOrdersElement _activeOrdersElement;&lt;br /&gt;		private TimeFrameCandle _candle;&lt;br /&gt;&lt;br /&gt;		private readonly DispatcherTimer _chartUpdateTimer = new DispatcherTimer();&lt;br /&gt;		private readonly SynchronizedDictionary&amp;lt;DateTimeOffset, TimeFrameCandle&amp;gt; _updatedCandles = new SynchronizedDictionary&amp;lt;DateTimeOffset, TimeFrameCandle&amp;gt;();&lt;br /&gt;		private readonly CachedSynchronizedList&amp;lt;TimeFrameCandle&amp;gt; _allCandles = new CachedSynchronizedList&amp;lt;TimeFrameCandle&amp;gt;();&lt;br /&gt;		private readonly Dictionary&amp;lt;Order, ChartActiveOrderInfo&amp;gt; _chartOrderInfos = new Dictionary&amp;lt;Order, ChartActiveOrderInfo&amp;gt;();&lt;br /&gt;&lt;br /&gt;		private const decimal _priceStep = 10m;&lt;br /&gt;		private const int _timeframe = 1;&lt;br /&gt;&lt;br /&gt;		private bool NeedToDelay =&amp;gt; _chkDelay.IsChecked == true;&lt;br /&gt;		private bool NeedToFail =&amp;gt; _chkFail.IsChecked == true;&lt;br /&gt;		private bool NeedToConfirm =&amp;gt; _chkConfirm.IsChecked == true;&lt;br /&gt;&lt;br /&gt;		private static readonly TimeSpan _delay = TimeSpan.FromSeconds(2);&lt;br /&gt;&lt;br /&gt;		private readonly Security _security = new Security&lt;br /&gt;		{&lt;br /&gt;			Id = &amp;quot;RIZ2@FORTS&amp;quot;,&lt;br /&gt;			PriceStep = _priceStep,&lt;br /&gt;			Board = ExchangeBoard.Forts&lt;br /&gt;		};&lt;br /&gt;&lt;br /&gt;		private readonly ThreadSafeObservableCollection&amp;lt;Portfolio&amp;gt; _portfolios = new ThreadSafeObservableCollection&amp;lt;Portfolio&amp;gt;(new ObservableCollectionEx&amp;lt;Portfolio&amp;gt;&lt;br /&gt;		{&lt;br /&gt;			new Portfolio&lt;br /&gt;			{&lt;br /&gt;				Name = &amp;quot;Test portfolio&amp;quot;&lt;br /&gt;			}&lt;br /&gt;		});&lt;br /&gt;&lt;br /&gt;        private PnFArg _pngArg = new PnFArg()&lt;br /&gt;        {&lt;br /&gt;            BoxSize = 20,&lt;br /&gt;            ReversalAmount = 3&lt;br /&gt;        };&lt;br /&gt;        public MainWindow()&lt;br /&gt;		{&lt;br /&gt;			ConfigManager.RegisterService(_portfolios);&lt;br /&gt;&lt;br /&gt;			Orders = new ObservableCollection&amp;lt;Order&amp;gt;();&lt;br /&gt;			InitializeComponent();&lt;br /&gt;			Loaded += OnLoaded;&lt;br /&gt;&lt;br /&gt;			Chart.OrderSettings.Security = _security;&lt;br /&gt;			Chart.OrderSettings.Portfolio = _portfolios.First();&lt;br /&gt;			Chart.OrderSettings.Volume = 5;&lt;br /&gt;&lt;br /&gt;			_chartUpdateTimer.Interval = TimeSpan.FromMilliseconds(10000);&lt;br /&gt;			_chartUpdateTimer.Tick += ChartUpdateTimerOnTick;&lt;br /&gt;			_chartUpdateTimer.Start();&lt;br /&gt;		}&lt;br /&gt;&lt;br /&gt;		private void OnLoaded(object sender, RoutedEventArgs routedEventArgs)&lt;br /&gt;		{&lt;br /&gt;			InitCharts();&lt;br /&gt;			LoadData(@&amp;quot;..\..\..\..\Testing\HistoryData\&amp;quot;.ToFullPath());&lt;br /&gt;		}&lt;br /&gt;&lt;br /&gt;		private void InitCharts()&lt;br /&gt;		{&lt;br /&gt;			Chart.ClearAreas();&lt;br /&gt;			Chart.OrderCreationMode = true;&lt;br /&gt;&lt;br /&gt;			_area = new ChartArea();&lt;br /&gt;&lt;br /&gt;			var yAxis = _area.YAxises.First();&lt;br /&gt;&lt;br /&gt;			yAxis.AutoRange = true;&lt;br /&gt;			Chart.IsAutoRange = true;&lt;br /&gt;			Chart.IsAutoScroll = true;&lt;br /&gt;&lt;br /&gt;			Chart.AddArea(_area);&lt;br /&gt;&lt;br /&gt;			var series = new CandleSeries(&lt;br /&gt;				typeof(TimeFrameCandle),&lt;br /&gt;				_security,&lt;br /&gt;				TimeSpan.FromMinutes(_timeframe));&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;           &lt;br /&gt;&lt;br /&gt;            var pnfSeries = new CandleSeries(&lt;br /&gt;                typeof(PnFCandle),&lt;br /&gt;                _security,&lt;br /&gt;                _pngArg);&lt;br /&gt;&lt;br /&gt;            _candleElement = new ChartCandleElement&lt;br /&gt;            {&lt;br /&gt;                FullTitle = &amp;quot;Candles&amp;quot;&lt;br /&gt;            };&lt;br /&gt;            Chart.AddElement(_area, _candleElement, series);&lt;br /&gt;&lt;br /&gt;            _pnfCandleElement = new ChartCandleElement&lt;br /&gt;            {&lt;br /&gt;                FullTitle = &amp;quot;PNF&amp;quot;&lt;br /&gt;            };&lt;br /&gt;            Chart.AddElement(_area, _pnfCandleElement, pnfSeries);&lt;br /&gt;&lt;br /&gt;            _activeOrdersElement = new ChartActiveOrdersElement&lt;br /&gt;			{&lt;br /&gt;				FullTitle = &amp;quot;Active orders&amp;quot;&lt;br /&gt;			};&lt;br /&gt;			Chart.AddElement(_area, _activeOrdersElement);&lt;br /&gt;		}&lt;br /&gt;&lt;br /&gt;		private void LoadData(string path)&lt;br /&gt;		{&lt;br /&gt;			_candle = null;&lt;br /&gt;			_allCandles.Clear();&lt;br /&gt;&lt;br /&gt;			Chart.Reset(new IChartElement[] { _candleElement, _activeOrdersElement });&lt;br /&gt;            //Chart.Reset(new IChartElement[] { _pnfCandleElement, _activeOrdersElement });&lt;br /&gt;&lt;br /&gt;            var storage = new StorageRegistry();&lt;br /&gt;&lt;br /&gt;			var maxDays = 2;&lt;br /&gt;&lt;br /&gt;			BusyIndicator.IsBusy = true;&lt;br /&gt;&lt;br /&gt;			Task.Factory.StartNew(() =&amp;gt;&lt;br /&gt;			{&lt;br /&gt;				var date = DateTime.MinValue;&lt;br /&gt;&lt;br /&gt;				foreach (var tick in storage.GetTickMessageStorage(_security, new LocalMarketDataDrive(path)).Load())&lt;br /&gt;				{&lt;br /&gt;					AppendTick(_security, tick);&lt;br /&gt;&lt;br /&gt;					if (date != tick.ServerTime.Date)&lt;br /&gt;					{&lt;br /&gt;						date = tick.ServerTime.Date;&lt;br /&gt;&lt;br /&gt;						this.GuiAsync(() =&amp;gt;&lt;br /&gt;						{&lt;br /&gt;							BusyIndicator.BusyContent = date.ToString();&lt;br /&gt;						});&lt;br /&gt;&lt;br /&gt;						maxDays--;&lt;br /&gt;&lt;br /&gt;						if (maxDays == 0)&lt;br /&gt;							break;&lt;br /&gt;					}&lt;br /&gt;				}&lt;br /&gt;			})&lt;br /&gt;			.ContinueWith(t =&amp;gt;&lt;br /&gt;			{&lt;br /&gt;				if (t.Exception != null)&lt;br /&gt;					Error(t.Exception.Message);&lt;br /&gt;&lt;br /&gt;				this.GuiAsync(() =&amp;gt;&lt;br /&gt;				{&lt;br /&gt;					BusyIndicator.IsBusy = false;&lt;br /&gt;					Chart.IsAutoRange = false;&lt;br /&gt;					_area.YAxises.First().AutoRange = false;&lt;br /&gt;&lt;br /&gt;					Log($&amp;quot;Loaded {_allCandles.Count} candles&amp;quot;);&lt;br /&gt;				});&lt;br /&gt;&lt;br /&gt;			}, TaskScheduler.FromCurrentSynchronizationContext());&lt;br /&gt;		}&lt;br /&gt;&lt;br /&gt;		private void ChartUpdateTimerOnTick(object sender, EventArgs eventArgs)&lt;br /&gt;		{&lt;br /&gt;			TimeFrameCandle[] candlesToUpdate;&lt;br /&gt;&lt;br /&gt;			lock (_updatedCandles.SyncRoot)&lt;br /&gt;			{&lt;br /&gt;				candlesToUpdate = _updatedCandles.OrderBy(p =&amp;gt; p.Key).Select(p =&amp;gt; p.Value).ToArray();&lt;br /&gt;				_updatedCandles.Clear();&lt;br /&gt;			}&lt;br /&gt;&lt;br /&gt;			var lastCandle = _allCandles.LastOrDefault();&lt;br /&gt;			_allCandles.AddRange(candlesToUpdate.Where(c =&amp;gt; lastCandle == null || c.OpenTime != lastCandle.OpenTime));&lt;br /&gt;&lt;br /&gt;			var data = new ChartDrawData();&lt;br /&gt;            PnFCandle prevCandle = null;&lt;br /&gt;            foreach (var candle in candlesToUpdate)&lt;br /&gt;            {&lt;br /&gt;                if(prevCandle ==null)&lt;br /&gt;                {&lt;br /&gt;                    PnFCandle newCandle = new PnFCandle()&lt;br /&gt;                    {&lt;br /&gt;                        Security = candle.Security,&lt;br /&gt;                        CloseTime = candle.CloseTime,&lt;br /&gt;                        HighTime = candle.HighTime,&lt;br /&gt;                        OpenTime   = candle.OpenTime,&lt;br /&gt;                        ClosePrice = candle.ClosePrice,&lt;br /&gt;                        OpenPrice = candle.OpenPrice,&lt;br /&gt;                        HighPrice = candle.HighPrice,&lt;br /&gt;                        LowPrice = candle.LowPrice,&lt;br /&gt;                        TotalVolume = candle.TotalVolume,&lt;br /&gt;&lt;br /&gt;                   &lt;br /&gt;                    };&lt;br /&gt;                    newCandle.PnFArg = _pngArg;&lt;br /&gt;                    newCandle.Type = PnFTypes.X;&lt;br /&gt;                    prevCandle = newCandle;&lt;br /&gt;                    data.Group(candle.OpenTime).Add(_pnfCandleElement, newCandle);&lt;br /&gt;                }&lt;br /&gt;                else&lt;br /&gt;                {&lt;br /&gt;                    if( prevCandle.Type == PnFTypes.X)&lt;br /&gt;                    {&lt;br /&gt;                        if( candle.ClosePrice - prevCandle.ClosePrice &amp;gt;=  _pngArg.BoxSize)&lt;br /&gt;                        {&lt;br /&gt;                            PnFCandle newCandle = new PnFCandle()&lt;br /&gt;                            {&lt;br /&gt;                                Security = candle.Security,&lt;br /&gt;                                CloseTime = candle.CloseTime,&lt;br /&gt;                                HighTime = candle.HighTime,&lt;br /&gt;                                OpenTime = candle.OpenTime,&lt;br /&gt;                                ClosePrice = candle.ClosePrice,&lt;br /&gt;                                OpenPrice = candle.OpenPrice,&lt;br /&gt;                                HighPrice = candle.HighPrice,&lt;br /&gt;                                LowPrice = candle.LowPrice,&lt;br /&gt;                                TotalVolume = candle.TotalVolume,&lt;br /&gt;                                PnFArg = _pngArg,&lt;br /&gt;                                Type = PnFTypes.X,&lt;br /&gt;                            };&lt;br /&gt;                            prevCandle = newCandle;&lt;br /&gt;                            data.Group(candle.OpenTime).Add(_pnfCandleElement, newCandle);&lt;br /&gt;                        }&lt;br /&gt;                        else if(candle.ClosePrice - prevCandle.ClosePrice &amp;lt;= _pngArg.BoxSize * _pngArg.ReversalAmount)&lt;br /&gt;                        {&lt;br /&gt;                            PnFCandle newCandle = new PnFCandle()&lt;br /&gt;                            {&lt;br /&gt;                                Security = candle.Security,&lt;br /&gt;                                CloseTime = candle.CloseTime,&lt;br /&gt;                                HighTime = candle.HighTime,&lt;br /&gt;                                OpenTime = candle.OpenTime,&lt;br /&gt;                                ClosePrice = candle.ClosePrice,&lt;br /&gt;                                OpenPrice = candle.OpenPrice,&lt;br /&gt;                                HighPrice = candle.HighPrice,&lt;br /&gt;                                LowPrice = candle.LowPrice,&lt;br /&gt;                                TotalVolume = candle.TotalVolume,&lt;br /&gt;                                PnFArg = _pngArg,&lt;br /&gt;                                Type = PnFTypes.O,&lt;br /&gt;                            };&lt;br /&gt;                            prevCandle = newCandle;&lt;br /&gt;                            data.Group(candle.OpenTime).Add(_pnfCandleElement, newCandle);&lt;br /&gt;                        }&lt;br /&gt;&lt;br /&gt;                    }&lt;br /&gt;                    else if (prevCandle.Type == PnFTypes.O)&lt;br /&gt;                    {&lt;br /&gt;                        if (candle.ClosePrice - prevCandle.ClosePrice &amp;lt;= _pngArg.BoxSize)&lt;br /&gt;                        {&lt;br /&gt;                            PnFCandle newCandle = new PnFCandle()&lt;br /&gt;                            {&lt;br /&gt;                                Security = candle.Security,&lt;br /&gt;                                CloseTime = candle.CloseTime,&lt;br /&gt;                                HighTime = candle.HighTime,&lt;br /&gt;                                OpenTime = candle.OpenTime,&lt;br /&gt;                                ClosePrice = candle.ClosePrice,&lt;br /&gt;                                OpenPrice = candle.OpenPrice,&lt;br /&gt;                                HighPrice = candle.HighPrice,&lt;br /&gt;                                LowPrice = candle.LowPrice,&lt;br /&gt;                                TotalVolume = candle.TotalVolume,&lt;br /&gt;                                PnFArg = _pngArg,&lt;br /&gt;                                Type = PnFTypes.O,&lt;br /&gt;                            };&lt;br /&gt;                            prevCandle = newCandle;&lt;br /&gt;                            data.Group(candle.OpenTime).Add(_pnfCandleElement, newCandle);&lt;br /&gt;                        }&lt;br /&gt;                        else if (candle.ClosePrice - prevCandle.ClosePrice &amp;gt;= _pngArg.BoxSize * _pngArg.ReversalAmount)&lt;br /&gt;                        {&lt;br /&gt;                            PnFCandle newCandle = new PnFCandle()&lt;br /&gt;                            {&lt;br /&gt;                                Security = candle.Security,&lt;br /&gt;                                CloseTime = candle.CloseTime,&lt;br /&gt;                                HighTime = candle.HighTime,&lt;br /&gt;                                OpenTime = candle.OpenTime,&lt;br /&gt;                                ClosePrice = candle.ClosePrice,&lt;br /&gt;                                OpenPrice = candle.OpenPrice,&lt;br /&gt;                                HighPrice = candle.HighPrice,&lt;br /&gt;                                LowPrice = candle.LowPrice,&lt;br /&gt;                                TotalVolume = candle.TotalVolume,&lt;br /&gt;                                PnFArg = _pngArg,&lt;br /&gt;                                Type = PnFTypes.X,&lt;br /&gt;                            };&lt;br /&gt;                            prevCandle = newCandle;&lt;br /&gt;                            data.Group(candle.OpenTime).Add(_pnfCandleElement, newCandle);&lt;br /&gt;                        }&lt;br /&gt;&lt;br /&gt;                    }&lt;br /&gt;                }               &lt;br /&gt;            }&lt;br /&gt;&lt;br /&gt;			Chart.Draw(data);&lt;br /&gt;		}&lt;br /&gt;&lt;br /&gt;		private void AppendTick(Security security, ExecutionMessage tick)&lt;br /&gt;		{&lt;br /&gt;			var time = tick.ServerTime;&lt;br /&gt;			var price = tick.TradePrice.Value;&lt;br /&gt;&lt;br /&gt;			if (_candle == null || time &amp;gt;= _candle.CloseTime)&lt;br /&gt;			{&lt;br /&gt;				if (_candle != null)&lt;br /&gt;				{&lt;br /&gt;					_candle.State = CandleStates.Finished;&lt;br /&gt;					lock (_updatedCandles.SyncRoot)&lt;br /&gt;						_updatedCandles[_candle.OpenTime] = _candle;&lt;br /&gt;				}&lt;br /&gt;&lt;br /&gt;				var tf = TimeSpan.FromMinutes(_timeframe);&lt;br /&gt;				var bounds = tf.GetCandleBounds(time, _security.Board);&lt;br /&gt;				_candle = new TimeFrameCandle&lt;br /&gt;				{&lt;br /&gt;					TimeFrame = tf,&lt;br /&gt;					OpenTime = bounds.Min,&lt;br /&gt;					CloseTime = bounds.Max,&lt;br /&gt;					Security = security,&lt;br /&gt;				};&lt;br /&gt;&lt;br /&gt;				_candle.OpenPrice = _candle.HighPrice = _candle.LowPrice = _candle.ClosePrice = price;&lt;br /&gt;			}&lt;br /&gt;&lt;br /&gt;			if (time &amp;lt; _candle.OpenTime)&lt;br /&gt;				throw new InvalidOperationException(&amp;quot;invalid time&amp;quot;);&lt;br /&gt;&lt;br /&gt;			if (price &amp;gt; _candle.HighPrice)&lt;br /&gt;				_candle.HighPrice = price;&lt;br /&gt;&lt;br /&gt;			if (price &amp;lt; _candle.LowPrice)&lt;br /&gt;				_candle.LowPrice = price;&lt;br /&gt;&lt;br /&gt;			_candle.ClosePrice = price;&lt;br /&gt;&lt;br /&gt;			_candle.TotalVolume += tick.TradeVolume.Value;&lt;br /&gt;&lt;br /&gt;			lock (_updatedCandles.SyncRoot)&lt;br /&gt;				_updatedCandles[_candle.OpenTime] = _candle;&lt;br /&gt;		}</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/40614/</id>
    <title type="text">Hello, Please see the section http://doc.stocksharp.com/html/956b3163-c537-4e1d-af29-cf80b633db3c.ht...</title>
    <published>2017-08-14T11:25:11Z</published>
    <updated>2017-08-14T11:25:11Z</updated>
    <author>
      <name>Mikhail Sukhov</name>
      <uri>https://stocksharp.ru/users/201/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">Hello,&lt;br /&gt;&lt;br /&gt;Please see the section &lt;a href="http://doc.stocksharp.com/html/956b3163-c537-4e1d-af29-cf80b633db3c.htm " title="http://doc.stocksharp.com/html/956b3163-c537-4e1d-af29-cf80b633db3c.htm "&gt;http://doc.stocksharp.co...d-af29-cf80b633db3c.htm &lt;/a&gt;There is description how to work with Chart component.</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/40602/</id>
    <title type="text">Hi Thanks for response. I did looked at it but really didnt understood how do i customize it ? The D...</title>
    <published>2017-08-09T18:20:20Z</published>
    <updated>2017-08-09T18:20:20Z</updated>
    <author>
      <name>np74</name>
      <uri>https://stocksharp.ru/users/96813/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">Hi &lt;br /&gt;&lt;br /&gt;Thanks for response. I did looked at it but really didnt understood how do i customize it ? The DrawStyle got few possible values but what i am trying is not available as DrawStyle.&lt;br /&gt;&lt;br /&gt;It will be very helpful if you could give some pointers - what method or which area i need to look &lt;br /&gt;&lt;br /&gt;thanks </content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/40601/</id>
    <title type="text">Hello, Please see our documentation http://doc.stocksharp.com/html/956b3163-c537-4e1d-af29-cf80b633d...</title>
    <published>2017-08-09T11:40:49Z</published>
    <updated>2017-08-09T11:40:49Z</updated>
    <author>
      <name>Mikhail Sukhov</name>
      <uri>https://stocksharp.ru/users/201/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">Hello,&lt;br /&gt;&lt;br /&gt;Please see our documentation &lt;a href="http://doc.stocksharp.com/html/956b3163-c537-4e1d-af29-cf80b633db3c.htm" title="http://doc.stocksharp.com/html/956b3163-c537-4e1d-af29-cf80b633db3c.htm"&gt;http://doc.stocksharp.co...1d-af29-cf80b633db3c.htm&lt;/a&gt;</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/40597/</id>
    <title type="text">Hi I looked at your charting sample and i am interested in building point and figure charts, can you...</title>
    <published>2017-08-08T16:34:53Z</published>
    <updated>2017-08-08T16:34:53Z</updated>
    <author>
      <name>np74</name>
      <uri>https://stocksharp.ru/users/96813/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">Hi &lt;br /&gt;&lt;br /&gt;I looked at your charting sample and i am interested in building point and figure charts, can you please guide how can i do it , is it possible to override chart.draw to do custom drawing?</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
</feed>