﻿<?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">Сообщество. StockSharp</title>
  <id>https://stocksharp.ru/handlers/atom.ashx?category=community&amp;page=70</id>
  <rights type="text">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  <updated>2026-06-25T13:43:53Z</updated>
  <logo>https://stocksharp.ru/images/logo.png</logo>
  <link href="https://stocksharp.ru/handlers/atom.ashx?category=community&amp;page=70" rel="self" type="application/rss+xml" />
  <entry>
    <id>https://stocksharp.ru/topic/8029/</id>
    <title type="text">Баг в WhenAllTrades()</title>
    <published>2017-01-21T11:08:23Z</published>
    <updated>2017-01-21T11:27:51Z</updated>
    <author>
      <name>Slepoy</name>
      <uri>https://stocksharp.ru/users/820/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <category term="WhenAllTrades" />
    <content type="html">&lt;p&gt;Найден баг в работе &amp;quot;WhenAllTrades() - создать правило на событие появления всех сделок по заявке.&amp;quot; Правило, помимо своего базового назначения: реакции на появление всех сделок по заявке, когда оно присылает коллекцию со сделками, реагирует ещё и на события появления и изменения ордера, присылая при этом пустую коллекцию. Скрин: &lt;a href="http://stocksharp.ru/file/104104"&gt;http://stocksharp.ru/file/104104&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;lt;u&amp;gt;Код стратежки для вопроизведения проблемы&amp;lt;/u&amp;gt;&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-cs"&gt;
class SmartStrategy4: Strategy 
{
        decimal neededVolume = 10;                                                             
        decimal currentVolume;                   
        bool tradeFullFlag = true;
        bool unRegOrderFlag = true;

        protected override void OnStarted()   
        {
            var sRule = Security.WhenMarketDepthChanged(Connector).Do((srArg, stakanArg) =&amp;gt;
                           {  
                              if(currentVolume &amp;gt;= neededVolume)                                                       
                                 Stop();

                              if(tradeFullFlag || unRegOrderFlag)
                              { 
                                   var openBuyOrder = this.BuyAtLimit(stakanArg.BestBid.Price, 2);                        
                                                                                              
                                   var myTrRule = openBuyOrder.WhenNewTrade(Connector).Do((rArg, myTradeArg) =&amp;gt;        
                                                             {   
                                                                    currentVolume += myTradeArg.Trade.Volume;
                                                             }).Apply(this);       
                           
                                   var myAlltRule = openBuyOrder.WhenAllTrades(Connector).Do((rArg, myTradeCollArg) =&amp;gt; 
                                                             {
                                                                    if (myTradeCollArg.Any()) 
                                                                        tradeFullFlag = true;                                                                        
                                                              }).Apply(this);

                                   var regRule = openBuyOrder.WhenRegistered(Connector).Do((rArg, orderArg) =&amp;gt;         
                                                          {                                                                                                                        
                                                                  if(openBuyOrder.State != OrderStates.Done &amp;amp;&amp;amp; !openBuyOrder.IsMatchedPartially())
                                                                      CancelOrder(openBuyOrder);                                                                                 
                                                          }).Apply(this);

                                   var unRegRule = openBuyOrder.WhenCanceled(Connector).Do((rArg, orderArg) =&amp;gt; { unRegOrderFlag = true; }).Apply(this);
        
                                   RegisterOrder(openBuyOrder);                                                    

                                   tradeFullFlag = false; 
                                   unRegOrderFlag = false; 
                              }                                                                                             
                         }).Apply(this);                                                   
            base.OnStarted();                                                                  
        }
    }

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Выше представлена модифицированная стратежка из обучающих уроков. Она выставляет лимитку на покупку по лучшему биду, объёмом 2 коня. И тут же снимает её, если её сразу не скушали. И так до тех пор, пока не наберёт 10 коней. Стратежка конечно убогая, но тут важно другое, что если поставить точку остановки на анонимном методе у правила, которое создаёт метод WhenAllTrades(), то мы увидим как оно будет постоянно срабатывать, оно будет отрабатывать каждое изменение ордера: постановку/отмену, при этом будет присылать пустую коллекцию. Такого быть не должно, правило должно срабатывать лишь единожды - на событие полного исполнения. Не должно быть холостых срабатываний. Сейчас оно отрабатывает в перемешку: холостой-холостой-холостой-боевой-холостой-холостой--холостой- боевой и т.д.&lt;/p&gt;
&lt;p&gt;&amp;lt;u&amp;gt;&lt;strong&gt;Как поправить проблему&lt;/strong&gt;&amp;lt;/u&amp;gt;
Залезть в исходники, в файл MarketRuleHelper.cs. Найти там класс AllTradesOrderRule и малость подпилить строчку:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-cs"&gt; private bool AllTradesReceived =&amp;gt; Order.State == OrderStates.Done &amp;amp;&amp;amp; (Order.Volume - Order.Balance == _receivedVolume); 
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Как нужно правильно - я не знаю, но я бы ввёл проверку на нулевую позицию. В левой части строчки -  рыть бесполезно, т.к. статус Done не даёт однозначного ответа: заявка исполнена или снята, поэтому правило реагирует и на отменённую заявку тоже. Поэтому рыть надо правее. Допустим, заявка снята, левая часть нам даст true, но и правая часть тоже даст true, ибо разность объёма и баланса даст ноль, а _receivedVolume у нас тоже ноль, т.к. мы ещё не успели ничего набрать. Поэтому, надо проверить, чтобы _receivedVolume не был ноль. Я бы попробовал именно так:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-cs"&gt;private bool AllTradesReceived =&amp;gt; Order.State == OrderStates.Done &amp;amp;&amp;amp; _receivedVolume != 0  &amp;amp;&amp;amp; (Order.Volume - Order.Balance == _receivedVolume); 
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;P.S. Можете не отвечать на данное сообщение. Только, прошу: не надо меня отправлять открывать счёт, чтобы команда техподдержки чего-то тут увидела. Я достаточно полазил по гитхабу, чтобы понять кто правит баги и делает основную работу. И данный человек читает сей форум. Считайте что я это всё написал как-бы на гитхабе. Я пока не умею им пользоваться - времени пока нет разбираться, но в будущем разберусь. В общем, данный баг надо чинить. Успехов!&lt;/p&gt;
</content>
  </entry>
  <entry>
    <id>https://stocksharp.ru/topic/7823/</id>
    <title type="text">Quik Junior 7.6.1.1 + StockSharp </title>
    <published>2017-01-13T00:17:51Z</published>
    <updated>2017-01-19T21:14:44Z</updated>
    <author>
      <name>aoleynikov</name>
      <uri>https://stocksharp.ru/users/72744/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <category term="#quiklua #quik" />
    <content type="html">&lt;p&gt;Я пытаюсь настроить взаимодействие между Quik и Stocksharp (через lua). Насколько я понял из уроков по s# — первым шагом мне необходимо загрузить Lua скрипт (который я беру из папки References в s#). На данном этапе у меня происходит какая-то проблема — падает эксепшн &lt;a href="https://monosnap.com/file/hgy0qFBSVdkYSaYn8zyQpGRq3ag6vS" rel="nofollow" target="_blank"&gt;https://monosnap.com/file/hgy0qFBSVdkYSaYn8zyQpGRq3ag6vS&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Я пользуюсь последней версией Quik Junior 7.6.1.1. Во всех уроках, что я видел, версия Quik более старая. Хотел бы уточнить, как возможно решить эту проблему?&lt;/p&gt;
