﻿<?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">takeprofit &amp; stoploss</title>
  <id>~/topic/2308/takeprofit--stoploss/</id>
  <rights type="text">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  <updated>2026-04-22T13:53:22Z</updated>
  <logo>https://stocksharp.ru/images/logo.png</logo>
  <link href="https://stocksharp.ru/handlers/atom.ashx?category=topic&amp;id=2308" rel="self" type="application/rss+xml" />
  <entry>
    <id>https://stocksharp.ru/posts/m/16144/</id>
    <title type="text">Сильно не вникал, но, вероятно, самая простая ситуация: Сработал стоп, ордер был выставлен Цена пере...</title>
    <published>2012-02-03T18:17:58Z</published>
    <updated>2016-08-16T00:05:32Z</updated>
    <author>
      <name>ak</name>
      <uri>https://stocksharp.ru/users/26845/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">Сильно не вникал, но, вероятно, самая простая ситуация:&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt; Сработал стоп, ордер был выставлен&lt;br /&gt;&lt;li&gt; Цена перешагнула ордер и ушла ниже&lt;br /&gt;&lt;li&gt; Твоя заявка как висела так и висит, стратегия не завершилась, но и ничего не предпринимает - и не должна.&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;Один из выходов - использовать котирование в StopLoss стратегии:&lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;&lt;strong&gt;Код&lt;/strong&gt;&lt;div class="innercode"&gt;&lt;pre class="brush:csharp"&gt;

var stopLoss = new StopLossStrategy(trade, StopLossUnit) { UseQuoting = true };
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;У меня есть открытая проблема с этим способом в Quik, &lt;a href="http://stocksharp.com/posts/m/16132/, " title="http://stocksharp.com/posts/m/16132/, "&gt;http://stocksharp.com/posts/m/16132/, &lt;/a&gt;может в Smart&amp;#39;е дела обстоят лучше.&lt;br /&gt;&lt;br /&gt;Другой - использовать свойство StopLossStrategy (точнее ProtectiveStrategy) - PriceOffset, читать тут:&lt;br /&gt;&lt;a href="http://stocksharp.com/doc/html/P_StockSharp_Algo_Strategies_ProtectiveStrategy_PriceOffset.htm
" title="http://stocksharp.com/doc/html/P_StockSharp_Algo_Strategies_ProtectiveStrategy_PriceOffset.htm
"&gt;http://stocksharp.com/do...trategy_PriceOffset.htm
&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Пример:&lt;br /&gt;&lt;div class="code"&gt;&lt;strong&gt;Код&lt;/strong&gt;&lt;div class="innercode"&gt;&lt;pre class="brush:csharp"&gt;

var stopLoss = new StopLossStrategy(trade, StopLossUnit) { PriceOffset = 20 };
&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.ru/posts/m/15726/</id>
    <title type="text">Не знаю, как в последней версии программы, но по тексту в http://stocksharp.com/posts/m/15613/ не ви...</title>
    <published>2012-01-17T16:53:55Z</published>
    <updated>2016-08-16T00:05:18Z</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;BigBen &lt;a href="https://stocksharp.ru/posts/m/15720/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;Не знаю, как в последней версии программы, но по тексту в &lt;a href="http://stocksharp.com/posts/m/15613/ " title="http://stocksharp.com/posts/m/15613/ "&gt;http://stocksharp.com/posts/m/15613/ &lt;/a&gt;не видно, чтобы вызывался метод OnStarting(), т.е. отсутствует&lt;br /&gt;&lt;br /&gt;protected override void OnStarting()&lt;br /&gt;{&lt;br /&gt;.........................................................&lt;br /&gt;}&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;protected ProcessResults OnProcess() тоже не было у меня.. А что то должно быть в этом OnStarting()&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;Код&lt;/strong&gt;&lt;div class="innercode"&gt;&lt;pre class="brush:csharp"&gt;
namespace SampleSmartConsole
{
	using System;
    using System.Net;
	using System.Linq;
	using System.Threading;
    using System.Collections.Generic;

	using Ecng.Collections;
	using Ecng.Common;

	using StockSharp.BusinessEntities;
	using StockSharp.Smart;
	using StockSharp.Algo;
    using StockSharp.Algo.Strategies;

	class Program
	{
		private static Security _instrument;
		private static Portfolio _portfolio;
        private static MarketDepth _depth;
        private static Position _position;
        //private static buy _strategy;

        public class buy : Strategy
        {

            protected override void OnStarting()
            {
                //OpenPosition(); тут вобщем какие то действия при старте (в примере вроде как машки рисует или какие то значения присваивает)
                base.OnStarting();
            }

            protected ProcessResults OnProcess()
            {
                OpenPosition(); //а это уже процесс работы стратегии
                return ProcessResults.Continue;
            }

            public void OpenPosition()
            {
                var objem = _position.CurrentValue;
                if (objem == 0)
                {
                    // создаем заявку для открытия длинной позиции
                    //var longPos = this.BuyAtMarket();
                    var longPos = new Order
                    {
                        Portfolio = _portfolio,
                        Price = _instrument.ShrinkPrice(_instrument.BestAsk.Price),
                        Security = _instrument,
                        Volume = 1,
                        Direction = OrderDirections.Sell,
                    };

                    // регистрируем правило, отслеживающее появление новых сделок по заявке
                    this
                    .When(longPos.NewTrades())
                    .Do(OnNewOrderTrades)
                    .Periodical(() =&amp;gt; longPos.IsMatched());

                    // отправляем заявку на регистрацию
                    RegisterOrder(longPos);
                }
                //base.OpenPosition();
            }

            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(takeProfit, stopLoss);
                });

