#84643 - Tue Feb 26 2019 04:11 PM
Выставление ордера и его отмена
|
newbie
Registered: Fri Jan 29 2016
Записи: 27
|
Доброго дня. Оптимизируя работу алгоритма, уперся в скорость выставления ордеров.
сейчас работает так что каждый перерасчет я выставляю ордера на найденные модели source.Positions.BuyIfGreater() и source.Positions.SellIfLess()
Хочу произвести оптимизацию - выставлять ордера только для новых моделей и удалять для "протухших".
Как начитать все активные оредера? Скорее всего если пойму как обратиться к списку ордеров, то разберусь как их отменить.
А так же вопрос, как установить время жизни ордера более чем один пересчет?
Отредактировано PostnikovM (Tue Feb 26 2019 04:12 PM)
|
Наверх
|
|
|
|
#84645 - Tue Feb 26 2019 06:16 PM
Re: Выставление ордера и его отмена
[Re: ViL]
|
newbie
Registered: Fri Jan 29 2016
Записи: 27
|
"Если на пересчете условия выставления для заявки нет, программа заявку снимет." т.е. способа продлить жизнь заявки на вход без вызова BuyIfGreater() или SellIfLess() нет?
Пока что не хотелось бы менять алгоритм работы, что бы самостоятельно следить за открытием или закрытием позиции
"IEnumerable<IOrder> TSLab.Script.Realtime.ISecurityRt.Orders"
не очень понятно как их получить при выполнении скрипта, если на входе мы имеем только IContext ctx, ISecurity source
Отредактировано PostnikovM (Tue Feb 26 2019 06:21 PM)
|
Наверх
|
|
|
|
#84653 - Wed Feb 27 2019 01:38 PM
Re: Выставление ордера и его отмена
[Re: pasha]
|
member
Registered: Wed Feb 08 2017
Записи: 194
|
"Хочу произвести оптимизацию - выставлять ордера только для новых моделей и удалять для "протухших"." При работе с ордерами напрямую так и будет. Подтверждать заявку на каждом пересчете не нужно (если вы это сделаете будет выставлена еще одна заявка), зато нужно отменять заявки необходимость в которых отпала. Один из минусов такой работы - если остановить агента, заявки не снимутся. http://forum.tslab.ru/ubb/ubbthreads.php?ubb=showflat&Number=84408#Post84408
|
Наверх
|
|
|
|
#84654 - Wed Feb 27 2019 02:05 PM
Re: Выставление ордера и его отмена
[Re: OldMo]
|
member
Registered: Wed Feb 08 2017
Записи: 194
|
Можно попробовать так:
foreach (var order in secRt.Orders) { if (order.IsActive) { if (order.IsBuy) { if (order.OrderType == OrderType.Growth) sec.Positions.BuyIfGreater(ctx.BarsCount-1,order.RestQuantity,order.Price,order.Slippage,order.Notes); if (order.OrderType == OrderType.Fall) sec.Positions.BuyIfLess(ctx.BarsCount - 1, order.RestQuantity, order.Price, order.Slippage, order.Notes); if (order.OrderType == OrderType.Limit) sec.Positions.BuyAtPrice(ctx.BarsCount - 1, order.RestQuantity, order.Price, order.Notes); } else { if (order.OrderType == OrderType.Growth) sec.Positions.SellIfGreater(ctx.BarsCount - 1, order.RestQuantity, order.Price, order.Slippage, order.Notes); if (order.OrderType == OrderType.Fall) sec.Positions.SellIfLess(ctx.BarsCount - 1, order.RestQuantity, order.Price, order.Slippage, order.Notes); if (order.OrderType == OrderType.Limit) sec.Positions.SellAtPrice(ctx.BarsCount - 1, order.RestQuantity, order.Price, order.Notes); } } }
Если заявка была выставлена, то на следующем пересчете мы ее находим и подтверждаем. Не представляю, правда, зачем такое может понадобиться. Ну и как это будет работать я, естественно, не проверял. Вроде бы должно, хотя несколько смущают возможные типы ордеров. Что такое, например, OrderType.Unknown?
|
Наверх
|
|
|
|
#84658 - Wed Feb 27 2019 03:31 PM
Re: Выставление ордера и его отмена
[Re: OldMo]
|
newbie
Registered: Fri Jan 29 2016
Записи: 27
|
пока что не пробовал, но по ощущению, если каждый пересчет подтверждать существующие заявки, то это буде равнозначно или близко выставлению ордера на новую позицию.
При работе в реале так и происходит, бот не перевыставляет ордера, а пишет что ордер с такой ценой уже существует.
Думаю вопрос можно считать закрытым, пока что буду работать так как есть. Спасибо всем.
|
Наверх
|
|
|
|
#84662 - Thu Feb 28 2019 08:31 AM
Re: Выставление ордера и его отмена
[Re: PostnikovM]
|
member
Registered: Wed Feb 08 2017
Записи: 194
|
Если у вас проблема во времени пересчета скрипта, то возможно вам может помочь вынесение каких-то расчетов в отдельный скрипт, с последующей передачей их результатов в основной (торгующий) скрипт. Кроме того, возможно, это позволит уменьшить количество баров в основном скрипте.
Отредактировано OldMo (Thu Feb 28 2019 08:32 AM)
|
Наверх
|
|
|
|
|
|