Вопросы новичка в S#

Вопросы новичка в S# (Locked)
Atom
12/1/2010
ttt


Добрый день. Очень понравилась идея использования Вашей библиотеки для реализации роботов. Подскажите, пожалуйста:

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


<< < 39 40 41 42 43  > >>
Alexander

Avatar
Date: 7/22/2011


[quote=Pavel-NS;9796][quote=Alexander;9793] Блокирует коллекцию для изменения и запускает передаваемую функцию над коллекцией.[/quote]

Спасибо за ответ. А есть ли где более полная документация, чем chm-файл?? Не нашёл какой-либо информации по "ecng" пространству имён ни в доках, а также при просмотре из студии нет никаких комментариев. [/quote]

Ecng никак не комментирован пока, да. Полнее чем в chm в любом случае нет - это полная дока которая строится по комментариям.

Thanks:

vader

Avatar
Date: 7/25/2011


Подскажите ,пожалуйста. Пытаюсь создать событийную стратегию и почему-то не происходит действия, активизирующееся при наступлении условия. Условие добавляется в список правил. Пробовал разные условия, результат нулевой. Результат проверки Verifir – все в порядке. версия библиотеки - 3.2.5 [code=csharp] 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;
}

[/code]

Thanks:

Alexander

Avatar
Date: 7/25/2011


[quote=vader;9860]Подскажите ,пожалуйста. Пытаюсь создать событийную стратегию и почему-то не происходит действия, активизирующееся при наступлении условия. Условие добавляется в список правил. Пробовал разные условия, результат нулевой. Результат проверки Verifir – все в порядке. версия библиотеки - 3.2.5 [code=csharp] 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;
}

[/code][/quote]

Запускаете экспорт стакана?

Thanks:

vader

Avatar
Date: 7/26/2011


Да, запускаю. Я вставил такой код, чтобы убедится что стратегия получает данные. [code=csharp] protected override void OnRunning() { ... base.OnRunning();

		MessageBox.Show(Security.BestAsk.Price.ToString());
		...

         }

[/code]

Thanks:

Alexander

Avatar
Date: 7/26/2011


[quote=vader;9882]Да, запускаю. Я вставил такой код, чтобы убедится что стратегия получает данные. [code=csharp] protected override void OnRunning() { ... base.OnRunning();

		MessageBox.Show(Security.BestAsk.Price.ToString());
		...

         }

[/code][/quote]

Поля Security, Portfolio в конструкторе не проинициализированны. Вы их должны устанавливать уже после вызова конструктора. Значит у заявки в конструкторе этих данных нет - можете проверить в OnRunning и заодно переместить создание заявки туда.

Thanks:

vader

Avatar
Date: 7/26/2011


я инициалезирую эти поля так [code=csharp] _consStrategy = new ConservativeRegime( _bBuy, _priceOfOrder, _dPrice, _division) ; [/code] Я сделал проверку, все на месте [code=csharp] 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());
		}
	}

[/code] Ведь вопрос не в том ,что он заявку не создает,а в том, что он нужный метод (SimpleRegOrd) не вызывает.

Thanks:

Alexander

Avatar
Date: 7/26/2011


[quote=vader;9896]я инициалезирую эти поля так [code=csharp] _consStrategy = new ConservativeRegime( _bBuy, _priceOfOrder, _dPrice, _division) ; [/code] Я сделал проверку, все на месте [code=csharp] 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());
		}
	}

[/code] Ведь вопрос не в том ,что он заявку не создает,а в том, что он нужный метод (SimpleRegOrd) не вызывает.[/quote]

Вначале вызывается конструктор, потом происходит инициализация полей. Когда вы создаёте заявку - у вас там используется: [code=csharp]Portfolio = this.Portfolio, Security = this.Security, [/code] Оба этих поля = null.

Не верите - распечатайте

[code=csharp] MessageBox.Show("Security= " + _order.Security.ToString()); MessageBox.Show("Portfolio= " + _order.Portfolio.ToString());[/code]

:)

Необходимо вначале это исправить.

Thanks:

vader

Avatar
Date: 7/26/2011


перенес создание заявки в OnRunning Все равно ничего не происходит. [code=csharp] protected override void OnRunning() { _order = new Order ;

		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());
		}
	}

[/code]

Thanks:

Alexander

Avatar
Date: 7/26/2011


Чему равно _priceOfOrder, как изменяется Security.BestAsk.Price?

Thanks:

vader

Avatar
Date: 7/26/2011


_priceOfOrder - ввожу вручную, сталю такой, чтобы скорее испольнилось условие. Как пример. Если лучшая продажа 198645, то ставлю 198630.

Security.BestAsk.Price не использую сейчас. Я выводил это ,чтобы убедится, что стратегия получает данные.

Thanks:
<< < 39 40 41 42 43  > >>

Attach files by dragging & dropping, , or pasting from the clipboard.

loading
clippy