﻿<?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/3106/pomogite-propisat-sobytie_/</id>
  <rights type="text">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  <updated>2026-06-11T05:36:59Z</updated>
  <logo>https://stocksharp.ru/images/logo.png</logo>
  <link href="https://stocksharp.ru/handlers/atom.ashx?category=topic&amp;id=3106" rel="self" type="application/rss+xml" />
  <entry>
    <id>https://stocksharp.ru/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.ru/users/2826/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;p&gt;Ответ давал выше. Обратиться в техническую поддержку.&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/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.ru/users/6154/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;p&gt;Вот код&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-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;/code&gt;&lt;/pre&gt;
&lt;p&gt;Вроде прописал чтобы на мою сделку открывались зашитные заявки а они не появляються. Пробую в Квик-юниор.
Что делать не знаю.&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/21966/</id>
    <title type="text">На это выражение &amp;gt; .Do(trades =&amp;gt; { // для каждой сделки добавляем защитную пару стратегии var protec...</title>
    <published>2012-10-23T17:39:59Z</published>
    <updated>2012-10-23T17:39:59Z</updated>
    <author>
      <name>Moadip</name>
      <uri>https://stocksharp.ru/users/5973/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;p&gt;На это выражение&lt;/p&gt;
&lt;p&gt;&lt;mark&gt;&amp;gt; .Do(trades =&amp;gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;pre&gt;&lt;code&gt;{
  // для каждой сделки добавляем защитную пару стратегии
  var protectiveStrategies = trades.Select(t =&amp;gt;&amp;lt;/mark&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;p&gt;Ругаеться&lt;/p&gt;
&lt;p&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;/p&gt;
&lt;p&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;/p&gt;
&lt;p&gt;И на это выражение&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;// запускаем каждую стратегию
protectiveStrategies.ForEach(strategy =&amp;gt; strategy.Start());&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Ошибка	3	&amp;quot;System.Linq.IQueryable&lt;TResult&gt;&amp;quot; не содержит определения для &amp;quot;ForEach&amp;quot; и не был найден метод расширения &amp;quot;ForEach&amp;quot;, принимающий тип &amp;quot;System.Linq.IQueryable&lt;TResult&gt;&amp;quot; в качестве первого аргумента (возможно, пропущена директива using или ссылка на сборку)	C:\Users\admin\Desktop\Новая папка\Samples\Quik\SampleConsole\Program.cs	189	66	SampleConsole&lt;/p&gt;
&lt;p&gt;Проверил, все компилится и запускается.&lt;/p&gt;
&lt;p&gt;Ошибка 1: Не понятно почему ругается.
Ошибка 2: Не находит метод расширение Select, но вроде как у вас System.Linq подключен.&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-csharp"&gt;using System.Linq;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Ошибка 3: Не находит метод расширение ForEach, надо добавить пространство имен&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-csharp"&gt;using Ecng.Collections;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Предварительно подключив к проекту ecng.collections.dll, если не подключена.&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/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.ru/users/2826/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;p&gt;Я про &lt;a href="http://stocksharp.com/support/"&gt;это&lt;/a&gt;. Помогут всем.&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/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.ru/users/6154/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;p&gt;Так я обучение не проходил у вас. Мне не помогут наверно.&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/21960/</id>
    <title type="text">На это выражение &amp;gt; .Do(trades =&amp;gt; { // для каждой сделки добавляем защитную пару стратегии var protec...</title>
    <published>2012-10-23T16:56:33Z</published>
    <updated>2012-10-23T17:08:23Z</updated>
    <author>
      <name>Кудрев</name>
      <uri>https://stocksharp.ru/users/6154/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;p&gt;На это выражение&lt;/p&gt;
&lt;p&gt;&lt;mark&gt;&amp;gt; .Do(trades =&amp;gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;pre&gt;&lt;code&gt;{
  // для каждой сделки добавляем защитную пару стратегии
  var protectiveStrategies = trades.Select(t =&amp;gt;&amp;lt;/mark&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;p&gt;Ругаеться&lt;/p&gt;
&lt;p&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;/p&gt;
&lt;p&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;/p&gt;
&lt;p&gt;И на это выражение&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;// запускаем каждую стратегию
protectiveStrategies.ForEach(strategy =&amp;gt; strategy.Start());&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Ошибка	3	&amp;quot;System.Linq.IQueryable&lt;TResult&gt;&amp;quot; не содержит определения для &amp;quot;ForEach&amp;quot; и не был найден метод расширения &amp;quot;ForEach&amp;quot;, принимающий тип &amp;quot;System.Linq.IQueryable&lt;TResult&gt;&amp;quot; в качестве первого аргумента (возможно, пропущена директива using или ссылка на сборку)	C:\Users\admin\Desktop\Новая папка\Samples\Quik\SampleConsole\Program.cs	189	66	SampleConsole&lt;/p&gt;
&lt;p&gt;Вот весь код программы&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-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;/code&gt;&lt;/pre&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/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.ru/users/2826/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;p&gt;Обращайтесь в нашу техническую поддержку, там вам компетентно помогут.&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/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.ru/users/5973/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;p&gt;В примере &lt;strong&gt;SampleConsole&lt;/strong&gt;есть такой кусок кода:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-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;/code&gt;&lt;/pre&gt;
&lt;p&gt;Если посмотреть в документаци &lt;a href="http://stocksharp.com/doc/html/63952fce-6e43-4427-985a-1654e8d9cfc1.htm"&gt;Тейк-профит и Стоп-лосс&lt;/a&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-csharp"&gt;
public class MyStrategy : Strategy
{
    public void OpenPosition()
    {
        // создаем заявку для открытия длинной позиции 
        var longPos = this.BuyAtMarket();

        // регистрируем правило, отслеживающее появление новых сделок по заявке
        longPos
            .WhenNewTrades()
            .Do(OnNewOrderTrades)
            .Apply(this);

        // отправляем заявку на регистрацию
        RegisterOrder(longPos);
    }
}

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;То видно, что для вновь созданной заявки используется правило &lt;a href="http://stocksharp.com/doc/html/M_StockSharp_Algo_MarketRuleHelper_WhenNewTrades.htm"&gt;WhenNewTrades&lt;/a&gt; при срабатывании которого выполняется метод &lt;strong&gt;OnNewOrderTrades&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Делаем по аналогии, только вместо именованного метода будет использоватся лямбда выражение.&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-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;/code&gt;&lt;/pre&gt;
&lt;p&gt;Теперь &amp;quot;наполним&amp;quot; его логикой.[smile]&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-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;/code&gt;&lt;/pre&gt;
&lt;p&gt;В примере, который в документации, &lt;strong&gt;protectiveStrategies&lt;/strong&gt;добавляется в качестве &lt;a href="http://stocksharp.com/doc/html/8ea639f6-ce74-4a00-9f13-db59c8c2396f.htm"&gt;дочерней&lt;/a&gt;. Поэтому каждую отдельную стратегию не надо инициализировать(передавать шлюз, портфель, инструмент, и т.д.) - все берется из родительской. И запускать через метод &lt;strong&gt;Start()&lt;/strong&gt;.&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-csharp"&gt;
ChildStrategies.AddRange(protectiveStrategies);

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;В нашем случае, родительской нет(&lt;strong&gt;protectiveStrategies&lt;/strong&gt;сама ей является). Поэтому инициализируем и запускаем.&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-csharp"&gt;
TakeProfitStopLossStrategy(takeProfit, stopLoss) { Trader = trader, Portfolio = _portfolio, Security = _lkoh };

...

strategy.Start()

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Как то так. Вроде должно работать.[biggrin]&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/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.ru/users/6154/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;p&gt;Добрый день ребята.
Кто нибудь может помочь прописать событие.
Чтобы на мою заявку как только она исполнена выставлялась профит и стоп заявка.&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-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;/code&gt;&lt;/pre&gt;
&lt;p&gt;Код я взял с примера а куда событие прописать и как не могу додумать.&lt;/p&gt;
&lt;p&gt;// создаем шлюз к Quik-у
var trader = new QuikTrader(@&amp;quot;Ваш путь к Квик директории&amp;quot;);
// подписываемся на событие успешного подключения
// все действия необходимо производить только после подключения
trader.Connected += () =&amp;gt;
{
Console.WriteLine(&amp;quot;Подключение было произведено успешно.&amp;quot;);&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;// извещаем об успешном соединении
waitHandle.Set();
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;};&lt;/p&gt;
&lt;p&gt;Console.WriteLine(&amp;quot;Производим подключение...&amp;quot;);&lt;/p&gt;
&lt;p&gt;trader.Connect();&lt;/p&gt;
&lt;p&gt;// дожидаемся события об успешном соединении
waitHandle.WaitOne();
trader.NewPortfolios += portfolios =&amp;gt;
{
if (_portfolio == null)
{
// находим нужный портфель и присваиваем его переменной _portfolio
_portfolio = portfolios.FirstOrDefault(p =&amp;gt; p.Name == account);&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;    if (_portfolio != null)
    {
        Console.WriteLine(&amp;quot;Портфель {0} появился.&amp;quot;, account);

        // если инструмент и стакан уже появились, 
        // то извещаем об этом основной поток для выставления заявки 
        if (_lkoh != null &amp;amp;&amp;amp; _depth != null)
            waitHandle.Set();
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;};
// подписываемся на событие появление инструментов
trader.NewSecurities += securities =&amp;gt;
{
if (_riz2 == null)
{
// находим Лукойл и присваиваем ее переменной ртс
_riz2 = securities.FirstOrDefault(sec =&amp;gt; sec.Code == secCode);&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;    if (_riz != null)
    {
        Console.WriteLine(&amp;quot;Инструмент ртс появился.&amp;quot;);

        // запускаем экспорт стакана
        trader.RegisterQuotes(_riz2);

        if (_portfolio != null)
            waitHandle.Set();
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;};
// подписываемся на событие появления моих новых сделок
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);&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;};&lt;/p&gt;
&lt;p&gt;// подписываемся на событие обновления стакана
trader.MarketDepthsChanged += depths =&amp;gt;
{
if (_depth == null &amp;amp;&amp;amp; _riz2 != null)
{
_depth = depths.FirstOrDefault(d =&amp;gt; d.Security == _riz2);&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;    if (_depth != null)
    {
        Console.WriteLine(&amp;quot;Стакан ртс появился.&amp;quot;);

        // если портфель уже появился, то извещаем об этом основной поток для выставления заявки 
        if (_portfolio != null)
            waitHandle.Set();
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;};
Console.WriteLine(&amp;quot;Дожидаемся появления в программе инструмента ртс и портфеля {0}...&amp;quot;.Put(account));&lt;/p&gt;
&lt;p&gt;// запускаем экспорт по DDE
trader.StartExport(new[]{ trader.SecuritiesTable, trader.MyTradesTable, trader.EquityPositionsTable, trader.EquityPortfoliosTable, trader.OrdersTable });&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/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.ru/users/390/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;p&gt;Пожалуйста, в сообщении оформляйте код с подсветкой C#...&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
</feed>