                ChildStrategies.AddRange(protectiveStrategies);
            }
        }

		static void Main()
		{
			try
			{
				// для теста выбираем бумагу
				const string secCode = &amp;quot;RIH2&amp;quot;;

				//Console.Write(&amp;quot;Введите логин: &amp;quot;);
				//var login = Console.ReadLine();
                var login = &amp;quot;ST12858&amp;quot;;

				//Console.Write(&amp;quot;Введите пароль: &amp;quot;);
				//var password = Console.ReadLine();
                var password = &amp;quot;8YDJ7E&amp;quot;;

				//Console.Write(&amp;quot;Введите номер счета, через который будет выставлена заявка: &amp;quot;);
				//var account = Console.ReadLine();
                var account = &amp;quot;ST12858-RF-01&amp;quot;;

                IPAddress ipadress = IPAddress.Parse(&amp;quot;95.131.26.246&amp;quot;);
                IPEndPoint ip = new IPEndPoint(ipadress, 8090);
                
				using (var waitHandle = new AutoResetEvent(false))
				{
					// создаем шлюз к Smart-у
					using (var trader = new SmartTrader(login, password, ip))
					{
						// подписываемся на событие успешного подключения
						// все действия необходимо производить только после подключения
						trader.Connected += () =&amp;gt;
						{
							Console.WriteLine(&amp;quot;Подключение было произведено успешно.&amp;quot;);

							// извещаем об успешном соединени
							waitHandle.Set();
						};

						Console.WriteLine(&amp;quot;Производим подключение...&amp;quot;);

						trader.Connect();

						// дожидаемся события об успешном соединении
						waitHandle.WaitOne();

						// подписываемся на все портфели-счета
						trader.NewPortfolios += portfolios =&amp;gt;
						{
							// необходимое условие работы в SmartCOM
							portfolios.ForEach(trader.RegisterPortfolio);

							if (_portfolio == null)
							{
								_portfolio = portfolios.FirstOrDefault(p =&amp;gt; p.Name == account);

								if (_portfolio != null)
								{
									Console.WriteLine(&amp;quot;Портфель {0} появился.&amp;quot;, account);

                                    if (_instrument != null &amp;amp;&amp;amp; _depth != null &amp;amp;&amp;amp; _position != null)
										waitHandle.Set();
								}
							}
						};

						// подписываемся на событие появление инструментов
                        trader.NewPositions += positions =&amp;gt;
                        {
                            if (_position == null)
                            {
                                _position = positions.FirstOrDefault();
                                //_position = positions.FirstOrDefault(sec =&amp;gt; sec.Security.Code == secCode);
                                if (_position != null)
                                {
                                    Console.WriteLine(&amp;quot;Информация о портфеле появилась.&amp;quot;);
                                    if (_portfolio != null &amp;amp;&amp;amp; _depth != null &amp;amp;&amp;amp; _instrument != null)
                                        waitHandle.Set();
                                }
                            }
                        };
						trader.NewSecurities += securities =&amp;gt;
						{
							if (_instrument == null)
							{
                                // находим инструмент и присваиваем ее переменной _instrument
                                _instrument = securities.FirstOrDefault(sec =&amp;gt; sec.Code == secCode &amp;amp;&amp;amp; sec.Type == SecurityTypes.Future);

								if (_instrument != null)
								{
									Console.WriteLine(&amp;quot;Инструмент появился.&amp;quot;);
                                    trader.RegisterQuotes(_instrument); // запускаем экспорт стакана
                                    if (_portfolio != null &amp;amp;&amp;amp; _depth != null &amp;amp;&amp;amp; _position != null)
										waitHandle.Set();
								}
							}
						};

                        // подписываемся на событие обновления стакана
                        trader.QuotesChanged += depths =&amp;gt;
                        {
                            if (_depth == null &amp;amp;&amp;amp; _instrument != null)
                            {
                                _depth = depths.FirstOrDefault(d =&amp;gt; d.Security == _instrument);

                                if (_depth != null)
                                {
                                    Console.WriteLine(&amp;quot;Стакан появился.&amp;quot;);

                                    if (_portfolio != null &amp;amp;&amp;amp; _position != 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);
							}
						};
                        
						Console.WriteLine(&amp;quot;Дожидаемся появления в программе инструмента и портфеля {0}...&amp;quot;.Put(account));

						// запускаем экспорт по инструментам и портфелям
						trader.StartExport();

						// дожидаемся появления портфеля и инструмента
						waitHandle.WaitOne();

						trader.SecuritiesChanged += securities =&amp;gt;
						{
							// если инструмент хоть раз изменился (по нему пришли актуальные данные)
							if (securities.Contains(_instrument))
								waitHandle.Set();
						};

						Console.WriteLine(&amp;quot;Дожидаемся обновления данных по инструменту...&amp;quot;);

						// запускаем обновление по инструменту
						trader.RegisterSecurity(_instrument);
						waitHandle.WaitOne();

						// запоминаем первоначальное значение середины спреда
                        var totb = _depth.TotalBidsVolume;
                        var tota = _depth.TotalAsksVolume;

                        int maxaskv = 0;
                        int maxbidv = 0;
                        int maxaskp = 0;
                        int maxbidp = 0;
                        var asks = _depth.Asks;
                        var bids = _depth.Bids;
                        for (int i = 0; i &amp;lt; 50; i++)
                        {
                            if (asks[i].Volume &amp;gt; maxaskv) { maxaskv = (int)asks[i].Volume; maxaskp = (int)asks[i].Price; }
                            if (bids[i].Volume &amp;gt; maxbidv) { maxbidv = (int)bids[i].Volume; maxbidp = (int)bids[i].Price; }
                        }
                        Console.WriteLine(&amp;quot;maxask {0}&amp;quot;, maxaskv);
                        Console.WriteLine(&amp;quot;maxbid {0}&amp;quot;, maxbidv);

						if (_instrument.BestBid == null)
							throw new Exception(&amp;quot;Нет лучшего бида для котировки.&amp;quot;);

                        Console.WriteLine(&amp;quot;общий объем bid {0}&amp;quot;, totb);
                        Console.WriteLine(&amp;quot;общий объем ask {0}&amp;quot;, tota);

                        buy _strategy = new buy();
                        _strategy.Start();


                        for (int i = 0; i &amp;lt;= 50; i++)
                        {
                            var objem = _position.CurrentValue;
                            Console.WriteLine(&amp;quot;открытые позиции {0}&amp;quot;, objem);

                            // ждем 1 секунду
                            Thread.Sleep(1000);
                        }

						// останавливаем экспорт
						trader.StopExport();
                        Console.WriteLine(&amp;quot;StopExport&amp;quot;);
                        Console.ReadKey();
					}
				}
			}
			catch (Exception ex)
			{
				Console.WriteLine(ex);
                Console.WriteLine(&amp;quot;catch&amp;quot;);
                Console.ReadKey();
			}
		}
	}
}&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.ru/posts/m/15720/</id>
    <title type="text">Не знаю, как в последней версии программы, но по тексту в http://stocksharp.com/posts/m/15613/ не ви...</title>
    <published>2012-01-17T15:38:19Z</published>
    <updated>2016-08-16T00:05:18Z</updated>
    <author>
      <name>BigBen</name>
      <uri>https://stocksharp.ru/users/6302/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">Не знаю, как в последней версии программы, но по тексту в &lt;a href="http://stocksharp.com/posts/m/15613/ " title="http://stocksharp.com/posts/m/15613/ "&gt;http://stocksharp.com/posts/m/15613/ &lt;/a&gt;не видно, чтобы вызывался метод OnStarting(), т.е. отсутствует&lt;br /&gt;&lt;br /&gt;protected override void OnStarting()&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.ru/posts/m/15694/</id>
    <title type="text">Для начала, в посте http://stocksharp.com/posts/m/15613/ buy _strategy = new buy(); _strategy.Start(...</title>
    <published>2012-01-17T06:45:15Z</published>
    <updated>2016-08-16T00:05:17Z</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;BigBen &lt;a href="https://stocksharp.ru/posts/m/15692/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;Для начала, в посте &lt;a href="http://stocksharp.com/posts/m/15613/ " title="http://stocksharp.com/posts/m/15613/ "&gt;http://stocksharp.com/posts/m/15613/ &lt;/a&gt;&lt;br /&gt;&lt;b&gt;buy _strategy = new buy();&lt;br /&gt; _strategy.Start();&lt;/b&gt;&lt;br /&gt;находятся внутри бесконечного цикла&lt;br /&gt;&lt;b&gt;while (true)&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Эачем?&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;Из цикла я давно убрал, поставил перед (да и цикл думаю можно убрать, если класс будет повторяться)</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/15692/</id>
    <title type="text">Для начала, в посте http://stocksharp.com/posts/m/15613/ buy _strategy = new buy(); _strategy.Start(...</title>
    <published>2012-01-17T04:10:16Z</published>
    <updated>2016-08-16T00:05:16Z</updated>
    <author>
      <name>BigBen</name>
      <uri>https://stocksharp.ru/users/6302/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">Для начала, в посте &lt;a href="http://stocksharp.com/posts/m/15613/ " title="http://stocksharp.com/posts/m/15613/ "&gt;http://stocksharp.com/posts/m/15613/ &lt;/a&gt;&lt;br /&gt;&lt;b&gt;buy _strategy = new buy();&lt;br /&gt; _strategy.Start();&lt;/b&gt;&lt;br /&gt;находятся внутри бесконечного цикла&lt;br /&gt;&lt;b&gt;while (true)&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Эачем?</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/16145/</id>
    <title type="text">т.е. это нормально, понял 2ой выход думаю мониторить позицию.. логичнее будет) Спасибо, что посмотре...</title>
    <published>2012-02-03T18:51:23Z</published>
    <updated>2012-02-03T18:51:23Z</updated>
    <author>
      <name>tmt</name>
      <uri>https://stocksharp.ru/users/6032/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">т.е. это нормально, понял[glare] 2ой выход думаю мониторить позицию.. логичнее будет) Спасибо, что посмотрели</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/16143/</id>
    <title type="text">http://s2.ipicture.ru/uploads/20120203/pd6GIU10.png Вот в общем какая позиция у меня У стратегии сно...</title>
    <published>2012-02-03T12:18:31Z</published>
    <updated>2012-02-03T12:18:31Z</updated>
    <author>
      <name>tmt</name>
      <uri>https://stocksharp.ru/users/6032/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;a href='http://s2.ipicture.ru/uploads/20120203/pd6GIU10.png' class='lightview' data-lightview-options="skin: 'mac'" data-lightview-group='mixed'&gt;&lt;img src="http://s2.ipicture.ru/uploads/20120203/pd6GIU10.png" style='max-width: 600px;' alt=""/&gt;&lt;/a&gt;&lt;br /&gt;Вот в общем какая позиция у меня[mellow]  У стратегии снова стоп в 50 пунктов, а на скрине минус в 5 раз больше его. и как видно в стакане висит заявка - это и есть стоп.. Помогите разобраться пожалуйста, может я как то не так стаканы объявляю или еще что?&lt;br /&gt;&lt;br /&gt;Вот это весь код программы (точнее тока 1 файл, где все происходит) Не много прокоментировал, чтобы было понятнее разбирать мой замысел весь.&lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;&lt;strong&gt;Код&lt;/strong&gt;&lt;div class="innercode"&gt;&lt;pre class="brush:csharp"&gt;
