﻿<?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">Вечорка с FTP РТС</title>
  <id>~/topic/3478/vechorka-s-ftp-rts/</id>
  <rights type="text">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  <updated>2026-06-10T22:34:58Z</updated>
  <logo>https://stocksharp.ru/images/logo.png</logo>
  <link href="https://stocksharp.ru/handlers/atom.ashx?category=topic&amp;id=3478" rel="self" type="application/rss+xml" />
  <entry>
    <id>https://stocksharp.ru/posts/m/24637/</id>
    <title type="text">Странный подход к проблеме. Если данные не качаются то не надо их качать сегодня. Они закачаются зав...</title>
    <published>2013-03-19T02:10:53Z</published>
    <updated>2013-03-19T02:10:53Z</updated>
    <author>
      <name>ra81</name>
      <uri>https://stocksharp.ru/users/16581/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&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/24627/</id>
    <title type="text">Moadip: Не вижу особой проблемы что текущий API/Гидра не сохраняет вечерку вчерашнего дня, остальные...</title>
    <published>2013-03-18T18:18:29Z</published>
    <updated>2013-03-18T18:18:29Z</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(24626)" rel="nofollow" target="_blank"&gt;Moadip&lt;/a&gt;:&lt;/strong&gt;
Не вижу особой проблемы что текущий API/Гидра не сохраняет вечерку вчерашнего дня, остальные то вечерки сохраняются.
ИМХО, данные надо собирать самому, различные паблик источники это крайность, если были пропуски или надо протестировать на истории.
Ftp RTS кстати не эталон, там тоже бывают битые данные.
Резервные источники надёжнее. Пара битых тиков - не проблема. Проблема - отсутствие данных. Качать данные самому в непрерывном режиме - это уже другая задача.
Чтобы иметь промышленную надёжность, надо иметь промышленные поддержку, администрирование и резервирование.
Пусть уж этим РТС занимается. Или Финам.&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/24626/</id>
    <title type="text">VassilSanych: Mikhail Sukhov: Получается, вечерка все таки попадает со временем в те файлы, что Гидр...</title>
    <published>2013-03-18T18:09:46Z</published>
    <updated>2013-03-18T18:09:46Z</updated>
    <author>
      <name>Moadip</name>
      <uri>https://stocksharp.ru/users/5973/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="@message(24625)" 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(24624)" rel="nofollow" target="_blank"&gt;Mikhail Sukhov&lt;/a&gt;:&lt;/strong&gt;
Получается, вечерка все таки попадает со временем в те файлы, что Гидра парсит? Надо просто подождать, так?
Так. Но при торговле мне необходимы именно ВЧЕРАШНИЕ данные, а не позавчерашние или месячной давности.
Не вижу особой проблемы что текущий API/Гидра не сохраняет вечерку вчерашнего дня, остальные то вечерки сохраняются.
ИМХО, данные надо собирать самому, различные паблик источники это крайность, если были пропуски или надо протестировать на истории.
Ftp RTS кстати не эталон, там тоже бывают битые данные.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/blockquote&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/24625/</id>
    <title type="text">Mikhail Sukhov: Получается, вечерка все таки попадает со временем в те файлы, что Гидра парсит? Надо...</title>
    <published>2013-03-18T17:38:18Z</published>
    <updated>2013-03-18T17:38:18Z</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(24624)" rel="nofollow" target="_blank"&gt;Mikhail Sukhov&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/24624/</id>
    <title type="text">VassilSanych: Сказали &amp;quot;не грузите последний день&amp;quot; и ладно. Получается, вечерка все таки попадает со ...</title>
    <published>2013-03-18T17:32:03Z</published>
    <updated>2013-03-18T17:32:03Z</updated>
    <author>
      <name>Mikhail Sukhov</name>
      <uri>https://stocksharp.ru/users/201/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="@message(24621)" rel="nofollow" target="_blank"&gt;VassilSanych&lt;/a&gt;:&lt;/strong&gt;
