Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?
24.01.2025, 19:36:24
Начало Помощь Поиск Войти Регистрация
Новости: ООО «Скрин маркет системз», правообладатель программы «Система брокерского обслуживания «TRANSAQ» официально заявляет, что не ведет никакой деятельности в мессенджерах или социальных сетях. 
Подробности на нашем сайте  WWW.TRANSAQ.RU.

Transaq  |  СБО "Transaq"  |  Подсистема ATF  |  Topic: Глюк при выставлении заявок по рынку « предыдущая тема следующая тема »
Страниц: [1] Печать
Автор Тема: Глюк при выставлении заявок по рынку  (Прочитано 8136 раз)
ddd323
Sr. Member
****
Сообщений: 257


Просмотр профиля Email
« : 18.08.2011, 23:36:01 »

Торгую фьючерсами на трех графиках - РТС, Газпром и Сбер и вот впервые за пару месяцев работы на одном и том же коде во дни высокой волатильности (9-10 августа 2011) получил странный глюк - не выставились несколько заявок по рынку. (До и после все работало как часы)
В onATFOrderErr() написали мне, что де попытка выставить заявку с нулевой ценой. В таблице заявок в терминале заявка не появилась.

Мой код схематично следующий:
static OrdrHash;
function init()
{
   OrdrHash = new_object("hash");
}
function onATFOrderErr(var str)
{
   file_ATFlog.writeLn(getFormattedDateTime(getServerTime())+" Ошибка выставления заявки: "+str);
}
function onNewCandle()
{
   OrdrHash["quantity"] = 1; OrdrHash["operation"] = OP_BUY/OP_SELL; trade_action::transactMultiple(OrdrHash);
}
Т.е. использую единожны, глобально определенный хэш. Нигде в коде поле цены этого хэша не заполняется и вообще не используется (т.е. я использую только заявки по рынку). Т.е. оно (поле цены) должно вечно быть равно NULL и не не может превратиться в 0. Если только это не сделали внутретнности АТФ (например при некорректном приведении типов) или не моргнули биты в оперативке (или есть еще варианты связанные с глюками в управлении динамически выделенной памятью?).

В лог я получил соответственно следующие записи (все эти 3 заявки подавались из onNewCandle() ):
10:55:00 09.08.11 Ошибка выставления заявки: RTS-9.11 (r1): Некорректный ордер: Покупка  RIU1 по цене 0
14:25:08 09.08.11 Ошибка выставления заявки: GAZR-9.11 (gazr1): Некорректный ордер: Покупка  GZU1 по цене 0
19:09:57 10.08.11 Ошибка выставления заявки: SBRF-9.11 (sbrf1): Некорректный ордер: Покупка  SRU1 по цене 0

Соответственно, возникают вопросы:
1. это мне биржа этой ошибкой ответила или терминал АТФ, т.е. запрос на биржу даже не ушел?
2. изменяют ли хоть в каких-либо ситуациях внутренности вашего движка ATF состояние хэшовых переменных при выставлении заявок по хэшу?
3. каков все-таки алгоритм формирования цены в заявке по фьючам, которая уходит на биржу при ее выставлении по рынку? (Это важно понимать с точки зрения исправления ситуации путем повторного направления заявки)