namespace SampleSmart
{
	using System;
	using System.Collections.Generic;
	using System.ComponentModel;
	using System.Windows;
	using MessageBox = System.Windows.MessageBox;
    using System.Net;
    using System.Threading;

    using System.Linq;

    using Ecng.Collections;
    using Ecng.Common;

    using StockSharp.BusinessEntities;
    using StockSharp.Smart;
    using StockSharp.Algo;
    using StockSharp.Algo.Strategies;

	using Ecng.Xaml;

	public partial class MainWindow
	{
		private bool _isConnected;
        private bool _str = false;

		public SmartTrader Trader;

		private readonly SecuritiesWindow _securitiesWindow = new SecuritiesWindow();
		private readonly TradesWindow _tradesWindow = new TradesWindow();
		private readonly MyTradesWindow _myTradesWindow = new MyTradesWindow();
		private readonly OrdersWindow _ordersWindow = new OrdersWindow();
		private readonly PortfoliosWindow _portfoliosWindow = new PortfoliosWindow();
		private readonly PositionsWindow _positionsWindow = new PositionsWindow();
		private readonly StopOrdersWindow _stopOrdersWindow = new StopOrdersWindow();

        private static Security _instrument;
        private static Portfolio _portfolio;
        private static MarketDepth _depth;
        private static Position _position;
        buy _strategy;

        static int pos = 2; // 0 - buy; 1 - sell
        static decimal posPrice = 0;
        static long posId;

        public class buy : Strategy
        {
            int i;
            protected override void OnStarting()
            {
                this
                    .When(Security.MarketDepthChanged())
                    .Do(str);

                base.OnStarting();
            }

            public void str()
            {

                var totb = _depth.TotalBidsVolume;// общий объем покупки
                var tota = _depth.TotalAsksVolume;// общий объем продажи

                if (_position.CurrentValue != 0) // если позиция не равна 0, то будем считать, что заявок у нас нету
                {
                    i = 0;
                }

                if (i == 1) // если заявка есть, то...
                {
                    if ((_instrument.BestBid.Price - posPrice &amp;gt;= 50 &amp;amp;&amp;amp; pos == 0) || (posPrice - _instrument.BestAsk.Price &amp;gt;= 50 &amp;amp;&amp;amp; pos == 1)) // если цена ушла от заявки на 50 и более пунктов то закрываем ее
                    {
                        var orderClose = Trader.Orders.First(o =&amp;gt; o.Id == posId);
                        
                        /* получаем статус заявки */
                        int stateOrderClose = (int)orderClose.State; 
                        /*
                         * 0 - Не отправлена в торговую систему.
                         * 1 - Заявка принята биржей и активна.
                         * 2 - Заявка больше не активна на бирже (была полностью удовлетворена или снята из программы). 
                         * 3 - Заявка не принята торговой системой.
                        */

                        if (stateOrderClose == 1)
                        {
                            Trader.CancelOrder(orderClose);
                        }
                        if (stateOrderClose == 2)
                        {
                            i = 0;
                        }
                    }
                }

                if (_position.CurrentValue == 0 &amp;amp;&amp;amp; i == 0)
                {
                    if (totb &amp;gt; tota) // если общий объем покупок больше продаж, то продаем
                    {
                            i = 1;
                            shortPos();
                    }
                    else
                    {
                            i = 1;
                            longPos();
                    }
                }
            }

            public void longPos()
            {
                // создаем заявку для открытия длинной позиции
                var longPos = new Order
                {
                    Portfolio = _portfolio,
                    Price = _instrument.ShrinkPrice(_instrument.BestBid.Price),
                    Security = _instrument,
                    Volume = 1,
                    Direction = OrderDirections.Buy,
                };

                // регистрируем правило, отслеживающее появление новых сделок по заявке
                this
                .When(longPos.NewTrades())
                .Do(OnNewOrderTrades)
                .Periodical(() =&amp;gt; longPos.IsMatched());

                // отправляем заявку на регистрацию
                RegisterOrder(longPos);
                pos = 0;
                posPrice = _instrument.BestBid.Price;
            }

