﻿<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type='text/css' href='https://stocksharp.com/css/style.css'?>
<?xml-stylesheet type='text/css' href='https://stocksharp.com/css/bbeditor.css'?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title type="html">Помогите прописать событие.</title>
  <id>~/topic/3106/pomogite-propisat-sobytie_/</id>
  <rights type="text">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  <updated>2026-04-08T04:41:15Z</updated>
  <logo>https://stocksharp.com/images/logo.png</logo>
  <link href="https://stocksharp.com/handlers/atom.ashx?category=topic&amp;id=3106" rel="self" type="application/rss+xml" />
  <entry>
    <id>https://stocksharp.com/posts/m/22003/</id>
    <title type="text">Ответ давал выше. Обратиться в техническую поддержку.</title>
    <published>2012-10-24T16:46:47Z</published>
    <updated>2012-10-24T16:46:47Z</updated>
    <author>
      <name>Alexander</name>
      <uri>https://stocksharp.com/users/2826/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">Ответ давал выше. Обратиться в техническую поддержку.</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/22002/</id>
    <title type="text">Вот код namespace SampleConsole { using System; using System.Linq; using System.Threading; using Ecn...</title>
    <published>2012-10-24T16:30:03Z</published>
    <updated>2012-10-24T16:30:03Z</updated>
    <author>
      <name>Кудрев</name>
      <uri>https://stocksharp.com/users/6154/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">Вот код&lt;br /&gt;&lt;div class="code"&gt;&lt;strong&gt;Code&lt;/strong&gt;&lt;div class="innercode"&gt;&lt;pre class="brush:csharp"&gt;
namespace SampleConsole
{
    using System;
    using System.Linq;
    using System.Threading;

    using Ecng.Common;
    using Ecng.Collections;


    using StockSharp.BusinessEntities;
    using StockSharp.Quik;
    using StockSharp.Algo;
    using StockSharp.Algo.Strategies;

    class Program
    {
        private static Security RIZ2;
        private static Portfolio _portfolio;
        private static MarketDepth _depth;

        static void Main()
        {
            try
            {
                // для теста выбираем бумагу РТС
                const string secCode = &amp;quot;RIZ2&amp;quot;;

                var quikPath = QuikTerminal.GetDefaultPath();

                if (quikPath.IsEmpty())
                {
                    Console.WriteLine(&amp;quot;Не найден ни один запущенный Quik&amp;quot;);
                    return;
                }

                Console.WriteLine(&amp;quot;Запущенный Quik найден по пути &amp;quot; + quikPath);

                Console.Write(&amp;quot;Введите код клиента, через который будет выставлена заявка: &amp;quot;);
                var account = Console.ReadLine();

                using (var waitHandle = new AutoResetEvent(false))
                {
                    // создаем шлюз к Quik-у
                    using (var trader = new QuikTrader(quikPath))
                    {
                        // необходимо раскомментировать, если идет работа с РТС Стандарт
                        //trader.FormatTransaction += builder =&amp;gt; builder.RemoveInstruction(TransactionBuilder.ExecutionCondition);

                        // подписываемся на событие успешного подключения
                        // все действия необходимо производить только после подключения
                        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;
                        {
                            if (_portfolio == null)
                            {
                                // находим нужный портфель и присваиваем его переменной _portfolio
                                _portfolio = portfolios.FirstOrDefault(p =&amp;gt; p.Name == account);

                                if (_portfolio != null)
                                {
                                    Console.WriteLine(&amp;quot;Портфель {0} появился.&amp;quot;, account);

                                    // если инструмент и стакан уже появились,
                                    // то извещаем об этом основной поток для выставления заявки
                                    if (RIZ2 != null &amp;amp;&amp;amp; _depth != null)
                                        waitHandle.Set();
                                }
                            }
                        };

                        // подписываемся на событие появление инструментов
                        trader.NewSecurities += securities =&amp;gt;
                        {
                            if (RIZ2 == null)
                            {
                                // находим РТС и присваиваем ее переменной riz2
                                RIZ2 = securities.FirstOrDefault(sec =&amp;gt; sec.Code == secCode);

                                if (RIZ2 != null)
                                {
                                    Console.WriteLine(&amp;quot;Инструмент ртс появился.&amp;quot;);

                                    // запускаем экспорт стакана
                                    trader.RegisterMarketDepth(RIZ2);

                                    if (_portfolio != null &amp;amp;&amp;amp; _depth != null)
                                        waitHandle.Set();
                                }
                            }
                        };

                        // подписываемся на событие появления моих новых сделок
                        trader.NewMyTrades += myTrades =&amp;gt;
                        {
                            foreach (var myTrade in myTrades)
                            {
                                var trade = myTrade.Trade;
                                Console.WriteLine(&amp;quot;Сделка {0} по цене {1} по бумаге {2} по объему {3} в {4}.&amp;quot;, trade.Id, trade.Price, trade.Security.Code, trade.Volume, trade.Time);
                            }
                        };

                        // подписываемся на событие обновления стакана
                        trader.MarketDepthsChanged += depths =&amp;gt;
                        {
                            if (_depth == null &amp;amp;&amp;amp; RIZ2 != null)
                            {
                                _depth = depths.FirstOrDefault(d =&amp;gt; d.Security == RIZ2);

                                if (_depth != null)
                                {
                                    Console.WriteLine(&amp;quot;Стакан РТС появился.&amp;quot;);

                                    // если портфель и инструмент уже появился, то извещаем об этом основной поток для выставления заявки
                                    if (_portfolio != null &amp;amp;&amp;amp; RIZ2 != null)
                                        waitHandle.Set();
                                }
                            }
                        };

                        Console.WriteLine(&amp;quot;Дожидаемся появления в программе инструмента РТС и портфеля {0}...&amp;quot;.Put(account));

                        // запускаем экспорт по DDE
                        trader.StartExport(new[]{ trader.SecuritiesTable, trader.MyTradesTable, trader.EquityPositionsTable,
						                   trader.EquityPortfoliosTable, trader.OrdersTable });

                        // дожидаемся появления портфеля и инструмента
                        waitHandle.WaitOne();

                        var order = new Order
                        {
                            Portfolio = _portfolio,
                            Price = RIZ2.ShrinkPrice(RIZ2.BestBid.Price + 0),
                            Security = RIZ2,
                            Volume = 1,
                            Direction = OrderDirections.Buy,
                        };

                        order
                            .WhenNewTrades()
                            .Do(trades =&amp;gt;
                            {
                                // для каждой сделки добавляем защитную пару стратегии
                                var protectiveStrategies = trades.Select(t =&amp;gt;
                                {
                                    // выставляет тейк-профит в 40 пунктов
                                    var takeProfit = new TakeProfitStrategy(t, 40);

                                    // выставляет стоп-лосс в 20 пунктов
                                    var stopLoss = new StopLossStrategy(t, 40);

                                    return new TakeProfitStopLossStrategy(takeProfit, stopLoss) { Trader = trader, Portfolio = _portfolio, Security = RIZ2 };
                                });
                            });
                    }
                }
            }
            finally
            {
            }
        }
    }
}&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Вроде прописал чтобы на мою сделку открывались зашитные заявки а они не появляються. Пробую в Квик-юниор.&lt;br /&gt;Что делать не знаю.</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/21966/</id>
    <title type="text">На это выражение .Do(trades =&amp;gt; { // для каждой сделки добавляем защитную пару стратегии var protecti...</title>
    <published>2012-10-23T17:39:59Z</published>
    <updated>2012-10-23T17:39:59Z</updated>
    <author>
      <name>Moadip</name>
      <uri>https://stocksharp.com/users/5973/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;Кудрев &lt;a href="https://stocksharp.com/posts/m/21960/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;На это выражение&lt;br /&gt;&lt;br /&gt;&lt;span class="highlight"&gt;&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;Quote:&lt;/span&gt;&lt;div class="innerquote"&gt;.Do(trades =&amp;gt;&lt;br /&gt;    {&lt;br /&gt;      // для каждой сделки добавляем защитную пару стратегии&lt;br /&gt;      var protectiveStrategies = trades.Select(t =&amp;gt;&lt;/div&gt;&lt;/div&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Ругаеться&lt;br /&gt;&lt;br /&gt;Ошибка	1	Делегат &amp;quot;System.Action&amp;quot; не принимает &amp;quot;1&amp;quot; аргументов	C:\Users\admin\Desktop\Новая папка\Samples\Quik\SampleConsole\Program.cs	174	41	SampleConsole&lt;br /&gt;&lt;br /&gt;Ошибка	2	&amp;quot;StockSharp.Algo.MarketRule&amp;lt;StockSharp.BusinessEntities.Order,System.Collections.Generic.IEnumerable&amp;lt;StockSharp.BusinessEntities.MyTrade&amp;gt;&amp;gt;&amp;quot; не содержит определения для &amp;quot;Select&amp;quot; и не был найден метод расширения &amp;quot;Select&amp;quot;, принимающий тип &amp;quot;StockSharp.Algo.MarketRule&amp;lt;StockSharp.BusinessEntities.Order,System.Collections.Generic.IEnumerable&amp;lt;StockSharp.BusinessEntities.MyTrade&amp;gt;&amp;gt;&amp;quot; в качестве первого аргумента (возможно, пропущена директива using или ссылка на сборку)	C:\Users\admin\Desktop\Новая папка\Samples\Quik\SampleConsole\Program.cs	177	72	SampleConsole&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;И на это выражение&lt;br /&gt;&lt;br /&gt;&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;Quote:&lt;/span&gt;&lt;div class="innerquote"&gt;// запускаем каждую стратегию&lt;br /&gt;protectiveStrategies.ForEach(strategy =&amp;gt; strategy.Start());&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Ошибка	3	&amp;quot;System.Linq.IQueryable&amp;lt;TResult&amp;gt;&amp;quot; не содержит определения для &amp;quot;ForEach&amp;quot; и не был найден метод расширения &amp;quot;ForEach&amp;quot;, принимающий тип &amp;quot;System.Linq.IQueryable&amp;lt;TResult&amp;gt;&amp;quot; в качестве первого аргумента (возможно, пропущена директива using или ссылка на сборку)	C:\Users\admin\Desktop\Новая папка\Samples\Quik\SampleConsole\Program.cs	189	66	SampleConsole&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Проверил, все компилится и запускается.&lt;br /&gt;&lt;br /&gt;Ошибка 1: Не понятно почему ругается.&lt;br /&gt;Ошибка 2: Не находит метод расширение Select, но вроде как у вас System.Linq подключен.&lt;br /&gt;&lt;div class="code"&gt;&lt;strong&gt;Code&lt;/strong&gt;&lt;div class="innercode"&gt;&lt;pre class="brush:csharp"&gt;
using System.Linq;&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;Ошибка 3: Не находит метод расширение ForEach, надо добавить пространство имен&lt;br /&gt;&lt;div class="code"&gt;&lt;strong&gt;Code&lt;/strong&gt;&lt;div class="innercode"&gt;&lt;pre class="brush:csharp"&gt;
using Ecng.Collections;&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;Предварительно подключив к проекту ecng.collections.dll, если не подключена.&lt;br /&gt;</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/21965/</id>
    <title type="text">Я про это. Помогут всем.</title>
    <published>2012-10-23T17:26:34Z</published>
    <updated>2012-10-23T17:26:43Z</updated>
    <author>
      <name>Alexander</name>
      <uri>https://stocksharp.com/users/2826/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">Я про &lt;a href="http://stocksharp.com/support/" title="http://stocksharp.com/support/"&gt;это&lt;/a&gt;. Помогут всем.</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/21964/</id>
    <title type="text">Так я обучение не проходил у вас. Мне не помогут наверно.</title>
    <published>2012-10-23T17:12:09Z</published>
    <updated>2012-10-23T17:12:09Z</updated>
    <author>
      <name>Кудрев</name>
      <uri>https://stocksharp.com/users/6154/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">Так я обучение не проходил у вас. Мне не помогут наверно.</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/21960/</id>
    <title type="text">На это выражение .Do(trades =&amp;gt; { // для каждой сделки добавляем защитную пару стратегии var protecti...</title>
    <published>2012-10-23T16:56:33Z</published>
    <updated>2012-10-23T17:08:23Z</updated>
    <author>
      <name>Кудрев</name>
      <uri>https://stocksharp.com/users/6154/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">На это выражение&lt;br /&gt;&lt;br /&gt;&lt;span class="highlight"&gt;&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;Quote:&lt;/span&gt;&lt;div class="innerquote"&gt;.Do(trades =&amp;gt;&lt;br /&gt;    {&lt;br /&gt;      // для каждой сделки добавляем защитную пару стратегии&lt;br /&gt;      var protectiveStrategies = trades.Select(t =&amp;gt;&lt;/div&gt;&lt;/div&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Ругаеться&lt;br /&gt;&lt;br /&gt;Ошибка	1	Делегат &amp;quot;System.Action&amp;quot; не принимает &amp;quot;1&amp;quot; аргументов	C:\Users\admin\Desktop\Новая папка\Samples\Quik\SampleConsole\Program.cs	174	41	SampleConsole&lt;br /&gt;&lt;br /&gt;Ошибка	2	&amp;quot;StockSharp.Algo.MarketRule&amp;lt;StockSharp.BusinessEntities.Order,System.Collections.Generic.IEnumerable&amp;lt;StockSharp.BusinessEntities.MyTrade&amp;gt;&amp;gt;&amp;quot; не содержит определения для &amp;quot;Select&amp;quot; и не был найден метод расширения &amp;quot;Select&amp;quot;, принимающий тип &amp;quot;StockSharp.Algo.MarketRule&amp;lt;StockSharp.BusinessEntities.Order,System.Collections.Generic.IEnumerable&amp;lt;StockSharp.BusinessEntities.MyTrade&amp;gt;&amp;gt;&amp;quot; в качестве первого аргумента (возможно, пропущена директива using или ссылка на сборку)	C:\Users\admin\Desktop\Новая папка\Samples\Quik\SampleConsole\Program.cs	177	72	SampleConsole&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;И на это выражение&lt;br /&gt;&lt;br /&gt;&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;Quote:&lt;/span&gt;&lt;div class="innerquote"&gt;// запускаем каждую стратегию&lt;br /&gt;protectiveStrategies.ForEach(strategy =&amp;gt; strategy.Start());&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Ошибка	3	&amp;quot;System.Linq.IQueryable&amp;lt;TResult&amp;gt;&amp;quot; не содержит определения для &amp;quot;ForEach&amp;quot; и не был найден метод расширения &amp;quot;ForEach&amp;quot;, принимающий тип &amp;quot;System.Linq.IQueryable&amp;lt;TResult&amp;gt;&amp;quot; в качестве первого аргумента (возможно, пропущена директива using или ссылка на сборку)	C:\Users\admin\Desktop\Новая папка\Samples\Quik\SampleConsole\Program.cs	189	66	SampleConsole&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Вот весь код программы&lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;&lt;strong&gt;Code&lt;/strong&gt;&lt;div class="innercode"&gt;&lt;pre class="brush:csharp"&gt;
[list=1][*][list][*]namespace SampleConsole
{
    using System;
    using System.Linq;
    using System.Threading;

    using Ecng.Common;

    using StockSharp.BusinessEntities;
    using StockSharp.Quik;
    using StockSharp.Algo;
    using StockSharp.Algo.Strategies;

    class Program
    {
        private static Security _lkoh;
        private static Portfolio _portfolio;
        private static MarketDepth _depth;

        static void Main()
        {
            try
            {
                // для теста выбираем бумагу Лукойл
                const string secCode = &amp;quot;LKOH&amp;quot;;

                var quikPath = QuikTerminal.GetDefaultPath();

                if (quikPath.IsEmpty())
                {
                    Console.WriteLine(&amp;quot;Не найден ни один запущенный Quik&amp;quot;);
                    return;
                }

                Console.WriteLine(&amp;quot;Запущенный Quik найден по пути &amp;quot; + quikPath);

                Console.Write(&amp;quot;Введите код клиента, через который будет выставлена заявка: &amp;quot;);
                var account = Console.ReadLine();

                using (var waitHandle = new AutoResetEvent(false))
                {
                    // создаем шлюз к Quik-у
                    using (var trader = new QuikTrader(quikPath))
                    {
                        // необходимо раскомментировать, если идет работа с РТС Стандарт
                        //trader.FormatTransaction += builder =&amp;gt; builder.RemoveInstruction(TransactionBuilder.ExecutionCondition);

                        // подписываемся на событие успешного подключения
                        // все действия необходимо производить только после подключения
                        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;
                        {
                            if (_portfolio == null)
                            {
                                // находим нужный портфель и присваиваем его переменной _portfolio
                                _portfolio = portfolios.FirstOrDefault(p =&amp;gt; p.Name == account);

                                if (_portfolio != null)
                                {
                                    Console.WriteLine(&amp;quot;Портфель {0} появился.&amp;quot;, account);

                                    // если инструмент и стакан уже появились,
                                    // то извещаем об этом основной поток для выставления заявки
                                    if (_lkoh != null &amp;amp;&amp;amp; _depth != null)
                                        waitHandle.Set();
                                }
                            }
                        };

                        // подписываемся на событие появление инструментов
                        trader.NewSecurities += securities =&amp;gt;
                        {
                            if (_lkoh == null)
                            {
                                // находим Лукойл и присваиваем ее переменной lkoh
                                _lkoh = securities.FirstOrDefault(sec =&amp;gt; sec.Code == secCode);

                                if (_lkoh != null)
                                {
                                    Console.WriteLine(&amp;quot;Инструмент Лукойл появился.&amp;quot;);

                                    // запускаем экспорт стакана
                                    trader.RegisterMarketDepth(_lkoh);

                                    if (_portfolio != null &amp;amp;&amp;amp; _depth != null)
                                        waitHandle.Set();
                                }
                            }
                        };

                        // подписываемся на событие появления моих новых сделок
                        trader.NewMyTrades += myTrades =&amp;gt;
                        {
                            foreach (var myTrade in myTrades)
                            {
                                var trade = myTrade.Trade;
                                var takeProfit = new TakeProfitStrategy(myTrade, 0.5);
                                var stopLoss = new StopLossStrategy(myTrade, 0.3);
                                Console.WriteLine(&amp;quot;Сделка {0} по цене {1} по бумаге {2} по объему {3} в {4}.&amp;quot;, trade.Id, trade.Price, trade.Security.Code, trade.Volume, trade.Time);
                            }
                        };

                        // подписываемся на событие обновления стакана
                        trader.MarketDepthsChanged += depths =&amp;gt;
                        {
                            if (_depth == null &amp;amp;&amp;amp; _lkoh != null)
                            {
                                _depth = depths.FirstOrDefault(d =&amp;gt; d.Security == _lkoh);

                                if (_depth != null)
                                {
                                    Console.WriteLine(&amp;quot;Стакан Лукойла появился.&amp;quot;);

                                    // если портфель и инструмент уже появился, то извещаем об этом основной поток для выставления заявки
                                    if (_portfolio != null &amp;amp;&amp;amp; _lkoh != null)
                                        waitHandle.Set();
                                }
                            }
                        };

                        Console.WriteLine(&amp;quot;Дожидаемся появления в программе инструмента Лукойл и портфеля {0}...&amp;quot;.Put(account));

                        // запускаем экспорт по DDE
                        trader.StartExport(new[]{ trader.SecuritiesTable, trader.MyTradesTable, trader.EquityPositionsTable,
						                   trader.EquityPortfoliosTable, trader.OrdersTable });

                        // дожидаемся появления портфеля и инструмента
                        waitHandle.WaitOne();

                        // 0.1% от изменения цены
                        const decimal delta = 0.001m;

                        // запоминаем первоначальное значение середины спреда
                        var firstMid = _lkoh.BestPair.SpreadPrice / 2;
                        if (_lkoh.BestBid == null)
                            throw new Exception(&amp;quot;Нет лучшего бида для котировки.&amp;quot;);

                        Console.WriteLine(&amp;quot;Первоначальное значение середины спреда {0:0.##}&amp;quot;, _lkoh.BestBid.Price + firstMid);
                        while (true)
                        {
                            var mid = _lkoh.BestPair.SpreadPrice / 2;

                            // если спред вышел за пределы нашего диапазона
                            if (
                                ((firstMid + firstMid * delta) &amp;lt;= mid) ||
                                ((firstMid - firstMid * delta) &amp;gt;= mid)
                                )
                            {
                                var order = new Order
                                {
                                    Portfolio = _portfolio,
                                    Price = _lkoh.ShrinkPrice(_lkoh.BestBid.Price + mid),
                                    Security = _lkoh,
                                    Volume = 1,
                                    Direction = OrderDirections.Buy,
                                };

                                order
                                    .WhenNewTrades()
                                    .Do(trades =&amp;gt;
                                        {
                                            // для каждой сделки добавляем защитную пару стратегии
                                            var protectiveStrategies = trades.Select(t =&amp;gt;
                                                {
                                                    // выставляет тейк-профит в 40 пунктов
                                                    var takeProfit = new TakeProfitStrategy(t, 40);

                                                    // выставляет стоп-лосс в 20 пунктов
                                                    var stopLoss = new StopLossStrategy(t, 20);

                                                    return new TakeProfitStopLossStrategy(takeProfit, stopLoss) { Trader = trader, Portfolio = _portfolio, Security = _lkoh };
                                                });

                                            // запускаем каждую стратегию
                                            protectiveStrategies.ForEach(strategy =&amp;gt; strategy.Start());
                                        })

                                .Apply();

                                trader.RegisterOrder(order);
                                Console.WriteLine(&amp;quot;Заявка {0} зарегистрирована.&amp;quot;, order.Id);
                                break;
                            }
                            else
                                Console.WriteLine(&amp;quot;Текущее значение середины спреда {0:0.##}&amp;quot;, _lkoh.BestBid.Price + mid);

                            // ждем 1 секунду
                            Thread.Sleep(1000);

                        }
                    }
                }
            }
            finally
            {
            }
        }
    }
}[/list][/list]&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/21963/</id>
    <title type="text">Обращайтесь в нашу техническую поддержку, там вам компетентно помогут.</title>
    <published>2012-10-23T17:03:10Z</published>
    <updated>2012-10-23T17:03:10Z</updated>
    <author>
      <name>Alexander</name>
      <uri>https://stocksharp.com/users/2826/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">Обращайтесь в нашу техническую поддержку, там вам компетентно помогут.</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/21952/</id>
    <title type="text">В примере SampleConsole есть такой кусок кода: while (true) { var mid = _lkoh.BestPair.SpreadPrice /...</title>
    <published>2012-10-23T14:25:44Z</published>
    <updated>2012-10-23T14:25:44Z</updated>
    <author>
      <name>Moadip</name>
      <uri>https://stocksharp.com/users/5973/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">В примере &lt;b&gt;SampleConsole &lt;/b&gt;есть такой кусок кода:&lt;br /&gt;&lt;div class="code"&gt;&lt;strong&gt;Code&lt;/strong&gt;&lt;div class="innercode"&gt;&lt;pre class="brush:csharp"&gt;

						while (true)
						{
							var mid = _lkoh.BestPair.SpreadPrice / 2;

							// если спред вышел за пределы нашего диапазона
							if	(
									((firstMid + firstMid * delta) &amp;lt;= mid) ||
									((firstMid - firstMid * delta) &amp;gt;= mid)
								)
							{
								var order = new Order
								{
									Portfolio = _portfolio,
									Price = _lkoh.ShrinkPrice(_lkoh.BestBid.Price + mid),
									Security = _lkoh,
									Volume = 1,
									Direction = OrderDirections.Buy,
								};
								trader.RegisterOrder(order);
								Console.WriteLine(&amp;quot;Заявка {0} зарегистрирована.&amp;quot;, order.Id);
								break;
							}
							else
								Console.WriteLine(&amp;quot;Текущее значение середины спреда {0:0.##}&amp;quot;, _lkoh.BestBid.Price + mid);

							// ждем 1 секунду
							Thread.Sleep(1000);
						}
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Если посмотреть в документаци &lt;a href="http://stocksharp.com/doc/html/63952fce-6e43-4427-985a-1654e8d9cfc1.htm" title="http://stocksharp.com/doc/html/63952fce-6e43-4427-985a-1654e8d9cfc1.htm"&gt;Тейк-профит и Стоп-лосс&lt;/a&gt;&lt;br /&gt;&lt;div class="code"&gt;&lt;strong&gt;Code&lt;/strong&gt;&lt;div class="innercode"&gt;&lt;pre class="brush:csharp"&gt;

public class MyStrategy : Strategy
{
    public void OpenPosition()
    {
        // создаем заявку для открытия длинной позиции 
        var longPos = this.BuyAtMarket();

        // регистрируем правило, отслеживающее появление новых сделок по заявке
        longPos
            .WhenNewTrades()
            .Do(OnNewOrderTrades)
            .Apply(this);

        // отправляем заявку на регистрацию
        RegisterOrder(longPos);
    }
}
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;То видно, что для вновь созданной заявки используется правило &lt;a href="http://stocksharp.com/doc/html/M_StockSharp_Algo_MarketRuleHelper_WhenNewTrades.htm" title="http://stocksharp.com/doc/html/M_StockSharp_Algo_MarketRuleHelper_WhenNewTrades.htm"&gt;WhenNewTrades&lt;/a&gt; при срабатывании которого выполняется метод &lt;b&gt;OnNewOrderTrades&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Делаем по аналогии, только вместо именованного метода будет использоватся лямбда выражение.&lt;br /&gt;&lt;div class="code"&gt;&lt;strong&gt;Code&lt;/strong&gt;&lt;div class="innercode"&gt;&lt;pre class="brush:csharp"&gt;

						while (true)
						{
							var mid = _lkoh.BestPair.SpreadPrice / 2;

							// если спред вышел за пределы нашего диапазона
							if	(
									((firstMid + firstMid * delta) &amp;lt;= mid) ||
									((firstMid - firstMid * delta) &amp;gt;= mid)
								)
							{
								var order = new Order
								{
									Portfolio = _portfolio,
									Price = _lkoh.ShrinkPrice(_lkoh.BestBid.Price + mid),
									Security = _lkoh,
									Volume = 1,
									Direction = OrderDirections.Buy,
								};

								order
									.WhenNewTrades()
									.Do(trades =&amp;gt;
											{
                                                ...
											})
									.Apply();

								trader.RegisterOrder(order);
								Console.WriteLine(&amp;quot;Заявка {0} зарегистрирована.&amp;quot;, order.Id);
								break;
							}
							else
								Console.WriteLine(&amp;quot;Текущее значение середины спреда {0:0.##}&amp;quot;, _lkoh.BestBid.Price + mid);

							// ждем 1 секунду
							Thread.Sleep(1000);
						}
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Теперь &amp;quot;наполним&amp;quot; его логикой.[smile] &lt;br /&gt;&lt;div class="code"&gt;&lt;strong&gt;Code&lt;/strong&gt;&lt;div class="innercode"&gt;&lt;pre class="brush:csharp"&gt;

						while (true)
						{
							var mid = _lkoh.BestPair.SpreadPrice / 2;

							// если спред вышел за пределы нашего диапазона
							if	(
									((firstMid + firstMid * delta) &amp;lt;= mid) ||
									((firstMid - firstMid * delta) &amp;gt;= mid)
								)
							{
								var order = new Order
								{
									Portfolio = _portfolio,
									Price = _lkoh.ShrinkPrice(_lkoh.BestBid.Price + mid),
									Security = _lkoh,
									Volume = 1,
									Direction = OrderDirections.Buy,
								};

								order
									.WhenNewTrades()
									.Do(trades =&amp;gt;
											{
												// для каждой сделки добавляем защитную пару стратегии 
												var protectiveStrategies = trades.Select(t =&amp;gt;
												{
													// выставляет тейк-профит в 40 пунктов 
													var takeProfit = new TakeProfitStrategy(t, 40);

													// выставляет стоп-лосс в 20 пунктов 
													var stopLoss = new StopLossStrategy(t, 20);

													return new TakeProfitStopLossStrategy(takeProfit, stopLoss) { Trader = trader, Portfolio = _portfolio, Security = _lkoh };
												});

												// запускаем каждую стратегию
												protectiveStrategies.ForEach(strategy =&amp;gt; strategy.Start());
											})
									.Apply();

								trader.RegisterOrder(order);
								Console.WriteLine(&amp;quot;Заявка {0} зарегистрирована.&amp;quot;, order.Id);
								break;
							}
							else
								Console.WriteLine(&amp;quot;Текущее значение середины спреда {0:0.##}&amp;quot;, _lkoh.BestBid.Price + mid);

							// ждем 1 секунду
							Thread.Sleep(1000);
						}
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;В примере, который в документации, &lt;b&gt;protectiveStrategies &lt;/b&gt;добавляется в качестве &lt;a href="http://stocksharp.com/doc/html/8ea639f6-ce74-4a00-9f13-db59c8c2396f.htm" title="http://stocksharp.com/doc/html/8ea639f6-ce74-4a00-9f13-db59c8c2396f.htm"&gt;дочерней&lt;/a&gt;. Поэтому каждую отдельную стратегию не надо инициализировать(передавать шлюз, портфель, инструмент, и т.д.) - все берется из родительской. И запускать через метод &lt;b&gt;Start()&lt;/b&gt;.&lt;br /&gt;&lt;div class="code"&gt;&lt;strong&gt;Code&lt;/strong&gt;&lt;div class="innercode"&gt;&lt;pre class="brush:csharp"&gt;

ChildStrategies.AddRange(protectiveStrategies);
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;В нашем случае, родительской нет(&lt;b&gt;protectiveStrategies &lt;/b&gt;сама ей является). Поэтому инициализируем и запускаем.&lt;br /&gt;&lt;div class="code"&gt;&lt;strong&gt;Code&lt;/strong&gt;&lt;div class="innercode"&gt;&lt;pre class="brush:csharp"&gt;

TakeProfitStopLossStrategy(takeProfit, stopLoss) { Trader = trader, Portfolio = _portfolio, Security = _lkoh };

...

strategy.Start()
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Как то так. Вроде должно работать.[biggrin] </content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/21928/</id>
    <title type="text">Добрый день ребята. Кто нибудь может помочь прописать событие. Чтобы на мою заявку как только она ис...</title>
    <published>2012-10-23T05:52:48Z</published>
    <updated>2012-10-23T08:41:50Z</updated>
    <author>
      <name>Кудрев</name>
      <uri>https://stocksharp.com/users/6154/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">Добрый день ребята.&lt;br /&gt;Кто нибудь может помочь прописать событие.&lt;br /&gt;Чтобы на мою заявку как только она исполнена выставлялась профит и стоп заявка.&lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;&lt;strong&gt;Code&lt;/strong&gt;&lt;div class="innercode"&gt;&lt;pre class="brush:csharp"&gt;

private void OnNewOrderTrades(IEnumerable&amp;lt;MyTrade&amp;gt; trades)
{
    // для каждой сделки добавляем защитную пару стратегии 
    var protectiveStrategies = trades.Select(t =&amp;gt;
    {
        // выставляет тейк-профит в 40 пунктов 
        var takeProfit = new TakeProfitStrategy(t, 40);

        // выставляет стоп-лосс в 20 пунктов 
        var stopLoss = new StopLossStrategy(t, 20);

        return new TakeProfitStopLossStrategy(trade, takeProfit, stopLoss);
    });

    ChildStrategies.AddRange(protectiveStrategies);
}

&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Код я взял с примера а куда событие прописать и как не могу додумать.&lt;br /&gt;&lt;br /&gt;// создаем шлюз к Quik-у &lt;br /&gt;var trader = new QuikTrader(@&amp;quot;Ваш путь к Квик директории&amp;quot;);&lt;br /&gt;// подписываемся на событие успешного подключения &lt;br /&gt;// все действия необходимо производить только после подключения&lt;br /&gt;trader.Connected += () =&amp;gt;&lt;br /&gt;{&lt;br /&gt;    Console.WriteLine(&amp;quot;Подключение было произведено успешно.&amp;quot;);&lt;br /&gt;&lt;br /&gt;    // извещаем об успешном соединении&lt;br /&gt;    waitHandle.Set();&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;Console.WriteLine(&amp;quot;Производим подключение...&amp;quot;);&lt;br /&gt;&lt;br /&gt;trader.Connect();&lt;br /&gt;&lt;br /&gt;// дожидаемся события об успешном соединении&lt;br /&gt;waitHandle.WaitOne();&lt;br /&gt;trader.NewPortfolios += portfolios =&amp;gt;&lt;br /&gt;{&lt;br /&gt;    if (_portfolio == null)&lt;br /&gt;    {&lt;br /&gt;        // находим нужный портфель и присваиваем его переменной _portfolio&lt;br /&gt;        _portfolio = portfolios.FirstOrDefault(p =&amp;gt; p.Name == account);&lt;br /&gt;&lt;br /&gt;        if (_portfolio != null)&lt;br /&gt;        {&lt;br /&gt;            Console.WriteLine(&amp;quot;Портфель {0} появился.&amp;quot;, account);&lt;br /&gt;&lt;br /&gt;            // если инструмент и стакан уже появились, &lt;br /&gt;            // то извещаем об этом основной поток для выставления заявки &lt;br /&gt;            if (_lkoh != null &amp;amp;&amp;amp; _depth != null)&lt;br /&gt;                waitHandle.Set();&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;};&lt;br /&gt;// подписываемся на событие появление инструментов&lt;br /&gt;trader.NewSecurities += securities =&amp;gt;&lt;br /&gt;{&lt;br /&gt;    if (_riz2 == null)&lt;br /&gt;    {&lt;br /&gt;        // находим Лукойл и присваиваем ее переменной ртс&lt;br /&gt;        _riz2 = securities.FirstOrDefault(sec =&amp;gt; sec.Code == secCode);&lt;br /&gt;&lt;br /&gt;        if (_riz != null)&lt;br /&gt;        {&lt;br /&gt;            Console.WriteLine(&amp;quot;Инструмент ртс появился.&amp;quot;);&lt;br /&gt;&lt;br /&gt;            // запускаем экспорт стакана&lt;br /&gt;            trader.RegisterQuotes(_riz2);&lt;br /&gt;&lt;br /&gt;            if (_portfolio != null)&lt;br /&gt;                waitHandle.Set();&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;};&lt;br /&gt;// подписываемся на событие появления моих новых сделок&lt;br /&gt;trader.NewMyTrades += myTrades =&amp;gt;&lt;br /&gt;{&lt;br /&gt;    foreach (var myTrade in myTrades)&lt;br /&gt;    {&lt;br /&gt;        var trade = myTrade.Trade;&lt;br /&gt;        Console.WriteLine(&amp;quot;Сделка {0} по цене {1} по бумаге {2} по объему {3} в {4}.&amp;quot;, trade.Id, trade.Price, trade.Security.Code, trade.Volume, trade.Time);&lt;br /&gt;&lt;br /&gt;    }&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;// подписываемся на событие обновления стакана&lt;br /&gt;trader.MarketDepthsChanged += depths =&amp;gt;&lt;br /&gt;{&lt;br /&gt;    if (_depth == null &amp;amp;&amp;amp; _riz2 != null)&lt;br /&gt;    {&lt;br /&gt;        _depth = depths.FirstOrDefault(d =&amp;gt; d.Security == _riz2);&lt;br /&gt;&lt;br /&gt;        if (_depth != null)&lt;br /&gt;        {&lt;br /&gt;            Console.WriteLine(&amp;quot;Стакан ртс появился.&amp;quot;);&lt;br /&gt;&lt;br /&gt;            // если портфель уже появился, то извещаем об этом основной поток для выставления заявки &lt;br /&gt;            if (_portfolio != null)&lt;br /&gt;                waitHandle.Set();&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;};&lt;br /&gt;Console.WriteLine(&amp;quot;Дожидаемся появления в программе инструмента ртс и портфеля {0}...&amp;quot;.Put(account));&lt;br /&gt;&lt;br /&gt;// запускаем экспорт по DDE&lt;br /&gt;trader.StartExport(new[]{ trader.SecuritiesTable, trader.MyTradesTable, trader.EquityPositionsTable, trader.EquityPortfoliosTable, trader.OrdersTable });</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/21929/</id>
    <title type="text">Пожалуйста, в сообщении оформляйте код с подсветкой C#...</title>
    <published>2012-10-23T06:17:11Z</published>
    <updated>2012-10-23T06:17:11Z</updated>
    <author>
      <name>OvcharenkoVI</name>
      <uri>https://stocksharp.com/users/390/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">Пожалуйста, в сообщении оформляйте код с подсветкой C#...</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
</feed>