Transaq

СБО "Transaq" => Подсистема ATF => Topic started by: ddd323 on 03.03.2014, 22:36:45

Title: отмена заявок без запроса пользователя?
Post by: ddd323 on 03.03.2014, 22:36:45
Сегодня, конечно день необычный, но ...
Сегодня на открытии скрипт подавал заявку на продажу по рынку по фьючу RTS-3.14. В логе получил следующее:
10:00:01 03.03.14 trades=242 Заявка выставлена. Номер: 17031
Заявка.   status:8   trnid:17031   orderno:0   validbefore:0   client:NNN     operation:-1   price:-1   yield:0   quantity:2   condition:0   condvalue:   brokerref:1   error:
10:00:01 03.03.14 trades=244 Заявка выставлена. Номер: 17031
Заявка.   status:9   trnid:17031   orderno:12234609262   validbefore:0   client:NNN     operation:-1   price:121480   yield:0   quantity:2   condition:0   condvalue:   brokerref:1   error:

Т.е. сначала сработал onOrder и показал статус 8 (OS_ACTIVE), а потом через доли секунды в onOrder пришел статус 9 (OS_CANCELLED), что вроде как означает согласно хелпу "Снята трейдером (заявка уже попала на рынок и была отменена)". Я эту заявку, естественно, не отменял. У меня вообще в коде операций отмены заявок в принципе нет. В 2-х соседних окнах по этому же инструменту тоже заявки не исполнились со статусом заявок 9.  В окне заявок в терминале - все эти неисполненные заявки в нем есть со статусом "снята" (по крайней мере сейчас, утром (в первый час торгов) не обратил внимание были ли они там.
Проэкспортировал тиковые данные с финама - на 2-й и последующих секундах торгов сегодня по цене 121480, т.е. по границе разрешенного торгового диапазона цен, где первая сегодняшняя свеча "остановилась", еще было сделано очень много сделок. (Поле unfilled я при подаче заявки не использую)
С количеством денег было все нормально (потом все эти заявки повторил в ручном режиме - они исполнились)
Брокер "Финам". Сервер 78.41.199.32 (HFT который)

Как объяснить этот феномен? Глюки клиента? Сервера? Стоп-торги, некорректно описываемые в статусе заявки, но после которых какие-то сделки у кого-то проходили?
Title: Re: отмена заявок без запроса пользователя?
Post by: klimov on 04.03.2014, 08:56:39
Заявок "по рынку" как таковых на FORTS не существует.
По рекомендации Биржи брокерская система их эмулирует, подавая лимитную заявку с параметром "Снять остаток" по максимальной (при покупке) или минимальной(при продаже) цене .
Видимо, для данной заявки на рынке заявок на покупку уже не осталось, поэтому остаток (в данном случае вся заявка) был снят Биржей.
Title: Re: отмена заявок без запроса пользователя?
Post by: ddd323 on 04.03.2014, 11:00:07
Жуть какая! Но почему с параметром "снять остаток? Обычные же заявки по умолчанию идут с "поставить в очередь". Это что такая специальная ловушка для непрофессионалов на случай разрывов рынка как вчера? ;)
Есть какой нибудь способ сделать заявку по рынку, чтобы на сервер биржи уходила лимитная с параметром "поставить в очередь"?
Title: Re: отмена заявок без запроса пользователя?
Post by: klimov on 04.03.2014, 11:32:20
В принципе, это классика - рыночная заявка берет с рынка все, что может и на рынке не остается.

Вам нужно научить скрипт ставить обычные лимитные заявки по максимальным (при покупке) или минимальным (при продаже) ценам по инструменту
Title: Re: отмена заявок без запроса пользователя?
Post by: ddd323 on 04.03.2014, 11:56:49
То есть альтернативных способов нарушить рекомендацию биржи нет.

Хорошо, пойдем прямолинейно. А можно в текущей версии атф в скрипте получить значения этих текущих минимальных и максимальных цен по инструменту?
А на будущее - сделать функцию, вызывающуся по событию "изменение торгового диапазона" (вчера он менялся 2 раза в течение часа)
Title: Re: отмена заявок без запроса пользователя?
Post by: White Noise on 04.03.2014, 19:31:25
)))) .........Это что такая специальная ловушка для непрофессионалов .........

))).........Брокер "Финам". Сервер 78.41.199.32 (HFT который)


Это не сарказм - не подумайте, но я первый раз непрофессионала на HFT -сервере встречаю !!!
Title: Re: отмена заявок без запроса пользователя?
Post by: ddd323 on 11.03.2014, 22:42:37
Heller, я правильно понимаю, что сейчас нет возможности получить в скриптах атф значения торгового диапазона - т.е. минимальных и максимальных цен по инструменту, принимаемых биржей? Когда можно ожидать появления этого функционала?
Klimov, можно ли надеяться на то, что сервер транзака будет иметь функцию информирования клиентских терминалов об изменении торгового диапазона сразу как только сам получит эту информацию от сервера биржи?
Title: Re: отмена заявок без запроса пользователя?
Post by: Heller on 14.03.2014, 13:32:45
ddd323, сейчас видимо нет такой функции, но сделать в общем-то так навскидку не сложно.
Title: Re: отмена заявок без запроса пользователя?
Post by: White Noise on 14.03.2014, 19:13:34
ddd323, Вы уже решили свою проблему с рыночной заявкой (снятием остатка ) ?
Title: Re: отмена заявок без запроса пользователя?
Post by: ddd323 on 14.03.2014, 21:28:54
2 Heller, функцию на сервере тоже надеюсь не сложно? Когда можно ждать функцию в терминале - в следующем релизе? А когда на сервере?