</content>
  </entry>
  <entry>
    <id>https://stocksharp.ru/topic/8025/</id>
    <title type="text">Connector.RegisterTrades подвешивает терминал Quik</title>
    <published>2017-01-19T21:02:26Z</published>
    <updated>2017-01-19T21:02:26Z</updated>
    <author>
      <name>RomSunZ</name>
      <uri>https://stocksharp.ru/users/6384/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <category term="QuikLua" />
    <content type="html">&lt;p&gt;Не знаю, увидят разработчики или нет, но написать должен.
При подписке на сделки метод Connector.RegisterTrades блокирует поток, в котором работает терминал Quik, что приводит к его зависанию до нескольких секунд. Чем ближе к вечерней сессии (соответственно чем больше сделок накопилось), тем на большее время подвисает терминал, пока не передаст все накопившиеся сделки. Соответственно перестают поступать данные по другим инструментам и с терминалом невозможно взаимодействовать.
Может быть возможно разбить сделки на несколько пакетов и передавать частями?&lt;/p&gt;
</content>
  </entry>
  <entry>
    <id>https://stocksharp.ru/topic/8016/</id>
    <title type="text">Не правильное время дневного клиринга Forts (разработчики обратите внимание!)</title>
    <published>2017-01-16T21:48:04Z</published>
    <updated>2017-01-19T10:02:02Z</updated>
    <author>
      <name>sulima-sm</name>
      <uri>https://stocksharp.ru/users/96920/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;p&gt;При использовании ExchangeBoard.Forts.IsTradeTime(CurrentTime) получаю время дневного клиринга с 14.00 по 14.03, что не верно! Кто чем пользуется?&lt;/p&gt;
</content>
  </entry>
  <entry>
    <id>https://stocksharp.ru/topic/8020/</id>
    <title type="text">Вопрос ко всем не равнодушным по дочерним стратегиям TakeProfitStrategy и StopLossStrategy</title>
    <published>2017-01-18T18:08:57Z</published>
    <updated>2017-01-18T21:18:02Z</updated>
    <author>
      <name>sulima-sm</name>
      <uri>https://stocksharp.ru/users/96920/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;p&gt;Стокшарп позиционирует свой продукт как полностью бесплатный (за исключением нескольких коннекторов). При попытке использования котирования система запросила лицензию, получил бесплатную - итог &amp;quot;Ваша лицензия не поддерживает котирование&amp;quot;. При попытке использования дочерних стратегий  TakeProfitStrategy и StopLossStrategy (делал все по мануалу) получил ошибку типа не зарегистрирован отфильтрованный стакан инструмента, RegisterFilteredMarketDepth пробовал безуспешно.
