| Alexander 
 
   
 
						
						
					 | Дата: 22.07.2011 
 
 
	
			Pavel-NS Alexander Блокирует коллекцию для изменения и запускает передаваемую функцию над коллекцией.
 Спасибо за ответ. А есть ли где более полная документация, чем chm-файл?? Не нашёл какой-либо информации по "ecng" пространству имён ни в доках, а также при просмотре из студии нет никаких комментариев. Ecng никак не комментирован пока, да. Полнее чем в chm в любом случае нет - это полная дока которая строится по комментариям.
			
			
			
			
		
 | 
			
				|  | 
	
		| Спасибо: |   |  | 
			
				|  | 
		
			| 
 | 
		
			
				| vader 
 
   
 
						
						
					 | Дата: 25.07.2011 
 
 
	
			Подскажите ,пожалуйста. Пытаюсь создать событийную стратегию и почему-то не происходит  действия, активизирующееся при наступлении условия. Условие добавляется в список правил. Пробовал разные условия, результат нулевой. Результат проверки Verifir – все в порядке. версия библиотеки - 3.2.5 Код
public class ConservativeRegime : Strategy
	{
		public ConservativeRegime(bool bBuy, decimal priceOfOrder, decimal dPrice, int division)
			: base()
		{
			_bBuy = bBuy;
			_priceOfOrder = priceOfOrder;
			_dPrice = dPrice;
			_division = division;
			
			_order = new Order
			{
				Portfolio = this.Portfolio,
				Volume =  this.Volume,
				Price = _priceOfOrder,
				Security = this.Security,
				Direction =  OrderDirections.Buy,
			};
			
			
		}
		
				
		protected override void OnRunning()
		{
			StrategyRule strR =  this
				.When(this.Security.BestAskPriceLess(_priceOfOrder))
				.Do(SimpleRegOrd);
			
			base.OnRunning();
			
			foreach(StrategyRule r in this.Rules){
				MessageBox.Show(r.ToString());
			}
		}
		
		private void SimpleRegOrd()
		{
			MessageBox.Show("SimpleRegOrd");
			this.RegisterOrder(_order);
		}
		private bool _bBuy;
		private decimal _priceOfOrder;
		private decimal _dPrice;
		private int _division;
		
		private Order _order;
	}
 | 
			
				|  | 
	
		| Спасибо: |   |  | 
			
				|  | 
		
			| 
 | 
		
			
				| Alexander 
 
   
 
						
						
					 | Дата: 25.07.2011 
 
 
	
			vader Подскажите ,пожалуйста. Пытаюсь создать событийную стратегию и почему-то не происходит  действия, активизирующееся при наступлении условия. Условие добавляется в список правил. Пробовал разные условия, результат нулевой. Результат проверки Verifir – все в порядке. версия библиотеки - 3.2.5 Код
public class ConservativeRegime : Strategy
	{
		public ConservativeRegime(bool bBuy, decimal priceOfOrder, decimal dPrice, int division)
			: base()
		{
			_bBuy = bBuy;
			_priceOfOrder = priceOfOrder;
			_dPrice = dPrice;
			_division = division;
			
			_order = new Order
			{
				Portfolio = this.Portfolio,
				Volume =  this.Volume,
				Price = _priceOfOrder,
				Security = this.Security,
				Direction =  OrderDirections.Buy,
			};
			
			
		}
		
				
		protected override void OnRunning()
		{
			StrategyRule strR =  this
				.When(this.Security.BestAskPriceLess(_priceOfOrder))
				.Do(SimpleRegOrd);
			
			base.OnRunning();
			
			foreach(StrategyRule r in this.Rules){
				MessageBox.Show(r.ToString());
			}
		}
		
		private void SimpleRegOrd()
		{
			MessageBox.Show("SimpleRegOrd");
			this.RegisterOrder(_order);
		}
		private bool _bBuy;
		private decimal _priceOfOrder;
		private decimal _dPrice;
		private int _division;
		
		private Order _order;
	}
 Запускаете экспорт стакана?
			
			
			
			
		
 | 
			
				|  | 
	
		| Спасибо: |   |  | 
			
				|  | 
		
			| 
 | 
		
			
				| vader 
 
   
 
						
						
					 | Дата: 26.07.2011 
 
 
	
			Да, запускаю. Я вставил такой код, чтобы убедится что стратегия получает данные. Код
protected override void OnRunning()
		{
			...			
			base.OnRunning();
			
			MessageBox.Show(Security.BestAsk.Price.ToString());
			...
	         }
 | 
			
				|  | 
	
		| Спасибо: |   |  | 
			
				|  | 
		
			| 
 | 
		
			
				| Alexander 
 
   
 
						
						
					 | Дата: 26.07.2011 
 
 
	
			vader Да, запускаю. Я вставил такой код, чтобы убедится что стратегия получает данные. Код
