﻿<?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">Как понять, что DDE передал всю историю, и теперь идет реал-тайм?</title>
  <id>~/topic/3075/kak-ponyat-chto-dde-peredal-vsyu-istoriyu-i-teper-idet-real-taim/</id>
  <rights type="text">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  <updated>2026-04-30T13:22:36Z</updated>
  <logo>https://stocksharp.ru/images/logo.png</logo>
  <link href="https://stocksharp.ru/handlers/atom.ashx?category=topic&amp;id=3075" rel="self" type="application/rss+xml" />
  <entry>
    <id>https://stocksharp.ru/posts/m/21812/</id>
    <title type="text">CloseTime - это время закрытия свечи, а не время последнего обновления. То, что вы исправили одно ме...</title>
    <published>2012-10-15T19:48:19Z</published>
    <updated>2012-10-15T19:48:19Z</updated>
    <author>
      <name>Sergey Sokolov</name>
      <uri>https://stocksharp.ru/users/6014/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">CloseTime - это время закрытия свечи, а не время последнего обновления. &lt;br /&gt;То, что вы исправили одно место, где логика зависит от правильного CloseTime (IsCandleFinishedBeforeChange), не означает, что нет других таких мест.&lt;br /&gt;Наверняка они есть. А значит, от такого фикса могут возникать труднообнаружимые проблемы.&lt;br /&gt;Да и после того, как вы таким образом проехались по всем свечкам, CloseTime у них будет расставлен совершенно в разнобой, так как последний тик не обязательно приходит в последнюю секунду, и всегда неверно, так как последний тик свечи всегда идет раньше чем настоящий CloseTime.</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/21808/</id>
    <title type="text">Ясно, я думал какая-то библиотека c# :) Вот что у меня получилось, вроде работает, и не надо переопр...</title>
    <published>2012-10-15T15:30:37Z</published>
    <updated>2012-10-15T17:06:24Z</updated>
    <author>
      <name>RomSunZ</name>
      <uri>https://stocksharp.ru/users/6384/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">Ясно, я думал какая-то библиотека c# :)&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;

    public class myTimeFrameCandleBuilder : TimeFrameCandleBuilder
    {
        protected override TimeFrameCandle CreateCandle(CandleSeries series, ICandleBuilderSourceValue value)
        {
            var candle = base.CreateCandle(series, value);
            candle.CloseTime = value.Time;
            return candle;
        }
        protected override bool IsCandleFinishedBeforeChange(CandleSeries series, TimeFrameCandle candle, ICandleBuilderSourceValue value)
        {
            return (value.Time &amp;gt;= candle.OpenTime.Add((TimeSpan)candle.Arg));
        }

        protected override void UpdateCandle(CandleSeries series, TimeFrameCandle candle, ICandleBuilderSourceValue value)
        {
            base.UpdateCandle(series, candle, value);
            candle.CloseTime = value.Time;
        }
    }

&lt;/pre&gt;
&lt;/div&gt;&lt;/div&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;

                        _candleManager = new CandleManager(_trader);
                        _candleManager.Sources.RemoveWhere(t =&amp;gt; t.GetType() == typeof(TimeFrameCandleBuilder));
                        _candleManager.Sources.Add(new myTimeFrameCandleBuilder { Sources = { new TradeCandleBuilderSource(_trader) } });

