Страница 1 из 2

Можно ли запретить автоматическое закрытие роботом позиции при выставлении торгового приказа ?

Добавлено: 19 янв 2018, 16:20
vdm
Торговля идет на спреде низколиквидного инструмента лимитными ордерами.
Делается лимитная заявка на покупку , после срабатыванеия которой (полностью или частично) на закупленные бумаги выставляется лимитная заявка на продажу. И так все повторяется по кругу.
Попытался автоматизировать этот процесс роботом и уперся в следующее ограничение - выставление лимитного ордера на продажу вызывает автоматическое закрытие текущей позиции по рынку.
Поскажите , можно ли как то обоити или отключить такое поведение робота ?

Re: Можно ли запретить автоматическое закрытие роботом позиции при выставлении торгового приказа ?

Добавлено: 19 янв 2018, 17:18
evge
Вместо EnterLongLimit() и EnterShortLimit() для открытой позиции выставлять BRS заявку стоп+тейк

если стоп не нужен, ставить его подальше, а тейк LMT заявку выставить на нужную цену выхода из позиции.

BreakingStop(ValueStop, ValueTake, SignalPriceType) – выставить заявку с типом BRS, т.е. выставляется защитная стоп¬-маркет заявка к текущей позиции робота (размер и направление позиции робот определяет сам) и одновременно связанный лимит на фиксацию прибыли.
SignalPriceType– тип задаваемого значения,
Price – значения ValueStop и ValueTake задаются в абсолютных величинах (как цены стоп уровня и уровня тейк профита):
DeltaFromAveragePrice – значения ValueStop и ValueTake задаются как отклонения от учетной цены позиции робота в валюте цены (значения задаются больше 0, робот сам определяет направление отклонения);
DeltaInPercentFromAveragePrice – значения ValueStop и ValueTake задаются в виде отклонения от учетной цены открытия позиции робота в процентах (значения задаются больше 0, робот сам определяет направление отклонения).
ValueStop, ValueTake – значение, задаваемое в соответствии с типом выбранного параметра.

т.е. после команды EnterLongLimit(...) и EnterShortLimit(...) делаем BreakingStop(...)

Единственный момент, не уверен как себя поведет BRS в данном случае, если будет частично исполненная лимит заявка на вход в позицию покупку \ продажу. Скорее всего не выставится BRS пока она не будет исполнена полностью. Так может и зависнуть позиция без BRS заявки.

Может Дмитрий (oxi) прокомментирует, поведение роботов при частичном исполнении заявок на вход в позицию. Аналогично с частичным выходом по тейку в BRS. Пока он не исполнится нельзя будет выставлять следующую заявку на открытие, т.к. позиция закроется.

Re: Можно ли запретить автоматическое закрытие роботом позиции при выставлении торгового приказа ?

Добавлено: 19 янв 2018, 20:16
vdm
evge писал(а):Вместо EnterLongLimit() и EnterShortLimit() для открытой позиции выставлять BRS заявку стоп+тейк

Если я правильно понял то делаем EnterLongLimit() +BRS и ждем пока не сработает long на всю заявку, после этого только будет выставлена BRS. Далее ждем пока не появится сделка по цене take prof и тогда только появится реальная заявка. Но ведь это будет заявка рыночная , которая соберет весь стакан (инструмент низколиквидный) , а мне нужна именно лимитированная заявка на продажу. Можно ли как то сделать BRS лимитной ? И далее как узнать что все откупленное EnterLongLimit() уже продано и надо запускать цикл по новой?

У меня также есть идея работать двумя роботами - один в long , другой в short , которые обмениваются между собой данными через файл, но подозреваю , что робот мне опять не даст сделать несколько long или short нарастающим итогом и будет принудительно закрывать позицию

Re: Можно ли запретить автоматическое закрытие роботом позиции при выставлении торгового приказа ?

Добавлено: 19 янв 2018, 20:46
evge
vdm писал(а):Можно ли как то сделать BRS лимитной ?


BreakingStop(ValueStop, ValueTake, SignalPriceType) – выставить заявку с типом BRS, т.е. выставляется защитная стоп-маркет заявка к текущей позиции робота (размер и направление позиции робот определяет сам) и одновременно связанный лимит на фиксацию прибыли.

vdm писал(а): И далее как узнать что все откупленное EnterLongLimit() уже продано и надо запускать цикл по новой?


Проверка на отсутствие позиции

Код: Выделить всё

if (CurrentPosition() == 0)
{
...
}


CurrentPosition() – возвращает объем текущей позиции (штук), которые посчитаны по сделкам только данной стратегии (робота). Положительное количество – показывает объем позиции лонг, отрицательное количество – объем позиции шорт.

