MarketQuotingStrategy и MaxErrorCount
Atom
30.06.2011
InsiderHSE


Стратегия котирования продает/покупает на один контракт больше, чем нужно. Судя по логам, когда заявка для перестановки не находится (она уже исполнилась), стратегия генерит новую заявку. Как по задумке делать так, чтобы она останавливалась в этом случае, или в идеале подождала какое-то время чтобы посмотреть, не придет ли сделка? Сейчас 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] Стратегия остановлена.

Теги:


Спасибо:


InsiderHSE

Фотография
Дата: 01.07.2011
Ответить


Попытался переопределить 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);
	}
			
}
Спасибо:

Alexander

Фотография
Дата: 03.07.2011
Ответить


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

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

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


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

InsiderHSE

Фотография
Дата: 04.07.2011
Ответить


Alexander

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


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

Alexander

Фотография
Дата: 04.07.2011
Ответить


InsiderHSE
Alexander

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


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


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

Спасибо:


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

loading
clippy