            public void shortPos()
            {
                // создаем заявку для открытия длинной позиции
                var shortPos = new Order
                {
                    Portfolio = _portfolio,
                    Price = _instrument.ShrinkPrice(_instrument.BestAsk.Price),
                    Security = _instrument,
                    Volume = 1,
                    Direction = OrderDirections.Sell,
                };

                // регистрируем правило, отслеживающее появление новых сделок по заявке
                this
                .When(shortPos.NewTrades())
                .Do(OnNewOrderTrades)
                .Periodical(() =&amp;gt; shortPos.IsMatched());

                // отправляем заявку на регистрацию
                RegisterOrder(shortPos);
                pos = 1;
                posPrice = _instrument.BestAsk.Price;
            }

            private void OnNewOrderTrades(IEnumerable&amp;lt;MyTrade&amp;gt; trades)
            {
                // для каждой сделки добавляем для защитную пару стратегии
                var protectiveStrategies = trades.Select(t =&amp;gt;
                {
                    // выставляет тейк-профит в 100 пунктов
                    var takeProfit = new TakeProfitStrategy(t, 100);

                    // выставляет стоп-лосс в 50 пунктов
                    var stopLoss = new StopLossStrategy(t, 50);

                    return new TakeProfitStopLossStrategy(takeProfit, stopLoss);
                });

                ChildStrategies.AddRange(protectiveStrategies);
            }
        }

		public MainWindow()
		{
			InitializeComponent();

			_ordersWindow.MakeHideable();
			_myTradesWindow.MakeHideable();
			_tradesWindow.MakeHideable();
			_securitiesWindow.MakeHideable();
			_stopOrdersWindow.MakeHideable();
			_portfoliosWindow.MakeHideable();
            _positionsWindow.MakeHideable();


			MainWindow.Instance = this;
		}
        
		protected override void OnClosing(CancelEventArgs e)
		{
			_ordersWindow.DeleteHideable();
			_myTradesWindow.DeleteHideable();
			_tradesWindow.DeleteHideable();
			_securitiesWindow.DeleteHideable();
			_stopOrdersWindow.DeleteHideable();
			_portfoliosWindow.DeleteHideable();
			_positionsWindow.DeleteHideable();
			
			_securitiesWindow.Close();
			_tradesWindow.Close();
			_myTradesWindow.Close();
			_stopOrdersWindow.Close();
			_ordersWindow.Close();
			_portfoliosWindow.Close();
			_positionsWindow.Close();

			if (Trader != null)
				Trader.Dispose();

			base.OnClosing(e);
		}

		public static MainWindow Instance { get; private set; }

		private void Connect_Click(object sender, RoutedEventArgs e)
		{
			if (!_isConnected)
			{
                // для теста выбираем бумагу
                const string secCode = &amp;quot;RIH2&amp;quot;;

                //Console.Write(&amp;quot;Введите логин: &amp;quot;);
                //var login = Console.ReadLine();
                var login = &amp;quot;ST12858&amp;quot;;

                //Console.Write(&amp;quot;Введите пароль: &amp;quot;);
                //var password = Console.ReadLine();
                var password = &amp;quot;8YDJ7E&amp;quot;;

                //Console.Write(&amp;quot;Введите номер счета, через который будет выставлена заявка: &amp;quot;);
                //var account = Console.ReadLine();
                var account = &amp;quot;ST12858-RF-01&amp;quot;;

                IPAddress ipadress = IPAddress.Parse(&amp;quot;95.131.26.246&amp;quot;);
                IPEndPoint ip = new IPEndPoint(ipadress, 8090);

				if (Trader == null)
				{
					// создаем шлюз
                    Trader = new SmartTrader(login, password, ip);

					// инициализируем механизм переподключения (будет автоматически соединяться
					// каждые 10 секунд, если шлюз потеряется связь с сервером)
					Trader.ReConnectionSettings.Interval = TimeSpan.FromSeconds(10);
					Trader.ReConnectionSettings.WorkingTime = Exchange.Rts.WorkingTime;
					Trader.ReConnectionSettings.ConnectionRestored += () =&amp;gt; this.GuiAsync(() =&amp;gt;
					{
						// разблокируем кнопку Экспорт (соединение было восстановлено)
						ChangeConnectStatus(true);
						MessageBox.Show(this, &amp;quot;Соединение восстановлено.&amp;quot;);
					});

					// подписываемся на событие успешного соединения
					Trader.Connected += () =&amp;gt;
					{
						// возводим флаг, что соединение установлено
						_isConnected = true;

						// разблокируем кнопку Экспорт
						this.GuiAsync(() =&amp;gt; ChangeConnectStatus(true));
					};

					// подписываемся на событие разрыва соединения
					Trader.ConnectionError += error =&amp;gt; this.GuiAsync(() =&amp;gt;
					{
						// заблокируем кнопку Экспорт (так как соединение было потеряно)
						ChangeConnectStatus(false);

						MessageBox.Show(this, error.ToString(), &amp;quot;Ошибка соединения&amp;quot;);	
					});

					Trader.ProcessDataError += error =&amp;gt; this.GuiAsync(() =&amp;gt; MessageBox.Show(this, error.ToString(), &amp;quot;Ошибка обработки данных&amp;quot;));

					Trader.NewSecurities += securities =&amp;gt; this.GuiAsync(() =&amp;gt; _securitiesWindow.AddSecurities(securities));
					Trader.NewMyTrades += trades =&amp;gt; this.GuiAsync(() =&amp;gt; _myTradesWindow.Trades.AddRange(trades));
					Trader.NewTrades += trades =&amp;gt; this.GuiAsync(() =&amp;gt; _tradesWindow.Trades.AddRange(trades));
					Trader.NewOrders += orders =&amp;gt; this.GuiAsync(() =&amp;gt; _ordersWindow.Orders.AddRange(orders));
					Trader.NewStopOrders += orders =&amp;gt; this.GuiAsync(() =&amp;gt; _stopOrdersWindow.Orders.AddRange(orders));
					Trader.NewPortfolios += portfolios =&amp;gt;
					{
						// регистрирует портфели на обновление данных
						portfolios.ForEach(Trader.RegisterPortfolio);

						_portfoliosWindow.Portfolios.AddRange(portfolios);
					};
					Trader.NewPositions += positions =&amp;gt; this.GuiAsync(() =&amp;gt; _positionsWindow.Positions.AddRange(positions));

					// подписываемся на событие о неудачной регистрации заявок
					Trader.OrdersRegisterFailed += OrdersFailed;
					// подписываемся на событие о неудачном снятии заявок
					Trader.OrdersCancelFailed += OrdersFailed;

					// подписываемся на событие о неудачной регистрации стоп-заявок
					Trader.StopOrdersRegisterFailed += OrdersFailed;
					// подписываемся на событие о неудачном снятии стоп-заявок
					Trader.StopOrdersCancelFailed += OrdersFailed;

					ShowSecurities.IsEnabled = ShowTrades.IsEnabled =
					ShowMyTrades.IsEnabled = ShowOrders.IsEnabled = 
					ShowPortfolios.IsEnabled = ShowStopOrders.IsEnabled = true;
				}

				Trader.Connect();

                var waitHandle = new AutoResetEvent(false);

                // подписываемся на все портфели-счета
                Trader.NewPortfolios += portfolios =&amp;gt;
                {
                    // необходимое условие работы в SmartCOM
                    portfolios.ForEach(Trader.RegisterPortfolio);

                    if (_portfolio == null)
                    {
                        _portfolio = portfolios.FirstOrDefault(p =&amp;gt; p.Name == account);
                    }
                };

                // подписываемся на событие появление инструментов
                Trader.NewPositions += positions =&amp;gt;
                {
                    if (_position == null)
                    {
                        _position = positions.FirstOrDefault();
                    }
                };
                Trader.NewSecurities += securities =&amp;gt;
                {
                    if (_instrument == null)
                    {
                        // находим инструмент и присваиваем ее переменной _instrument
                        _instrument = securities.FirstOrDefault(sec =&amp;gt; sec.Code == secCode &amp;amp;&amp;amp; sec.Type == SecurityTypes.Future);

                        if (_instrument != null)
                        {
                            Trader.RegisterQuotes(_instrument); // запускаем экспорт стакана
                        }
                    }
                };

                // подписываемся на событие обновления стакана
                Trader.QuotesChanged += depths =&amp;gt;
                {
                    if (_depth == null &amp;amp;&amp;amp; _instrument != null)
                    {
                        _depth = depths.FirstOrDefault(d =&amp;gt; d.Security == _instrument);
                    }
                };

                Trader.NewOrders += myTrades =&amp;gt;
						{
							foreach (var myTrade in myTrades)
							{
								var trade = myTrade;
								//Console.WriteLine(&amp;quot;Сделка {0} по цене {1} по бумаге {2} по объему {3} в {4}.{5}&amp;quot;, trade.Id, trade.Price, trade.Security.Code, trade.Volume, trade.Time, trade.Direction);
                                int _pos = (int)trade.Direction;
                                if (posPrice == trade.Price &amp;amp;&amp;amp; pos == _pos)
                                {
                                    posId = trade.Id;
                                }
							}
						};
			}
			else
			{
				Trader.Disconnect();
			}
		}

