﻿<?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=forum&amp;page=193</id>
  <rights type="text">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  <updated>2026-06-22T13:33:35Z</updated>
  <logo>https://stocksharp.ru/images/logo.png</logo>
  <link href="https://stocksharp.ru/handlers/atom.ashx?category=forum&amp;page=193" rel="self" type="application/rss+xml" />
  <entry>
    <id>https://stocksharp.ru/topic/2226/</id>
    <title type="text">&amp;quot;Рабочая&amp;quot; версия SampleSmartConsole не получает инструмент и портфель</title>
    <published>2011-12-14T20:57:28Z</published>
    <updated>2011-12-14T20:57:28Z</updated>
    <author>
      <name>Андрей Александрович</name>
      <uri>https://stocksharp.ru/users/255/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <category term="SmartCom" />
    <content type="html">&lt;p&gt;Приветствую, недавно закончил курс &amp;quot;Базовый&amp;quot; по S#, пытаюсь довести до ума пример SampleSmartConsole, но выполнение програмы останавливается после сообщения  &amp;quot;Дожидаемся появления в программе инструмента RIH и портфеля &amp;quot;
Хотелось бы узнать где ошибка в этом коде и по какому алгоритму самому определять подобные моменты.&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-csharp"&gt;using System;
using System.Net;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using StockSharp.Algo;
using StockSharp.BusinessEntities;
using StockSharp.Smart;
using System.Threading;
using Ecng.Collections;
using Ecng.Common;
using StockSharp.Algo.Candles;


namespace MyFirstBot
{

    class Program
    {

        static string login = &amp;quot;Мой логин&amp;quot;;
        static string password = &amp;quot;QKVDBU&amp;quot;;
        public static Portfolio portfolio;
        public static Security secObject;
        static string sec;
        private StockSharp.Algo.Candles.CandleManager _candleManager;
        private TimeSpan _candleWidth;
        private SmartTrader trader;
        const string secCode = &amp;quot;RIH2&amp;quot;;
        const string account = &amp;quot;Мой счет&amp;quot;;


        static string ipAddress = &amp;quot;62.141.86.229&amp;quot;;
        static System.Net.IPAddress addr = System.Net.IPAddress.Parse(ipAddress);
        static System.Net.IPEndPoint server = new System.Net.IPEndPoint(addr, 8090);

        static void Main()
        {


            try
            {
                var trader = new SmartTrader(login, password, server);
                var waitHandle = new AutoResetEvent(false);
                trader.Connected += () =&amp;gt;
                {
                    Console.WriteLine(&amp;quot;Подключение было произведено успешно.&amp;quot;);

                   waitHandle.Set();
                };
                Console.WriteLine(&amp;quot;Производим подключение...&amp;quot;);

                trader.Connect();
   
                waitHandle.WaitOne();


                trader.NewPortfolios += portfolios =&amp;gt;
                {
                    // необходимое условие работы в SmartCOM
                    portfolios.ForEach(trader.RegisterPortfolio);

                    if (portfolio == null)
                    {
                       
                        portfolio = portfolios.FirstOrDefault(p =&amp;gt; p.Name == account);

                        if (portfolio != null)
                        {
                            Console.WriteLine(&amp;quot;Портфель {0} появился.&amp;quot;, account);

                            if (secObject != null)
                                waitHandle.Set();
                        }
                    }
                };

               
                trader.NewSecurities += securities =&amp;gt;
                        {
                            if (secObject == null)
                            {
                                
                                secObject = securities.FirstOrDefault(sec =&amp;gt; sec.Code == secCode &amp;amp;&amp;amp; sec.Type == SecurityTypes.Equity);

                                if (secObject != null)
                                {
                                    Console.WriteLine(&amp;quot;Инструмент RIH2 появился.&amp;quot;);

                                    if (portfolio != null)
                                        waitHandle.Set();
                                }
                            }
                        };
                Console.WriteLine(&amp;quot;Дожидаемся появления в программе инструмента RIH и портфеля {0}...&amp;quot;.Put(account));

                // запускаем экспорт по инструментам и портфелям
                trader.StartExport();

                // дожидаемся появления портфеля и инструмента
                waitHandle.WaitOne();

                trader.SecuritiesChanged += securities =&amp;gt;
                {
                    // если инструмент хоть раз изменился (по нему пришли актуальные данные)
                    if (securities.Contains(secObject))
                        waitHandle.Set();
                };

                Console.WriteLine(&amp;quot;Дожидаемся обновления данных по инструменту RIH2...&amp;quot;);


                trader.RegisterSecurity(secObject);
                waitHandle.WaitOne();




          }
            catch (Exception ex)
            {
                Console.WriteLine(ex);
                
            }
            Console.ReadKey();
        }
    
    }
}

&lt;/code&gt;&lt;/pre&gt;
</content>
  </entry>
  <entry>
    <id>https://stocksharp.ru/topic/2225/</id>
    <title type="text">сделки источник Quik</title>
    <published>2011-12-14T08:26:54Z</published>
    <updated>2011-12-14T08:26:54Z</updated>
    <author>
      <name>ET</name>
      <uri>https://stocksharp.ru/users/5992/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <category term="Hydra" />
    <content type="html">&lt;p&gt;Подскажите как осуществить выгрузку данных из Quik по инструментам из списка &amp;quot;мировые индексы&amp;quot;, стаканы качаются без проблем по торговым инструментам, а у данных инструментов нет стаканов и сделок (только изменяется цена последней сделки), возможно ли осуществить закачку по этим инструментам? если да, то можно описать процесс настройки гидры! большое спасибо!&lt;/p&gt;