&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;Не уверен, нужно ли сначала удалять TimeFrameCandleBuilder, но вроде работает</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/21806/</id>
    <title type="text"> public static void CopyFrom(this TimeFrameCandle candle, TimeFrameCandle copyFrom, bool setState=tr...</title>
    <published>2012-10-15T14:49:19Z</published>
    <updated>2012-10-15T14:49:19Z</updated>
    <author>
      <name>Sergey Sokolov</name>
      <uri>https://stocksharp.ru/users/6014/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;div class="code"&gt;&lt;strong&gt;Код&lt;/strong&gt;&lt;div class="innercode"&gt;&lt;pre class="brush:csharp"&gt;

        public static void CopyFrom(this TimeFrameCandle candle, TimeFrameCandle copyFrom, bool setState=true) {
            candle.TimeFrame = copyFrom.TimeFrame;
            candle.Security = copyFrom.Security;
            candle.OpenTime = copyFrom.OpenTime;
            candle.CloseTime = copyFrom.CloseTime;
            candle.HighTime = copyFrom.HighTime;
            candle.LowTime = copyFrom.LowTime;
            candle.OpenPrice = copyFrom.OpenPrice;
            candle.ClosePrice = copyFrom.ClosePrice;
            candle.HighPrice = copyFrom.HighPrice;
            candle.LowPrice = copyFrom.LowPrice;
            candle.TotalPrice = copyFrom.TotalPrice;
            candle.OpenVolume = copyFrom.OpenVolume;
            candle.CloseVolume = copyFrom.CloseVolume;
            candle.HighVolume = copyFrom.HighVolume;
            candle.LowVolume = copyFrom.LowVolume;
            candle.TotalVolume = copyFrom.TotalVolume;
            candle.RelativeVolume = copyFrom.RelativeVolume;
            candle.Series = copyFrom.Series;
            candle.Source = copyFrom.Source;
            candle.Arg = copyFrom.Arg;
            if(setState) candle.State = copyFrom.State; // must be the last assignment
        }
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/21790/</id>
    <title type="text">Да, я знаю, просто пока только начал разбираться с библиотекой, и многих моментов просто не знаю. Пл...</title>
    <published>2012-10-12T15:41:45Z</published>
    <updated>2012-10-15T10:32:41Z</updated>
    <author>
      <name>RomSunZ</name>
      <uri>https://stocksharp.ru/users/6384/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">Да, я знаю, просто пока только начал разбираться с библиотекой, и многих моментов просто не знаю. Плюс еще сам с# не особо знаком, так что пока разбираюсь с примерами и делаю как более очевидно для меня [biggrin]&lt;br /&gt;&lt;br /&gt;PS а что за метод CopyFrom?</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/21786/</id>
    <title type="text">Ооочень медленный способ. Дело в том, что так у вас будет каждый тик копироваться и пересоздаваться ...</title>
    <published>2012-10-12T15:20:10Z</published>
    <updated>2012-10-12T15:20:10Z</updated>
    <author>
      <name>Sergey Sokolov</name>
      <uri>https://stocksharp.ru/users/6014/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">Ооочень медленный способ.&lt;br /&gt;Дело в том, что так у вас будет каждый тик копироваться и пересоздаваться в памяти весь массив имеющихся тиков. Уже не говоря о том, что памяти будет расходовать будь здоров.</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/21784/</id>
    <title type="text">Спасибо. Я сделал еще более коряво, но вроде тоже работает (пока изучаю): protected override void On...</title>
    <published>2012-10-12T14:20:23Z</published>
    <updated>2012-10-12T14:20:23Z</updated>
    <author>
      <name>RomSunZ</name>
      <uri>https://stocksharp.ru/users/6384/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">Спасибо.&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;

        protected override void OnStarted()
        {
            _series
                .WhenCandlesFinished()
                .Do(ProcessCandle)
                .Apply(this);
            _series
                .WhenCandlesChanged()
                .Do(ProcessCandleTick)
                .Apply(this);
        }

        private void ProcessCandleTick(Candle candle)
        {
            var trr = base.Trader.Trades.Where(tr =&amp;gt; tr.Security == candle.Security &amp;amp;&amp;amp; tr.Time &amp;gt;= candle.OpenTime &amp;amp;&amp;amp; tr.Time &amp;lt;= candle.CloseTime).Last();
            var tt = candle.Security.LastTrade.Time;
            if (trr.Time != tt) realtime = false;
            else realtime = true;
        }

&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/21780/</id>
    <title type="text">я делал так: public sealed class MyCandle : TimeFrameCandle { public MyCandle(TimeFrameCandle copyFr...</title>
    <published>2012-10-12T12:59:20Z</published>
    <updated>2012-10-12T12:59:20Z</updated>
    <author>
      <name>Sergey Sokolov</name>
      <uri>https://stocksharp.ru/users/6014/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">я делал так:&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;

    public sealed class MyCandle : TimeFrameCandle {
        public MyCandle(TimeFrameCandle copyFrom) {
            this.CopyFrom(copyFrom);
        }

        public DateTime LastTradeTime {get; private set;}

        public class MyCandleBuilder : TimeFrameCandleBuilder {
            protected override TimeFrameCandle CreateCandle(CandleSeries series, ICandleBuilderSourceValue value) {
                var candle = base.CreateCandle(series, value);
                if(candle == null) return null;

                var mycandle = new MyCandle(candle) {LastTradeTime = value.Time};

                return mycandle;
            }

            protected override void UpdateCandle(CandleSeries series, TimeFrameCandle candle, ICandleBuilderSourceValue value) {
                base.UpdateCandle(series, candle, value);
                ((MyCandle)candle).LastTradeTime = value.Time;
            }
        }
    }
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;Кривовато, но работает.</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/21777/</id>
    <title type="text">candle.CloseTime не пойдет, всегда возвращает конец таймфрейма, а не время последней сделки свечки. ...</title>
    <published>2012-10-12T09:26:10Z</published>
    <updated>2012-10-12T10:57:49Z</updated>
    <author>
      <name>RomSunZ</name>
      <uri>https://stocksharp.ru/users/6384/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">candle.CloseTime не пойдет, всегда возвращает конец таймфрейма, а не время последней сделки свечки.&lt;br /&gt;Подскажите, как можно получить тиковые сделки по свечке или время последнего изменения свечки?</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/21764/</id>
    <title type="text">Да, я уже понял var tt = candle.Security.LastTrade.Time; if (candle.CloseTime != tt) realtime = fals...</title>
    <published>2012-10-11T19:06:58Z</published>
    <updated>2012-10-11T19:08:25Z</updated>
    <author>
      <name>RomSunZ</name>
      <uri>https://stocksharp.ru/users/6384/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">Да, я уже понял&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;

            var tt = candle.Security.LastTrade.Time;
            if (candle.CloseTime != tt) realtime = false;
            else realtime = true;

&lt;/pre&gt;
&lt;/div&gt;&lt;/div&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;

		private void ProcessCandle(Candle candle)
		{
            var longValue = candle.State == CandleStates.Finished ? _strategy.LongSma.Process((DecimalIndicatorValue)candle.ClosePrice) : null;
            var shortValue = candle.State == CandleStates.Finished ? _strategy.ShortSma.Process((DecimalIndicatorValue)candle.ClosePrice) : null;

			_chart.ProcessValues(candle.OpenTime, new Dictionary&amp;lt;IChartElement, object&amp;gt;
			{
				{ _candlesElem, candle },
				{ _longMaElem, longValue },
				{ _shortMaElem, shortValue },
			});
		}

&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;Статус свечек, загруженных из файла равен NULL, и они не строятся на графике и, соответственно, не рассчитывают МА.&lt;br /&gt;Плюс ко всему в риалтайме машки также считаются непонять как (скорее всего и в окне, и в стратегии расчет дублируется), но я еще не понял, что там нужно поправить.</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/21762/</id>
    <title type="text">Разбираюсь с примером Quik SampleSMA. В этом примере если запускать робота не с начала дня, то сыпят...</title>
    <published>2012-10-11T15:51:00Z</published>
    <updated>2012-10-11T15:51:16Z</updated>
    <author>
      <name>Sergey Masyura</name>
      <uri>https://stocksharp.ru/users/701/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;RomSunZ &lt;a href="https://stocksharp.ru/posts/m/21757/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;Разбираюсь с примером Quik SampleSMA.&lt;br /&gt;В этом примере если запускать робота не с начала дня, то сыпятся сделки по приходу свечек из истории.&lt;br /&gt;Есть ли какой-либо метод, чтобы запретить выставлять ордера на биржу, пока не будет закачана вся история?&lt;br /&gt;&lt;br /&gt;Роман.&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;В сделке есть время, есть время запуска стратегии. Можно сравнить.</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/21757/</id>
    <title type="text">Разбираюсь с примером Quik SampleSMA. В этом примере если запускать робота не с начала дня, то сыпят...</title>
    <published>2012-10-11T09:22:21Z</published>
    <updated>2012-10-11T09:22:21Z</updated>
    <author>
      <name>RomSunZ</name>
      <uri>https://stocksharp.ru/users/6384/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">Разбираюсь с примером Quik SampleSMA.&lt;br /&gt;В этом примере если запускать робота не с начала дня, то сыпятся сделки по приходу свечек из истории.&lt;br /&gt;Есть ли какой-либо метод, чтобы запретить выставлять ордера на биржу, пока не будет закачана вся история?&lt;br /&gt;&lt;br /&gt;Роман.</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
</feed>