protected override void OnRunning()
		{
			...			
			base.OnRunning();
			
			MessageBox.Show(Security.BestAsk.Price.ToString());
			...
	         }
 Поля Security, Portfolio в конструкторе не проинициализированны. Вы их должны устанавливать уже после вызова конструктора. Значит у заявки в конструкторе этих данных нет - можете проверить в OnRunning и заодно переместить создание заявки туда.
			
			
			
			
		
 | 
			
				|  | 
	
		| Спасибо: |   |  | 
			
				|  | 
		
			| 
 | 
		
			
				| vader 
 
   
 
						
						
					 | Дата: 26.07.2011 
 
 
	
			я инициалезирую эти поля так Код
_consStrategy = new ConservativeRegime( _bBuy, _priceOfOrder, _dPrice, _division)
					{
						Volume = _nLot,
						Security = _security,
						Portfolio = _portfolio,
					};
 Я сделал проверку, все на месте Код
protected override void OnRunning()
		{
			StrategyRule strR =  this
				.When(this.Security.BestAskPriceLess(_priceOfOrder))
				.Do(SimpleRegOrd);
			
			base.OnRunning();
			
			MessageBox.Show("Security= " + this.Security.ToString());
			MessageBox.Show("Portfolio= " + this.Portfolio.ToString());
			
			foreach(StrategyRule r in this.Rules){
				MessageBox.Show(r.ToString());
			}
		}
 Ведь вопрос не в том ,что он заявку не создает,а в том, что он нужный метод (SimpleRegOrd) не вызывает.
			
			
			
			
		
 | 
			
				|  | 
	
		| Спасибо: |   |  | 
			
				|  | 
		
			| 
 | 
		
			
				| Alexander 
 
   
 
						
						
					 | Дата: 26.07.2011 
 
 
	
			vader я инициалезирую эти поля так Код
_consStrategy = new ConservativeRegime( _bBuy, _priceOfOrder, _dPrice, _division)
					{
						Volume = _nLot,
						Security = _security,
						Portfolio = _portfolio,
					};
 Я сделал проверку, все на месте Код
protected override void OnRunning()
		{
			StrategyRule strR =  this
				.When(this.Security.BestAskPriceLess(_priceOfOrder))
				.Do(SimpleRegOrd);
			
			base.OnRunning();
			
			MessageBox.Show("Security= " + this.Security.ToString());
			MessageBox.Show("Portfolio= " + this.Portfolio.ToString());
			
			foreach(StrategyRule r in this.Rules){
				MessageBox.Show(r.ToString());
			}
		}
 Ведь вопрос не в том ,что он заявку не создает,а в том, что он нужный метод (SimpleRegOrd) не вызывает. Вначале вызывается конструктор, потом происходит инициализация полей. Когда вы создаёте заявку - у вас там используется: Код
Portfolio = this.Portfolio,
Security = this.Security,
 Оба этих поля = null. Не верите - распечатайте  Код
			MessageBox.Show("Security= " + _order.Security.ToString());
			MessageBox.Show("Portfolio= " + _order.Portfolio.ToString()); :) Необходимо вначале это исправить.
			
			
			
			
		
 | 
			
				|  | 
	
		| Спасибо: |   |  | 
			
				|  | 
		
			| 
 | 
		
			
				| vader 
 
   
 
						
						
					 | Дата: 26.07.2011 
 
 
	
			перенес создание заявки в OnRunning Все равно ничего не происходит. Код
protected override void OnRunning()
		{
			_order = new Order
			{
				Portfolio = this.Portfolio,
				Volume =  this.Volume,
				Price = _priceOfOrder,
				Security = this.Security,
				Direction =  OrderDirections.Buy,
			};
			
			StrategyRule strR =  this
				.When(this.Security.BestAskPriceLess(_priceOfOrder))
				.Do(SimpleRegOrd);
			
			base.OnRunning();
			
			MessageBox.Show("Security= " + this.Security.ToString());
			MessageBox.Show("Portfolio= " + this.Portfolio.ToString());
			
			foreach(StrategyRule r in this.Rules){
				MessageBox.Show(r.ToString());
			}
		}
 | 
			
				|  | 
	
		| Спасибо: |   |  | 
			
				|  | 
		
			| 
 | 
		
			
				| Alexander 
 
   
 
						
						
					 | Дата: 26.07.2011 
 
 
	
			Чему равно _priceOfOrder, как изменяется Security.BestAsk.Price?
			
			
			
			
		
 | 
			
				|  | 
	
		| Спасибо: |   |  | 
			
				|  | 
		
			| 
 | 
		
			
				| vader 
 
   
 
						
						
					 | Дата: 26.07.2011 
 
 
	
			_priceOfOrder - ввожу вручную, сталю такой, чтобы скорее испольнилось условие.Как пример. Если лучшая продажа 198645, то ставлю 198630.
 
 Security.BestAsk.Price не использую сейчас. Я выводил это ,чтобы убедится, что стратегия получает данные.
 | 
			
				|  | 
	
		| Спасибо: |   |  | 
			
				|  |