</content>
  </entry>
  <entry>
    <id>https://stocksharp.ru/topic/2224/</id>
    <title type="text">&amp;quot;подхват&amp;quot; имеющейся позиции</title>
    <published>2011-12-14T08:15:24Z</published>
    <updated>2011-12-14T08:15:24Z</updated>
    <author>
      <name>romanick</name>
      <uri>https://stocksharp.ru/users/28047/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <category term="StockSharp" />
    <content type="html">&lt;p&gt;Неожиданно столкнулся с проблемой что PositionManager.Position возвращает 0 при старте стратегии (в OnStarting и в OnProcess), хотя позиция перед стартом не нулевая. Что нужно сделать чтобы робот &amp;quot;подхватывал&amp;quot; уже имеющуюся позицию при запуске? Проверял на SampleSmartSMA - робот не видит имеющуюся позицию.
SmartCOM 2.2, S# 4.0.8&lt;/p&gt;
</content>
  </entry>
  <entry>
    <id>https://stocksharp.ru/topic/2223/</id>
    <title type="text">MarketTime в версии StockSharp_4.0.8</title>
    <published>2011-12-14T07:17:11Z</published>
    <updated>2011-12-14T07:17:11Z</updated>
    <author>
      <name>guest</name>
      <uri>https://stocksharp.ru/users/28427/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <category term="StockSharp" />
    <content type="html">&lt;p&gt;Добрый день!
Trader.MarketTime возвращает локальное время
попытка вызова SyncMarketTime(Exchange.Rts) к успеху не привела.
Расхождение времени в терминале QUIK и  Trader.MarketTime осталось.
Как получить биржевое время?&lt;/p&gt;
</content>
  </entry>
  <entry>
    <id>https://stocksharp.ru/topic/2222/</id>
    <title type="text">Статистика по внутридневным экстремумам</title>
    <published>2011-12-13T21:17:01Z</published>
    <updated>2011-12-13T21:17:01Z</updated>
    <author>
      <name>Church</name>
      <uri>https://stocksharp.ru/users/459/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <category term="клуб алготрейдеров" />
    <content type="html">&lt;p&gt;Рапределение внутридневных экстремумов на РИ по времени. Каждая точка - день, у которого максимум был в его Y координату, а минимум - в X координату. Интенсивность цвета означает вероятность такого дня.&lt;/p&gt;
&lt;p&gt;Обратите внимание, что это не карта частот, а скорее карта плотности вероятности (к карте частот был применен гауссовский фильтр).&lt;/p&gt;
&lt;p&gt;В обмен хочу идеи по использованию этой инфы в стратегиях.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <id>https://stocksharp.ru/topic/2221/</id>
    <title type="text">Стратегия выхода из сделок.</title>
    <published>2011-12-13T15:48:25Z</published>
    <updated>2011-12-13T15:48:25Z</updated>
    <author>
      <name>Zein</name>
      <uri>https://stocksharp.ru/users/28200/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <category term="клуб алготрейдеров" />
    <content type="html">&lt;p&gt;Предлагаю обсудить идею создания стратегии для выхода из сделки, которая следует принципу &amp;quot;дай прибыли расти&amp;quot;.&lt;/p&gt;