		private void OrdersFailed(IEnumerable&amp;lt;OrderFail&amp;gt; fails)
		{
			this.GuiAsync(() =&amp;gt;
			{
				foreach (var fail in fails)
					MessageBox.Show(this, fail.Error.ToString(), &amp;quot;Ошибка регистрации заявки&amp;quot;);
			});
		}

		private void ShowSecurities_Click(object sender, RoutedEventArgs e)
		{
			ShowOrHide(_securitiesWindow);
		}

		private void ShowTrades_Click(object sender, RoutedEventArgs e)
		{
			ShowOrHide(_tradesWindow);
		}

		private void ShowMyTrades_Click(object sender, RoutedEventArgs e)
		{
			ShowOrHide(_myTradesWindow);
		}

		private void ShowOrders_Click(object sender, RoutedEventArgs e)
		{
			ShowOrHide(_ordersWindow);
		}

		private void ShowPortfolios_Click(object sender, RoutedEventArgs e)
		{
			ShowOrHide(_portfoliosWindow);
			ShowOrHide(_positionsWindow);
		}

		private void ShowStopOrders_Click(object sender, RoutedEventArgs e)
		{
			ShowOrHide(_stopOrdersWindow);
		}

		private static void ShowOrHide(Window window)
		{
			if (window == null)
				throw new ArgumentNullException(&amp;quot;window&amp;quot;);

			if (window.Visibility == Visibility.Visible)
				window.Hide();
			else
				window.Show();
		}

        private void StrStart_Click(object sender, RoutedEventArgs e)
        {
            if (_str == false)
            {
                _strategy = new buy()
                {
                    Volume = 1,
                    Portfolio = _portfolio,
                    Security = _instrument,
                    Trader = Trader
                };
                _strategy.Start();
                _str = true;
                StrStart.Content = &amp;quot;Стоп&amp;quot;;
            }
            else
            {
                _strategy.Stop();
                _str = false;
                StrStart.Content = &amp;quot;Старт&amp;quot;;
            }
        }