Эта тема немного поднималась:
http://www.transaq.ru/forum/index.php?topic=467.msg2569#msg2569 (сообщения 17-21). Тогда сказали, что терминал/сервер Транзак в этой ситуации "выставляет заявки по минимальной или максимальной допустимой цене на данный момент",
а эти макс/мин. цены определяются каким-то непонятным (Heller'у) образом сервером ФОРТС и возможно (по мнению daytrader'a) изменяются только во время клирингов, т.е. могут не меняться часами.
Типично из опыта - этот отступ мин/макс цен ставится от текущей цены на расстоянии 2%. Я раньше делал рыночные заявки сам - в trade_action::buy() добавлял отступ ~2.5% к текущей цене.
Так 2 или 3 раза на ~1000 попыток заявки не выставлялись и я получал в "окно вывода ATF" тексты а-ля "Некорректный ордер: Покупка  RIU0 по цене 148500".
Потом появилась возможность выставлять заявки по рынку через хэш - я обрадовался - типа теперь мне сервер всегда правильную цену с правильным отступом будет подставлять. И тут на тебе - опять непонятный облом. Я почему про это вспомнил - во всех этих 3-х случаях невыставления по хэшу по причине нулевой цены,
рынок к моменту попыток поставить заявку уже успевах сходить на 4-5% от цены последнего клиринга, то есть выходил за эти пресловутые коридоры от сервера РТС. Соответственно, я опасаюсь, что
повторение высталения заявки по рынку через функцию trade_action::transactMultiple() выдаст ту же ошибку нулевой цены (чего-то мне не очень верится в моргание битов в оперативной памяти, испортившее мен хэши 3 раза за 2 дня),
а повторение высталения заявки по рынку старым способом выдаст старую ошибку "некорректный ордер" и как тогда с этим бороться непонятно. Есть еще идея послать на сервер условную заявку с заведомо истинным условием, предполагая, что сервер Транзак правильно сделает заявку по рынку.
Но эта идея имеет смысл, только если цену исходя из коридора в запрос подставляет терминал Транзак... Если этим занимается сервер и ошибку нулевой цены генерирует он - он и в случае заведомо истинной условной заявки не выставит заявку по рынку...

4. ну и вообще какие есть соображения о причинах этого глюка, появляющегося с вероятностью ~0.5% (на мой вкус неприемлемо много).

Версия 5.02.274 rev 48  ATF 1.8. Брокер - финам.

P.S. Воспроизведения этого глюка, буде у Вас такое желание Вам наверное тоже придется несколько месяцев ждать
« Последнее редактирование: 19.08.2011, 18:23:43 от ddd323 » Записан
Heller
Разработчики
Hero Member
*****
Сообщений: 1277


Просмотр профиля Email
« Ответ #1 : 19.08.2011, 10:53:54 »

Пока не понятно в чем дело. Не могли бы вы отправить на support@transaq.ru ваш идентификатор трейдера, имя клиента, указать вашего брокера и прислать нам файл TSClient.log?

Сообщение об этой ошибке выдает сервер (наш или биржи) - он не принял заявку. По какой причине это произошло пока не понятно - будем разбираться.
Записан
White Noise
Full Member
***
Сообщений: 164


White Noise

ICQ Messenger - 411196569
Просмотр профиля Email
« Ответ #2 : 19.08.2011, 13:16:19 »

Торгую фьючерсами на трех графиках - РТС, Газпром и Сбер и вот впервые за пару месяцев работы на одном и том же коде во дни высокой волатильности (9-10 августа 2011) получил странный глюк - не выставились несколько заявок по рынку. (До и после все работало как часы)
В onATFOrderErr() написали мне, что де попытка выставить заявку с нулевой ценой. В таблице заявок в терминале заявка не появилась.

Мой код схематично следующий:
static OrdrHash;
function init()
{
   OrdrHash = new_object("hash");
}
function onATFOrderErr(var str)
{
   file_ATFlog.writeLn(getFormattedDateTime(getServerTime())+" Ошибка выставления заявки: "+str);
}
function onNewCandle()
{
   OrdrHash["quantity"] = 1; OrdrHash["operation"] = OP_BUY/OP_SELL; trade_action::transactMultiple(OrdrHash);
}
Т.е. использую единожны, глобально определенный хэш. Нигде в коде поле цены этого хэша не заполняется и вообще не используется (т.е. я использую только заявки по рынку). Т.е. оно (поле цены) должно вечно быть равно NULL и не не может превратиться в 0. Если только это не сделали внутретнности АТФ (например при некорректном приведении типов) или не моргнули биты в оперативке (или есть еще варианты связанные с глюками в управлении динамически выделенной памятью?).

В лог я получил соответственно следующие записи (все эти 3 заявки подавались из onNewCandle() ):
10:55:00 09.08.11 Ошибка выставления заявки: RTS-9.11 (r1): Некорректный ордер: Покупка  RIU1 по цене 0
14:25:08 09.08.11 Ошибка выставления заявки: GAZR-9.11 (gazr1): Некорректный ордер: Покупка  GZU1 по цене 0
19:09:57 10.08.11 Ошибка выставления заявки: SBRF-9.11 (sbrf1): Некорректный ордер: Покупка  SRU1 по цене 0

