MarketQuotingStrategy и MaxErrorCount
Atom Reply
6/30/2011


Стратегия котирования продает/покупает на один контракт больше, чем нужно. Судя по логам, когда заявка для перестановки не находится (она уже исполнилась), стратегия генерит новую заявку. Как по задумке делать так, чтобы она останавливалась в этом случае, или в идеале подождала какое-то время чтобы посмотреть, не придет ли сделка? Сейчас MaxErrorCount не получается установить в 0, и после получения ошибки стратегия не останавливается, а покупает/продает еще один контракт.
Код

VDS 30.06.2011 12:46:38.937 [MMQS] Стратегия запущена.
VDS 30.06.2011 12:46:39.096 [MMQS] Регистрация новой заявки на Buy с ценой 10019 и объемом 1.
VDS 30.06.2011 12:46:39.107 [MMQS] Заявка 45957856 на Buy отправлена с ценой 10019 объемом 1.
VDS 30.06.2011 12:46:39.208 [MMQS] Заявка 45957856 не имеет состояния.
VDS 30.06.2011 12:46:39.627 [MMQS] Цена текущей 10019 и лучшей 10020.
VDS 30.06.2011 12:46:39.627 [MMQS] Котирование заявки 45957856 на Buy с ценой 10019 объемом 1.
VDS 30.06.2011 12:46:39.632 [MMQS] Перекотирование зарегистрировано для заявки 45957857 на Buy с ценой 10020 объемом 1.
VDS 30.06.2011 12:46:39.632 [MMQS] Заявка 45957857 не имеет состояния.
VDS 30.06.2011 12:46:39.633 [MMQS] Заявка 45957857 не имеет состояния.
VDS 30.06.2011 12:46:39.857 [MMQS] Котируемая заявка 45957857 не принята биржей по причине 'Сервер для транзакции 'ACTION=MOVE_ORDERS; TRANS_ID=45957857; CLASSCODE=SPBFUT; SECCODE=SRU1; MODE=0; FIRST_ORDER_NUMBER=4279294399; FIRST_ORDER_NEW_PRICE=10020; FIRST_ORDER_NEW_QUANTITY=1;' вернул неправильное сообщение 'Ошибка перестановки заявок. [FORTS] "Не найдена заявка для перестановки.".' по передвинутым заявкам.'.
VDS 30.06.2011 12:46:39.857 [MMQS] Регистрация новой заявки на Buy с ценой 10020 и объемом 1.
VDS 30.06.2011 12:46:39.859 [MMQS] Заявка 45957858 на Buy отправлена с ценой 10020 объемом 1.
VDS 30.06.2011 12:46:39.859 [MMQS] Заканчиваем котирование с неисполненным объемом равный 0.
VDS 30.06.2011 12:46:39.860 [MMQS] Стратегия останавливается.
VDS 30.06.2011 12:46:39.863 [MMQS] Позиция изменилась на 1.
VDS 30.06.2011 12:46:39.863 [MMQS] Заканчиваем котирование с неисполненным объемом равный 0.
VDS 30.06.2011 12:46:39.864 [MMQS] Стратегия остановлена.

Tags:


Thanks:




4 Answers
InsiderHSE

Avatar
Date: 7/1/2011
Reply


Попытался переопределить OnError и RegisterOrder. К моему удивлению, эти методы вообще не вызываются. Догадываюсь, что это потому что сама стратегия вызывает методы базового класса. Это так задумано? Как тогда вмешаться в работу стратегии?
Код

protected override void OnError(Exception error)
{
	Debug.WriteLine("{0} - Ошибка котирования: {1}".Put(DateTime.Now.ToString("HH:mm:ss.fff"),error.Message ));
	this.Stop();
	base.OnError(error);
}
protected override void RegisterOrder(Order order)
{
	if(this.ErrorCount > 0)
	{
		this.Stop();
	}
	else
	{
		base.RegisterOrder(order);
	}
			
}
Topic starter
Thanks:

Alexander

Avatar
Date: 7/3/2011
Reply


В данном случае ошибки не было, OnError не приходил. Пришёл OrdersFailed.
Поэтому ErrorCount действительно равен 0.

Переопределите OrdersFailed, вызвав в нём OnError.

MaxErrorCount устанавливать в 0 никакого смысла нет. Если установлен в 1 - то по достижению 1 ошибки всё останавливается.


Логику котирования, возможно, будем менять. Много неясностей.
Thanks:

InsiderHSE

Avatar
Date: 7/4/2011
Reply


Alexander Перейти

Переопределите OrdersFailed, вызвав в нём OnError.


Не могу найти его в стратегии... это тот который у трэйдера?
Topic starter
Thanks:

Alexander

Avatar
Date: 7/4/2011
Reply


InsiderHSE Перейти
Alexander Перейти

Переопределите OrdersFailed, вызвав в нём OnError.


Не могу найти его в стратегии... это тот который у трэйдера?


Подпишитесь на OrderFailed. В нём - реализуйте что-то на подобие:
Код
			this.ErrorCount++;
			if (this.ErrorCount >= this.MaxErrorCount)
				Stop();

Thanks:


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

loading
clippy