Выставление ордера и его отмена

Автор: PostnikovM

Выставление ордера и его отмена - Tue Feb 26 2019 04:11 PM

Доброго дня. Оптимизируя работу алгоритма, уперся в скорость выставления ордеров.

сейчас работает так что каждый перерасчет я выставляю ордера на найденные модели
source.Positions.BuyIfGreater() и source.Positions.SellIfLess()

Хочу произвести оптимизацию - выставлять ордера только для новых моделей и удалять для "протухших".

Как начитать все активные оредера? Скорее всего если пойму как обратиться к списку ордеров, то разберусь как их отменить.

А так же вопрос, как установить время жизни ордера более чем один пересчет?
Автор: ViL

Re: Выставление ордера и его отмена - Tue Feb 26 2019 05:58 PM

если НЕ этот режим:
http://support.tslab.ru/index.php?/Knowledgebase/Article/View/17/25/rabota-s-zayavkami-napryamuyu
То работа очень простая.
Пока действует условия выставления заявки, заявка будет выставляться.
Если на пересчете условия выставления для заявки нет, программа заявку снимет.
список активных и вроде исполненных тут IEnumerable<IOrder> TSLab.Script.Realtime.ISecurityRt.Orders
Автор: PostnikovM

Re: Выставление ордера и его отмена - Tue Feb 26 2019 06:16 PM

"Если на пересчете условия выставления для заявки нет, программа заявку снимет." т.е. способа продлить жизнь заявки на вход без вызова BuyIfGreater() или SellIfLess() нет?

Пока что не хотелось бы менять алгоритм работы, что бы самостоятельно следить за открытием или закрытием позиции

"IEnumerable<IOrder> TSLab.Script.Realtime.ISecurityRt.Orders"

не очень понятно как их получить при выполнении скрипта, если на входе мы имеем только IContext ctx, ISecurity source
Автор: pasha

Re: Выставление ордера и его отмена - Tue Feb 26 2019 06:35 PM

получается приведением
var rtSec = source as ISecurityRt;
if (rtSec == null)
return;
Автор: OldMo

Re: Выставление ордера и его отмена - Wed Feb 27 2019 01:38 PM

"Хочу произвести оптимизацию - выставлять ордера только для новых моделей и удалять для "протухших"."

При работе с ордерами напрямую так и будет. Подтверждать заявку на каждом пересчете не нужно (если вы это сделаете будет выставлена еще одна заявка), зато нужно отменять заявки необходимость в которых отпала. Один из минусов такой работы - если остановить агента, заявки не снимутся.

http://forum.tslab.ru/ubb/ubbthreads.php?ubb=showflat&Number=84408#Post84408
Автор: OldMo

Re: Выставление ордера и его отмена - Wed Feb 27 2019 02:05 PM

Можно попробовать так:

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?
Автор: PostnikovM

Re: Выставление ордера и его отмена - Wed Feb 27 2019 03:31 PM

пока что не пробовал, но по ощущению, если каждый пересчет подтверждать существующие заявки, то это буде равнозначно или близко выставлению ордера на новую позицию.

При работе в реале так и происходит, бот не перевыставляет ордера, а пишет что ордер с такой ценой уже существует.

Думаю вопрос можно считать закрытым, пока что буду работать так как есть. Спасибо всем.
Автор: OldMo

Re: Выставление ордера и его отмена - Thu Feb 28 2019 08:31 AM

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