&lt;p&gt;Я не рассматриваю выходы по стопу, тут все вроде-бы понятно - стоп есть стоп.(хотя если есть идеи на эту тему - высказывайтесь тут). Интересно было бы обсудить те выходы, которые дает система, когда мы в плюсе.&lt;/p&gt;
&lt;p&gt;Тут есть несколько вариантов: 1 - закрываемся по тейк-профиту, 2 - через определенное время, 3 - по сигналу торговой системы. НО! В каждом из этих случаев может быть ситуация, когда после закрытия цена идет в нашу сторону еще некоторое время. Как научится брать это движение?&lt;/p&gt;
&lt;p&gt;После того, как наша основная стратегия дает сигнал на закрытие, мы делаем дополнительную проверку поведения цены - если хоть тик против нас - закрываемся (ну этот параметр тоже можно варьировать). Далее, если цена прошла еще какое-то расстояние - передвигаем стоп чуть вверх, но так, чтобы уже можно было пересидеть небольшой откат.&lt;/p&gt;
&lt;p&gt;Приведу пример: Система дает сигнал на выход, после этого цена двигается в нашем направлении 10 пунктов. Стоп в это время стоит на цене выхода по стратегии (т.е. если цена дернулась назад - сразу выходим но уже с небольшим бонусом). Далее. Цена идет еще 5 пунктов, стоп ставим на цену выхода по стратегии + 10, т.е. цена уже может давать маленькие откаты до 5 пунктов. Дальше трейлим аналогично. Параметры подбираются под торгуемый инструмент.&lt;/p&gt;
&lt;p&gt;Основная идея в том, что такая стратегия стопов потенциально только улучшит любую уже существующую стратегию торговли,поэтому есть смысл ее организовать как отдельный модуль в виде кода.&lt;/p&gt;
&lt;p&gt;Задумка конечно требует обкатки, тестов и доработки, но основной посыл думаю понятен. Было бы интересно выслушать ваши замечания и предложения на эту тему.&lt;/p&gt;
&lt;p&gt;upd. Было бы интересно, если бы кто-нибудь прикрутил это к своей стратегии и написал о результатах.Сам пока только постигаю азы wealthlab`a и S#, поэтому своих исследований приложить не могу.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <id>https://stocksharp.ru/topic/2220/</id>
    <title type="text">Одинаковые ID Транзакции у заявок в QUIK</title>
    <published>2011-12-13T11:06:30Z</published>
    <updated>2011-12-13T11:06:30Z</updated>
    <author>
      <name>MCTuTeJ|19951995</name>
      <uri>https://stocksharp.ru/users/18/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <category term="Quik" />
    <content type="html">&lt;p&gt;В таблице &amp;quot;Заявки&amp;quot; есть заявки с разными номерами, но с одинаковым ID Транзакции. При попытке выгрузки таблицы в ProcessDataError вылетает ошибка - Дублированное что-то  там в ДДЕ-пакете &lt;em&gt;номер заявки&lt;/em&gt; имя параметра item. При этом заявки не обрабатываются. Такое ощущение, что идентификатором заявки (ключом) является ИД транзакции, а не номер заявки, который  по определению почти всегда уникален. Наверное это трудно назвать багом, но объясните, пожалуйста, кто-нибудь, как можно &amp;quot;выкрутиться&amp;quot; в подобной ситуации. Я вижу два варианта -&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Делать кастомную таблицу без столбца &amp;quot;Id транзакции&amp;quot; и выгружать ее.&lt;/li&gt;
&lt;li&gt;Подменять одинаковые номера разлицными &amp;quot;фиктивными&amp;quot; в PreProcessDDeData.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Если можно еще что-нибудь придумать - буду очень признателен за помощь.&lt;/p&gt;
&lt;p&gt;Версия s# - 4.0.3.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <id>https://stocksharp.ru/topic/2219/</id>
    <title type="text">Вопрос!!!</title>
    <published>2011-12-13T10:47:08Z</published>
    <updated>2011-12-13T10:47:08Z</updated>
    <author>
      <name>2101</name>
      <uri>https://stocksharp.ru/users/198/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <category term="клуб алготрейдеров" />
    <content type="html">&lt;p&gt;Добрый день уважаемые формчане
Подскажите пожалуйста
Можно ли использовать торгового робота написанного на C# на нет буке ???[confused]
Можно ли использовать мобильный интеренет при этом ,типа скайлинка или ёоты или МТС или Мегафон или Билайн [confused]&lt;/p&gt;
&lt;p&gt;Вообще будет ли работать такой переносной вариант торгового робота [blush]&lt;/p&gt;
</content>
  </entry>
  <entry>
    <id>https://stocksharp.ru/topic/2218/</id>
    <title type="text">BuyAtMarket и SellAtMarket</title>
    <published>2011-12-13T09:30:28Z</published>
    <updated>2011-12-13T09:30:28Z</updated>
    <author>
      <name>freelancer</name>
      <uri>https://stocksharp.ru/users/28572/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <category term="StockSharp" />
    <content type="html">&lt;p&gt;Написал this.SellAtMarket(0m) и вылетело исключение, что не определен параметр u2.
Как правильно использовать эти методы (со своим объёмом тоже) ?&lt;/p&gt;
</content>
  </entry>
  <entry>
    <id>https://stocksharp.ru/topic/2217/</id>
    <title type="text">Арбитраж и все все все</title>
    <published>2011-12-12T07:48:06Z</published>
    <updated>2011-12-12T07:48:06Z</updated>
    <author>
      <name>gambler_max</name>
      <uri>https://stocksharp.ru/users/129/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <category term="клуб алготрейдеров" />
    <content type="html">&lt;p&gt;Бодрого дня, уважаемые коллеги и примкнувшие к ним товарищи. Ветка это есть продолжения краткой дискуссии про тематические парки и куртизанок, что была в скайпе.
Предлагаю обсудить тему арбитража. Но прежде чем начать, хотел бы сразу попросить «выступить» всех у кого есть, что сказать по делу и они готовы это сказать. Утверждения типа «на этом можно хорошо зарабатывать имея и пару лямов» и прочие утверждения в стиле Капитана Очевидности лучше пока оставить для скайпа. Если готовы обсуждать открыто (благо форум закрытый – значит можно палить граали), то давайте попробуем.
Так же хочу отметить, что я в этой теме пока как свин в апельсинах. Это связано в первую очередь с возможно не самыми глубокими познаниями в статистике и рядом других причин.
Но для затравки попробую выступить первым.
Хочу сразу поставить все точки над «и» в вопросах терминологии. Есть много разных обзывательств, касательно арбитража. Я предлагаю утвердить слудующее:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;математический арбитраж – арбитраж при котором вероятность благоприятного исхода (гарантированного схождения)близка к  100% - это например игрища со спрэдами между ближним и дальним фьючом. Конечно говорить о 100% удаче не совсем корректно – черных леблядей никто не отменял.&lt;/li&gt;
&lt;li&gt;риск-арбитраж – арбитраж между акциями компаний, затеявших сделку по слиянию (поглощению). В рамках данной темы предлагаю это не трогать ибо на нашем рынке это не актуально, а для буржуйского имеет смысл при наличии больших денег, кучи времени и хорошего понимания фундаментальных факторов.&lt;/li&gt;
&lt;li&gt;межрыночный арбитраж – купили на ММВБ, продали на LSE. Трогать не будем ибо это дорого.
-статистический арбитраж (парный трейдинг) – это именно то, что нам нужно. Назовем это арбитражем при котором ожидается, что спрэд (у нас вроде как это раздвижкой зовется) вернется к своему среднему значению в случае отклонения. При этом «среднее» может быть как и реально mean-reversing, так и 0-reversing (написал с ошибками наверно). Что брать за среднюю обсудим чуть позднее.
«Участниками» парной торговли могут быть – акция+акция (для РФ работает), акция + индустриальный ETF (для РФ не работает), фьючерс-фьючерс (корзина фьючерсов – на РФ возможна, хотя и не всегда приятна), фьючерс-акция (возможна в РФ), ряд других вещей, которые на скудном рынке РФ никак не реализуются.
Нас будет интересовать только два варианта: акция-акция (в том числе и американский рынок) и фьюч-фьючи (в том числе и американский рынок)
Теперь посмотрим из каких «частей» складывается правильная «парная» торговля:&lt;/li&gt;
&lt;li&gt;определение торгуемых инструментов&lt;/li&gt;
&lt;li&gt;определение веса каждого инструмента в паре&lt;/li&gt;
&lt;li&gt;определение точки (причины) входа в позицию&lt;/li&gt;
&lt;li&gt;определение причины выхода из позиции
-ведение позиции в течении сделки&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Предлагаю обсудить по очереди каждый из пунктов ибо в подходах существует много разных мнений.&lt;/p&gt;
&lt;p&gt;1.Определение торгуемых инструментов.
Для буржуев пары подбираются с учетом следующих факторов: акции должны находиться в одном секторе\индустрии, их корреляция должна быть как можно ближе к 1(-1). Первое требование обусловлено тем, что акции одного сектора будут одинаков реагировать на рыночные риски, имеют схожие операционные модели, ну и «слабые» всегда будут стремиться за «сильными». При работе с фьючерсами обычно также ищут фундаментальные взаимосвязи (например Нефть разных марок, индексы разных стран и т.д.) Что касается корреляции – тот тут я не встретил в литературе единого мнения – как правило указывается, что акции должны коррелировать и значения в 0.5 типа как уже достаточно. «Пацаны» на буржуйских форумах все-таки склоняются к тому, что это значение не должно быть ниже 0.7-0.8. Для нашего рынка это не актуально  ибо акции которыми можно торговать у нас имеют 0.9 и называются Газпромосбербанк.
Некоторые продвинутые участники упоминают еще и необходимость коинтеграции, но мой скудный статистических багаж подсказывает, что добиться коинтеграции у высоко коррелированных инструментов гораздо проще. Но тут я могу быть не прав.&lt;/p&gt;
&lt;p&gt;2.Определение веса инструмента. Тут опять же есть несколько подходов. Самый простой и самый неправильный – поделить один инструмент на другой и полученное значение будет множителем для определения веса инструмента в паре. Более продвинутые предлагают использовать формулу (цена А/бета А)/(цена Б/ бета Б). Даная фишка применима исключительно для акций, торгуемых в штатах (и условно применима для наших). Такой формулой мы учитываем волатильность инструментов относительно «эталона» которым в данном случае выступает индекс. Не могу сказать какие тут минусы ибо «глубоко» протестить это дело трудно так как самому бету считать заманаешься, а исторических данных найти в свободном  доступе трудно.
Еще одним способом является простое ATR A/ATR B. Работает для акций и фьючей но не совсем подходит для торговле фьюч-корзина фьючей (использует товарищь Кауфман).
Попадались и иные способы (например с учетом исторической волатильности), но так или иначе все они учитывают волатильность инструментов и гораздо точнее работают нежели простая «дележка» инструментов.
Для корзинки фьючей наибольший интерес предлагает метод предложенный (но не до конца раскрытый) Тарасом в его публикациях на русском трейдере.&lt;/p&gt;
&lt;p&gt;3.Определение точки входа. Тут так же есть туча вариантов. Одни строят график спрэда и при отклонении на величину более 1.5-2-2.5(кто как) стандартного отклонения за некий промежуток времени открывают позу в надежде на возврат цены к своему среднему (стоит отметить что ст-откл. также можно посчитать по разному), кто-то в качестве фильтра еще считает Density curve. Однако у данного метода есть один неприятный момент – спрэд  может не возвращаться к своему среднему значению достаточно продолжительное время. Нам же интересен короткий горизонт – не далече 3дней (ну или интрадейные колебания).
Другие товарищи считают спрэд не по цене, а через формулу стохастика (без усреднения) и спрэдом для них являются разница двух стохастиков (это предлагает делать Кауфман) или же стохастик построенный по этой разнице взятый за несколько дней (автор он же). Тут у нас решается проблема возврата к «0».
Есть и более изощренный вариант «от Тараса», где цена нормируется с целью избавления от «трендовой» составляющей и предполагается торговля при отходе от среднего.&lt;/p&gt;
&lt;p&gt;4.Выход из позиции и управление позицией. Выход прямо зависит от причины входа – это или возвращение к «0» или к средней. Так же используется стоп при достижение порогового значения риска или стоп по времени удержания позы.
Управление позой предполагает добавление к позиции с целью смещения точки безубыточности в случае неверного движения. Однако этот метод весьма требователен к депозиту и устойчивости задницы трейдера.&lt;/p&gt;
&lt;p&gt;Ну вот собственно у меня все. Предлагаю высказаться по пунктам у кого есть что сказать.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <id>https://stocksharp.ru/topic/2216/</id>
    <title type="text">Сериализация SettingsStorage</title>
    <published>2011-12-11T15:39:02Z</published>
    <updated>2011-12-11T15:39:02Z</updated>
    <author>
      <name>destr</name>
      <uri>https://stocksharp.ru/users/6306/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <category term="StockSharp" />
    <content type="html">&lt;p&gt;Хотел воспользоваться, т.к. всё таки есть методы Save() и Load() у стратегий, но что-то не удалось сохранить.&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-csharp"&gt;SettingsStorage storage  = new SettingsStorage();
storage.SetValue&amp;lt;int&amp;gt;(&amp;quot;testvalue&amp;quot;, 1);

XmlSerializer serializer = new XmlSerializer(typeof(SettingsStorage));
TextWriter writer = new StreamWriter(&amp;quot;settingsstorage.xml&amp;quot;);
serializer.Serialize(writer, storage);
writer.Close();

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;На выходе xml только с заголовком&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-xml"&gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;
&amp;lt;SettingsStorage xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; xmlns:xsd=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot; /&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Попробовал так&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-csharp"&gt;SettingsStorage storage  = new SettingsStorage();
storage.SetValue&amp;lt;int&amp;gt;(&amp;quot;testvalue&amp;quot;, 1);
                
FileStream stream = new FileStream(&amp;quot;serialize.dat&amp;quot;, FileMode.Create);
BinaryFormatter formatter = new BinaryFormatter();
formatter.Serialize(stream, storage);
stream.Close();

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Тут кидает исключение &amp;gt; Type 'SettingsStorage' is not marked as serializable.&lt;/p&gt;
&lt;p&gt;Поэтому возник вопрос, а как всё таки сохранить? Желательно в читабельном виде, чтобы можно было править в редакторе.
Версия S# 4.0.8&lt;/p&gt;
</content>
  </entry>
  <entry>
    <id>https://stocksharp.ru/topic/2215/</id>
    <title type="text">SampleEmulationTesting версия 4.0.8</title>
    <published>2011-12-10T20:29:23Z</published>
    <updated>2011-12-10T20:29:23Z</updated>
    <author>
      <name>russ</name>
      <uri>https://stocksharp.ru/users/567/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <category term="тестирование" />
    <content type="html">&lt;p&gt;При запуске примера тупо падает в строчке&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-csharp"&gt;
// создаем заявку
var order = this.CreateOrder(direction, base.Security.GetMarketPrice(direction), base.Volume);
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src="http://s017.radikal.ru/i431/1112/e0/bae0c7103c33.png" alt="" /&gt;&lt;/p&gt;
</content>
  </entry>
  <entry>
    <id>https://stocksharp.ru/topic/2214/</id>
    <title type="text">RandomWalkTradeGenerator не хранятся сделки</title>
    <published>2011-12-10T19:45:43Z</published>
    <updated>2011-12-10T19:45:43Z</updated>
    <author>
      <name>russ</name>
      <uri>https://stocksharp.ru/users/567/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <category term="тестирование" />
    <content type="html">&lt;p&gt;Версия 4.0.8
Генерирую данные и стакан.&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-csharp"&gt;var security = new Security
                    {
                        Id = &amp;quot;RIU9@RTS&amp;quot;,
                        Code = &amp;quot;RIU9&amp;quot;,
                        Name = &amp;quot;RTS-9.09&amp;quot;,
                        MinStepSize = 5,
                        MinStepPrice = 2,
                        Decimals = 0,
                        Exchange = Exchange.Test,
                    };

                    _trader = new EmulationTrader(
                            new[] { security },
                            new[] { portfolio })
                        {
                            MarketTimeChangedInterval = timeFrame
                        };

                        _trader.TradeGenerators[security] = new RandomWalkTradeGenerator(security, 155000);
                        _trader.DepthGenerators[security] = new TrendMarketDepthGenerator(security);
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;В самой стратегии пробую считать объем сделок за период, но:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-csharp"&gt;Int32 count = base.Trader.Trades.Count();
``` всегда = 0.
Хотя в ```csharp
Trade tr = base.Security.LastTrade;
``` есть информация по сделке.
Приход новых сделок в стратегии обрабатываю вот так:
```csharp
protected override void OnStarting()
        {
            this
                .When(base.Security.SecurityNewTrades())
                .Do(CalcVolume);

            base.OnStarting();
        }
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;В чем может быть проблема?&lt;/p&gt;
</content>
  </entry>
  <entry>
    <id>https://stocksharp.ru/topic/2213/</id>
    <title type="text">Ошибка P2ERR_MQ_ORIGMSG_NOT_SEND</title>
    <published>2011-12-09T11:35:03Z</published>
    <updated>2011-12-09T11:35:03Z</updated>
    <author>
      <name>frontman</name>
      <uri>https://stocksharp.ru/users/28487/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <category term="Plaza 2" />
    <content type="html">&lt;p&gt;Ребят ни кто не знает что это?
На одной машине работает, на остальных нет... В чем разница не пойму...&lt;/p&gt;
</content>
  </entry>
  <entry>
    <id>https://stocksharp.ru/topic/2212/</id>
    <title type="text">торговля на нескольких квиках</title>
    <published>2011-12-09T09:55:15Z</published>
    <updated>2011-12-09T09:55:15Z</updated>
    <author>
      <name>tmt</name>
      <uri>https://stocksharp.ru/users/6032/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <category term="Quik" />
    <content type="html">&lt;p&gt;Попрошу помощи, тк уже 2ой день бьюсь... Это я пример переделывал и вот что получилось, но скрипт не работает, думаю где то ошибка с подключением (тк он выводит подключение.. и все.. выходит)&lt;/p&gt;
&lt;p&gt;мне кажется все верно, наверняка чтот с терминалами у меня, тк на 2ом счету даже вручную не открывает по RIZ1&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;namespace SampleConsole
{
using System;
using System.Linq;
using System.Threading;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;using Ecng.Common;

using StockSharp.BusinessEntities;
using StockSharp.Quik;
using StockSharp.Algo;

class Program
{
    private static Security _instrument1;
    private static Security _instrument2;
    private static Portfolio _portfolio1;
    private static Portfolio _portfolio2;
    private static MarketDepth _depth1;
    private static MarketDepth _depth2;

    static void Main()
    {
        try
        {
            // для теста выбираем бумагу Лукойл
            const string secCode = &amp;quot;RIZ1&amp;quot;;
            var path1 = @&amp;quot;D:\FinamJunior\info.exe&amp;quot;;
            var account1 = &amp;quot;SPBFUT00O88&amp;quot;;
            var path2 = @&amp;quot;D:\FinamJunior1\info.exe&amp;quot;;
            var account2 = &amp;quot;SPBFUT00P53&amp;quot;;

            using (var waitHandle = new AutoResetEvent(false))
            {
                // создаем шлюз к Quik-у
                using (var trader1 = new QuikTrader { Path = path1, DdeServer = &amp;quot;quik1&amp;quot; })
                using (var trader2 = new QuikTrader { Path = path2, DdeServer = &amp;quot;quik2&amp;quot;, DllName = @&amp;quot;TRANS2QUIK_2.dll&amp;quot; })
                {
                    var portfoliosWait = new ManualResetEvent(false);
                    var connect1 = 0;
                    var connect2 = 0;
                    trader1.Connected += () =&amp;gt;
                    {
                        Console.WriteLine(&amp;quot;Подключение 1 было произведено успешно.&amp;quot;);
                        connect1 = 1;
                        // извещаем об успешном соединени
                        if(connect1==1 &amp;amp;&amp;amp; connect2==1)
                            portfoliosWait.Set();
                    };
                    trader2.Connected += () =&amp;gt;
                    {
                        Console.WriteLine(&amp;quot;Подключение 2 было произведено успешно.&amp;quot;);
                        connect1 = 2;
                        // извещаем об успешном соединени
                        if (connect1 == 1 &amp;amp;&amp;amp; connect2 == 1)
                            portfoliosWait.Set();
                    };
                    Console.WriteLine(&amp;quot;Производим подключение...&amp;quot;);

                    trader1.Connect();
                    trader2.Connect();


                    // дожидаемся события об успешном соединении
                   //waitHandle.WaitOne();

                    Console.WriteLine(&amp;quot;Дожидаемся появления инструментов и портфелей...&amp;quot;);
                    portfoliosWait.WaitOne();

                    trader1.NewPortfolios += portfolios =&amp;gt;
                    {
                        if (_portfolio1 == null)
                        {
                            // находим Лукойл и присваиваем ее переменной lkoh
                            _portfolio1 = portfolios.FirstOrDefault(p =&amp;gt; p.Name == account1);

                            if (_portfolio1 != null)
                            {
                                Console.WriteLine(&amp;quot;Портфель {0} появился.&amp;quot;, account1);

                                // если инструмент и стакан уже появились,
                                // то извещаем об этом основной поток для выставления заявки
                                if (_instrument1 != null &amp;amp;&amp;amp; _depth1 != null &amp;amp;&amp;amp; _instrument2 != null &amp;amp;&amp;amp; _depth2 != null &amp;amp;&amp;amp; _portfolio2 != null)
                                    waitHandle.Set();
                            }
                        }
                    };

                    trader2.NewPortfolios += portfolios =&amp;gt;
                    {
                        if (_portfolio2 == null)
                        {
                            // находим Лукойл и присваиваем ее переменной lkoh
                            _portfolio2 = portfolios.FirstOrDefault(p =&amp;gt; p.Name == account2);

                            if (_portfolio2 != null)
                            {
                                Console.WriteLine(&amp;quot;Портфель {0} появился.&amp;quot;, account2);

                                // если инструмент и стакан уже появились,
                                // то извещаем об этом основной поток для выставления заявки
                                if (_instrument1 != null &amp;amp;&amp;amp; _depth1 != null &amp;amp;&amp;amp; _instrument2 != null &amp;amp;&amp;amp; _depth2 != null &amp;amp;&amp;amp; _portfolio1 != null)
                                    waitHandle.Set();
                            }
                        }
                    };

                    // подписываемся на событие появление инструментов
                    trader1.NewSecurities += securities =&amp;gt;
                    {
                        if (_instrument1 == null)
                        {
                            // находим Лукойл и присваиваем ее переменной lkoh
                            _instrument1 = securities.FirstOrDefault(sec =&amp;gt; sec.Code == secCode);

                            if (_instrument1 != null)
                            {
                                Console.WriteLine(&amp;quot;Инструмент Лукойл появился.&amp;quot;);

                                // запускаем экспорт стакана
                                trader1.RegisterQuotes(_instrument1);

                                if (_portfolio1 != null &amp;amp;&amp;amp; _depth1 != null &amp;amp;&amp;amp; _portfolio2 != null &amp;amp;&amp;amp; _depth2 != null &amp;amp;&amp;amp; _instrument2 != null)
                                    waitHandle.Set();
                            }
                        }
                    };

                    trader2.NewSecurities += securities =&amp;gt;
                    {
                        if (_instrument2 == null)
                        {
                            // находим Лукойл и присваиваем ее переменной lkoh
                            _instrument2 = securities.FirstOrDefault(sec =&amp;gt; sec.Code == secCode);

                            if (_instrument2 != null)
                            {
                                Console.WriteLine(&amp;quot;Инструмент Лукойл появился.&amp;quot;);

                                // запускаем экспорт стакана
                                trader2.RegisterQuotes(_instrument2);

                                if (_portfolio1 != null &amp;amp;&amp;amp; _depth1 != null &amp;amp;&amp;amp; _portfolio2 != null &amp;amp;&amp;amp; _depth2 != null &amp;amp;&amp;amp; _instrument1 != null)
                                    waitHandle.Set();
                            }
                        }
                    };


                    // подписываемся на событие обновления стакана
                    trader1.QuotesChanged += depths =&amp;gt;
                    {
                        if (_depth1 == null &amp;amp;&amp;amp; _instrument1 != null)
                        {
                            _depth1 = depths.FirstOrDefault(d =&amp;gt; d.Security == _instrument1);

                            if (_depth1 != null)
                            {
                                Console.WriteLine(&amp;quot;Стакан Лукойла появился.&amp;quot;);

                                // если портфель и инструмент уже появился, то извещаем об этом основной поток для выставления заявки
                                if (_portfolio1 != null &amp;amp;&amp;amp; _instrument1 != null &amp;amp;&amp;amp; _portfolio2 != null &amp;amp;&amp;amp; _instrument2 != null &amp;amp;&amp;amp; _depth2 != null)
                                    waitHandle.Set();
                            }
                        }
                    };

                    trader2.QuotesChanged += depths =&amp;gt;
                    {
                        if (_depth2 == null &amp;amp;&amp;amp; _instrument2 != null)
                        {
                            _depth2 = depths.FirstOrDefault(d =&amp;gt; d.Security == _instrument2);

                            if (_depth2 != null)
                            {
                                Console.WriteLine(&amp;quot;Стакан Лукойла появился.&amp;quot;);

                                // если портфель и инструмент уже появился, то извещаем об этом основной поток для выставления заявки
                                if (_portfolio1 != null &amp;amp;&amp;amp; _instrument1 != null &amp;amp;&amp;amp; _portfolio2 != null &amp;amp;&amp;amp; _instrument2 != null &amp;amp;&amp;amp; _depth1 != null)
                                    waitHandle.Set();
                            }
                        }
                    };


                    trader1.StartExport(trader1.SecuritiesTable, trader1.MyTradesTable, trader1.EquityPositionsTable,
                                       trader1.EquityPortfoliosTable, trader1.OrdersTable);
                    trader2.StartExport(trader2.SecuritiesTable, trader2.MyTradesTable, trader2.EquityPositionsTable,
                                       trader2.EquityPortfoliosTable, trader2.OrdersTable);
                    // дожидаемся появления портфеля и инструмента
                    waitHandle.WaitOne();

                    // 0.1% от изменения цены
                    const decimal delta = 0.001m;

                    // запоминаем первоначальное значение середины спреда
                    var firstMid = _instrument1.BestPair.SpreadPrice / 2;
                    if (_instrument1.BestBid == null)
                        throw new Exception(&amp;quot;Нет лучшего бида для котировки.&amp;quot;);

                    Console.WriteLine(&amp;quot;Первоначальное значение середины спреда {0:0.##}&amp;quot;, _instrument1.BestBid.Price + firstMid);

                    while (true)
                    {
                        var mid = _instrument1.BestPair.SpreadPrice / 2;

                        // если спред вышел за пределы нашего диапазона
                        if (
                                ((firstMid + firstMid * delta) &amp;lt;= mid) ||
                                ((firstMid - firstMid * delta) &amp;gt;= mid)
                            )
                        {
                            var order1 = new Order
                            {
                                Portfolio = _portfolio1,
                                Price = _instrument1.ShrinkPrice(_instrument1.BestBid.Price + mid),
                                Security = _instrument1,
                                Volume = 1,
                                Direction = OrderDirections.Buy,
                            };
                            trader1.RegisterOrder(order1);
                            Console.WriteLine(&amp;quot;Заявка {0} зарегистрирована.&amp;quot;, order1.Id);

                            var order2 = new Order
                            {
                                Portfolio = _portfolio2,
                                Price = _instrument2.ShrinkPrice(_instrument2.BestAsk.Price + mid),
                                Security = _instrument2,
                                Volume = 1,
                                Direction = OrderDirections.Sell,
                            };
                            trader2.RegisterOrder(order2);
                            Console.WriteLine(&amp;quot;Заявка {0} зарегистрирована.&amp;quot;, order2.Id);
                            break;
                        }
                        else
                            //Console.WriteLine(&amp;quot;Текущее значение середины спреда {0:0.##}&amp;quot;, _instrument.BestBid.Price + mid);

                        // ждем 1 секунду
                        Thread.Sleep(1000);
                    }

                    // останавливаем экспорт по DDE
                    trader2.StopExport(trader2.SecuritiesTable, trader2.MyTradesTable, trader2.EquityPositionsTable,
                                       trader2.EquityPortfoliosTable, trader2.OrdersTable);
                    trader1.StopExport(trader1.SecuritiesTable, trader1.MyTradesTable, trader1.EquityPositionsTable,
                                       trader1.EquityPortfoliosTable, trader1.OrdersTable);
                }
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex);
        }
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;}&lt;/p&gt;
&lt;/blockquote&gt;
</content>
  </entry>
  <entry>
    <id>https://stocksharp.ru/topic/2211/</id>
    <title type="text">CPU и версия S#</title>
    <published>2011-12-09T07:51:51Z</published>
    <updated>2011-12-09T07:51:51Z</updated>
    <author>
      <name>dart</name>
      <uri>https://stocksharp.ru/users/28358/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <category term="Quik" />
    <content type="html">&lt;p&gt;Сейчас работаю с двумя версиями S# - 4.0.2 и 4.0.7.
Сегодня, на довольно активном рынке 4.0.2 &amp;quot;отжирает&amp;quot; 2-4% CPU в среднем, 4.0.7 побольше - 14-18% в то же самое время (одновременно запущено два квика).
Комп 4-процессорный. У версии 4.0.5 картина такая же как и 4.0.7.
Код везде одинаковый.
Никто такого не замечал?
Получается 4.0.7 и 4.0.5 больше грузят комп нежели 4.0.2&lt;/p&gt;
</content>
  </entry>
  <entry>
    <id>https://stocksharp.ru/topic/2210/</id>
    <title type="text">как учесть отрицательные проскальзывания</title>
    <published>2011-12-08T14:08:56Z</published>
    <updated>2011-12-08T14:08:56Z</updated>
    <author>
      <name>Greene-nsk</name>
      <uri>https://stocksharp.ru/users/27932/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <category term="Quik" />
    <content type="html">&lt;p&gt;Вот здесь написано, что как-то можно учитывать отрицательное проскальзывание:
&lt;a href="http://stocksharp.com/forum/1540/SlippageManager-otritsatiel-noie-proskal-zyvaniie/"&gt;http://stocksharp.com/forum/1540/SlippageManager-otritsatiel-noie-proskal-zyvaniie/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Как сделать чтобы учитывалось??
Если оно отрицательное, то GetSlippage(order) выдает 0 всегда. И свойство Slippage тоже не учитывает отрицательные.&lt;/p&gt;
&lt;p&gt;Использую свой SlippageManager.&lt;/p&gt;
&lt;h2 id="public-class-mystrategyslippagemanager-strategyslippagemanager-public-mystrategyslippagemanagerstrategy-strategy-basestrategy"&gt;--
public class MyStrategySlippageManager : StrategySlippageManager
{
public MyStrategySlippageManager(Strategy strategy)
: base(strategy)&lt;/h2&gt;
</content>
  </entry>
  <entry>
    <id>https://stocksharp.ru/topic/2209/</id>
    <title type="text">Ошибка создания заявки</title>
    <published>2011-12-08T12:31:01Z</published>
    <updated>2011-12-08T12:31:01Z</updated>
    <author>
      <name>vader</name>
      <uri>https://stocksharp.ru/users/28223/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <category term="Quik" />
    <content type="html">&lt;p&gt;Сегодня два раза была ситуация когда стратегия пыталась отправить заявку и у неё это не получилось.
Подробное описание.
Есть такая обертка регистрации заявки.&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-csharp"&gt;
protected void Register(Order order)
		{
			if(ProcessState == ProcessStates.Started){
				try{
					base.RegisterOrder(order);
				}
				catch(Exception ex){
					WriteDiagnostics(&amp;quot;Register- &amp;quot; + ex.Message);
				}
				WriteDiagnostics(&amp;quot;Register order &amp;quot; + order.TransactionId.ToString());
			}

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;в какой-то момент робот подвис. при этом в отладчик выводятся обычны лог, где раз за разом вызывается метод, создающий заявку, но не происходит вывод сообщений о регистрации заявки(WriteDiagnostics(&amp;quot;Register order &amp;quot; + order.TransactionId.ToString());) .
Спустя не продолжительное время робот &amp;quot;отвис&amp;quot; и выкинул сообщение - &amp;quot;Ошибка при регистрации заявки&amp;quot;. При этом в Квике оказалось три заявки, отправленные роботом.
Версия 4.0.5&lt;/p&gt;
</content>
  </entry>
  <entry>
    <id>https://stocksharp.ru/topic/2208/</id>
    <title type="text">ММВБ Директ</title>
    <published>2011-12-07T14:15:17Z</published>
    <updated>2011-12-07T14:15:17Z</updated>
    <author>
      <name>Mikhail Sukhov</name>
      <uri>https://stocksharp.ru/users/201/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <category term="SmartCom" />
    <content type="html">&lt;p&gt;АйТи новую штуку &lt;a href="http://www.itinvest.ru/education/courses/direct-mmvb/" rel="nofollow" target="_blank"&gt;презентует в понедельник&lt;/a&gt;. Иду.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <id>https://stocksharp.ru/topic/2207/</id>
    <title type="text">Несколько инструментов в стратегии</title>
    <published>2011-12-07T12:06:10Z</published>
    <updated>2011-12-07T12:06:10Z</updated>
    <author>
      <name>foRs</name>
      <uri>https://stocksharp.ru/users/28037/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <category term="StockSharp" />
    <content type="html">&lt;p&gt;Юзал поиск но не нашел как реализовать чтобы в стратегии можно было использовать несколько инструментов&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-csharp"&gt;
_strategy = new SmaStrategy()
			{
				Volume = 1,
				Portfolio = portfolio,
				Security = RIU,
				Trader = _trader
			};


&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;потом в самой стратегии&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-csharp"&gt;
                    order = this.CreateOrder(direction, price + _point, base.Volume);
                    base.RegisterOrder(order);

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;В случае выставления заявок по 2-м инструментам, как лучше реализовать?&lt;/p&gt;
</content>
  </entry>
</feed>