Alexander 
					 
					 
					 
					 
					
					
						
						
					 
				 | 
				
					Date: 1/16/2012
					
					
			
					 
					 
					
	
			Советую хотя бы раз прочитать документацию. Количество подобных вопросов уменьшится. :) В документации и примерах есть как именно инициализировать, создавать и запускать стратегию.
			
			
			
			
		
 
				 | 
			
			
				| 
					
				 | 
				
					
	
		| 
			Thanks:
		 | 
		
		
			 
		 | 
	 
 
				 | 
			
			
				| 
					
				 | 
			
		
			
  | 
		
			
				
					tmt 
					 
					 
					 
					 
					
					
						
						
					 
				 | 
				
					Date: 1/16/2012
					
					
			
					 
					 
					
	
			А где мне искать, какой шлюз? я почитал, и в примерах шлюз создается  Code
var trader = new SmartTrader(login, password, ip) 
  а инициализация вроде как понятно. как ее делать.. <имя класса> <объект> = new <класс>
			
			
			
			
		
  
				 | 
			
			
				| 
					
				 | 
				
					
	
		| 
			Thanks:
		 | 
		
		
			 
		 | 
	 
 
				 | 
			
			
				| 
					
				 | 
			
		
			
  | 
		
			
				
					BigBen 
					 
					 
					 
					 
					
					
						
						
					 
				 | 
				
					Date: 1/17/2012
					
					
			
					 
					 
					
				 | 
			
			
				| 
					
				 | 
				
					
	
		| 
			Thanks:
		 | 
		
		
			 
		 | 
	 
 
				 | 
			
			
				| 
					
				 | 
			
		
			
  | 
		
			
				
					tmt 
					 
					 
					 
					 
					
					
						
						
					 
				 | 
				
					Date: 1/17/2012
					
					
			
					 
					 
					
	
			Из цикла я давно убрал, поставил перед (да и цикл думаю можно убрать, если класс будет повторяться)
			
			
			
			
		
  
				 | 
			
			
				| 
					
				 | 
				
					
	
		| 
			Thanks:
		 | 
		
		
			 
		 | 
	 
 
				 | 
			
			
				| 
					
				 | 
			
		
			
  | 
		
			
				
					BigBen 
					 
					 
					 
					 
					
					
						
						
					 
				 | 
				
					Date: 1/17/2012
					
					
			
					 
					 
					
	
			Не знаю, как в последней версии программы, но по тексту в  http://stocksharp.com/posts/m/15613/ не видно, чтобы вызывался метод OnStarting(), т.е. отсутствует protected override void OnStarting() { ......................................................... }
			
			
			
			
		
  
				 | 
			
			
				| 
					
				 | 
				
					
	
		| 
			Thanks:
		 | 
		
		
			 
		 | 
	 
 
				 | 
			
			
				| 
					
				 | 
			
		
			
  | 
		
			
				
					tmt 
					 
					 
					 
					 
					
					
						
						
					 
				 | 
				
					Date: 1/17/2012
					
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
								 
							 | 
						 
					 
			
					 
					 
					
	
			BigBen Не знаю, как в последней версии программы, но по тексту в  http://stocksharp.com/posts/m/15613/ не видно, чтобы вызывался метод OnStarting(), т.е. отсутствует protected override void OnStarting() { ......................................................... }  protected ProcessResults OnProcess() тоже не было у меня.. А что то должно быть в этом OnStarting() Ниже код последней версии И спасибо большое что помогаешь! Code
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(() => longPos.IsMatched());
                    // отправляем заявку на регистрацию
                    RegisterOrder(longPos);
                }
                //base.OpenPosition();
            }
            private void OnNewOrderTrades(IEnumerable<MyTrade> trades)
            {
                // для каждой сделки добавляем для защитную пару стратегии
                var protectiveStrategies = trades.Select(t =>
                {
                    // выставляет тейк-профит в 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 = "RIH2";
				//Console.Write("Введите логин: ");
				//var login = Console.ReadLine();
                var login = "ST12858";
				//Console.Write("Введите пароль: ");
				//var password = Console.ReadLine();
                var password = "8YDJ7E";
				//Console.Write("Введите номер счета, через который будет выставлена заявка: ");
				//var account = Console.ReadLine();
                var account = "ST12858-RF-01";
                IPAddress ipadress = IPAddress.Parse("95.131.26.246");
                IPEndPoint ip = new IPEndPoint(ipadress, 8090);
                
				using (var waitHandle = new AutoResetEvent(false))
				{
					// создаем шлюз к Smart-у
					using (var trader = new SmartTrader(login, password, ip))
					{
						// подписываемся на событие успешного подключения
						// все действия необходимо производить только после подключения
						trader.Connected += () =>
						{
							Console.WriteLine("Подключение было произведено успешно.");
							// извещаем об успешном соединени
							waitHandle.Set();
						};
						Console.WriteLine("Производим подключение...");
						trader.Connect();
						// дожидаемся события об успешном соединении
						waitHandle.WaitOne();
						// подписываемся на все портфели-счета
						trader.NewPortfolios += portfolios =>
						{
							// необходимое условие работы в SmartCOM
							portfolios.ForEach(trader.RegisterPortfolio);
							if (_portfolio == null)
							{
								_portfolio = portfolios.FirstOrDefault(p => p.Name == account);
								if (_portfolio != null)
								{
									Console.WriteLine("Портфель {0} появился.", account);
                                    if (_instrument != null && _depth != null && _position != null)
										waitHandle.Set();
								}
							}
						};
						// подписываемся на событие появление инструментов
                        trader.NewPositions += positions =>
                        {
                            if (_position == null)
                            {
                                _position = positions.FirstOrDefault();
                                //_position = positions.FirstOrDefault(sec => sec.Security.Code == secCode);
                                if (_position != null)
                                {
                                    Console.WriteLine("Информация о портфеле появилась.");
                                    if (_portfolio != null && _depth != null && _instrument != null)
                                        waitHandle.Set();
                                }
                            }
                        };
						trader.NewSecurities += securities =>
						{
							if (_instrument == null)
							{
                                // находим инструмент и присваиваем ее переменной _instrument
                                _instrument = securities.FirstOrDefault(sec => sec.Code == secCode && sec.Type == SecurityTypes.Future);
								if (_instrument != null)
								{
									Console.WriteLine("Инструмент появился.");
                                    trader.RegisterQuotes(_instrument); // запускаем экспорт стакана
                                    if (_portfolio != null && _depth != null && _position != null)
										waitHandle.Set();
								}
							}
						};
                        // подписываемся на событие обновления стакана
                        trader.QuotesChanged += depths =>
                        {
                            if (_depth == null && _instrument != null)
                            {
                                _depth = depths.FirstOrDefault(d => d.Security == _instrument);
                                if (_depth != null)
                                {
                                    Console.WriteLine("Стакан появился.");
                                    if (_portfolio != null && _position != null)
                                       waitHandle.Set();
                                }
                            }
                        };
                        
						// подписываемся на событие появления моих новых сделок
						trader.NewMyTrades += myTrades =>
						{
							foreach (var myTrade in myTrades)
							{
								var trade = myTrade.Trade;
								Console.WriteLine("Сделка {0} по цене {1} по бумаге {2} по объему {3} в {4}.", trade.Id, trade.Price, trade.Security.Code, trade.Volume, trade.Time);
							}
						};
                        
						Console.WriteLine("Дожидаемся появления в программе инструмента и портфеля {0}...".Put(account));
						// запускаем экспорт по инструментам и портфелям
						trader.StartExport();
						// дожидаемся появления портфеля и инструмента
						waitHandle.WaitOne();
						trader.SecuritiesChanged += securities =>
						{
							// если инструмент хоть раз изменился (по нему пришли актуальные данные)
							if (securities.Contains(_instrument))
								waitHandle.Set();
						};
						Console.WriteLine("Дожидаемся обновления данных по инструменту...");
						// запускаем обновление по инструменту
						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 < 50; i++)
                        {
                            if (asks[i].Volume > maxaskv) { maxaskv = (int)asks[i].Volume; maxaskp = (int)asks[i].Price; }
                            if (bids[i].Volume > maxbidv) { maxbidv = (int)bids[i].Volume; maxbidp = (int)bids[i].Price; }
                        }
                        Console.WriteLine("maxask {0}", maxaskv);
                        Console.WriteLine("maxbid {0}", maxbidv);
						if (_instrument.BestBid == null)
							throw new Exception("Нет лучшего бида для котировки.");
                        Console.WriteLine("общий объем bid {0}", totb);
                        Console.WriteLine("общий объем ask {0}", tota);
                        buy _strategy = new buy();
                        _strategy.Start();
                        for (int i = 0; i <= 50; i++)
                        {
                            var objem = _position.CurrentValue;
                            Console.WriteLine("открытые позиции {0}", objem);
                            // ждем 1 секунду
                            Thread.Sleep(1000);
                        }
						// останавливаем экспорт
						trader.StopExport();
                        Console.WriteLine("StopExport");
                        Console.ReadKey();
					}
				}
			}
			catch (Exception ex)
			{
				Console.WriteLine(ex);
                Console.WriteLine("catch");
                Console.ReadKey();
			}
		}
	}
}
 
			
			
			
			
		
 
				 | 
			
			
				| 
					
				 | 
				
					
	
		| 
			Thanks:
		 | 
		
		
			 
		 | 
	 
 
				 | 
			
			
				| 
					
				 | 
			
		
			
  | 
		
			
				
					BigBen 
					 
					 
					 
					 
					
					
						
						
					 
				 | 
				
					Date: 1/17/2012
					
					
			
					 
					 
					
				 | 
			
			
				| 
					
				 | 
				
					
	
		| 
			Thanks:
		 | 
		
		
			 
		 | 
	 
 
				 | 
			
			
				| 
					
				 | 
			
		
			
  | 
		
			
				
					fau 
					 
					 
					 
					 
					
					
						
						
					 
				 | 
				
					Date: 1/17/2012
					
					
			
					 
					 
					
	
			а почему у вас в процедуре OpenPosition регистрация заявки после ожидания сделок по ней?
			
			
			
			
		
 
				 | 
			
			
				| 
					
				 | 
				
					
	
		| 
			Thanks:
		 | 
		
		
			 
		 | 
	 
 
				 | 
			
			
				| 
					
				 | 
			
		
			
  | 
		
			
				
					tmt 
					 
					 
					 
					 
					
					
						
						
					 
				 | 
				
					Date: 1/18/2012
					
					
			
					 
					 
					
	
			fau а почему у вас в процедуре OpenPosition регистрация заявки после ожидания сделок по ней?  Я взял консольный пример и из него пытаюсь сделать нужное мне, ну и собственно учусь, как это сделать (возможно там куча ошибок, но я с такими простыми разобраться не мог... И спасибо за замечание!) BigBen, Я походу разобрался! по крайней мере ошибки при запуске нету, посмотрим через пол часика, откроет ли он позицию (ну и собственно СЛ и ТП)
			
			
			
			
		
  
				 | 
			
			
				| 
					
				 | 
				
					
	
		| 
			Thanks:
		 | 
		
		
			 
		 | 
	 
 
				 | 
			
			
				| 
					
				 | 
			
		
			
  | 
		
			
				
					tmt 
					 
					 
					 
					 
					
					
						
						
					 
				 | 
				
					Date: 1/18/2012
					
					
			
					 
					 
					
	
			В общем вот так сделал Code
            protected override void OnStarting()
            {
                this
            .When(base.Security.Changed())
            .Do(OpenPosition);
                //OpenPosition();
                base.OnStarting();
            }
            /*protected ProcessResults OnProcess()
            {
                OpenPosition();
                return ProcessResults.Continue;
            }*/
 теперь выводит  на 262 строке _strategy.Start(); а 30 строка. там this из процедуры OnStarting() Вобщем думаю что проблема с правилами для стратегии.. щас почитаю в докуметакции про правила
			
			
			
			
		
  
				 | 
			
			
				| 
					
				 | 
				
					
	
		| 
			Thanks:
		 | 
		
		
			 
		 | 
	 
 
				 | 
			
			
				| 
					
				 |