2 White Noise. Нет не решил. Сейчас единственный способ получать значения торгового диапазона - делать реальные заявки по рынку - в onOrder вернется хэш с заполненной ценой. Но, соответственно, даже таким способом до начала утренней торговой сессии получить торговый диапазон предстоящей сессии невозможно.
Так что все что можно делать сейчас - это ловить в onOrder статус рыночных заявок "отменено пользователем" (это если отмену заявок сам скрипт не делает) и повторять последнюю заявку как лимитную уже с параметром "поставить в очередь". Но с точки зрения потенциального проскальзывания (или точнее вероятности все-таки совершить сделку по этой цене на краю диапазона) из-за потерь времени это очень далекое от идеала решение.
Title: Re: отмена заявок без запроса пользователя?
Post by: White Noise on 15.03.2014, 17:49:33
Уточните пожалуйста, что вы имеете ввиду под термином : "Граница диапазона"  - конкретно для меня - это ограничение по ценнику на фьючерс (последний раз на моей памяти, достижение такое было 2008, ну несколько раз в 2011),...когда, как говорится хочешь,...но не можешь ни продать ни купить - да и страхово ))))

Но в разговоре присутствует понятие заявок, типа рыночные, лимитки,....

Суть вопроса же такая : нужно исполнить объем в нужную секунду без всяких остатков и их снятий, правильно ? Ну и соответственно вопрос по объему ,....что это у вас такой за объем - который уже по умолчанию нарушает все законы риск менеджмента ))))
Title: Re: отмена заявок без запроса пользователя?
Post by: ddd323 on 15.03.2014, 19:05:48
Под термином имею в виду то же самое. Последний раз это было 3 марта 2014 года на гепе вниз на открытии, причем диапазон менялся 2 раза в течение часа. Сделки по границе диапазона на продажу после его достижения еще шли (торги не были остановлены), т.к. находились иногда желающие покупать по этой цене.
Суть вопроса - нужно исполнить объем на любых условиях без всяких остатков (в итоге, т.е. можно в несколько порций) и снятий. Готового инструмента для этого не существует. Ближайший аналог - заявка по рынку согласно рекомендации биржи и мнению разработчиков о "классике" этой цели не удовлетворяет, т.к. эмулируется лимитной с "пограничной" ценой с параметром "снять остаток", т.е. если прямо сейчас желающих купить нет - то она снимается. А нужно чтобы, если желающих купить нет, заявка оставалась в стакане - тогда, например, через 5 или 50 секунд, когда появится желающий купить - моя заявка исполнилась бы.
3 марта моя заявка, поданная в 10.00.00 похоже дошла до биржи и стала активной на 242 трейде, а еще на 239 трейде граница торгового диапазона не была достигнута. Т.е., если бы моя заявка не была снята и осталась в стакане - она была бы третьей в очереди на продажу по "пограничной" цене и наверняка была бы исполнена.
Идеальное решение было бы - получить до начала торговой сессии нижнее  значение торгового диапазона и подавать заявку в 10.00.00 как лимитную по этой нижней границе с параметром "поставить в очередь". Тогда моя заявка на продажу осталась бы в стакане. Но для этого нужен соответствующий функционал терминала, и, наверное, сервера транзака. Возможное сейчас противодействие о котором я писал с предыдущем посте (поймать статус "отменена" и переподать заявку) будет означать что я был бы не 3-м в очереди на продажу по этой цене, а условно тысяча первым с призрачными шансами на исполнение. Разница - проскальзывание ~10000 пунктов вместо ~5000, а с учетом того, что я не просто закрывал длинную позицию, а переворачивался этой сделкой, разница для меня была бы между сильным убытком и заметной прибылью на этом гепе на открытии. (Хотя такие события случаются очевидно в среднем 1 раз в год - они достаточно крупные с точки зрения влияния на прибыль, чтобы о них стоило заботиться)

Про объем - если честно, не понял, при чем здесь объем. Я, к счастью, пока в тестовом режиме работаю и продавал всего 2 контракта. Но если бы я продавал 200, то разница для меня между 3-м и тысячным местом была бы еще важнее. При любом риск- менеджменте (или его отсутствии) задача закрыться как можно раньше и как можно надежнее при гигантских гепах, которые как показывает история иногда случаются, существует.
Title: Re: отмена заявок без запроса пользователя?
Post by: White Noise on 16.03.2014, 08:02:22
Предлагаю сделать следующее, вы покажете как вы выставляете заявку, я внесу пару изменений - и все должно заработать - так как вам надо ))))