Соответственно, возникают вопросы:
1. это мне биржа этой ошибкой ответила или терминал АТФ, т.е. запрос на биржу даже не ушел?
2. изменяют ли хоть в каких-либо ситуациях внутренности вашего движка ATF состояние хэшовых переменных при выставлении заявок по хэшу?
3. каков все-таки алгоритм формирования цены в заявке по фьючам, которая уходит на биржу при ее выставлении по рынку? (Это важно понимать с точки зрения исправления ситуации путем повторного направления заявки)

Эта тема немного поднималась:
http://www.transaq.ru/forum/index.php?topic=467.msg2569#msg2569 (сообщения 17-21). Тогда сказали, что терминал/сервер Транзак в этой ситуации "выставляет заявки по минимальной или максимальной допустимой цене на данный момент",
а эти макс/мин. цены определяются каким-то непонятным (Heller'у) образом сервером ФОРТС и возможно (по мнению daytrader'a) изменяются только во время клирингов, т.е. могут не меняться часами.
Типично из опыта - этот отступ мин/макс цен ставится от текущей цены на расстоянии 2%. Я раньше делал рыночные заявки сам - в trade_action::buy() добавлял отступ ~2.5% к текущей цене.
Так 2 или 3 раза на ~1000 попыток заявки не выставлялись и я получал в "окно вывода ATF" тексты а-ля "Некорректный ордер: Покупка  RIU0 по цене 148500".
Потом появилась возможность выставлять заявки по рынку через хэш - я обрадовался - типа теперь мне сервер всегда правильную цену с правильным отступом будет подставлять. И тут на тебе - опять непонятный облом. Я почему про это вспомнил - во всех этих 3-х случаях невыставления по хэшу по причине нулевой цены,
рынок к моменту попыток поставить заявку уже успевах сходить на 4-5% от цены последнего клиринга, то есть выходил за эти пресловутые коридоры от сервера РТС. Соответственно, я опасаюсь, что
повторение высталения заявки по рынку через функцию trade_action::transactMultiple() выдаст ту же ошибку нулевой цены (чего-то мне не очень верится в моргание битов в оперативной памяти, испортившее мен хэши 3 раза за 2 дня),
а повторение высталения заявки по рынку старым способом выдаст старую ошибку "некорректный ордер" и как тогда с этим бороться непонятно. Есть еще идея послать на сервер условную заявку с заведомо истинным условием, предполагая, что сервер Транзак правильно сделает заявку по рынку.
Но эта идея имеет смысл, только если цену исходя из коридора в запрос подставляет терминал Транзак... Если этим занимается сервер и ошибку нулевой цены генерирует он - он и в случае заведомо истинной условной заявки не выставит заявку по рынку...

4. ну и вообще какие есть соображения о причинах этого глюка, появляющегося с вероятностью ~0.5% (на мой вкус неприемлемо много).

Версия 5.02.274 rev 48  ATF 1.8. Брокер - финам.

P.S. Воспроизведения этого глюка, буде у Вас такое желание Вам наверное тоже придется несколько месяцев ждать


Все просто, в стакане нет нужного колличества заявок,...а ваша цена в хеше, или точнее позиция по которой вы выставляете на продажу из хеша - просто не содержится в стакане,....т.е. вы выставляете например на 15 позицию купить,...а в стакане их всего 10,...значит цены то как таковой и нет на 15 номере,...атф это не распознает ему нужна конкретика, ....вот он ее и зануляет как статик переменс,...
Записан
White Noise
Full Member
***
Сообщений: 164


White Noise

ICQ Messenger - 411196569
Просмотр профиля Email
« Ответ #3 : 19.08.2011, 13:19:19 »

Торгую фьючерсами на трех графиках - РТС, Газпром и Сбер и вот впервые за пару месяцев работы на одном и том же коде во дни высокой волатильности (9-10 августа 2011) получил странный глюк - не выставились несколько заявок по рынку. (До и после все работало как часы)
В onATFOrderErr() написали мне, что де попытка выставить заявку с нулевой ценой. В таблице заявок в терминале заявка не появилась.

