Вопросы новичка в S# (Закрыта)
Atom
01.12.2010


ttt

Фотография
Добрый день.
Очень понравилась идея использования Вашей библиотеки для реализации роботов.
Подскажите, пожалуйста:
1) Как идентифицировать заявку?
//например, выставляю заявку buy RIZ0 4 контракта по цене 160500. Каким образом далее смогу ее отслеживать?
Вариант с использованием таблицы сделок не подходит - необходимо реализовать контроль исполнения заявок пользуясь исключительно информацией из таблицы заявок.
С языком C# только начал разбираться, возможно поэтому не нашел в представленных в дистрибутиве S# проектах примеров контроля состояния заявки по ее уникальному признаку.
2) Верно ли я понимаю суть работы с Квиком: для реализации автономного робота необходимо организовать два потока на C#:
- первый: выполняет функции получения данных из Квика через DDE сервер (используя библиотеку S#);
- второй: непосредственно реализует алгоритм выставления и снятия заявок.
Можно ли обойтись одним потоком?

Теги:


Спасибо: Николай_Флёров


<< < 39 40 41 42 43  > >>
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 не использую сейчас. Я выводил это ,чтобы убедится, что стратегия получает данные.
Спасибо:
<< < 39 40 41 42 43  > >>

Добавить файлы через драг-н-дроп, , или вставить из буфера обмена.

loading
clippy