﻿<?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">торговля на нескольких квиках</title>
  <id>~/topic/2212/torgovlya-na-neskolkih-kvikah/</id>
  <rights type="text">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  <updated>2026-04-05T15:41:02Z</updated>
  <logo>https://stocksharp.ru/images/logo.png</logo>
  <link href="https://stocksharp.ru/handlers/atom.ashx?category=topic&amp;id=2212" rel="self" type="application/rss+xml" />
  <entry>
    <id>https://stocksharp.ru/posts/m/14509/</id>
    <title type="text">подскажите, что не так с подключением портфеля (не появляется он..) видимо не вызывается портфель во...</title>
    <published>2011-12-09T15:16:12Z</published>
    <updated>2011-12-09T15:16:12Z</updated>
    <author>
      <name>tmt</name>
      <uri>https://stocksharp.ru/users/6032/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">подскажите, что не так с подключением портфеля (не появляется он..)&lt;br /&gt;видимо не вызывается портфель вообще, насколько понял &amp;quot;trader1.StartExport(trader1.SecuritiesTable, trader1.MyTradesTable, trader1.EquityPositionsTable,trader1.EquityPortfoliosTable, trader1.OrdersTable);&amp;quot; запускает подключение к стакану,инструмент ищет.. а сама программа мне выводит&lt;br /&gt;&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;Цитата:&lt;/span&gt;&lt;div class="innerquote"&gt;Производим подключение...&lt;br /&gt;Подключение 1 было произведено успешно.&lt;br /&gt;Подключение 2 было произведено успешно.&lt;br /&gt;Дожидаемся появления инструментов и портфелей...&lt;br /&gt;Инструмент 1 Лукойл появился.&lt;br /&gt;Стакан 1 Лукойла появился.&lt;br /&gt;Инструмент 2 Лукойл появился.&lt;br /&gt;Стакан 2 Лукойла появился.&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;Цитата:&lt;/span&gt;&lt;div class="innerquote"&gt;namespace SampleConsole&lt;br /&gt;{&lt;br /&gt;    using System;&lt;br /&gt;    using System.Linq;&lt;br /&gt;    using System.Threading;&lt;br /&gt;&lt;br /&gt;    using Ecng.Common;&lt;br /&gt;&lt;br /&gt;    using StockSharp.BusinessEntities;&lt;br /&gt;    using StockSharp.Quik;&lt;br /&gt;    using StockSharp.Algo;&lt;br /&gt;&lt;br /&gt;    class Program&lt;br /&gt;    {&lt;br /&gt;        private static Security _instrument1;&lt;br /&gt;        private static Security _instrument2;&lt;br /&gt;        private static Portfolio _portfolio1;&lt;br /&gt;        private static Portfolio _portfolio2;&lt;br /&gt;        private static MarketDepth _depth1;&lt;br /&gt;        private static MarketDepth _depth2;&lt;br /&gt;&lt;br /&gt;        static void Main()&lt;br /&gt;        {&lt;br /&gt;            try&lt;br /&gt;            {&lt;br /&gt;                // для теста выбираем бумагу Лукойл&lt;br /&gt;                const string secCode = &amp;quot;LKOH&amp;quot;;&lt;br /&gt;                var path1 = @&amp;quot;C:\Program Files\QUIK\info.exe&amp;quot;;&lt;br /&gt;                var account1 = &amp;quot;NL0011100043&amp;quot;;&lt;br /&gt;                var path2 = @&amp;quot;C:\Program Files\QUIK1\info.exe&amp;quot;;&lt;br /&gt;                var account2 = &amp;quot;NL0011100043&amp;quot;;&lt;br /&gt;                var connect1 = 0;&lt;br /&gt;                var connect2 = 0;&lt;br /&gt;&lt;br /&gt;                using (var waitHandle1 = new AutoResetEvent(false))&lt;br /&gt;                using (var waitHandle2 = new AutoResetEvent(false))&lt;br /&gt;                using (var waitHandle3 = new AutoResetEvent(false))&lt;br /&gt;                using (var waitHandle4 = new AutoResetEvent(false))&lt;br /&gt;                using (var waitHandle5 = new AutoResetEvent(false))&lt;br /&gt;                using (var waitHandle6 = new AutoResetEvent(false))&lt;br /&gt;                using (var con1 = new AutoResetEvent(false))&lt;br /&gt;                using (var con2 = new AutoResetEvent(false))&lt;br /&gt;                {&lt;br /&gt;                    // создаем шлюз к Quik-у&lt;br /&gt;                    using (var trader1 = new QuikTrader { Path = path1, DdeServer = &amp;quot;quik1&amp;quot; })&lt;br /&gt;                    using (var trader2 = new QuikTrader { Path = path2, DdeServer = &amp;quot;quik2&amp;quot;, DllName = @&amp;quot;TRANS2QUIK_2.dll&amp;quot; })&lt;br /&gt;                    {&lt;br /&gt;                        trader1.Connected += () =&amp;gt;&lt;br /&gt;                        {&lt;br /&gt;                            Console.WriteLine(&amp;quot;Подключение 1 было произведено успешно.&amp;quot;);&lt;br /&gt;                            connect1 = 1;&lt;br /&gt;                            // извещаем об успешном соединени&lt;br /&gt;                            con1.Set();&lt;br /&gt;                        };&lt;br /&gt;                        trader2.Connected += () =&amp;gt;&lt;br /&gt;                        {&lt;br /&gt;                            Console.WriteLine(&amp;quot;Подключение 2 было произведено успешно.&amp;quot;);&lt;br /&gt;                            connect1 = 2;&lt;br /&gt;                            // извещаем об успешном соединени&lt;br /&gt;                            con2.Set();&lt;br /&gt;                        };&lt;br /&gt;                        Console.WriteLine(&amp;quot;Производим подключение...&amp;quot;);&lt;br /&gt;                        &lt;br /&gt;                        trader1.Connect();&lt;br /&gt;                        trader2.Connect();&lt;br /&gt;&lt;br /&gt;                    &lt;br /&gt;&lt;br /&gt;                        // дожидаемся события об успешном соединении&lt;br /&gt;                       &lt;br /&gt;                       con1.WaitOne();&lt;br /&gt;                       con2.WaitOne();&lt;br /&gt;&lt;br /&gt;                        Console.WriteLine(&amp;quot;Дожидаемся появления инструментов и портфелей...&amp;quot;);&lt;br /&gt;                        //waitHandle.WaitOne();&lt;br /&gt;&lt;br /&gt;                        trader1.NewPortfolios += portfolios =&amp;gt;&lt;br /&gt;                        {&lt;br /&gt;                            if (_portfolio1 == null)&lt;br /&gt;                            {&lt;br /&gt;                                // находим Лукойл и присваиваем ее переменной lkoh&lt;br /&gt;                                _portfolio1 = portfolios.FirstOrDefault(p =&amp;gt; p.Name == account1);&lt;br /&gt;&lt;br /&gt;                                if (_portfolio1 != null)&lt;br /&gt;                                {&lt;br /&gt;                                    Console.WriteLine(&amp;quot;Портфель 1 {0} появился.&amp;quot;, account1);&lt;br /&gt;&lt;br /&gt;                                    // если инструмент и стакан уже появились,&lt;br /&gt;                                    // то извещаем об этом основной поток для выставления заявки&lt;br /&gt;                                    //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)&lt;br /&gt;                                        waitHandle1.Set();&lt;br /&gt;                                }&lt;br /&gt;                            }&lt;br /&gt;                        };&lt;br /&gt;&lt;br /&gt;                        trader2.NewPortfolios += portfolios =&amp;gt;&lt;br /&gt;                        {&lt;br /&gt;                            if (_portfolio2 == null)&lt;br /&gt;                            {&lt;br /&gt;                                // находим Лукойл и присваиваем ее переменной lkoh&lt;br /&gt;                                _portfolio2 = portfolios.FirstOrDefault(p =&amp;gt; p.Name == account2);&lt;br /&gt;&lt;br /&gt;                                if (_portfolio2 != null)&lt;br /&gt;                                {&lt;br /&gt;                                    Console.WriteLine(&amp;quot;Портфель 2 {0} появился.&amp;quot;, account2);&lt;br /&gt;&lt;br /&gt;                                    // если инструмент и стакан уже появились,&lt;br /&gt;                                    // то извещаем об этом основной поток для выставления заявки&lt;br /&gt;                                    //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)&lt;br /&gt;                                        waitHandle2.Set();&lt;br /&gt;                                }&lt;br /&gt;                            }&lt;br /&gt;                        };&lt;br /&gt;&lt;br /&gt;                        // подписываемся на событие появление инструментов&lt;br /&gt;                        trader1.NewSecurities += securities =&amp;gt;&lt;br /&gt;                        {&lt;br /&gt;                            if (_instrument1 == null)&lt;br /&gt;                            {&lt;br /&gt;                                // находим Лукойл и присваиваем ее переменной lkoh&lt;br /&gt;                                _instrument1 = securities.FirstOrDefault(sec =&amp;gt; sec.Code == secCode);&lt;br /&gt;&lt;br /&gt;                                if (_instrument1 != null)&lt;br /&gt;                                {&lt;br /&gt;                                    Console.WriteLine(&amp;quot;Инструмент 1 Лукойл появился.&amp;quot;);&lt;br /&gt;&lt;br /&gt;                                    // запускаем экспорт стакана&lt;br /&gt;                                    trader1.RegisterQuotes(_instrument1);&lt;br /&gt;&lt;br /&gt;                                    //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)&lt;br /&gt;                                        waitHandle3.Set();&lt;br /&gt;                                }&lt;br /&gt;                            }&lt;br /&gt;                        };&lt;br /&gt;&lt;br /&gt;                        trader2.NewSecurities += securities =&amp;gt;&lt;br /&gt;                        {&lt;br /&gt;                            if (_instrument2 == null)&lt;br /&gt;                            {&lt;br /&gt;                                // находим Лукойл и присваиваем ее переменной lkoh&lt;br /&gt;                                _instrument2 = securities.FirstOrDefault(sec =&amp;gt; sec.Code == secCode);&lt;br /&gt;&lt;br /&gt;                                if (_instrument2 != null)&lt;br /&gt;                                {&lt;br /&gt;                                    Console.WriteLine(&amp;quot;Инструмент 2 Лукойл появился.&amp;quot;);&lt;br /&gt;&lt;br /&gt;                                    // запускаем экспорт стакана&lt;br /&gt;                                    trader2.RegisterQuotes(_instrument2);&lt;br /&gt;&lt;br /&gt;                                    //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)&lt;br /&gt;                                        waitHandle4.Set();&lt;br /&gt;                                }&lt;br /&gt;                            }&lt;br /&gt;                        };&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;                        // подписываемся на событие обновления стакана&lt;br /&gt;                        trader1.QuotesChanged += depths =&amp;gt;&lt;br /&gt;                        {&lt;br /&gt;                            if (_depth1 == null &amp;amp;&amp;amp; _instrument1 != null)&lt;br /&gt;                            {&lt;br /&gt;                                _depth1 = depths.FirstOrDefault(d =&amp;gt; d.Security == _instrument1);&lt;br /&gt;&lt;br /&gt;                                if (_depth1 != null)&lt;br /&gt;                                {&lt;br /&gt;                                    Console.WriteLine(&amp;quot;Стакан 1 Лукойла появился.&amp;quot;);&lt;br /&gt;&lt;br /&gt;                                    // если портфель и инструмент уже появился, то извещаем об этом основной поток для выставления заявки&lt;br /&gt;                                    //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)&lt;br /&gt;                                        waitHandle5.Set();&lt;br /&gt;                                }&lt;br /&gt;                            }&lt;br /&gt;                        };&lt;br /&gt;&lt;br /&gt;                        trader2.QuotesChanged += depths =&amp;gt;&lt;br /&gt;                        {&lt;br /&gt;                            if (_depth2 == null &amp;amp;&amp;amp; _instrument2 != null)&lt;br /&gt;                            {&lt;br /&gt;                                _depth2 = depths.FirstOrDefault(d =&amp;gt; d.Security == _instrument2);&lt;br /&gt;&lt;br /&gt;                                if (_depth2 != null)&lt;br /&gt;                                {&lt;br /&gt;                                    Console.WriteLine(&amp;quot;Стакан 2 Лукойла появился.&amp;quot;);&lt;br /&gt;&lt;br /&gt;                                    // если портфель и инструмент уже появился, то извещаем об этом основной поток для выставления заявки&lt;br /&gt;                                    //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)&lt;br /&gt;                                        waitHandle6.Set();&lt;br /&gt;                                }&lt;br /&gt;                            }&lt;br /&gt;                        };&lt;br /&gt;&lt;br /&gt;                        trader1.StartExport(trader1.SecuritiesTable, trader1.MyTradesTable, trader1.EquityPositionsTable,&lt;br /&gt;                                           trader1.EquityPortfoliosTable, trader1.OrdersTable);&lt;br /&gt;                        trader2.StartExport(trader2.SecuritiesTable, trader2.MyTradesTable, trader2.EquityPositionsTable,&lt;br /&gt;                                           trader2.EquityPortfoliosTable, trader2.OrdersTable);&lt;br /&gt;&lt;br /&gt;                        // дожидаемся появления портфеля и инструмента&lt;br /&gt;                        waitHandle1.WaitOne();&lt;br /&gt;                        waitHandle2.WaitOne();&lt;br /&gt;                        waitHandle3.WaitOne();&lt;br /&gt;                        waitHandle4.WaitOne();&lt;br /&gt;                        waitHandle5.WaitOne();&lt;br /&gt;                        waitHandle6.WaitOne();&lt;br /&gt;&lt;br /&gt;                        &lt;br /&gt;&lt;br /&gt;                        // 0.1% от изменения цены&lt;br /&gt;                        const decimal delta = 0.001m;&lt;br /&gt;&lt;br /&gt;                        // запоминаем первоначальное значение середины спреда&lt;br /&gt;                        var firstMid = _instrument1.BestPair.SpreadPrice / 2;&lt;br /&gt;                        if (_instrument1.BestBid == null)&lt;br /&gt;                            throw new Exception(&amp;quot;Нет лучшего бида для котировки.&amp;quot;);&lt;br /&gt;&lt;br /&gt;                        Console.WriteLine(&amp;quot;Первоначальное значение середины спреда {0:0.##}&amp;quot;, _instrument1.BestBid.Price + firstMid);&lt;br /&gt;&lt;br /&gt;                        while (true)&lt;br /&gt;                        {&lt;br /&gt;                            var mid = _instrument1.BestPair.SpreadPrice / 2;&lt;br /&gt;&lt;br /&gt;                            // если спред вышел за пределы нашего диапазона&lt;br /&gt;                            if (&lt;br /&gt;                                    ((firstMid + firstMid * delta) &amp;lt;= mid) ||&lt;br /&gt;                                    ((firstMid - firstMid * delta) &amp;gt;= mid)&lt;br /&gt;                                )&lt;br /&gt;                            {&lt;br /&gt;                                var order1 = new Order&lt;br /&gt;                                {&lt;br /&gt;                                    Portfolio = _portfolio1,&lt;br /&gt;                                    Price = _instrument1.ShrinkPrice(_instrument1.BestBid.Price + mid),&lt;br /&gt;                                    Security = _instrument1,&lt;br /&gt;                                    Volume = 1,&lt;br /&gt;                                    Direction = OrderDirections.Buy,&lt;br /&gt;                                };&lt;br /&gt;                                trader1.RegisterOrder(order1);&lt;br /&gt;                                Console.WriteLine(&amp;quot;Заявка {0} зарегистрирована.&amp;quot;, order1.Id);&lt;br /&gt;&lt;br /&gt;                                var order2 = new Order&lt;br /&gt;                                {&lt;br /&gt;                                    Portfolio = _portfolio2,&lt;br /&gt;                                    Price = _instrument2.ShrinkPrice(_instrument2.BestAsk.Price + mid),&lt;br /&gt;                                    Security = _instrument2,&lt;br /&gt;                                    Volume = 1,&lt;br /&gt;                                    Direction = OrderDirections.Sell,&lt;br /&gt;                                };&lt;br /&gt;                                trader2.RegisterOrder(order2);&lt;br /&gt;                                Console.WriteLine(&amp;quot;Заявка {0} зарегистрирована.&amp;quot;, order2.Id);&lt;br /&gt;                                //break;&lt;br /&gt;                            }&lt;br /&gt;                            else&lt;br /&gt;                                //Console.WriteLine(&amp;quot;Текущее значение середины спреда {0:0.##}&amp;quot;, _instrument.BestBid.Price + mid);&lt;br /&gt;&lt;br /&gt;                            // ждем 1 секунду&lt;br /&gt;                            Thread.Sleep(1000);&lt;br /&gt;                        }&lt;br /&gt;&lt;br /&gt;                        // останавливаем экспорт по DDE&lt;br /&gt;                        trader1.StopExport(trader1.SecuritiesTable, trader1.MyTradesTable, trader1.EquityPositionsTable,&lt;br /&gt;                                           trader1.EquityPortfoliosTable, trader1.OrdersTable);&lt;br /&gt;                    }&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;            catch (Exception ex)&lt;br /&gt;            {&lt;br /&gt;                Console.WriteLine(ex);&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;/div&gt;&lt;/div&gt;</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/14504/</id>
    <title type="text">Совместный поиск ошибки непонятно где? :) А BasketTrader не пробовали использовать? Неее.. пока я до...</title>
    <published>2011-12-09T13:37:04Z</published>
    <updated>2011-12-09T13:37:04Z</updated>
    <author>
      <name>tmt</name>
      <uri>https://stocksharp.ru/users/6032/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;Alexander Mukhanchikov &lt;a href="https://stocksharp.ru/posts/m/14491/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;Совместный поиск ошибки непонятно где? :)&lt;br /&gt;&lt;br /&gt;А BasketTrader не пробовали использовать?&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;Неее.. пока я до этого не добрался, мнеб пример простой чтоб сделки открывал на обоих терминалах.&lt;br /&gt;Насчет ошибок, я седня если успею, то зарегаю 2а новых счета, а то чтот подозрительно на 1 из счетов просто не могу на фортс торговать</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/14491/</id>
    <title type="text">Совместный поиск ошибки непонятно где? :) А BasketTrader не пробовали использовать?</title>
    <published>2011-12-09T10:05:48Z</published>
    <updated>2011-12-09T10:05:48Z</updated>
    <author>
      <name>Alexander</name>
      <uri>https://stocksharp.ru/users/2826/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">Совместный поиск ошибки непонятно где? :)&lt;br /&gt;&lt;br /&gt;А BasketTrader не пробовали использовать?</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/14489/</id>
    <title type="text">Попрошу помощи, тк уже 2ой день бьюсь... Это я пример переделывал и вот что получилось, но скрипт не...</title>
    <published>2011-12-09T09:55:15Z</published>
    <updated>2011-12-09T10:05:38Z</updated>
    <author>
      <name>tmt</name>
      <uri>https://stocksharp.ru/users/6032/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">Попрошу помощи, тк уже 2ой день бьюсь... Это я пример переделывал и вот что получилось, но скрипт не работает, думаю где то ошибка с подключением (тк он выводит подключение.. и все.. выходит)&lt;br /&gt;&lt;br /&gt;мне кажется все верно, наверняка чтот с терминалами у меня, тк на 2ом счету даже вручную не открывает по RIZ1 &lt;br /&gt;&lt;br /&gt;&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;Цитата:&lt;/span&gt;&lt;div class="innerquote"&gt;namespace SampleConsole&lt;br /&gt;{&lt;br /&gt;    using System;&lt;br /&gt;    using System.Linq;&lt;br /&gt;    using System.Threading;&lt;br /&gt;&lt;br /&gt;    using Ecng.Common;&lt;br /&gt;&lt;br /&gt;    using StockSharp.BusinessEntities;&lt;br /&gt;    using StockSharp.Quik;&lt;br /&gt;    using StockSharp.Algo;&lt;br /&gt;&lt;br /&gt;    class Program&lt;br /&gt;    {&lt;br /&gt;        private static Security _instrument1;&lt;br /&gt;        private static Security _instrument2;&lt;br /&gt;        private static Portfolio _portfolio1;&lt;br /&gt;        private static Portfolio _portfolio2;&lt;br /&gt;        private static MarketDepth _depth1;&lt;br /&gt;        private static MarketDepth _depth2;&lt;br /&gt;&lt;br /&gt;        static void Main()&lt;br /&gt;        {&lt;br /&gt;            try&lt;br /&gt;            {&lt;br /&gt;                // для теста выбираем бумагу Лукойл&lt;br /&gt;                const string secCode = &amp;quot;RIZ1&amp;quot;;&lt;br /&gt;                var path1 = @&amp;quot;D:\FinamJunior\info.exe&amp;quot;;&lt;br /&gt;                var account1 = &amp;quot;SPBFUT00O88&amp;quot;;&lt;br /&gt;                var path2 = @&amp;quot;D:\FinamJunior1\info.exe&amp;quot;;&lt;br /&gt;                var account2 = &amp;quot;SPBFUT00P53&amp;quot;;&lt;br /&gt;&lt;br /&gt;                using (var waitHandle = new AutoResetEvent(false))&lt;br /&gt;                {&lt;br /&gt;                    // создаем шлюз к Quik-у&lt;br /&gt;                    using (var trader1 = new QuikTrader { Path = path1, DdeServer = &amp;quot;quik1&amp;quot; })&lt;br /&gt;                    using (var trader2 = new QuikTrader { Path = path2, DdeServer = &amp;quot;quik2&amp;quot;, DllName = @&amp;quot;TRANS2QUIK_2.dll&amp;quot; })&lt;br /&gt;                    {&lt;br /&gt;                        var portfoliosWait = new ManualResetEvent(false);&lt;br /&gt;                        var connect1 = 0;&lt;br /&gt;                        var connect2 = 0;&lt;br /&gt;                        trader1.Connected += () =&amp;gt;&lt;br /&gt;                        {&lt;br /&gt;                            Console.WriteLine(&amp;quot;Подключение 1 было произведено успешно.&amp;quot;);&lt;br /&gt;                            connect1 = 1;&lt;br /&gt;                            // извещаем об успешном соединени&lt;br /&gt;                            if(connect1==1 &amp;amp;&amp;amp; connect2==1)&lt;br /&gt;                                portfoliosWait.Set();&lt;br /&gt;                        };&lt;br /&gt;                        trader2.Connected += () =&amp;gt;&lt;br /&gt;                        {&lt;br /&gt;                            Console.WriteLine(&amp;quot;Подключение 2 было произведено успешно.&amp;quot;);&lt;br /&gt;                            connect1 = 2;&lt;br /&gt;                            // извещаем об успешном соединени&lt;br /&gt;                            if (connect1 == 1 &amp;amp;&amp;amp; connect2 == 1)&lt;br /&gt;                                portfoliosWait.Set();&lt;br /&gt;                        };&lt;br /&gt;                        Console.WriteLine(&amp;quot;Производим подключение...&amp;quot;);&lt;br /&gt;                        &lt;br /&gt;                        trader1.Connect();&lt;br /&gt;                        trader2.Connect();&lt;br /&gt;                        &lt;br /&gt;&lt;br /&gt;                        // дожидаемся события об успешном соединении&lt;br /&gt;                       //waitHandle.WaitOne();&lt;br /&gt;&lt;br /&gt;                        Console.WriteLine(&amp;quot;Дожидаемся появления инструментов и портфелей...&amp;quot;);&lt;br /&gt;                        portfoliosWait.WaitOne();&lt;br /&gt;&lt;br /&gt;                        trader1.NewPortfolios += portfolios =&amp;gt;&lt;br /&gt;                        {&lt;br /&gt;                            if (_portfolio1 == null)&lt;br /&gt;                            {&lt;br /&gt;                                // находим Лукойл и присваиваем ее переменной lkoh&lt;br /&gt;                                _portfolio1 = portfolios.FirstOrDefault(p =&amp;gt; p.Name == account1);&lt;br /&gt;&lt;br /&gt;                                if (_portfolio1 != null)&lt;br /&gt;                                {&lt;br /&gt;                                    Console.WriteLine(&amp;quot;Портфель {0} появился.&amp;quot;, account1);&lt;br /&gt;&lt;br /&gt;                                    // если инструмент и стакан уже появились,&lt;br /&gt;                                    // то извещаем об этом основной поток для выставления заявки&lt;br /&gt;                                    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)&lt;br /&gt;                                        waitHandle.Set();&lt;br /&gt;                                }&lt;br /&gt;                            }&lt;br /&gt;                        };&lt;br /&gt;&lt;br /&gt;                        trader2.NewPortfolios += portfolios =&amp;gt;&lt;br /&gt;                        {&lt;br /&gt;                            if (_portfolio2 == null)&lt;br /&gt;                            {&lt;br /&gt;                                // находим Лукойл и присваиваем ее переменной lkoh&lt;br /&gt;                                _portfolio2 = portfolios.FirstOrDefault(p =&amp;gt; p.Name == account2);&lt;br /&gt;&lt;br /&gt;                                if (_portfolio2 != null)&lt;br /&gt;                                {&lt;br /&gt;                                    Console.WriteLine(&amp;quot;Портфель {0} появился.&amp;quot;, account2);&lt;br /&gt;&lt;br /&gt;                                    // если инструмент и стакан уже появились,&lt;br /&gt;                                    // то извещаем об этом основной поток для выставления заявки&lt;br /&gt;                                    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)&lt;br /&gt;                                        waitHandle.Set();&lt;br /&gt;                                }&lt;br /&gt;                            }&lt;br /&gt;                        };&lt;br /&gt;&lt;br /&gt;                        // подписываемся на событие появление инструментов&lt;br /&gt;                        trader1.NewSecurities += securities =&amp;gt;&lt;br /&gt;                        {&lt;br /&gt;                            if (_instrument1 == null)&lt;br /&gt;                            {&lt;br /&gt;                                // находим Лукойл и присваиваем ее переменной lkoh&lt;br /&gt;                                _instrument1 = securities.FirstOrDefault(sec =&amp;gt; sec.Code == secCode);&lt;br /&gt;&lt;br /&gt;                                if (_instrument1 != null)&lt;br /&gt;                                {&lt;br /&gt;                                    Console.WriteLine(&amp;quot;Инструмент Лукойл появился.&amp;quot;);&lt;br /&gt;&lt;br /&gt;                                    // запускаем экспорт стакана&lt;br /&gt;                                    trader1.RegisterQuotes(_instrument1);&lt;br /&gt;&lt;br /&gt;                                    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)&lt;br /&gt;                                        waitHandle.Set();&lt;br /&gt;                                }&lt;br /&gt;                            }&lt;br /&gt;                        };&lt;br /&gt;&lt;br /&gt;                        trader2.NewSecurities += securities =&amp;gt;&lt;br /&gt;                        {&lt;br /&gt;                            if (_instrument2 == null)&lt;br /&gt;                            {&lt;br /&gt;                                // находим Лукойл и присваиваем ее переменной lkoh&lt;br /&gt;                                _instrument2 = securities.FirstOrDefault(sec =&amp;gt; sec.Code == secCode);&lt;br /&gt;&lt;br /&gt;                                if (_instrument2 != null)&lt;br /&gt;                                {&lt;br /&gt;                                    Console.WriteLine(&amp;quot;Инструмент Лукойл появился.&amp;quot;);&lt;br /&gt;&lt;br /&gt;                                    // запускаем экспорт стакана&lt;br /&gt;                                    trader2.RegisterQuotes(_instrument2);&lt;br /&gt;&lt;br /&gt;                                    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)&lt;br /&gt;                                        waitHandle.Set();&lt;br /&gt;                                }&lt;br /&gt;                            }&lt;br /&gt;                        };&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;                        // подписываемся на событие обновления стакана&lt;br /&gt;                        trader1.QuotesChanged += depths =&amp;gt;&lt;br /&gt;                        {&lt;br /&gt;                            if (_depth1 == null &amp;amp;&amp;amp; _instrument1 != null)&lt;br /&gt;                            {&lt;br /&gt;                                _depth1 = depths.FirstOrDefault(d =&amp;gt; d.Security == _instrument1);&lt;br /&gt;&lt;br /&gt;                                if (_depth1 != null)&lt;br /&gt;                                {&lt;br /&gt;                                    Console.WriteLine(&amp;quot;Стакан Лукойла появился.&amp;quot;);&lt;br /&gt;&lt;br /&gt;                                    // если портфель и инструмент уже появился, то извещаем об этом основной поток для выставления заявки&lt;br /&gt;                                    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)&lt;br /&gt;                                        waitHandle.Set();&lt;br /&gt;                                }&lt;br /&gt;                            }&lt;br /&gt;                        };&lt;br /&gt;&lt;br /&gt;                        trader2.QuotesChanged += depths =&amp;gt;&lt;br /&gt;                        {&lt;br /&gt;                            if (_depth2 == null &amp;amp;&amp;amp; _instrument2 != null)&lt;br /&gt;                            {&lt;br /&gt;                                _depth2 = depths.FirstOrDefault(d =&amp;gt; d.Security == _instrument2);&lt;br /&gt;&lt;br /&gt;                                if (_depth2 != null)&lt;br /&gt;                                {&lt;br /&gt;                                    Console.WriteLine(&amp;quot;Стакан Лукойла появился.&amp;quot;);&lt;br /&gt;&lt;br /&gt;                                    // если портфель и инструмент уже появился, то извещаем об этом основной поток для выставления заявки&lt;br /&gt;                                    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)&lt;br /&gt;                                        waitHandle.Set();&lt;br /&gt;                                }&lt;br /&gt;                            }&lt;br /&gt;                        };&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;                        trader1.StartExport(trader1.SecuritiesTable, trader1.MyTradesTable, trader1.EquityPositionsTable,&lt;br /&gt;                                           trader1.EquityPortfoliosTable, trader1.OrdersTable);&lt;br /&gt;                        trader2.StartExport(trader2.SecuritiesTable, trader2.MyTradesTable, trader2.EquityPositionsTable,&lt;br /&gt;                                           trader2.EquityPortfoliosTable, trader2.OrdersTable);&lt;br /&gt;                        // дожидаемся появления портфеля и инструмента&lt;br /&gt;                        waitHandle.WaitOne();&lt;br /&gt;&lt;br /&gt;                        // 0.1% от изменения цены&lt;br /&gt;                        const decimal delta = 0.001m;&lt;br /&gt;&lt;br /&gt;                        // запоминаем первоначальное значение середины спреда&lt;br /&gt;                        var firstMid = _instrument1.BestPair.SpreadPrice / 2;&lt;br /&gt;                        if (_instrument1.BestBid == null)&lt;br /&gt;                            throw new Exception(&amp;quot;Нет лучшего бида для котировки.&amp;quot;);&lt;br /&gt;&lt;br /&gt;                        Console.WriteLine(&amp;quot;Первоначальное значение середины спреда {0:0.##}&amp;quot;, _instrument1.BestBid.Price + firstMid);&lt;br /&gt;&lt;br /&gt;                        while (true)&lt;br /&gt;                        {&lt;br /&gt;                            var mid = _instrument1.BestPair.SpreadPrice / 2;&lt;br /&gt;&lt;br /&gt;                            // если спред вышел за пределы нашего диапазона&lt;br /&gt;                            if (&lt;br /&gt;                                    ((firstMid + firstMid * delta) &amp;lt;= mid) ||&lt;br /&gt;                                    ((firstMid - firstMid * delta) &amp;gt;= mid)&lt;br /&gt;                                )&lt;br /&gt;                            {&lt;br /&gt;                                var order1 = new Order&lt;br /&gt;                                {&lt;br /&gt;                                    Portfolio = _portfolio1,&lt;br /&gt;                                    Price = _instrument1.ShrinkPrice(_instrument1.BestBid.Price + mid),&lt;br /&gt;                                    Security = _instrument1,&lt;br /&gt;                                    Volume = 1,&lt;br /&gt;                                    Direction = OrderDirections.Buy,&lt;br /&gt;                                };&lt;br /&gt;                                trader1.RegisterOrder(order1);&lt;br /&gt;                                Console.WriteLine(&amp;quot;Заявка {0} зарегистрирована.&amp;quot;, order1.Id);&lt;br /&gt;&lt;br /&gt;                                var order2 = new Order&lt;br /&gt;                                {&lt;br /&gt;                                    Portfolio = _portfolio2,&lt;br /&gt;                                    Price = _instrument2.ShrinkPrice(_instrument2.BestAsk.Price + mid),&lt;br /&gt;                                    Security = _instrument2,&lt;br /&gt;                                    Volume = 1,&lt;br /&gt;                                    Direction = OrderDirections.Sell,&lt;br /&gt;                                };&lt;br /&gt;                                trader2.RegisterOrder(order2);&lt;br /&gt;                                Console.WriteLine(&amp;quot;Заявка {0} зарегистрирована.&amp;quot;, order2.Id);&lt;br /&gt;                                break;&lt;br /&gt;                            }&lt;br /&gt;                            else&lt;br /&gt;                                //Console.WriteLine(&amp;quot;Текущее значение середины спреда {0:0.##}&amp;quot;, _instrument.BestBid.Price + mid);&lt;br /&gt;&lt;br /&gt;                            // ждем 1 секунду&lt;br /&gt;                            Thread.Sleep(1000);&lt;br /&gt;                        }&lt;br /&gt;&lt;br /&gt;                        // останавливаем экспорт по DDE&lt;br /&gt;                        trader2.StopExport(trader2.SecuritiesTable, trader2.MyTradesTable, trader2.EquityPositionsTable,&lt;br /&gt;                                           trader2.EquityPortfoliosTable, trader2.OrdersTable);&lt;br /&gt;                        trader1.StopExport(trader1.SecuritiesTable, trader1.MyTradesTable, trader1.EquityPositionsTable,&lt;br /&gt;                                           trader1.EquityPortfoliosTable, trader1.OrdersTable);&lt;br /&gt;                    }&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;            catch (Exception ex)&lt;br /&gt;            {&lt;br /&gt;                Console.WriteLine(ex);&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;/div&gt;&lt;/div&gt;</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
</feed>