﻿<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type='text/css' href='https://stocksharp.com/css/style.css'?>
<?xml-stylesheet type='text/css' href='https://stocksharp.com/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-04-06T07:21:53Z</updated>
  <logo>https://stocksharp.com/images/logo.png</logo>
  <link href="https://stocksharp.com/handlers/atom.ashx?category=topic&amp;id=3478" rel="self" type="application/rss+xml" />
  <entry>
    <id>https://stocksharp.com/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.com/users/16581/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">Странный подход к проблеме. Если данные не качаются то не надо их качать сегодня. Они закачаются завтра. Я так понял что исправление достаточно легко вставить. Но не вставили.&lt;br /&gt;&lt;br /&gt;Для большинства вообще пофиг сколько там битых тиков придет, главное чтобы более менее можно было построить свечки по вчерашней сессии. Не все брокеры дают историю толковую за вчера и позавчера итд.</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/24627/</id>
    <title type="text">Не вижу особой проблемы что текущий API/Гидра не сохраняет вечерку вчерашнего дня, остальные то вече...</title>
    <published>2013-03-18T18:18:29Z</published>
    <updated>2013-03-18T18:18:29Z</updated>
    <author>
      <name>VassilSanych</name>
      <uri>https://stocksharp.com/users/6491/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;Moadip &lt;a href="https://stocksharp.com/posts/m/24626/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;Не вижу особой проблемы что текущий API/Гидра не сохраняет вечерку вчерашнего дня, остальные то вечерки сохраняются.&lt;br /&gt;ИМХО, данные надо собирать самому, различные паблик источники это крайность, если были пропуски или надо протестировать на истории.&lt;br /&gt;Ftp RTS кстати не эталон, там тоже бывают битые данные.&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;Резервные источники надёжнее. Пара битых тиков - не проблема. Проблема - отсутствие данных. Качать данные самому в непрерывном режиме - это уже другая задача.&lt;br /&gt;Чтобы иметь промышленную надёжность, надо иметь промышленные поддержку, администрирование и резервирование.&lt;br /&gt;Пусть уж этим РТС занимается. Или Финам.&lt;br /&gt;&lt;br /&gt;</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/24626/</id>
    <title type="text">Получается, вечерка все таки попадает со временем в те файлы, что Гидра парсит? Надо просто подождат...</title>
    <published>2013-03-18T18:09:46Z</published>
    <updated>2013-03-18T18:09:46Z</updated>
    <author>
      <name>Moadip</name>
      <uri>https://stocksharp.com/users/5973/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;VassilSanych &lt;a href="https://stocksharp.com/posts/m/24625/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;Mikhail Sukhov &lt;a href="https://stocksharp.com/posts/m/24624/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;Получается, вечерка все таки попадает со временем в те файлы, что Гидра парсит? Надо просто подождать, так?&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;Так. Но при торговле мне необходимы именно ВЧЕРАШНИЕ данные, а не позавчерашние или месячной давности.&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;Не вижу особой проблемы что текущий API/Гидра не сохраняет вечерку вчерашнего дня, остальные то вечерки сохраняются.&lt;br /&gt;ИМХО, данные надо собирать самому, различные паблик источники это крайность, если были пропуски или надо протестировать на истории.&lt;br /&gt;Ftp RTS кстати не эталон, там тоже бывают битые данные.</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/24625/</id>
    <title type="text">Получается, вечерка все таки попадает со временем в те файлы, что Гидра парсит? Надо просто подождат...</title>
    <published>2013-03-18T17:38:18Z</published>
    <updated>2013-03-18T17:38:18Z</updated>
    <author>
      <name>VassilSanych</name>
      <uri>https://stocksharp.com/users/6491/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;Mikhail Sukhov &lt;a href="https://stocksharp.com/posts/m/24624/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&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>
  <entry>
    <id>https://stocksharp.com/posts/m/24624/</id>
    <title type="text">Сказали &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.com/users/201/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;VassilSanych &lt;a href="https://stocksharp.com/posts/m/24621/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;Сказали &amp;quot;не грузите последний день&amp;quot; и ладно.&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.com/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.com/users/6491/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">Собственно, загрузка вчерашних данных&lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;&lt;strong&gt;Code&lt;/strong&gt;&lt;div class="innercode"&gt;&lt;pre class="brush: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;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;...&lt;br /&gt;&lt;br /&gt;&lt;div class='spoilertitle'&gt;&lt;input type='button' value='Show spoiler' class='btn btn-primary' onclick="toggleSpoiler(this, 'spolier_9ce12a42db3c40e0b9f89f76b7918578');" title='Show spoiler' /&gt;&lt;/div&gt;&lt;div class='spoilerbox' id='spolier_9ce12a42db3c40e0b9f89f76b7918578' style='display:none'&gt;&lt;div class="code"&gt;&lt;strong&gt;Code&lt;/strong&gt;&lt;div class="innercode"&gt;&lt;pre class="brush: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;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/24621/</id>
    <title type="text">была такая трабла в гидре уже давно. И не фиксилась как-то. В Гидре оно не особенно и нужно было. Ск...</title>
    <published>2013-03-18T17:07:05Z</published>
    <updated>2013-03-18T17:07:05Z</updated>
    <author>
      <name>VassilSanych</name>
      <uri>https://stocksharp.com/users/6491/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;ra81 &lt;a href="https://stocksharp.com/posts/m/24620/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;была такая трабла в гидре уже давно. И не фиксилась как-то. &lt;/div&gt;&lt;/div&gt;&lt;br /&gt;В Гидре оно не особенно и нужно было. Сказали &amp;quot;не грузите последний день&amp;quot; и ладно.&lt;br /&gt;А раз уж открытое API, то пусть работает, как надо.&lt;br /&gt;Ещё бы избавиться от дикой связности. Надоело уже заглушки лепить, где попало.&lt;br /&gt;&lt;br /&gt;</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/24620/</id>
    <title type="text">Существующий код RtsHistorySource не грузит вчерашнюю вечорку из-за того, что она хранится в сегодня...</title>
    <published>2013-03-18T16:43:01Z</published>
    <updated>2013-03-18T16:43:01Z</updated>
    <author>
      <name>ra81</name>
      <uri>https://stocksharp.com/users/16581/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;VassilSanych &lt;a href="https://stocksharp.com/posts/m/24619/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;Существующий код RtsHistorySource не грузит вчерашнюю вечорку из-за того, что она хранится в сегодняшних файлах TE*.zip , а грузятся только FT*.zip.&lt;br /&gt;&lt;a target="_blank" rel="nofollow" href="https://stocksharp.com/away/?u=AQAAAAAAAAA7Un8my3NeahuoG0VAVI8B3eawOHoa-Sr8rKxLpKw5QF9ogtg3va1HQDj6TZAwmJUhTs1_-E0KCPy7Z5OJIXX89l-Y7CxLwa80Pa1RTlanpH_7ZpEgJAQn9O6VYUIULr8o1pIgz7Pn6j7kq0L4_noI6Ao-exmuKlvXDpTU4M3slw" title="https://code.google.com/p/stocksharp-fixed/source/diff?path=/trunk/Algo/History/Rts/TxtSource.cs&amp;amp;format=side&amp;amp;r=15"&gt;Доработка исходников&lt;/a&gt;&lt;br /&gt;Гонял только именно для загрузки вчерашних данных фьюча РТС. К Гидре не прикручивал. Поэтому как оно дружит с Гидрой, не знаю.&lt;br /&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.com/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.com/users/6491/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">Существующий код RtsHistorySource не грузит вчерашнюю вечорку из-за того, что она хранится в сегодняшних файлах TE*.zip , а грузятся только FT*.zip.&lt;br /&gt;&lt;a target="_blank" rel="nofollow" href="https://stocksharp.com/away/?u=AQAAAAAAAAA7Un8my3NeahuoG0VAVI8B3eawOHoa-Sr8rKxLpKw5QF9ogtg3va1HQDj6TZAwmJUhTs1_-E0KCPy7Z5OJIXX89l-Y7CxLwa80Pa1RTlanpH_7ZpEgJAQn9O6VYUIULr8o1pIgz7Pn6j7kq0L4_noI6Ao-exmuKlvXDpTU4M3slw" title="https://code.google.com/p/stocksharp-fixed/source/diff?path=/trunk/Algo/History/Rts/TxtSource.cs&amp;amp;format=side&amp;amp;r=15"&gt;Доработка исходников&lt;/a&gt;&lt;br /&gt;Гонял только именно для загрузки вчерашних данных фьюча РТС. К Гидре не прикручивал. Поэтому как оно дружит с Гидрой, не знаю.&lt;br /&gt;Пишите, в чём ошибся.</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
</feed>