        private void ChangeConnectStatus(bool isConnected)
		{
			_isConnected = isConnected;
			ConnectBtn.Content = isConnected ? &amp;quot;Отключиться&amp;quot; : &amp;quot;Подключиться&amp;quot;;
            StrStart.IsEnabled = isConnected;
            if (isConnected == false &amp;amp;&amp;amp; _str == true)
            {
                _strategy.Stop();
                StrStart.Content = &amp;quot;Старт&amp;quot;;
                
            }
            if (isConnected == true)
            {
                Trader.StartExport();
            }
		}
	}
}
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Спасибо большое</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/16019/</id>
    <title type="text">Насчет цикла я и не заметил, что там тоже i.. А вообще с помощью i я проверяю есть ли отложники (есл...</title>
    <published>2012-01-30T06:04:24Z</published>
    <updated>2012-01-30T06:04:24Z</updated>
    <author>
      <name>tmt</name>
      <uri>https://stocksharp.ru/users/6032/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">Насчет цикла я и не заметил, что там тоже i.. &lt;br /&gt;А вообще с помощью i я проверяю есть ли отложники (если есть, то 1, нет 2), а когда позиция не равна 0, то i=0 (те считаем что у нас нету отложников)</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/16018/</id>
    <title type="text">Что-то ты намутил с int i. В for это переменная цикла, в if-ах принимает два значения - 0 и 1, т.е. ...</title>
    <published>2012-01-30T04:38:50Z</published>
    <updated>2012-01-30T04:38:50Z</updated>
    <author>
      <name>BigBen</name>
      <uri>https://stocksharp.ru/users/6302/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">Что-то ты намутил с int i. &lt;br /&gt;В for это переменная цикла, в if-ах принимает два значения - 0 и 1, т.е. в них это логическая переменная.&lt;br /&gt;Если (var objem = _position.CurrentValue) == 0, то чему равно i ? Какой из if-ов выполнится?&lt;br /&gt;</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/16009/</id>
    <title type="text">Вновь хочу вернуться к этой теме, т.к. у меня СЛ не срабатывает! (заявка то выставляется, но цена уж...</title>
    <published>2012-01-28T19:23:02Z</published>
    <updated>2012-01-28T19:23:02Z</updated>
    <author>
      <name>tmt</name>
      <uri>https://stocksharp.ru/users/6032/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">Вновь хочу вернуться к этой теме, т.к. у меня СЛ не срабатывает! (заявка то выставляется, но цена уже уша от нее.. и позиция может уйти далеко в минус!) В чем может быть ошибка? на форуме где то читал, что у кого то закрывало минус 190, когда СЛ всего 10.. а у меня не закрывает&lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;&lt;strong&gt;Код&lt;/strong&gt;&lt;div class="innercode"&gt;&lt;pre class="brush:csharp"&gt;
        public class buy : Strategy
        {
            int i;
            protected override void OnStarting()
            {
                this
                    .When(Security.MarketDepthChanged())
                    .Do(str);

                base.OnStarting();
            }

            public void str()
            {

                var totb = _depth.TotalBidsVolume;// общий объем продажи
                var tota = _depth.TotalAsksVolume;// общий объем покупки

                int maxaskv = 0;// максимальная покупка по объему
                int maxbidv = 0;// максимальная продажа по объему
                int maxaskp = 0;// цена максимальной продажи по объему
                int maxbidp = 0;// цена максимальной покупки по объему
                var asks = _depth.Asks;
                var bids = _depth.Bids;
                for (int i = 0; i &amp;lt; 50; i++)
                {
                    if (asks[i].Volume &amp;gt; maxaskv) { maxaskv = (int)asks[i].Volume; maxaskp = (int)asks[i].Price;  }
                    if (bids[i].Volume &amp;gt; maxbidv) { maxbidv = (int)bids[i].Volume; maxbidp = (int)bids[i].Price;  }
                }

                var objem = _position.CurrentValue;

                if (objem != 0)
                {
                    i = 0;
                }

                if (i == 1)
                {
                    if ((_instrument.BestBid.Price - posPrice &amp;gt;= 50 &amp;amp;&amp;amp; pos == 0) || (posPrice - _instrument.BestAsk.Price &amp;gt;= 50 &amp;amp;&amp;amp; pos == 1))
                    {
                        var orderClose = Trader.Orders.First(o =&amp;gt; o.Id == posId);
                        
                        /* получаем статус заявки */
                        int stateOrderClose = (int)orderClose.State; 
                        /*
                         * 0 - Не отправлена в торговую систему.
                         * 1 - Заявка принята биржей и активна.
                         * 2 - Заявка больше не активна на бирже (была полностью удовлетворена или снята из программы). 
                         * 3 - Заявка не принята торговой системой.
                        */

                        if (stateOrderClose == 1)
                        {
                            Trader.CancelOrder(orderClose);
                        }
                        if (stateOrderClose == 2)
                        {
                            i = 0;
                        }
                    }
                }

                if (objem == 0 &amp;amp;&amp;amp; i == 0)
                {
                    i = 1;
                    if (totb &amp;gt; tota) // если общий объем продаж больше покупок, то продаем
                    {
                        if ()
                        {
                            shortPos();
                        }
                    }
                    else
                    {
                        if ()
                        {
                            longPos();
                        }
                    }
                }
            }

            public void longPos()
            {
                // создаем заявку для открытия длинной позиции
                var longPos = new Order
                {
                    Portfolio = _portfolio,
                    Price = _instrument.ShrinkPrice(_instrument.BestBid.Price),
                    Security = _instrument,
                    Volume = 1,
                    Direction = OrderDirections.Buy,
                };

                // регистрируем правило, отслеживающее появление новых сделок по заявке
                this
                .When(longPos.NewTrades())
                .Do(OnNewOrderTrades)
                .Periodical(() =&amp;gt; longPos.IsMatched());

                // отправляем заявку на регистрацию
                RegisterOrder(longPos);
                pos = 0;
                posPrice = _instrument.BestBid.Price;
            }

            public void shortPos()
            {
                // создаем заявку для открытия длинной позиции
                var shortPos = new Order
                {
                    Portfolio = _portfolio,
                    Price = _instrument.ShrinkPrice(_instrument.BestAsk.Price),
                    Security = _instrument,
                    Volume = 1,
                    Direction = OrderDirections.Sell,
                };

                // регистрируем правило, отслеживающее появление новых сделок по заявке
                this
                .When(shortPos.NewTrades())
                .Do(OnNewOrderTrades)
                .Periodical(() =&amp;gt; shortPos.IsMatched());

                // отправляем заявку на регистрацию
                RegisterOrder(shortPos);
                pos = 1;
                posPrice = _instrument.BestAsk.Price;
            }

            private void OnNewOrderTrades(IEnumerable&amp;lt;MyTrade&amp;gt; trades)
            {
                // для каждой сделки добавляем для защитную пару стратегии
                var protectiveStrategies = trades.Select(t =&amp;gt;
                {
                    // выставляет тейк-профит в 100 пунктов
                    var takeProfit = new TakeProfitStrategy(t, 100);

                    // выставляет стоп-лосс в 50 пунктов
                    var stopLoss = new StopLossStrategy(t, 50);

                    return new TakeProfitStopLossStrategy(takeProfit, stopLoss);
                });

                ChildStrategies.AddRange(protectiveStrategies);
            }
        }&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;Спасибо</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/15803/</id>
    <title type="text">Спасибо, все получилось! выложу готовый код, вдруг кому из новеньких понадобится)) namespace SampleS...</title>
    <published>2012-01-19T17:13:21Z</published>
    <updated>2012-01-19T17:13:21Z</updated>
    <author>
      <name>tmt</name>
      <uri>https://stocksharp.ru/users/6032/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">Спасибо, все получилось! выложу готовый код, вдруг кому из новеньких понадобится))&lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;&lt;strong&gt;Код&lt;/strong&gt;&lt;div class="innercode"&gt;&lt;pre class="brush:csharp"&gt;
namespace SampleSmartConsole
{
	using System;
    using System.Net;
	using System.Linq;
	using System.Threading;
    using System.Collections.Generic;

	using Ecng.Collections;
	using Ecng.Common;

	using StockSharp.BusinessEntities;
	using StockSharp.Smart;
	using StockSharp.Algo;
    using StockSharp.Algo.Strategies;

	class Program
	{
		private static Security _instrument;
		private static Portfolio _portfolio;
        private static MarketDepth _depth;
        private static Position _position;
        //private static buy _strategy;

        public class buy : Strategy
        {
            protected override void OnStarting()
            {
                this
                    .When(Security.MarketDepthChanged())
                    .Do(OpenPosition);

                //OpenPosition();
                base.OnStarting();
            }

            /*protected ProcessResults OnProcess()
            {
                OpenPosition();
                return ProcessResults.Continue;
            }*/

            public void OpenPosition()
            {
                var objem = _position.CurrentValue;
                if (objem == 0)
                {
                    // создаем заявку для открытия длинной позиции
                    //var longPos = this.BuyAtMarket();
                    var longPos = new Order
                    {
                        Portfolio = _portfolio,
                        Price = _instrument.ShrinkPrice(_instrument.BestAsk.Price),
                        Security = _instrument,
                        Volume = 1,
                        Direction = OrderDirections.Sell,
                    };

                    // регистрируем правило, отслеживающее появление новых сделок по заявке
                    this
                    .When(longPos.NewTrades())
                    .Do(OnNewOrderTrades)
                    .Periodical(() =&amp;gt; longPos.IsMatched());

                    // отправляем заявку на регистрацию
                    RegisterOrder(longPos);
                }
                //base.OpenPosition();
            }

            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(takeProfit, stopLoss);
                });