Мой код схематично следующий:
static OrdrHash;
function init()
{
   OrdrHash = new_object("hash");
}
function onATFOrderErr(var str)
{
   file_ATFlog.writeLn(getFormattedDateTime(getServerTime())+" Ошибка выставления заявки: "+str);
}
function onNewCandle()
{
   OrdrHash["quantity"] = 1; OrdrHash["operation"] = OP_BUY/OP_SELL; trade_action::transactMultiple(OrdrHash);
}
Т.е. использую единожны, глобально определенный хэш. Нигде в коде поле цены этого хэша не заполняется и вообще не используется (т.е. я использую только заявки по рынку). Т.е. оно (поле цены) должно вечно быть равно NULL и не не может превратиться в 0. Если только это не сделали внутретнности АТФ (например при некорректном приведении типов) или не моргнули биты в оперативке (или есть еще варианты связанные с глюками в управлении динамически выделенной памятью?).

В лог я получил соответственно следующие записи (все эти 3 заявки подавались из onNewCandle() ):
10:55:00 09.08.11 Ошибка выставления заявки: RTS-9.11 (r1): Некорректный ордер: Покупка  RIU1 по цене 0
14:25:08 09.08.11 Ошибка выставления заявки: GAZR-9.11 (gazr1): Некорректный ордер: Покупка  GZU1 по цене 0
19:09:57 10.08.11 Ошибка выставления заявки: SBRF-9.11 (sbrf1): Некорректный ордер: Покупка  SRU1 по цене 0

Соответственно, возникают вопросы:
1. это мне биржа этой ошибкой ответила или терминал АТФ, т.е. запрос на биржу даже не ушел?
2. изменяют ли хоть в каких-либо ситуациях внутренности вашего движка ATF состояние хэшовых переменных при выставлении заявок по хэшу?
3. каков все-таки алгоритм формирования цены в заявке по фьючам, которая уходит на биржу при ее выставлении по рынку? (Это важно понимать с точки зрения исправления ситуации путем повторного направления заявки)

Эта тема немного поднималась:
http://www.transaq.ru/forum/index.php?topic=467.msg2569#msg2569 (сообщения 17-21). Тогда сказали, что терминал/сервер Транзак в этой ситуации "выставляет заявки по минимальной или максимальной допустимой цене на данный момент",
а эти макс/мин. цены определяются каким-то непонятным (Heller'у) образом сервером ФОРТС и возможно (по мнению daytrader'a) изменяются только во время клирингов, т.е. могут не меняться часами.
Типично из опыта - этот отступ мин/макс цен ставится от текущей цены на расстоянии 2%. Я раньше делал рыночные заявки сам - в trade_action::buy() добавлял отступ ~2.5% к текущей цене.
Так 2 или 3 раза на ~1000 попыток заявки не выставлялись и я получал в "окно вывода ATF" тексты а-ля "Некорректный ордер: Покупка  RIU0 по цене 148500".
Потом появилась возможность выставлять заявки по рынку через хэш - я обрадовался - типа теперь мне сервер всегда правильную цену с правильным отступом будет подставлять. И тут на тебе - опять непонятный облом. Я почему про это вспомнил - во всех этих 3-х случаях невыставления по хэшу по причине нулевой цены,
рынок к моменту попыток поставить заявку уже успевах сходить на 4-5% от цены последнего клиринга, то есть выходил за эти пресловутые коридоры от сервера РТС. Соответственно, я опасаюсь, что
повторение высталения заявки по рынку через функцию trade_action::transactMultiple() выдаст ту же ошибку нулевой цены (чего-то мне не очень верится в моргание битов в оперативной памяти, испортившее мен хэши 3 раза за 2 дня),
а повторение высталения заявки по рынку старым способом выдаст старую ошибку "некорректный ордер" и как тогда с этим бороться непонятно. Есть еще идея послать на сервер условную заявку с заведомо истинным условием, предполагая, что сервер Транзак правильно сделает заявку по рынку.
Но эта идея имеет смысл, только если цену исходя из коридора в запрос подставляет терминал Транзак... Если этим занимается сервер и ошибку нулевой цены генерирует он - он и в случае заведомо истинной условной заявки не выставит заявку по рынку...

