У вас не стоит Flash Player
Настройки
#84643 - Tue Feb 26 2019 04:11 PM Выставление ордера и его отмена
PostnikovM Offline
newbie

Registered: Fri Jan 29 2016
Записи: 27
Доброго дня. Оптимизируя работу алгоритма, уперся в скорость выставления ордеров.

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

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

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

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


Отредактировано PostnikovM (Tue Feb 26 2019 04:12 PM)

Наверх
#84644 - Tue Feb 26 2019 05:58 PM Re: Выставление ордера и его отмена [Re: PostnikovM]
ViL Offline
TSLab
Carpal Tunnel

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

Наверх
#84645 - Tue Feb 26 2019 06:16 PM Re: Выставление ордера и его отмена [Re: ViL]
PostnikovM Offline
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)

Наверх
#84646 - Tue Feb 26 2019 06:35 PM Re: Выставление ордера и его отмена [Re: PostnikovM]
pasha Offline

old hand

Registered: Tue Dec 23 2008
Записи: 1085
получается приведением
var rtSec = source as ISecurityRt;
if (rtSec == null)
return;


Отредактировано pasha (Tue Feb 26 2019 06:35 PM)

Наверх
#84653 - Wed Feb 27 2019 01:38 PM Re: Выставление ордера и его отмена [Re: pasha]
OldMo Offline
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]
OldMo Offline
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]
PostnikovM Offline
newbie

Registered: Fri Jan 29 2016
Записи: 27
пока что не пробовал, но по ощущению, если каждый пересчет подтверждать существующие заявки, то это буде равнозначно или близко выставлению ордера на новую позицию.

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

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

Наверх
#84662 - Thu Feb 28 2019 08:31 AM Re: Выставление ордера и его отмена [Re: PostnikovM]
OldMo Offline
member

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


Отредактировано OldMo (Thu Feb 28 2019 08:32 AM)

Наверх


Moderator:  ViL, sar