                ChildStrategies.AddRange(protectiveStrategies);
            }
        }

		static void Main()
		{
			try
			{
				// для теста выбираем бумагу
				const string secCode = &amp;quot;RIH2&amp;quot;;

				//Console.Write(&amp;quot;Введите логин: &amp;quot;);
				//var login = Console.ReadLine();
                var login = &amp;quot;ST12858&amp;quot;;

				//Console.Write(&amp;quot;Введите пароль: &amp;quot;);
				//var password = Console.ReadLine();
                var password = &amp;quot;8YDJ7E&amp;quot;;

				//Console.Write(&amp;quot;Введите номер счета, через который будет выставлена заявка: &amp;quot;);
				//var account = Console.ReadLine();
                var account = &amp;quot;ST12858-RF-01&amp;quot;;

                IPAddress ipadress = IPAddress.Parse(&amp;quot;95.131.26.246&amp;quot;);
                IPEndPoint ip = new IPEndPoint(ipadress, 8090);
                
				using (var waitHandle = new AutoResetEvent(false))
				{
					// создаем шлюз к Smart-у
					using (var trader = new SmartTrader(login, password, ip))
					{
						// подписываемся на событие успешного подключения
						// все действия необходимо производить только после подключения
						trader.Connected += () =&amp;gt;
						{
							Console.WriteLine(&amp;quot;Подключение было произведено успешно.&amp;quot;);

							// извещаем об успешном соединени
							waitHandle.Set();
						};

						Console.WriteLine(&amp;quot;Производим подключение...&amp;quot;);

						trader.Connect();

						// дожидаемся события об успешном соединении
						waitHandle.WaitOne();

						// подписываемся на все портфели-счета
						trader.NewPortfolios += portfolios =&amp;gt;
						{
							// необходимое условие работы в SmartCOM
							portfolios.ForEach(trader.RegisterPortfolio);

							if (_portfolio == null)
							{
								_portfolio = portfolios.FirstOrDefault(p =&amp;gt; p.Name == account);

								if (_portfolio != null)
								{
									Console.WriteLine(&amp;quot;Портфель {0} появился.&amp;quot;, account);

                                    if (_instrument != null &amp;amp;&amp;amp; _depth != null &amp;amp;&amp;amp; _position != null)
										waitHandle.Set();
								}
							}
						};

						// подписываемся на событие появление инструментов
                        trader.NewPositions += positions =&amp;gt;
                        {
                            if (_position == null)
                            {
                                _position = positions.FirstOrDefault();
                                //_position = positions.FirstOrDefault(sec =&amp;gt; sec.Security.Code == secCode);
                                if (_position != null)
                                {
                                    Console.WriteLine(&amp;quot;Информация о портфеле появилась.&amp;quot;);
                                    if (_portfolio != null &amp;amp;&amp;amp; _depth != null &amp;amp;&amp;amp; _instrument != null)
                                        waitHandle.Set();
                                }
                            }
                        };
						trader.NewSecurities += securities =&amp;gt;
						{
							if (_instrument == null)
							{
                                // находим инструмент и присваиваем ее переменной _instrument
                                _instrument = securities.FirstOrDefault(sec =&amp;gt; sec.Code == secCode &amp;amp;&amp;amp; sec.Type == SecurityTypes.Future);

								if (_instrument != null)
								{
									Console.WriteLine(&amp;quot;Инструмент появился.&amp;quot;);
                                    trader.RegisterQuotes(_instrument); // запускаем экспорт стакана
                                    if (_portfolio != null &amp;amp;&amp;amp; _depth != null &amp;amp;&amp;amp; _position != null)
										waitHandle.Set();
								}
							}
						};

                        // подписываемся на событие обновления стакана
                        trader.QuotesChanged += depths =&amp;gt;
                        {
                            if (_depth == null &amp;amp;&amp;amp; _instrument != null)
                            {
                                _depth = depths.FirstOrDefault(d =&amp;gt; d.Security == _instrument);

                                if (_depth != null)
                                {
                                    Console.WriteLine(&amp;quot;Стакан появился.&amp;quot;);

                                    if (_portfolio != null &amp;amp;&amp;amp; _position != 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);
							}
						};
                        
						Console.WriteLine(&amp;quot;Дожидаемся появления в программе инструмента и портфеля {0}...&amp;quot;.Put(account));

						// запускаем экспорт по инструментам и портфелям
						trader.StartExport();

						// дожидаемся появления портфеля и инструмента
						waitHandle.WaitOne();

						trader.SecuritiesChanged += securities =&amp;gt;
						{
							// если инструмент хоть раз изменился (по нему пришли актуальные данные)
							if (securities.Contains(_instrument))
								waitHandle.Set();
						};

						Console.WriteLine(&amp;quot;Дожидаемся обновления данных по инструменту...&amp;quot;);

						// запускаем обновление по инструменту
						trader.RegisterSecurity(_instrument);
						waitHandle.WaitOne();

						// запоминаем первоначальное значение середины спреда
                        var totb = _depth.TotalBidsVolume;
                        var tota = _depth.TotalAsksVolume;

                        int maxaskv = 0;
                        int maxbidv = 0;
                        int maxaskp = 0;
                        int maxbidp = 0;
                        var asks = _depth.Asks;
                        var bids = _depth.Bids;
                        for (int i = 0; i &amp;lt; 50; i++)
                        {
                            if (asks[i].Volume &amp;gt; maxaskv) { maxaskv = (int)asks[i].Volume; maxaskp = (int)asks[i].Price; }
                            if (bids[i].Volume &amp;gt; maxbidv) { maxbidv = (int)bids[i].Volume; maxbidp = (int)bids[i].Price; }
                            //Console.WriteLine(&amp;quot;asks {0}&amp;quot;, asks[i].Price);
                            //Console.WriteLine(&amp;quot;asks {0}&amp;quot;, asks[i].Volume);
                        }
                        Console.WriteLine(&amp;quot;maxask {0}&amp;quot;, maxaskv);
                        Console.WriteLine(&amp;quot;maxbid {0}&amp;quot;, maxbidv);

						if (_instrument.BestBid == null)
							throw new Exception(&amp;quot;Нет лучшего бида для котировки.&amp;quot;);

                        Console.WriteLine(&amp;quot;общий объем bid {0}&amp;quot;, totb);
                        Console.WriteLine(&amp;quot;общий объем ask {0}&amp;quot;, tota);

                        buy _strategy = new buy()
                        {
                            Volume = 1,
                            Portfolio = _portfolio,
                            Security = _instrument,
                            Trader = trader
                        };
                        _strategy.Start();


                        //for (int i = 0; i &amp;lt;= 50; i++)
                        while(true)
                        {
                            var objem = _position.CurrentValue;
                            Console.WriteLine(&amp;quot;открытые позиции {0}&amp;quot;, objem);

                            // ждем 1 секунду
                            Thread.Sleep(1000);
                        }

						// останавливаем экспорт
						trader.StopExport();
                        Console.WriteLine(&amp;quot;StopExport&amp;quot;);
                        Console.ReadKey();
					}
				}
			}
			catch (Exception ex)
			{
				Console.WriteLine(ex);
                Console.WriteLine(&amp;quot;catch&amp;quot;);
                Console.ReadKey();
			}
		}
	}
}&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.ru/posts/m/15786/</id>
    <title type="text">похоже не передали в стратегию инструмент попробуйте что-то вроде Strategy _strategy = new buy() { V...</title>
    <published>2012-01-18T19:25:08Z</published>
    <updated>2012-01-18T19:25:08Z</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;fau &lt;a href="https://stocksharp.ru/posts/m/15785/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;похоже не передали в стратегию инструмент&lt;br /&gt;попробуйте что-то вроде&lt;br /&gt;Strategy _strategy = new buy()&lt;br /&gt;{&lt;br /&gt;Volume = 1,&lt;br /&gt;Portfolio = portfolio,&lt;br /&gt;Security = security,&lt;br /&gt;Trader = _trader&lt;br /&gt;};&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;Спасибо огромное! вроде как заработало [biggrin] завтра протестирую</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/15785/</id>
    <title type="text">похоже не передали в стратегию инструмент попробуйте что-то вроде Strategy _strategy = new buy() { V...</title>
    <published>2012-01-18T18:53:53Z</published>
    <updated>2012-01-18T18:53:53Z</updated>
    <author>
      <name>fau</name>
      <uri>https://stocksharp.ru/users/27584/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">похоже не передали в стратегию инструмент&lt;br /&gt;попробуйте что-то вроде&lt;br /&gt;Strategy _strategy = new buy()&lt;br /&gt;{&lt;br /&gt;Volume = 1,&lt;br /&gt;Portfolio = portfolio,&lt;br /&gt;Security = security,&lt;br /&gt;Trader = _trader&lt;br /&gt;};</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/15779/</id>
    <title type="text">а почему у вас в процедуре OpenPosition регистрация заявки после ожидания сделок по ней? как выяснил...</title>
    <published>2012-01-18T14:51:19Z</published>
    <updated>2012-01-18T14:51:19Z</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;fau &lt;a href="https://stocksharp.ru/posts/m/15777/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;fau &lt;a href="https://stocksharp.ru/posts/m/15728/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;а почему у вас в процедуре OpenPosition регистрация заявки после ожидания сделок по ней?&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;как выяснилось все правильно&lt;br /&gt;сначала создается правило, а работать оно будет после регистрации заявки&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;а по поводу ошибки которая сейчас, не знаете как помочь?</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/15777/</id>
    <title type="text">а почему у вас в процедуре OpenPosition регистрация заявки после ожидания сделок по ней? как выяснил...</title>
    <published>2012-01-18T14:46:38Z</published>
    <updated>2012-01-18T14:46:38Z</updated>
    <author>
      <name>fau</name>
      <uri>https://stocksharp.ru/users/27584/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;fau &lt;a href="https://stocksharp.ru/posts/m/15728/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;а почему у вас в процедуре OpenPosition регистрация заявки после ожидания сделок по ней?&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;как выяснилось все правильно&lt;br /&gt;сначала создается правило, а работать оно будет после регистрации заявки</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/15751/</id>
    <title type="text">В общем вот так сделал protected override void OnStarting() { this .When(base.Security.Changed()) .D...</title>
    <published>2012-01-18T06:23:48Z</published>
    <updated>2012-01-18T06:29:17Z</updated>
    <author>
      <name>tmt</name>
      <uri>https://stocksharp.ru/users/6032/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">В общем вот так сделал&lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;&lt;strong&gt;Код&lt;/strong&gt;&lt;div class="innercode"&gt;&lt;pre class="brush:csharp"&gt;
            protected override void OnStarting()
            {
                this
            .When(base.Security.Changed())
            .Do(OpenPosition);
                //OpenPosition();
                base.OnStarting();
            }

            /*protected ProcessResults OnProcess()
            {
                OpenPosition();
                return ProcessResults.Continue;
            }*/&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;теперь выводит&lt;br /&gt;&lt;a href='http://s2.ipicture.ru/uploads/20120118/OV54h9J1.png' class='lightview' data-lightview-options="skin: 'mac'" data-lightview-group='mixed'&gt;&lt;img src="http://s2.ipicture.ru/uploads/20120118/OV54h9J1.png" style='max-width: 600px;' alt=""/&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;на 262 строке _strategy.Start();&lt;br /&gt;а 30 строка. там this из процедуры OnStarting()&lt;br /&gt;&lt;br /&gt;Вобщем думаю что проблема с правилами для стратегии.. щас почитаю в докуметакции про правила</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/15750/</id>
    <title type="text">а почему у вас в процедуре OpenPosition регистрация заявки после ожидания сделок по ней? Я взял конс...</title>
    <published>2012-01-18T05:36:24Z</published>
    <updated>2012-01-18T05:36:24Z</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;fau &lt;a href="https://stocksharp.ru/posts/m/15728/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;а почему у вас в процедуре OpenPosition регистрация заявки после ожидания сделок по ней?&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;Я взял консольный пример и из него пытаюсь сделать нужное мне, ну и собственно учусь, как это сделать (возможно там куча ошибок, но я с такими простыми разобраться не мог... И спасибо за замечание!)&lt;br /&gt;&lt;br /&gt;BigBen, Я походу разобрался! по крайней мере ошибки при запуске нету, посмотрим через пол часика, откроет ли он позицию (ну и собственно СЛ и ТП)</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/15728/</id>
    <title type="text">а почему у вас в процедуре OpenPosition регистрация заявки после ожидания сделок по ней?</title>
    <published>2012-01-17T17:19:14Z</published>
    <updated>2012-01-17T17:19:14Z</updated>
    <author>
      <name>fau</name>
      <uri>https://stocksharp.ru/users/27584/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">а почему у вас в процедуре OpenPosition регистрация заявки после ожидания сделок по ней?</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/15727/</id>
    <title type="text">Почитай про событийную модель, там и пример есть http://stocksharp.com/doc/html/8c0327db-494a-4fe0-a...</title>
    <published>2012-01-17T17:16:20Z</published>
    <updated>2012-01-17T17:16:20Z</updated>
    <author>
      <name>BigBen</name>
      <uri>https://stocksharp.ru/users/6302/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">Почитай про событийную модель, там и пример есть&lt;br /&gt;&lt;a href="http://stocksharp.com/doc/html/8c0327db-494a-4fe0-aba8-0d4b93dea60e.htm
" title="http://stocksharp.com/doc/html/8c0327db-494a-4fe0-aba8-0d4b93dea60e.htm
"&gt;http://stocksharp.com/do...0-aba8-0d4b93dea60e.htm
&lt;/a&gt;&lt;br /&gt;</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/15688/</id>
    <title type="text">А где мне искать, какой шлюз? я почитал, и в примерах шлюз создается var trader = new SmartTrader(lo...</title>
    <published>2012-01-16T18:30:31Z</published>
    <updated>2012-01-16T18:30:31Z</updated>
    <author>
      <name>tmt</name>
      <uri>https://stocksharp.ru/users/6032/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">А где мне искать, какой шлюз? я почитал, и в примерах шлюз создается &lt;div class="code"&gt;&lt;strong&gt;Код&lt;/strong&gt;&lt;div class="innercode"&gt;&lt;pre class="brush:csharp"&gt;
var trader = new SmartTrader(login, password, ip)&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt; а инициализация вроде как понятно. как ее делать..&lt;br /&gt;&amp;lt;имя класса&amp;gt; &amp;lt;объект&amp;gt; = new &amp;lt;класс&amp;gt;</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
</feed>