Сказали &amp;quot;не грузите последний день&amp;quot; и ладно.&lt;/p&gt;
&lt;/blockquote&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/24623/</id>
    <title type="text">Собственно, загрузка вчерашних данных public class DumbSecurityStorage : ISecurityStorage { private ...</title>
    <published>2013-03-18T17:19:05Z</published>
    <updated>2013-03-18T17:21:45Z</updated>
    <author>
      <name>VassilSanych</name>
      <uri>https://stocksharp.ru/users/6491/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;p&gt;Собственно, загрузка вчерашних данных&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-csharp"&gt;public class DumbSecurityStorage : ISecurityStorage
		{
			private Security _security;

			public Security LoadBy(string fieldName, object fieldValue)
			{
				return _security;
			}

			public void Save(Security security)
			{
				_security = security;
			}
		}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;...&lt;/p&gt;
&lt;div class="spoiler"&gt;
&lt;pre&gt;&lt;code class="language-csharp"&gt;
......
IEnumerable&amp;lt;Trade&amp;gt; GetTradesFromFinam(DateTime date)
		{
			var storage = new DumbSecurityStorage();
			storage.Save(Security);
			var source = new FinamHistorySource(storage) { DumpFolder = GetTempPath() };
			var finamMarketId = (long)Settings[&amp;quot;HistoryFinamMarketId&amp;quot;]; //14 //todo: проверка
			var finamSecurityId = (long)Settings[&amp;quot;HistoryFinamSecurityId&amp;quot;];  //82813; //todo: проверка
			Security.ExtensionInfo[&amp;quot;FinamMarketId&amp;quot;] = finamMarketId;
			Security.ExtensionInfo[&amp;quot;FinamSecurityId&amp;quot;] = finamSecurityId;
			return source.GetTrades(Security, date);
		}

		IEnumerable&amp;lt;Trade&amp;gt; GetTradesFromRts(DateTime date)
		{
			var storage = new DumbSecurityStorage();
			storage.Save(Security);
			var source = new RtsHistorySource(storage) { DumpFolder = GetTempPath() };
			var trades = new Dictionary&amp;lt;Security, IList&amp;lt;Trade&amp;gt;&amp;gt;();
			source.LoadTrades(date, trades);
			if (!trades.ContainsKey(Security))
				throw new ApplicationException(&amp;quot;Не получены данные за прошлый день&amp;quot;);
			return trades[Security];
		}

		private string GetTempPath()
		{
             var tradeStoragePath = (string)Settings[&amp;quot;HistoryTradeStoragePath&amp;quot;]; //todo: проверка
			var tempPath = Path.Combine(tradeStoragePath, &amp;quot;TemporaryFiles&amp;quot;);

			if (!Directory.Exists(tempPath))
				Directory.CreateDirectory(tempPath);

			return tempPath;
		}


		DateTime GetLastDateBefore(DateTime date)
		{
			do
			{
				date = date.AddDays(-1);
				if (ExchangeBoard.Forts.WorkingTime.IsTradeDate(date, true))
					return date;
			} while (true);
		}



		/// &amp;lt;summary&amp;gt;
		///  Добавление в список свечей данных из хранилища
		/// &amp;lt;/summary&amp;gt;
		private void AddHistoryCandles()
		{
			var storageRegistry = new StorageRegistry();
			var tradeStoragePath = (string)Settings[&amp;quot;HistoryTradeStoragePath&amp;quot;]; //todo: проверка
			((LocalMarketDataDrive)storageRegistry.DefaultDrive).Path = tradeStoragePath;
			var storage = storageRegistry.GetTradeStorage(Security);

			var thisDate = LoggingHelper.Now.Date;
			var lastDate = GetLastDateBefore(thisDate);

			switch ((string)Settings[&amp;quot;HistorySource&amp;quot;]) //todo: проверка
			{
				case &amp;quot;RTS&amp;quot;:
					if (!storage.Dates.Contains(thisDate))
					{
						var trades = GetTradesFromRts(lastDate);
						//
						storage.Save(trades.Where(t =&amp;gt; t.Time &amp;gt; lastDate &amp;amp;&amp;amp; t.Price &amp;gt; 0));
						//пропуск закачки более старых (нужна закачка целыми днями) и игнорирование ошибки данных
						// на ftp ртс данные выложены по сессиям с 19.00 до 19.00

						trades = GetTradesFromRts(thisDate);
						storage.Save(trades.Where(t =&amp;gt; t.Time &amp;lt; thisDate &amp;amp;&amp;amp; t.Price &amp;gt; 0));
						//пропуск закачки сегодняшних и игнорирование ошибки данных
					}
					break;
				case &amp;quot;Finam&amp;quot;:
					if (!storage.Dates.Contains(lastDate))
					{
						var trades = GetTradesFromFinam(lastDate);
						storage.Save(trades);
					}
					break;
				default:
					if (!storage.Dates.Contains(lastDate))
					{
						//var trades = GetTradesFromTxt(@&amp;quot;E:\Downloads\RIH3_130312_130312.txt&amp;quot;);
						var trades = GetTradesFromTxt(string.Format(
							&amp;quot;{0}{1}_{2}_{2}.txt&amp;quot;,
							tradeStoragePath, Security.Code, lastDate));
						storage.Save(trades);
					}
					break;
			}

			// берём только сделки раньше тех, что есть в таблице
			var lastTimeSource = Trader.Trades.Select(t =&amp;gt; t.Time);
			var lastTime = lastTimeSource.Any() ? lastTimeSource.Min() : thisDate;
			var source = new TradeStorageCandleBuilderSource
				{
					StorageRegistry = storageRegistry,
					Filter = trade =&amp;gt; trade.Time &amp;gt; lastDate &amp;amp;&amp;amp; trade.Time &amp;lt; lastTime,
				};
			TraderBuilder.CandleManager.Sources.OfType&amp;lt;TickCandleBuilder&amp;gt;().Single().Sources.Add(source);
		}


		protected override void OnStarted()
		{
			try
			{
				Trader = TraderBuilder.BuildTrader();
				OrderHelper = TraderBuilder.OrderHelper;
				if (Trader == null)
					throw new ApplicationException(string.Format(&amp;quot;Отсутствует трейдер {0}.&amp;quot;, TraderBuilder.Title));
				_strategyStartTime = Trader.GetMarketTime(ExchangeBoard.Forts.Exchange);

				Portfolio = PortfolioSelector.GetPortfolio(Trader);
				if (Portfolio == null)
					throw new ApplicationException(string.Format(&amp;quot;Отсутствует портфель {0}.&amp;quot;, PortfolioSelector.Title));

				Security = SecuritySelector.GetSecurity(Trader);
				if (Security == null)
					throw new ApplicationException(string.Format(&amp;quot;Отсутствует инструмент {0}.&amp;quot;, SecuritySelector.Title));
				Trader.RegisterSecurity(Security);

				Trader.RegisterMarketDepth(Security);

				if (VolumeSizer != null)
				{
					Volume = VolumeSizer.GetVolume(Portfolio, Security);
					this.AddInfoLog(&amp;quot;Объем: {0}&amp;quot;, Volume);
				}

				AddHistoryCandles();

				Series = new CandleSeries(
					CandleFrameType, Security, FrameSize) { WorkingTime = ExchangeBoard.Forts.WorkingTime };
					// Если Security - это WeightedIndexSecurity, то _series не заполняется

				Series
					.WhenCandlesFinished()
					.Do(ProcessCandle)
					.Apply(this);

				TraderBuilder.CandleManager.Start(Series);

				base.OnStarted();

			}
			catch (Exception ex)
			{
				this.AddErrorLog(ex);
				Stop();
			}
		}
......

&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/24621/</id>
    <title type="text">ra81: была такая трабла в гидре уже давно. И не фиксилась как-то. В Гидре оно не особенно и нужно бы...</title>
    <published>2013-03-18T17:07:05Z</published>
    <updated>2013-03-18T17:07:05Z</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(24620)" rel="nofollow" target="_blank"&gt;ra81&lt;/a&gt;:&lt;/strong&gt;
была такая трабла в гидре уже давно. И не фиксилась как-то.
В Гидре оно не особенно и нужно было. Сказали &amp;quot;не грузите последний день&amp;quot; и ладно.
А раз уж открытое API, то пусть работает, как надо.
Ещё бы избавиться от дикой связности. Надоело уже заглушки лепить, где попало.&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/24620/</id>
    <title type="text">VassilSanych: Существующий код RtsHistorySource не грузит вчерашнюю вечорку из-за того, что она хран...</title>
    <published>2013-03-18T16:43:01Z</published>
    <updated>2013-03-18T16:43:01Z</updated>
    <author>
      <name>ra81</name>
      <uri>https://stocksharp.ru/users/16581/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="@message(24619)" rel="nofollow" target="_blank"&gt;VassilSanych&lt;/a&gt;:&lt;/strong&gt;
Существующий код RtsHistorySource не грузит вчерашнюю вечорку из-за того, что она хранится в сегодняшних файлах TE*.zip , а грузятся только FT*.zip.
&lt;a href="https://code.google.com/p/stocksharp-fixed/source/diff?path=/trunk/Algo/History/Rts/TxtSource.cs&amp;amp;format=side&amp;amp;r=15" rel="nofollow" target="_blank"&gt;Доработка исходников&lt;/a&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/24619/</id>
    <title type="text">Существующий код RtsHistorySource не грузит вчерашнюю вечорку из-за того, что она хранится в сегодня...</title>
    <published>2013-03-18T13:31:46Z</published>
    <updated>2013-03-18T13:37:53Z</updated>
    <author>
      <name>VassilSanych</name>
      <uri>https://stocksharp.ru/users/6491/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;p&gt;Существующий код RtsHistorySource не грузит вчерашнюю вечорку из-за того, что она хранится в сегодняшних файлах TE*.zip , а грузятся только FT*.zip.
&lt;a href="https://code.google.com/p/stocksharp-fixed/source/diff?path=/trunk/Algo/History/Rts/TxtSource.cs&amp;amp;format=side&amp;amp;r=15" rel="nofollow" target="_blank"&gt;Доработка исходников&lt;/a&gt;
Гонял только именно для загрузки вчерашних данных фьюча РТС. К Гидре не прикручивал. Поэтому как оно дружит с Гидрой, не знаю.
Пишите, в чём ошибся.&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
</feed>