Для этих дочерних стратегий тоже нужна лицензия? Если нет ---киньте пожалуйста код, или придется делать через обычную стоп-заявку(((
Заранее всем спасибо.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <id>https://stocksharp.ru/topic/7014/</id>
    <title type="text">Проблемы с Hydra</title>
    <published>2016-12-25T18:00:16Z</published>
    <updated>2017-01-18T18:49:37Z</updated>
    <author>
      <name>Shandr</name>
      <uri>https://stocksharp.ru/users/6259/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <category term="Hydra" />
    <content type="html">&lt;p&gt;Привет всем. У меня возникла следующая трудность при работе с гидрой.&lt;/p&gt;
&lt;p&gt;Я установил гидру последней версии, но при скачивании у меня возникли проблемы. Во-первых, я указал один только инструмент (SBRF), а гидра начала качать данные по всем инструментам. Потом программа завершила свою работу с такой ошибкой (фото: 1). Потом я переустановил программу, и теперь при запуске гидры у меня возникает ошибка (фото: 2).&lt;/p&gt;
&lt;p&gt;Я хотел бы скачать исторические данные за определенный период по любым акциям, и выгрузить эти данные в формате файла эксель. Подскажите, пожалуйста, как правильно скачивать данные?&lt;/p&gt;
</content>
  </entry>
  <entry>
    <id>https://stocksharp.ru/topic/7810/</id>
    <title type="text">Ошибка парсинга при попытки импорта данных стакана в Гидре</title>
    <published>2017-01-12T16:07:34Z</published>
    <updated>2017-01-14T13:38:27Z</updated>
    <author>
      <name>Георгий</name>
      <uri>https://stocksharp.ru/users/95046/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <category term="Hydra" />
    <content type="html">&lt;p&gt;Здравствуйте.&lt;/p&gt;
&lt;p&gt;При импорте данных по стакану возникает ошибка:
﻿Название	Время	Тип	Сообщение
S#.Data (Hydra)	12.01.2017 16:06:08	Info	Импорт 'File@FORTS.txt' типа 'QuoteChangeMessage'.
S#.Data (Hydra)	12.01.2017 16:06:08	Error	&amp;quot;System.InvalidOperationException: Ошибка парсинга. Строка 0, колонка 2, значение в файле '10:00:04', поле Время. ---&amp;gt; System.InvalidCastException: Cannot convert 10:00:04 with format hh:mm:ss to TimeSpan. ---&amp;gt; System.FormatException: Входная строка имела неверный формат.
в System.Globalization.TimeSpanParse.TryParseByFormat(String input, String format, TimeSpanStyles styles, TimeSpanResult&amp;amp; result)
в System.Globalization.TimeSpanParse.TryParseExactTimeSpan(String input, String format, IFormatProvider formatProvider, TimeSpanStyles styles, TimeSpanResult&amp;amp; result)
в System.Globalization.TimeSpanParse.ParseExact(String input, String format, IFormatProvider formatProvider, TimeSpanStyles styles)
в Ecng.Common.TimeHelper.ToTimeSpan(String value, String format)
--- Конец трассировки внутреннего стека исключений ---
в Ecng.Common.TimeHelper.ToTimeSpan(String value, String format)
в StockSharp.Hydra.Panes.ImportPane.FieldMapping.ApplyValue(Object instance, Object value)
в StockSharp.Hydra.Panes.ImportPane.FieldMapping.ApplyFileValue(Object instance, String value)
в CallSite.Target(Closure , CallSite , FieldMapping , Object , String )
в System.Dynamic.UpdateDelegates.UpdateAndExecuteVoid3[T0,T1,T2](CallSite site, T0 arg0, T1 arg1, T2 arg2)
в CallSite.Target(Closure , CallSite , FieldMapping , Object , String )
в StockSharp.Hydra.Panes.ImportPane.&amp;lt;&amp;gt;c__DisplayClass27_0.&amp;lt;OnDoWork&amp;gt;b__1()
--- Конец трассировки внутреннего стека исключений ---
в StockSharp.Hydra.Panes.ImportPane.&amp;lt;&amp;gt;c__DisplayClass27_0.&amp;lt;OnDoWork&amp;gt;b__1()&amp;quot;&lt;/p&gt;
&lt;p&gt;Формат для колонки времени задан: hh:mm:ss&lt;/p&gt;
&lt;p&gt;Содержимое файла:
I1,21.12.2015,10:01:31,51112,Sell
I1,21.12.2015,10:01:31,52366,Buy&lt;/p&gt;
&lt;p&gt;Настройки импорта: скрин в приложении&lt;/p&gt;
</content>
  </entry>
  <entry>
    <id>https://stocksharp.ru/topic/7801/</id>
    <title type="text">Не приходят события по заявкам</title>
    <published>2017-01-09T23:23:16Z</published>
    <updated>2017-01-10T22:01:25Z</updated>
    <author>
      <name>Balex</name>
      <uri>https://stocksharp.ru/users/97855/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <category term="Quik" />
    <category term="заявки" />
    <category term="Lua" />
    <content type="html">&lt;p&gt;Из QuikLua (БКС) не приходят события по заявкам, в том числе не работает SampleQuik из набора примеров. Что делать, куда смотреть?&lt;/p&gt;
</content>
  </entry>
  <entry>
    <id>https://stocksharp.ru/topic/5039/</id>
    <title type="text">S# 4.3.8  проблемы с Quik Lua (Samples\Quik\Sample)</title>
    <published>2015-07-31T13:24:38Z</published>
    <updated>2017-01-10T20:59:36Z</updated>
    <author>
      <name>Den</name>
      <uri>https://stocksharp.ru/users/6003/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <category term="StockSharp" />
    <content type="html">&lt;p&gt;Уважаемые разработчики и коллеги!&lt;/p&gt;
&lt;p&gt;Quik 6.16.1.15&lt;/p&gt;
&lt;p&gt;Решил попробовать Quik с Lua.
Скачал релиз S# 4.3.8.&lt;/p&gt;
&lt;p&gt;Взял info_lua.wnd из Samples\Quik&lt;br /&gt;
Запустил в quik'e StockSharp.Quik.lua из References\&lt;/p&gt;
&lt;p&gt;И запустил пример из Samples\Quik\Sample\&lt;/p&gt;
&lt;p&gt;В логе вроде все прилично:&lt;/p&gt;
&lt;p&gt;2015/07/31 16:13:45.839|       |LuaServer |OnInit
2015/07/31 16:13:45.840|       |FixServer |Server 0.0.0.0:5001 started.
2015/07/31 16:13:45.841|       |FixServer |FixServer (outgoing) stopped.
2015/07/31 16:13:45.841|       |FixServer |FixServer started.
2015/07/31 16:13:45.841|       |LuaServer |OnInit done
2015/07/31 16:13:45.845|       |LuaServer |Main
2015/07/31 16:14:35.285|       |FixServer |Connected '127.0.0.1:1236' to '0.0.0.0:5001'.
2015/07/31 16:14:35.285|       |FixServer |Received first byte from '127.0.0.1:1236'.
2015/07/31 16:14:35.285|       |FixServer |From : Logon
2015/07/31 16:14:35.285|       |FixServer |Клиент quik (127.0.0.1:1236) авторизован.
2015/07/31 16:14:35.285|       |FixServer |Отправка Logon клиенту.
2015/07/31 16:14:35.285|       |FixServer |Сессия запущена.
2015/07/31 16:14:35.290|       |FixServer |Connected '127.0.0.1:1237' to '0.0.0.0:5001'.
2015/07/31 16:14:35.290|       |FixServer |Received first byte from '127.0.0.1:1237'.
2015/07/31 16:14:35.290|       |FixServer |From : Logon
2015/07/31 16:14:35.291|       |FixServer |Клиент quik (127.0.0.1:1237) авторизован.
2015/07/31 16:14:35.291|       |FixServer |Отправка Logon клиенту.
2015/07/31 16:14:35.291|       |FixServer |Сессия запущена.&lt;/p&gt;
&lt;p&gt;Но в примере, нет ни инструментов, ни сделок, ни заявок (все это присутствует в квике).
Проверял Verifier'ом - не ругается.&lt;/p&gt;
&lt;p&gt;Но данные (инструменты, сделки, заявки) в пример не попадают.&lt;/p&gt;
&lt;p&gt;Помогите, плиз, разобраться, что я делаю не так.&lt;/p&gt;
&lt;p&gt;Или это баг?&lt;/p&gt;
</content>
  </entry>
  <entry>
    <id>https://stocksharp.ru/topic/7029/</id>
    <title type="text">StockSharp.Xaml.ConnectorWindow ошибка компиляции</title>
    <published>2017-01-03T16:10:38Z</published>
    <updated>2017-01-09T10:40:34Z</updated>
    <author>
      <name>RomSunZ</name>
      <uri>https://stocksharp.ru/users/6384/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;p&gt;При компиляции StockSharp.Xaml.ConnectorWindow выдает эксепшн: не найден StaticResource ToolbarImageStyle.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <id>https://stocksharp.ru/topic/6995/</id>
    <title type="text">И снова о защитных стратегиях</title>
    <published>2016-12-08T07:31:42Z</published>
    <updated>2017-01-09T04:32:28Z</updated>
    <author>
      <name>roman001</name>
      <uri>https://stocksharp.ru/users/94444/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <category term="StopLossStrategy" />
    <content type="html">&lt;p&gt;Добрый день, уважаемые
Перерыл форум в надежде найти ответ на вопрос почему при пробитии уровня, указанного в StopLossStrategy, не создается соответствующая заявка в терминале. Везде пишут, что необходимо подписаться на стаканы, согласен...
В основном модуле пишу qTrader.RegisterMarketDepth(security),
затем стартую главную стратегию,
затем делаю SL&lt;/p&gt;
&lt;p&gt;var stopLoss = new StopLossStrategy(direction, fixOpenedPositionPrice, Volume, new Unit(correctionLoss, UnitTypes.Absolute));
ChildStrategies.Add(stopLoss)&lt;/p&gt;
&lt;p&gt;В дебаге вижу, что дочерняя стратегия создалась, корректно отражает защитную цену, направление и т.д.
но без толку, заявка то не создается[angry].
В личной переписке люди пишут, что забили и не используют этот функционал, но ведь разобрался же наверное кто-то?&lt;/p&gt;
</content>
  </entry>
  <entry>
    <id>https://stocksharp.ru/topic/7023/</id>
    <title type="text">Проблема с определение состояния инструмента</title>
    <published>2016-12-29T23:04:40Z</published>
    <updated>2017-01-03T10:46:49Z</updated>
    <author>
      <name>gem81</name>
      <uri>https://stocksharp.ru/users/62541/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <category term="bug" />
    <content type="html">&lt;p&gt;&lt;img src="/file/104046/stoped_error.png" alt="stoped_error.png" /&gt;&lt;/p&gt;
&lt;p&gt;QUIK 7.6.1.1, Ошибка проявляется на английском интерфейсе.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <id>https://stocksharp.ru/topic/7019/</id>
    <title type="text">InteractiveBrokers</title>
    <published>2016-12-27T16:09:22Z</published>
    <updated>2016-12-29T17:05:07Z</updated>
    <author>
      <name>andy_baka</name>
      <uri>https://stocksharp.ru/users/237/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;p&gt;В слабой надежде на ответ - у кого-нибудь получилось запустить Гидру со шлюзами interactivebrokers для получения исторических данных?&lt;/p&gt;
</content>
  </entry>
  <entry>
    <id>https://stocksharp.ru/topic/6989/</id>
    <title type="text">Где и как скачать маркет-данные по американскому рынку. Решение.</title>
    <published>2016-12-02T11:58:44Z</published>
    <updated>2016-12-29T10:36:50Z</updated>
    <author>
      <name>William B</name>
      <uri>https://stocksharp.ru/users/7/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <category term="StockSharp" />
    <category term="Hydra" />
    <category term="Алготрейдинг" />
    <category term="Торговые роботы" />
    <category term="данные" />
    <category term="datamining" />
    <category term="Trading robots" />
    <content type="html">&lt;p&gt;В нашей сегодняшней статье мы расскажем о том где можно бесплатно или за относительно небольшие деньги скачать исторические данные по американскому рынку, а также об универсальном способе скачивать, сохранять, анализировать и использовать в собственных алгоритмах любые типы рыночных данных.
Прежде всего давайте коснемся основных источников маркет-даты по американским ценным бумагам с кратким их описанием. В целом можно выделить три типа источников:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Источники исторических данных, например биржи, которые поставляют историю торгов на собственной площадке (конечно оставляем за гранью прямые подключения которые относятся к типу 2).&lt;/li&gt;
&lt;li&gt;Источники рыночных данных, например брокерские терминалы, через который конечно можно загрузить в том числе и определенную историю, но основной интерес представляет то, что происходит прямо сейчас.&lt;/li&gt;
&lt;li&gt;Универсальные источники, которые объединяют в себе тип 1 и тип 2, и как правило представлены специализированными сервисами.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;К первому типу источников можно смело отнести такие сайты как &lt;a href="https://www.google.com/finance" rel="nofollow" target="_blank"&gt;Google&lt;/a&gt; и &lt;a href="https://finance.yahoo.com/" rel="nofollow" target="_blank"&gt;Yahoo Finance&lt;/a&gt;:
&lt;img src="/file/103933/14.png" alt="" /&gt;
Несомненным достоинством этих сервисов является их полная бесплатность, однако, с другой стороны, интрадей маркет-данные скачать будет невозможно, также как невозможно получить, что либо кроме свечей. Под что-либо мы конечно подразумеваем такие данные как Level1, Order Log, Market Depth и т.д.
Это практически исключает возможность использования полученных данных для тестирования стратегий, предполагающих торговлю внутри дня. С другой стороны, если ваша стратегия предполагает среднесрочную торговлю, например, основана на подходе “Черепах”, либо вы практикуете портфельное инвестирование без слишком частого перетряхивания портфеля, то использование данных с этих источников будет очень обоснованно и целесообразно.&lt;/p&gt;
&lt;p&gt;К источникам рыночных данных как уже написано выше, относятся, прежде всего, брокерские терминалы или другие подключения к брокеру, которые есть у каждого практикующего трейдера. Например: Fusion/Blackwood, Rithmic, Gain Capital, OEC Trader, Sterling и т.д.
&lt;img src="/file/103936/15.png" alt="" /&gt;
Плюсы от использования данного источника видны практически сразу. Во-первых, это бесплатно (конечно без учета тех комиссий, которые вы платите брокеру). Во-вторых, это множество данных которые можно получить: некоторые типы свечей, тики, Level1, DOM и т.д. К минусам можно причислить отсутствие глубокой истории и необходимость хитрого сбора нужных данных, когда без специализированного ПО не обойтись.
При таком подходе, ваши возможности для тестирования значительно расширяются. Появляется возможность создавать не только внутридневные стратегии, но и высокочастотные алгоритмы, основанные на найденных исторических закономерностях.&lt;/p&gt;
&lt;p&gt;Универсальные источники - это в большинстве своем специализированные сервисы, которые поставляют как реал-тайм маркет-дату, так и любую запрошенную историю, например &lt;a href="http://www.iqfeed.net/stocksharp/" rel="nofollow" target="_blank"&gt;IQFeed&lt;/a&gt;.
&lt;img src="/file/103927/16.png" alt="" /&gt;
Главным плюсом подобного источника является его универсальность и наполненность данными, т.е. в любой момент по запросу пользователя можно получить любые нужные данные, тиковые, свечи, стаканы и т.п. Минусом такого подхода является платность данного сервиса, цена на который начинается от 50$ в месяц в базовой версии. Если возникает желание получить несколько больше, то потребуется подключить дополнительные функции, которые как вы уже поняли тоже будут стоить денег. Но, как и предыдущий вариант, вам потребуется специальная программа для сбора и хранения данных. Ведь по окончанию действия подписки вы потеряете все данные. Плюс глубина истории, хоть и больше, чем у предыдущего способа, но все равно она ограничена. Особенно для тиковых данных.&lt;/p&gt;
&lt;p&gt;Теперь мы можем перейти к самому интересному, а как же нам оптимально получать историю и при этом не тратить много денег. На наш взгляд, здраво выглядит следующий подход:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;скачать дневные свечи с бесплатного источника, и протестировать свою стратегию предварительно на этих данных;&lt;/li&gt;
&lt;li&gt;скачать интрадей данные через своего брокера, и протестировать уже более детально стратегию&lt;/li&gt;
&lt;li&gt;покупка подписки на платный сервис и выкачивание всего интересующего массива данных,
Для того, чтобы реализовать подобное, потребуется специализированное ПО, которое будет за вас вначале загружать нужные данные с нужного сервиса, а затем в едином формате продолжит сбор их от вашего брокера. Таким образом, единство данных не будет утрачено и их можно будет легко использовать в дальнейшем анализе.
Для таких задач мы создали программу &lt;a href="http://stocksharp.com/products/hydra/"&gt;S#.Data (Hydra)&lt;/a&gt; (ознакомиться с инструкцией и примерами по работе с программой можно &lt;a href="http://stocksharp.ru/s/2cdQFGGD"&gt;&lt;span style="color:blue"&gt;здесь&lt;/span&gt;&lt;/a&gt;). Это бесплатная программа, доступная для скачивания. Hydra предоставляет множество различных функций, но основной ее задачей является скачивание и накопление данных.
&lt;img src="/file/103979/HydraWhite.png" alt="" /&gt;
Hydra поддерживает загрузку не только свечей любого таймфрейма, но и тиков, ордер лога, level 1, стаканов по множеству инструментов. При этом программа умеет не только скачивать, но и накапливать данные, идущие от брокера, например из &lt;a href="https://futuresonline.com/trading/oec-trader" rel="nofollow" target="_blank"&gt;OEC Trader&lt;/a&gt;, Sterling и т.д.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Hydra хранит данные в форматах CSV или BIN (сверх компактный формат хранения данных - 7 байт на 1 снимок стакана или 2 байта на тик). Данные располагаются локально, как файлы, и к ним есть доступ из любых программных языков , а также позволяет в конечном итоге пользователю хранить и использовать огромный массив рыночных данных на домашнем компьютере, сервере или в облаке (поддерживается AWS).&lt;/p&gt;
&lt;p&gt;Подводя итоги настоящей статьи, надеемся, что методы изложенные в ней позволят вам, получить маркет-дата за адекватные средства и немного приблизиться к профессиональным участникам.
Они давно так делают!
Желаем удачи на рынке!&lt;/p&gt;
</content>
  </entry>
  <entry>
    <id>https://stocksharp.ru/topic/7020/</id>
    <title type="text">Помогите пожалуйста</title>
    <published>2016-12-27T17:00:10Z</published>
    <updated>2016-12-28T20:54:18Z</updated>
    <author>
      <name>klim95vlad</name>
      <uri>https://stocksharp.ru/users/97469/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;p&gt;Здравствуйте! Подскажите, где скачать S#.api версии 4.1.13.2 (которую используют на обучающем видео (&lt;a href="https://www.youtube.com/watch?v=F51bGEpTOvo" rel="nofollow" target="_blank"&gt;https://www.youtube.com/watch?v=F51bGEpTOvo&lt;/a&gt;).
Большое спасибо!&lt;/p&gt;
</content>
  </entry>
  <entry>
    <id>https://stocksharp.ru/topic/7017/</id>
    <title type="text">Раскраска свечей по своим условиям</title>
    <published>2016-12-27T14:18:01Z</published>
    <updated>2016-12-28T05:45:20Z</updated>
    <author>
      <name>gem81</name>
      <uri>https://stocksharp.ru/users/62541/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;p&gt;Доброго времени.&lt;/p&gt;
&lt;p&gt;Можно ли задавать цвет свечам в зависимости от собственных условий? если да, то в сторону какого модуля/интерфейса копать?
Заранее спасибо!&lt;/p&gt;
</content>
  </entry>
  <entry>
    <id>https://stocksharp.ru/topic/7018/</id>
    <title type="text">Тип свечи RangeUS, с дополнительным параметром для разворота</title>
    <published>2016-12-27T16:08:39Z</published>
    <updated>2016-12-27T16:08:39Z</updated>
    <author>
      <name>gem81</name>
      <uri>https://stocksharp.ru/users/62541/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;p&gt;&lt;img src="/file/104043/RangeUS.png" alt="RangeUS.png" /&gt;&lt;/p&gt;
&lt;p&gt;Пока изучаю систему, буду писать полезные статьи, вроде этой.
Если мешают, то напишите в коммент, Перестану))))
Что требуется: S#.API + понимание платформы.&lt;/p&gt;
&lt;p&gt;И так. В основе классический рендж бар, но с дополнительным параметром ReverseSize (разворотный размер).
Размеры указываются в шагах цены. На картинке сбербанк с параметрами 10/30 шагов(PriceStep)&lt;/p&gt;
&lt;p&gt;Как добавить на график.&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-cs"&gt;
....
                _series = new CandleSeries(typeof(RangeUSCandle), sec, new RangeUSArgs { RangeSize = (decimal)sec.PriceStep * 10, ReverseSize= (decimal)sec.PriceStep * 30 });