4. ну и вообще какие есть соображения о причинах этого глюка, появляющегося с вероятностью ~0.5% (на мой вкус неприемлемо много).

Версия 5.02.274 rev 48  ATF 1.8. Брокер - финам.

P.S. Воспроизведения этого глюка, буде у Вас такое желание Вам наверное тоже придется несколько месяцев ждать


Все просто, в стакане нет нужного колличества заявок,...а ваша цена в хеше, или точнее позиция по которой вы выставляете на продажу из хеша - просто не содержится в стакане,....т.е. вы выставляете например на 15 позицию купить,...а в стакане их всего 10,...значит цены то как таковой и нет на 15 номере,...атф это не распознает ему нужна конкретика, ....вот он ее и зануляет как статик переменс,...



Причем цену вы наверное вычисляете методом разницы хая и лоуа,...а представьте если лоу - хай 300 р, ...на ртс вам приходится делить на 5,...а это будет 300/5 = 60,.....хе,....откель в стакане столько позиций .....вот и ноль....
Записан
White Noise
Full Member
***
Сообщений: 164


White Noise

ICQ Messenger - 411196569
Просмотр профиля Email
« Ответ #4 : 19.08.2011, 13:20:57 »

Кстати в стакане всего 20 снизу бид,  и 19 сверху аск позиций,...- это в самый пик торгов, а вечером даже и на это порой не приходится надеяться. 
Записан
ddd323
Sr. Member
****
Сообщений: 257


Просмотр профиля Email
« Ответ #5 : 19.08.2011, 18:23:28 »

Heller, послал


White Noise, цену при подаче через trade_action::buy() на РТС я определял как close-4000. Если ли бы Вы были правы про стакан плюс минус 20, то я бы ни разу не сумел выставить заявку. А у меня 1000 таких заявок успешно выставилось. Кстати плюс минус 20 это только видимая в транзаке часть стакана.
Записан
Heller
Разработчики
Hero Member
*****
Сообщений: 1277


Просмотр профиля Email
« Ответ #6 : 22.08.2011, 14:36:35 »

Спасибо, нашли ошибку. Поправим и сделаем сборку.

Собственно ошибка в том, что неверное формируется сообщение. Там есть какая-то реальная причина почему заявка не может быть выставлена на биржу, но сообщение формируется неверное. Исправляем.
Записан
ddd323
Sr. Member
****
Сообщений: 257


Просмотр профиля Email
« Ответ #7 : 22.08.2011, 20:51:06 »

То есть исправление будет в АТФ 1.13 или будет партизанская для 1.8? Или речь вообще о сборке сервера? Короче когда до людей то дойдет?

Про меня неизвестно случайно, какое правильное сообщение должно было быть сформировано?
Записан
Heller
Разработчики
Hero Member
*****
Сообщений: 1277


Просмотр профиля Email
« Ответ #8 : 23.08.2011, 11:47:15 »

Дойдет на днях, вероятно даже сегодня. Будет партизанское обновление для 1.8. Выложу сюда ссылку.
Записан
ddd323
Sr. Member
****
Сообщений: 257


Просмотр профиля Email
« Ответ #9 : 29.08.2011, 23:40:49 »

Недавно у финама появилась 5.02.275.01 rev 48  ATF 1.8
Это не оно?
Записан
Heller
Разработчики
Hero Member
*****
Сообщений: 1277


Просмотр профиля Email
« Ответ #10 : 30.08.2011, 15:01:15 »

Да, это именно оно. Там этой ошибки уже нет.
Записан
Страниц: [1] Печать 
Transaq  |  СБО "Transaq"  |  Подсистема ATF  |  Topic: Глюк при выставлении заявок по рынку « предыдущая тема следующая тема »
Перейти в:  


Войти

Powered by MySQL Powered by PHP Powered by SMF 2.0.10 | SMF © 2006-2008, Simple Machines LLC Valid XHTML 1.0! Valid CSS!