Кусок кода по выставлению заявки в студию )))
Title: Re: отмена заявок без запроса пользователя?
Post by: ddd323 on 16.03.2014, 11:24:50
Что необычного вы собираетесь в нем увидеть? Обычная подача рыночной заявки через хеш. Если знаете как подавать рыночные заявки на ФОРТСе так, чтобы они в очередь ставились - так и напишите, как их подавать. (Добавка поля "unfilled", как я понял разработчиков, не поможет - оно будет игнорироваться.)

var OrdrHash = new_object("hash");
OrdrHash["quantity"] = 2;
OrdrHash["operation"] = OP_BUY;
OrdrHash["brokerref"] = 1;
var ordr_trnid = trade_action::transactMultiple(OrdrHash);

P.S. Хэш локальный.
Title: Re: отмена заявок без запроса пользователя?
Post by: ddd323 on 17.03.2014, 08:28:07
Heller, в дополнение к вопросу из поста #9.
В части получения информации от сервера об изменении торгового диапазона - в идеале неплохо бы сделать что-то типа вызова функции onTradeRangeChanged() по соответствующему событию, полученному от сервера. Естественно, при одновременном приходе этого события с другими (новая свеча, трейд) функция onTradeRangeChanged() должна обрабатываться/вызываться ДО исполнения соответствующих onNewCandle() и calc() (т.к. в них уже могут быть торговые операции, требующие знания новых "пограничных" цен)
Title: Re: отмена заявок без запроса пользователя?
Post by: White Noise on 17.03.2014, 13:21:23


var OrdrHash = new_object("hash");

OrdrHash["price"] = book.getAskPrice(0);
OrdrHash["quantity"] = 2;
OrdrHash["operation"] = OP_BUY;
OrdrHash["brokerref"] = 1;
var ordr_trnid = trade_action::transactMultiple(OrdrHash);

Title: Re: отмена заявок без запроса пользователя?
Post by: ddd323 on 17.03.2014, 20:35:44
Вероятно, вы имели в виду:
OrdrHash["price"] = book.getAskPrice(book.getAskPosCount()-1);

Но это в любом случае не дает границу торгового диапазона, а лишь границу известного клиенту стакана, глубиной 20, как я сейчас проверил (что кстати, странно, вроде кто-то на форуме говорил, что атф получает на фортсе стакан глубиной 100).
Т.е. если я бы подал такую заявку из onNewCandle() в 10.00 при гигантском гепе вверх с параметром "поставить в очередь" моя заявка к моменту поступления на биржу просто повисла бы в стакане на уже давно пройденной высоте.
Title: Re: отмена заявок без запроса пользователя?
Post by: klimov on 18.03.2014, 08:46:40
Но это в любом случае не дает границу торгового диапазона, а лишь границу известного клиенту стакана, глубиной 20, как я сейчас проверил (что кстати, странно, вроде кто-то на форуме говорил, что атф получает на фортсе стакан глубиной 100).

Глубина стакана зависит от настроек шлюза конкретного Брокера. И даже у одного Брокера на разных серверах м.б. разное кол-во строк в стаканах.
Title: Re: отмена заявок без запроса пользователя?
Post by: ddd323 on 18.03.2014, 10:19:53
klimov, посмотрите пожалуйста вопросы в постах #6 и #9. Можете что-то определенное про серверную функциональность сказать?
Title: Re: отмена заявок без запроса пользователя?
Post by: klimov on 18.03.2014, 15:21:52
Klimov, можно ли надеяться на то, что сервер транзака будет иметь функцию информирования клиентских терминалов об изменении торгового диапазона сразу как только сам получит эту информацию от сервера биржи?

Сервер делает это уже сейчас.
В табл. "Параметры финансовых инструментов" есть колонки "Мин/Макс цена FORTS"
Они должны изменяться при изменении границ цен на Бирже
Title: Re: отмена заявок без запроса пользователя?
Post by: ddd323 on 18.03.2014, 16:07:17
регулярное обновление значения пограничных цен и информирование о событии "биржа изменила торговый диапазон" это немного разный функционал.
Просто очень не хочется на каждой свече или перед каждой сделкой самому в скрипте атф проверять, не изменился ли диапазон (особенно, если получение этих пограничных цен будет асинхронным, т.е. приводить к ожиданию и потерям времени), вместо ожидания соответствующего события от сервера.
Я в посте #14 изложил свое видение идеала.
Title: Re: отмена заявок без запроса пользователя?
Post by: klimov on 19.03.2014, 11:37:01
Сервер так и делает - он посылает пользователям событие об изменении диапазона цен.
Но трансляцию этого события в ATF нам надо реализовывать отдельно.

Title: Re: отмена заявок без запроса пользователя?
Post by: ddd323 on 19.03.2014, 13:40:58
Heller, когда можно ожидать доступность пограничных цен в атф и трансляцию туда вышеупомянутого события от сервера - в следущем релизе или через релиз?
Title: Re: отмена заявок без запроса пользователя?
Post by: ddd323 on 24.03.2014, 09:54:21
Heller?
Title: Re: отмена заявок без запроса пользователя?
Post by: Heller on 24.03.2014, 16:12:01
Да в ближайшей версии ATF сделаем.