....
                _candleManager = new CandleManager(client);
                _candleManager.Sources.Add(new RangeUSCandleBuilder { Sources = { new TradeCandleBuilderSource(client) } });
....
                _candleManager.Start(_series);

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Сам код свечи и билдера
Создайте новый класс в проекте, назовите его RangeUSCandle.cs например&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-cs"&gt;
using Ecng.Collections;
using Ecng.Common;
using Ecng.ComponentModel;

using System;
using System.Collections.Generic;
using System.Linq;
using StockSharp.Algo.Candles;
using StockSharp.Algo.Candles.Compression;
using StockSharp.Localization;

namespace НазваниеВашегоПроекта
{
    public class RangeUSArgs
    {
        public decimal RangeSize;
        public decimal ReverseSize;
    }
    public enum RangeUSTrend
    {
         None = 0,
         UpTrend = 1,
         DownTrend = 2
    }

    /// &amp;lt;summary&amp;gt;
    /// Описание свечи
    /// &amp;lt;/summary&amp;gt;
    public class RangeUSCandle : Candle
    {
        public override object Arg
        {
            get
            {
                return this.PriceRange;
            }
            set
            {
                this.PriceRange = (RangeUSArgs)value;
            }
        }

        /// &amp;lt;summary&amp;gt;
        /// Параметры свечи
        /// &amp;lt;/summary&amp;gt;
        public RangeUSArgs PriceRange { get; set; }
        /// &amp;lt;summary&amp;gt;
        /// Текущий тренд. Значения: 1 восходящий, 2 нисходящий, 0 при инициации.
        /// &amp;lt;/summary&amp;gt;
        public RangeUSTrend Trend;  
        public override Candle Clone()
        {
            return CopyTo(new RangeUSCandle());
        }
    }

