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);
}
}
}
}
Это код, который выставляет заявки. Но в моменты высокой активности он начинает ставить "лишнее". Есть способы устранения?
Kommentare (26)
Anmelden oder Konto erstellen, Melden Sie sich an oder registrieren Sie sich, um einen Kommentar zu hinterlassen
Если это стратегия на линиях болинджера, и с очень маленьким тайм фреймом то попробуйте увеличить таймфрейм. Не очень понятно, что вы имеете в виду под
Стратегия пробойная, да, и таймфрейм маленький. В добавок к этому она разворотная. Получается во время активных торгов она первой сделкой закрывает позицию с разворотом, а затем при дальнейшем движении (формировании новых экстремумов), начинает выставлять заявки с двойным объемом, при этом в журнале новая позиция не отражается. 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 в процессе регистрации.