private void ProcessCandle(Candle candle)
{
lock(_mainlock)
{
var timeFrame = (TimeSpan)candle.Arg;
var time = timeFrame.GetCandleBounds(Security).Min - timeFrame;
_band.Process(new CandleIndicatorValue(candle) { IsFinal = true });
this.AddInfoLog("Новая свечка {0}, {1}, {2}, {3}, {4}", candle.HighPrice, candle.CloseTime, _band.LastValue, _band.PrevIndValue, _band.InitDirection);
if (candle.OpenTime >= time && _band.IsFormed )
{
if (_band.Direction == -1 && _band.LastValue < _band.PrevIndValue && Position >= 0 && _band.LevelHigh2 != 0)
{
//отменяем все ордера и выставляем новую заявку
CancelActiveOrders();
var order = this.CreateOrder(OrderDirections.Sell, Security.BestAsk.Price - 1m, this.Position + Volume);
RegisterOrder(order);
}
else
if (_band.Direction == 1 && _band.LastValue > _band.PrevIndValue && Position <= 0 && _band.LevelLow2 != 0)
{
//отменяем все ордера и выставляем новую заявку
CancelActiveOrders();
var order = this.CreateOrder(OrderDirections.Buy, Security.BestBid.Price + 1m, this.Position * -1m + Volume);
RegisterOrder(order);
}
else
if (_band.InitDirection == 2 && Position > 0)
{
//отменяем все ордера и выставляем новую заявку
CancelActiveOrders();
var order = this.CreateOrder(OrderDirections.Sell, Security.BestAsk.Price, this.Position);
RegisterOrder(order);
}
else
if (_band.InitDirection == -2 && Position < 0)
{
//отменяем все ордера и выставляем новую заявку
CancelActiveOrders();
var order = this.CreateOrder(OrderDirections.Buy, Security.BestBid.Price, this.Position * -1m);
RegisterOrder(order);
}
}
}
}
Это код, который выставляет заявки. Но в моменты высокой активности он начинает ставить "лишнее". Есть способы устранения?
コメント (26)
ログイン または アカウントを作成, コメントを残すにはログインまたは新規登録してください
Если это стратегия на линиях болинджера, и с очень маленьким тайм фреймом то попробуйте увеличить таймфрейм. Не очень понятно, что вы имеете в виду под
Стратегия пробойная, да, и таймфрейм маленький. В добавок к этому она разворотная. Получается во время активных торгов она первой сделкой закрывает позицию с разворотом, а затем при дальнейшем движении (формировании новых экстремумов), начинает выставлять заявки с двойным объемом, при этом в журнале новая позиция не отражается. Lock не помог. На демо торгах такой проблемы не наблюдалось.
Скорее всего ваш робот совершает действия быстрее чем регистрируются заявки на бирже. По этому позиция в журнале не отображается, робот о ней не знает и делает еще заявки. Об этом очень много говорилось на этом форуме, и к сожалению ни кто не пришел к простому способу защиты робота от такой проблемы. Придется нагородить массу проверок, но в итоге он перестанет выставлять заявки в нужный момент. Увеличивайте скорость обмена с биржей, либо увеличивайте таймфрейм. Если найдете другой способ прошу поделиться очень интересно!
Да, на снятие заявок очень много ошибок. Так что не выставлять в спреде, а исполнять по рынку?
Сможет ли вывод своей таблицы из квика решить эту проблему? То есть, насколько быстро можно получать данные о текущей позиции, что бы затем использовать их при работе с заявками.
Выставление заявки в спреде требует обязательной проверки ее исполнения. Исполнение по рынку избавит вас от проскальзывания и ошибок исполнения станет значительно меньше, снимать заявки не придется, но проблему скорости не снимет, и это в корне изменит стратегию не в лучшую сторон. Вывод своей таблицы из квика ни чего не даст. Проблема в скорости обмена от квика до биржи.
VassilSanych> Я всё-таки выставляю в спред. Как я понимаю используемый таймфрейм не чувствителен к скорости обмена данными.
Про скорость можно посмотреть здесь http://www.stocksharp.com/doc/
на сайте vimeo.com/stocksharp можно посмотреть видео с тестированием скорости
Просто при тестировании на рабочем квике наблюдала следующую картину при тестировании минимальным объемом, в квике сделка прошла, система развернулась как положено, а в стокшарпе никаких намеков на сделку и он придолжал ставить как ни в чем не бывало, в результате позиция была перебрана в 7 раз, пока он не заметил. Таймфрейм у системы маленький, но периодичность сделок от 15 секунд до 15 минут, поэтому о чуствительности к задержкам трудно говорить.
Так отправили заявку и ждем пока она исполнится или по ней придет ошибка, либо отправили сигнал на отмену и снова ждем, зачем отправлять множество заявок и не смотреть за их исполнением?
Собственно, я и жду когда она исполнится. Она исполняется, но позиция не меняется, но меняется бар, и на нем тоже выполняются условия для выставления заявки, что стокшарп и делает, ставит еще одну заявку.
Я делаю вывод интересующих параметров в журнал, в том числе и позицию.
Тогда давайте лог, в котором видно, что заявка исполнилась, а позиция не изменилась.
Здесь сообщения нет, но в квике в результате этого перебор был в 15 раз. В квике сделки проходят, а здесь ничего не меняется, "Снятие всех активных заявок" не происходит.
Чтобы стратегия узнала, что изменилась позиция по инструменту, она должна получить эту информацию из квика. Аналогично и для снятия всех активных заявок, мало вызвать CancelActiveOrders, надо еще дождаться ответа, т.к. некоторые заявки уже могут быть исполнены и по ним будет ошибка отмены.
Изначально речь шла о том, что заявки исполняются, но позиция у стратегии не меняется, судя по логу стратегия не получает информацию по состоянию заявок, может просто не успевает, т.к. вы отправляете слишком много заявок, может у вас какие-то проблемы с экспортом данных. В первом случае:> esper:
Была первая сделка - короткая продажа 2013/05/17 10:02:06.397| |SS_SiM3@RTS_SPBFUT00svg|Регистрация новой Limit (0x383D5BC) заявки на Sell с ценой 31536 и объемом 1. 2013/05/17 10:02:07.059| |SS_SiM3@RTS_SPBFUT00svg|Новая позиция: SPBFUT00svg-SiM3@RTS=-1. 2013/05/17 10:02:07.061| |SS_SiM3@RTS_SPBFUT00svg|Заявка 34990590 больше не активна. 2013/05/17 10:02:07.065| |SS_SiM3@RTS_SPBFUT00svg|Новая Sell сделка 738025838 по цене 31536 на 1 заявки 34990590. Через некоторое время сработал стоп и первой сделкой должен был пройти откуп короткой позиции 2013/05/17 10:03:03.016| |SS_SiM3@RTS_SPBFUT00svg|Снятие всех активных заявок. 2013/05/17 10:03:03.016| |SS_SiM3@RTS_SPBFUT00svg|Регистрация новой Limit (0x286AD59) заявки на Buy с ценой 31528 и объемом 1. 2013/05/17 10:03:05.743| |SS_SiM3@RTS_SPBFUT00svg|Position: -1, _band.Direction: -2, но, откуп прошел, но в стокшарпе это не отразилось в изменении позиции, в результате чего была отправлена еще одна заявка, потом еще...
Что делать если выскакивает сообщение - Заявка в процессе регистрации, при этом она давно исполнилась?
Давно это когда? Экспорт по дде работает?
Если попробовать выставить заявку через Quik/Sample вручную?
2013/05/20 12:15:02.888| |SS_SiM3@RTS_SPBFUT00svg|Position: 0, _band.Direction: -1, 2013/05/20 12:15:02.994| |RQ_SiM3@RTS_SPBFUT00svg|Стратегия запущена. [0,1]. Позиция при старте 0. 2013/05/20 12:15:02.994| |RQ_SiM3@RTS_SPBFUT00svg|Котирование на Sell объема 1. 2013/05/20 12:15:02.994| |RQ_SiM3@RTS_SPBFUT00svg|Приостановка правил. _rulesSuspendCount 1. 2013/05/20 12:15:03.004| |RQ_SiM3@RTS_SPBFUT00svg|Возобновление правил. _rulesSuspendCount 0. 2013/05/20 12:15:03.010| |RQ_SiM3@RTS_SPBFUT00svg|Цена текущей NULL и лучшей 31381. 2013/05/20 12:15:03.010| |RQ_SiM3@RTS_SPBFUT00svg|Лучший бид 31386 и лучший аск 31387. 2013/05/20 12:15:03.015| |RQ_SiM3@RTS_SPBFUT00svg|Регистрация новой Limit (0x1673AA) заявки на Sell с ценой 31381 и объемом 1. 2013/05/20 12:15:03.031| |SS_SiM3@RTS_SPBFUT00svg|Position: 0, _band.Direction: -1, 2013/05/20 12:15:03.032| |SS_SiM3@RTS_SPBFUT00svg|Position: 0, _band.Direction: -1, 2013/05/20 12:15:03.032| |SS_SiM3@RTS_SPBFUT00svg|Position: 0, _band.Direction: -1, 2013/05/20 12:15:03.042| |SS_SiM3@RTS_SPBFUT00svg|Position: 0, _band.Direction: -1, 2013/05/20 12:15:03.046|Warning|RQ_SiM3@RTS_SPBFUT00svg|Заявка 44093765 в процессе регистрации. 2013/05/20 12:15:03.047| |SS_SiM3@RTS_SPBFUT00svg|Position: 0, _band.Direction: -1, 2013/05/20 12:15:03.296|Warning|RQ_SiM3@RTS_SPBFUT00svg|Заявка 44093765 в процессе регистрации. 2013/05/20 12:15:03.363|Warning|RQ_SiM3@RTS_SPBFUT00svg|Заявка 44093765 в процессе регистрации. 2013/05/20 12:15:03.799|Warning|RQ_SiM3@RTS_SPBFUT00svg|Заявка 44093765 в процессе регистрации. 2013/05/20 12:15:04.053|Warning|RQ_SiM3@RTS_SPBFUT00svg|Заявка 44093765 в процессе регистрации. 2013/05/20 12:15:04.303|Warning|RQ_SiM3@RTS_SPBFUT00svg|Заявка 44093765 в процессе регистрации. 2013/05/20 12:15:04.544|Warning|RQ_SiM3@RTS_SPBFUT00svg|Заявка 44093765 в процессе регистрации. 2013/05/20 12:15:04.671| |SS_SiM3@RTS_SPBFUT00svg|Position: 0, _band.Direction: -1, 2013/05/20 12:15:04.673|Warning|RQ_SiM3@RTS_SPBFUT00svg|Заявка 44093765 в процессе регистрации. 2013/05/20 12:15:04.937|Warning|RQ_SiM3@RTS_SPBFUT00svg|Заявка 44093765 в процессе регистрации. 2013/05/20 12:15:05.119|Warning|RQ_SiM3@RTS_SPBFUT00svg|Заявка 44093765 в процессе регистрации. 2013/05/20 12:15:05.335|Warning|RQ_SiM3@RTS_SPBFUT00svg|Заявка 44093765 в процессе регистрации. 2013/05/20 12:15:05.684|Warning|RQ_SiM3@RTS_SPBFUT00svg|Заявка 44093765 в процессе регистрации. 2013/05/20 12:15:05.892|Warning|RQ_SiM3@RTS_SPBFUT00svg|Заявка 44093765 в процессе регистрации. 2013/05/20 12:15:06.860|Warning|RQ_SiM3@RTS_SPBFUT00svg|Заявка 44093765 в процессе регистрации. 2013/05/20 12:15:06.982|Warning|RQ_SiM3@RTS_SPBFUT00svg|Заявка 44093765 в процессе регистрации. 2013/05/20 12:15:07.194|Warning|RQ_SiM3@RTS_SPBFUT00svg|Заявка 44093765 в процессе регистрации. 2013/05/20 12:15:07.295| |SS_SiM3@RTS_SPBFUT00svg|Position: 0, _band.Direction: -1, 2013/05/20 12:15:07.296|Warning|RQ_SiM3@RTS_SPBFUT00svg|Заявка 44093765 в процессе регистрации. 2013/05/20 12:15:07.523|Warning|RQ_SiM3@RTS_SPBFUT00svg|Заявка 44093765 в процессе регистрации. 2013/05/20 12:15:07.626|Warning|RQ_SiM3@RTS_SPBFUT00svg|Заявка 44093765 в процессе регистрации. 2013/05/20 12:15:07.847|Warning|RQ_SiM3@RTS_SPBFUT00svg|Заявка 44093765 в процессе регистрации. 2013/05/20 12:15:08.198|Warning|RQ_SiM3@RTS_SPBFUT00svg|Заявка 44093765 в процессе регистрации. 2013/05/20 12:15:08.453|Warning|RQ_SiM3@RTS_SPBFUT00svg|Заявка 44093765 в процессе регистрации. 2013/05/20 12:15:08.519|Warning|RQ_SiM3@RTS_SPBFUT00svg|Заявка 44093765 в процессе регистрации. 2013/05/20 12:15:08.726|Warning|RQ_SiM3@RTS_SPBFUT00svg|Заявка 44093765 в процессе регистрации. 2013/05/20 12:15:08.836|Warning|RQ_SiM3@RTS_SPBFUT00svg|Заявка 44093765 в процессе регистрации. 2013/05/20 12:15:08.949|Warning|RQ_SiM3@RTS_SPBFUT00svg|Заявка 44093765 в процессе регистрации. 2013/05/20 12:15:09.557|Warning|RQ_SiM3@RTS_SPBFUT00svg|Заявка 44093765 в процессе регистрации. 2013/05/20 12:15:09.712|Warning|RQ_SiM3@RTS_SPBFUT00svg|Заявка 44093765 в процессе регистрации. 2013/05/20 12:15:09.929|Warning|RQ_SiM3@RTS_SPBFUT00svg|Заявка 44093765 в процессе регистрации. 2013/05/20 12:15:10.047|Warning|RQ_SiM3@RTS_SPBFUT00svg|Заявка 44093765 в процессе регистрации. 2013/05/20 12:15:10.286| |SS_SiM3@RTS_SPBFUT00svg|Position: 0, _band.Direction: -1, 2013/05/20 12:15:10.298|Warning|RQ_SiM3@RTS_SPBFUT00svg|Заявка 44093765 в процессе регистрации. 2013/05/20 12:15:10.548|Warning|RQ_SiM3@RTS_SPBFUT00svg|Заявка 44093765 в процессе регистрации. 2013/05/20 12:15:10.796|Warning|RQ_SiM3@RTS_SPBFUT00svg|Заявка 44093765 в процессе регистрации. 2013/05/20 12:15:10.912|Warning|RQ_SiM3@RTS_SPBFUT00svg|Заявка 44093765 в процессе регистрации. 2013/05/20 12:15:11.168|Warning|RQ_SiM3@RTS_SPBFUT00svg|Заявка 44093765 в процессе регистрации. 2013/05/20 12:15:11.348|Warning|RQ_SiM3@RTS_SPBFUT00svg|Заявка 44093765 в процессе регистрации. 2013/05/20 12:15:11.604|Warning|RQ_SiM3@RTS_SPBFUT00svg|Заявка 44093765 в процессе регистрации. 2013/05/20 12:15:11.781|Warning|RQ_SiM3@RTS_SPBFUT00svg|Заявка 44093765 в процессе регистрации. 2013/05/20 12:15:12.013|Warning|RQ_SiM3@RTS_SPBFUT00svg|Заявка 44093765 в процессе регистрации. 2013/05/20 12:15:12.264|Warning|RQ_SiM3@RTS_SPBFUT00svg|Заявка 44093765 в процессе регистрации. 2013/05/20 12:15:12.666|Warning|RQ_SiM3@RTS_SPBFUT00svg|Заявка 44093765 в процессе регистрации. 2013/05/20 12:15:12.918|Warning|RQ_SiM3@RTS_SPBFUT00svg|Заявка 44093765 в процессе регистрации. 2013/05/20 12:15:13.184|Warning|RQ_SiM3@RTS_SPBFUT00svg|Заявка 44093765 в процессе регистрации.