    /// &amp;lt;summary&amp;gt;
    /// Построитель RangeUS свечей
    /// &amp;lt;/summary&amp;gt;
    public class RangeUSCandleBuilder : CandleBuilder&amp;lt;RangeUSCandle&amp;gt;
    {
        public RangeUSCandleBuilder()
        {
        }

        public RangeUSCandleBuilder(ICandleBuilderContainer container)
            : base(container)
        {
        }

        public override IEnumerable&amp;lt;Range&amp;lt;DateTimeOffset&amp;gt;&amp;gt; GetSupportedRanges(CandleSeries series)
        {
            var ranges = base.GetSupportedRanges(series).ToArray();

            if (!ranges.IsEmpty())
            {
                if (!(series.Arg is RangeUSArgs))
                    throw new ArgumentException(LocalizedStrings.WrongCandleArg.Put(series.Arg), nameof(series));

                if (((RangeUSArgs)series.Arg).RangeSize &amp;lt;= 0)
                    throw new ArgumentOutOfRangeException(nameof(series), series.Arg, LocalizedStrings.PriceRangeMustBeGreaterThanZero);
            }

            return ranges;
        }

        protected override RangeUSCandle CreateCandle(CandleSeries series, ICandleBuilderSourceValue value)
        {
            // требуется перенести в новую свечу, понимание текущего направления.
            RangeUSTrend trend_value;
            if (CandleManager.GetCandleCount(series) &amp;gt; 0)
            {
                trend_value = CandleManager.GetCurrentCandle&amp;lt;RangeUSCandle&amp;gt;(series).Trend;
            } else {
                trend_value = RangeUSTrend.None;
            }
            return FirstInitCandle(series, new RangeUSCandle
            {
                PriceRange = (RangeUSArgs)series.Arg,
                OpenTime = value.Time,
                CloseTime = value.Time,
                HighTime = value.Time,
                LowTime = value.Time,
                Trend = trend_value,
            }, value);
        }