Re: Можно ли запретить автоматическое закрытие роботом позиции при выставлении торгового приказа ?

Добавлено: 19 янв 2018, 21:01
vdm
evge писал(а):BreakingStop(ValueStop, ValueTake, SignalPriceType) – выставить заявку с типом BRS, т.е. выставляется защитная стоп-маркет заявка к текущей позиции робота (размер и направление позиции робот определяет сам) и одновременно связанный лимит на фиксацию прибыли.

Я имел ввиду не это.
Собственно сам BRS не создает заявок , это просто некий тригер , который сработает при появлении сделки по указанной цене.Далее будет выставлена реальная заявка , которая может быть рыночной (Тип :маркет ) или лимитированной (тип: лимит). Мне нужно чтоб тип заявки был лимит.

Re: Можно ли запретить автоматическое закрытие роботом позиции при выставлении торгового приказа ?

Добавлено: 19 янв 2018, 21:42
evge
BRS это не одна заявка, а две заявки, одна стоп-маркетная защитная и вторая лимитная для фиксации прибыли.

При подаче поручения вручную в АД4 об этом указывает текст поручения

пример

Продать BRG8 500
STP @ 68,20 или LMT @ 70,00

Re: Можно ли запретить автоматическое закрытие роботом позиции при выставлении торгового приказа ?

Добавлено: 19 янв 2018, 21:56
vdm
evge писал(а):BRS это не одна заявка, а две заявки, одна стоп-маркетная защитная и вторая лимитная для фиксации прибыли.

При подаче поручения вручную в АД4 об этом указывает текст поручения

пример

Продать BRG8 500
STP @ 68,20 или LMT @ 70,00

Спасибо , теперь понял.Попробую потестировать на следующей неделе.
Может быть еще тогда подскажете - можно ли как то узнать , есть ли на данный момент активные заявки ? В документации ничего не нашел по этому вопросу .

Re: Можно ли запретить автоматическое закрытие роботом позиции при выставлении торгового приказа ?

Добавлено: 19 янв 2018, 22:04
evge
Да, Дмитрий (oxi) писал об этой НЕдокументированной возможности чуть ранее

процитирую

oxi писал(а):1) Робот видит только свои заявки
2) Робот одновременно может выставить только одну активную заявку и одну стоповую
3) Количество активных заявок по роботу можно узнать так

var orders = GetActiveOrders();
var count = orders.Count;
ShowMessage(orders.Count);

for (int i = 0; i < count; i++)
ShowMessage(orders[i]);

Re: Можно ли запретить автоматическое закрытие роботом позиции при выставлении торгового приказа ?

Добавлено: 19 янв 2018, 23:27
vdm
evge писал(а):Да, Дмитрий (oxi) писал об этой НЕдокументированной возможности чуть ранее

процитирую

oxi писал(а):1) Робот видит только свои заявки
2) Робот одновременно может выставить только одну активную заявку и одну стоповую
3) Количество активных заявок по роботу можно узнать так

Спасибо за информацию.
А нет еще случайно какой нибудь недокументированной функции для анализа стакана?

Re: Можно ли запретить автоматическое закрытие роботом позиции при выставлении торгового приказа ?

Добавлено: 20 янв 2018, 09:33
evge
мне известны только задокументированные

Функции работы с ценой

GetAsk() – функция возвращает лучший аск в очереди заявок.
GetBid() – функция возвращает лучший бид в очереди заявок.
GetLast() – функция возвращает цену последней сделки на момент вызова.

GetQuote() – функция возврата информации по заявкам инструмента, используемого в стратегии.
• Ask – Цена лучшей котировки на продажу. Тип double
• AskQty – Количество заявок на продажу по лучшей котировке, лот. Тип int
• SumAsk – Объем всех заявок на продажу в очереди Торговой Системы, выраженный в лотах. Тип int
• NumAsks – Количество заявок на продажу. Тип int
• Bid – Цена лучшей котировки на покупку. Тип double
• BidQty – Количество заявок на покупку по лучшей котировке, лот. Тип int
• SumBid – Объем всех заявок на покупку в очереди Торговой Системы, выраженный в лотах. Тип int
• NumBids – Количество заявок на покупку. Тип int
• Last – Цена последней сделки/последнее значение индекса. Тип double
• LastQty – Объем последней сделки, в лотах. Тип int
• LastTime – Биржевое время и дата последней сделки/время последнего расчете индекса. Тип DateTime
• Open – Цена первой сделки/ Значение индекса на открытие текущего торгового дня. Тип double
• High – Максимальная цена сделок /индекса за текущую сессию. Тип double
• Low – Минимальная цена сделок /индекса за текущую сессию. Тип double