        protected override bool IsCandleFinishedBeforeChange(CandleSeries series, RangeUSCandle candle, ICandleBuilderSourceValue value)
        {
            var cm = CandleManager;
            var prev_candle = CandleHelper.GetCandle&amp;lt;RangeUSCandle&amp;gt;(cm,series,cm.GetCandleCount(series)-1);
            if(cm.GetCandleCount(series) &amp;lt;= 1)
            {
                // первая свеча. пытаемся понять направление
                candle.Trend = (candle.OpenPrice &amp;gt; value.Price) ? RangeUSTrend.DownTrend : RangeUSTrend.UpTrend;
                return candle.LowPrice + candle.PriceRange.RangeSize &amp;lt;= candle.HighPrice; //
            }
            if (candle.Trend == RangeUSTrend.UpTrend &amp;amp;&amp;amp; value.Price &amp;gt; candle.OpenPrice)
            {
                return candle.OpenPrice + candle.PriceRange.RangeSize &amp;lt;= candle.HighPrice; //
            }
            if (candle.Trend == RangeUSTrend.DownTrend &amp;amp;&amp;amp; value.Price &amp;lt; candle.OpenPrice)
            {
                return candle.OpenPrice - candle.PriceRange.RangeSize &amp;gt;= candle.LowPrice; //
            }
            var needReverse = candle.GetBody() &amp;gt; candle.PriceRange.ReverseSize; // 
            if (needReverse)
            {
                candle.Trend = (candle.Trend != RangeUSTrend.None &amp;amp; candle.Trend == RangeUSTrend.UpTrend) ? candle.Trend = RangeUSTrend.DownTrend : candle.Trend = RangeUSTrend.UpTrend;
            }
            return needReverse;
        }
    }
}

&lt;/code&gt;&lt;/pre&gt;
</content>
  </entry>
  <entry>
    <id>https://stocksharp.ru/topic/7015/</id>
    <title type="text">StockSharp.Xaml.Charting шаблоны, SecurityGrid ошибка в колонках</title>
    <published>2016-12-26T13:48:19Z</published>
    <updated>2016-12-26T13:55:58Z</updated>
    <author>
      <name>gem81</name>
      <uri>https://stocksharp.ru/users/62541/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;p&gt;&lt;img src="/file/104041/SecurityGrid.jpg" alt="SecurityGrid.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;В XAML шаблоне перепутаны поля. Остальные поля не смотрел, возможно есть ещё ошибки.&lt;/p&gt;
&lt;p&gt;С Уважением, Павел.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <id>https://stocksharp.ru/topic/7005/</id>
    <title type="text">Индикатор MovingAverageConvergenceDivergenceSignal</title>
    <published>2016-12-19T09:36:24Z</published>
    <updated>2016-12-24T15:41:57Z</updated>
    <author>
      <name>roman001</name>
      <uri>https://stocksharp.ru/users/94444/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;p&gt;Доброго дня
Подскажите пожалуйста, как получить значение индикатора MACDS.
Получаю элемент Item2 из коллекции значений индикатора (конечно после того, как индикатор сформирован)
MACDS.Container.GetValue(0).Item2
Дальше на отладке вижу, что мне нужно свойство InnerValues, но такое свойство есть только у класса &amp;quot;ComplexIndicatorValue&amp;quot;, понятно, что индикатор комплексный.&lt;/p&gt;
&lt;p&gt;А MACDS.Container.GetValue(0).Item2 принадлежит классу &amp;quot;IIndicatorValue&amp;quot;, преобразовать один тип к другому не получается, пишет, что &amp;quot;ComplexIndicatorValue&amp;quot; получен в результате расчетов.
В общем что-то запутался.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <id>https://stocksharp.ru/topic/7012/</id>
    <title type="text">Апдейт бота с API 4.3.15 на API 4.3.19.5. Проблемы. Решения.</title>
    <published>2016-12-24T14:00:50Z</published>
    <updated>2016-12-24T15:41:34Z</updated>
    <author>
      <name>Slepoy</name>
      <uri>https://stocksharp.ru/users/820/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <category term="API 4.3.19.5" />
    <content type="html">&lt;p&gt;&lt;img src="http://i9.pixs.ru/storage/1/9/5/Post1jpg_4076900_24539195.jpg" alt="" /&gt;
&lt;a href="http://stocksharp.ru/file/104033"&gt;http://stocksharp.ru/file/104033&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Вот такая &amp;quot;красота&amp;quot; явилась моему взору после того, как я обновил библиотеки с API 4.3.15 до API 4.3.19.5.
&amp;lt;u&amp;gt;Гипотетические мысли некоторых персонажей:&amp;lt;/u&amp;gt;
Стабильность признак мастерства, - подумал Слепой;
Пусть оплачивают техподдержку, - подумал Сухов;
Ахахаха, - подумал Ван(хозяин &lt;a href="http://o-s-a.net/" rel="nofollow" target="_blank"&gt;http://o-s-a.net/&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;Я не особо удивился этим 11 ошибкам. Я ждал их ))). С каждым апдейтом API вы чего-то там перепиливаете не особо задумывась об обратной совместимости. Страдаем от этого мы, пользователи ваших библиотек. Оправдывает вас лишь одно, что библиотеки халявны. Целый день я убил на исправление данных ошибок. И когда я запустил проект с новым API 4.3.19.5 - я был очень счастлив, но не долго ))). Меня ждал новый удар: заявки перестали отправлятсья в Квик. И эту проблему я решил. Но матерился я сильно и долго ))). Кстати, конкурирующий проект Os.Engine нехило так развивается. Но хозяин там А.Ван - редкостный дундук с завышенным ЧСВ, занёс меня в чёрный список на смартлабе ))). Комменты мои подтёр, причём безобидные, и занёс меня в ЧС - вот же придурок! И начал он свой проект, с обсёра конкурентов &lt;a href="http://o-s-a.net/posts/reliz-5.html" rel="nofollow" target="_blank"&gt;http://o-s-a.net/posts/reliz-5.html&lt;/a&gt;  догадайтесь, о какой платформе в том посте идёт речь ))).&lt;/p&gt;
&lt;p&gt;&amp;lt;u&amp;gt; В итоге, согласно моим наблюдениям, вам необходимо исправить следующие косяки:&amp;lt;/u&amp;gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Обновите документацию к  API 4.3.19.5. Там, в папке с релизом, скачанной с гитхаба, - лежит дока от  API 4.3.16.1.  То что на сайте старая документация - к этому я уже привык, но в папке с новыми релизами она всегда была свежей. Теперь это не так. Вы некоторые методы/события и т.п. перепилили весьма нехило, а документация этого не отражает. Приходится пользоваться подсказками в самой ВизуалСтудии.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Поправьте баг с портфелями в коннекторе Квика. В API 4.3.15 по демо-квику приходило 2 портфеля(фьючи, акции). По акциям был портфель 10527. Заявки нормально отправлялись. В API 4.3.19.5, а может и в более ранних релизах, стало приходить 4 портфеля. Появились 2 новых, причём пустых. И по-старому портфелю 10527 - перестали отправляться заявки по акциям. Появился эксепшен &amp;quot;Указанный счёт депо не найден&amp;quot;. Они начали отправляться по новому портфелю: NL0011100043. По сути, всё сделано верно, ведь 10527 - это всего лишь код клиента, а не портфель. В Квике он фигируриет как код клиента, но у вас он попадает в портфели(коллекция Портфолио). Причём у него заполнены свойства: бабло и т.п. А у реального депо  NL0011100043, вообще ничего нет, пустота. В стандартном пример SampleQuik - тоже самое, 4 портфеля, а должно быть три. Не должно там быть портфеля - 10527, это код. Надо его вырезать, а у реальных портфелях заполнить свойства.
&lt;img src="http://i11.pixs.ru/storage/2/1/3/Post2jpg_2956351_24539213.jpg" alt="" /&gt;
&lt;a href="http://stocksharp.ru/file/104034"&gt;http://stocksharp.ru/file/104034&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
</content>
  </entry>
</feed>