Заявка, выставленная по стоп-заявке №....., отвергнута торговой системой:, Ошибка оздания заявки [GW] [332] "нехватка средств по лимитам клиента".
Пользователь
Сообщений: Регистрация: 20.10.2016
24.03.2018 13:12:11
Добрый день. Вчера тестировал скрипт на демо, умышленно на всю котлету. Как и предполагал не зря. При исполнении стоп-заявки робот выставил лимитку, с небольшим отклонением от цены условия срабатывания. Лимитка была отвергнута по причине нехватки средств. (Бред, т.к. нужно было закрыть то количество, которое фактически уже было куплено/продано, но этот вопрос не к вам). Подскажите где отлавливать данный факт и самое главное, как закрывать позицию по рынку, ведь новая лимитная заявка, аврийно-выставленная роботом с отклонением в несколько пунктов от текущей цены также будет отвергнута.
Пользователь
Сообщений: Регистрация: 27.03.2016
24.03.2018 15:24:40
На днях была похожая ситуация, тоже с демо-биржей и с той же диагностикой. Перестали приниматься лимитки, ни купить, ни продать. Поддержка брокера объяснила, что были проблемы на демо-бирже. Через некоторое время лимиты восстановили. Попробуйте пообщаться с брокером.
Кстати, демо-биржа конкурса InvestTrial оказалась удобна для тестирования роботов - участники близки по финансовым возможностям, безумных действий совершить особо не могут, трафик удерживается близко к реальному, но из-за особенностей его реализации результаты получаются завышенные.
Пользователь
Сообщений: Регистрация: 20.10.2016
26.03.2018 13:23:03
Пока все молчат дополню... В функции OnStopOrder имеются флаги, но первые два из указанных ниже никак себя не проявили, сработал только последний.
if bit.band(stop_order.flags,0x400)==0x1 then to_log(tostring(SECCODE).." OnStopOrder(): Стоп-заявка № "..tostring(NO).." сработала, но была отвергнута торговой системой.") end
if bit.band(stop_order.flags,0x800)==0x1 then to_log(tostring(SECCODE).." OnStopOrder(): Стоп-заявка № "..tostring(NO).." сработала, но не прошла контроль лимитов.") end
if bit.band(stop_order.flags,0x2)==0x0 and bit.band(stop_order.flags,0x1)==0x0 then to_log(tostring(SECCODE).." OnStopOrder(): Cтоп-заявка № "..tostring(NO).." исполнена.") end
Пользователь
Сообщений: Регистрация: 20.10.2016
28.03.2018 12:27:41
Ауууу
QUIK clients support
Сообщений: Регистрация: 27.01.2015
28.03.2018 13:28:59
Добрый день,
Цитата
sav 312 написал: Подскажите где отлавливать данный факт
Рекомендуем ознакомиться с веткой:
Цитата
sav 312 написал: как закрывать позицию по рынку, ведь новая лимитная заявка, аврийно-выставленная роботом с отклонением в несколько пунктов от текущей цены также будет отвергнута.
Для выставления рыночной заявки можно использовать заявку вида: "TAKE_PROFIT_AND_STOP_LIMIT_ORDER", в которой можно заполнить данные только для нужного Вам типа стоп-заявки (стоп-лимит или тейк профит). Для получения правильных параметров такой заявки рекомендуем создать карман транзакции в Рабочем месте QUIK, после чего положив туда заявку такого типа выполнить ее сохранение в *tri файл.
Пользователь
Сообщений: Регистрация: 20.10.2016
28.03.2018 16:04:13
Цитата
Stanislav Tvorogov написал: Для выставления рыночной заявки можно использовать заявку вида: "TAKE_PROFIT_AND_STOP_LIMIT_ORDER", в которой можно заполнить данные только для нужного Вам типа стоп-заявки (стоп-лимит или тейк профит).
Не совсем понял зачем нужно ещё раз использовать стоп-лимит и тейк-профит, пусть даже нужного мне вида. Моя стоп-заявка, выставленная роботом исполнилась, но лимитка, выставленная исполненной стоп-заявкой была отвергнута, т.е. она даже не появлялась в таблице заявок. В моем скрипте ловится номер заявки, которая была рождена исполненной стоп-заявкой и мониторится ее исполнение, с последующей отправкой смс-уведомления. В моем случае нет номера, т.к. и заявки нет. Возникает несколько вопросов: 1. Почему не сработали флаги, указанные выше? (Моя ошибка или глюк?) Ответ на это вопрос сильно упростил бы мою задачу. 2. Где отлавливать данную ситуацию, раз уж флаги не срабатывают. Как вариант, если в течение определённого времени (ну скажем 5 секунд) не верно условие if stop_order.linkedorder > 0 (т.е. не получили номер заявки, т.к. она не была создана), то кроем позу аварийно. 3. Как закрыть позу аварийно? При выставление роботом рыночной заявки (лимитка с отклонением в несколько шагов от текущей цены) получим такой же результат - нехватка средств по лимитам. Когда ситуация произошла - крыл руками, сначала на 1 лот меньше общего количества, потом оставшийся 1 лот. Совсем не нравится данная логика. 4. Еслиловить в OnTransReply, то по какому параметру? Номера заявки, выставленной стоп-заявкой нет. trans_id тоже не знаю т.к. заявку выставляет не робот, а стоп-заявка, возможно будет = trans_id_stop?
Пользователь
Сообщений: Регистрация: 20.10.2016
28.03.2018 16:06:25
Сори за орфографию)) Торопился))
QUIK clients support
Сообщений: Регистрация: 27.01.2015
30.03.2018 17:27:01
Добрый день,
Цитата
sav 312 написал: Почему не сработали флаги, указанные выше?
Для ответа на Ваш вопрос нужно знать все данные о выставляемых Вами заявках. Рекомендуем посмотреть на параметр "Результат" таблицы стоп-заявок и проверить, соответствует ли он тому, что было возвращено в OnStopOrder.
Цитата
sav 312 написал: Где отлавливать данную ситуацию 4. Еслиловить в OnTransReply, то по какому параметру? Номера заявки, выставленной стоп-заявкой нет. trans_id тоже не знаю т.к. заявку выставляет не робот, а стоп-заявка, возможно будет = trans_id_stop?
Возможные варианты решения проблемы перечислены в ранее направленной ветке:
sav 312 написал: Почему не сработали флаги, указанные выше?
Для ответа на Ваш вопрос нужно знать все данные о выставляемых Вами заявках. Рекомендуем посмотреть на параметр "Результат" таблицы стоп-заявок и проверить, соответствует ли он тому, что было возвращено в OnStopOrder.
Цитата
sav 312 написал: Где отлавливать данную ситуацию 4. Еслиловить в OnTransReply, то по какому параметру? Номера заявки, выставленной стоп-заявкой нет. trans_id тоже не знаю т.к. заявку выставляет не робот, а стоп-заявка, возможно будет = trans_id_stop?
Возможные варианты решения проблемы перечислены в ранее направленной ветке:
Цитата
sav 312 написал: нехватка средств по лимитам
Данную диагностику возвращает Торговая система. По причинам ее появления рекомендуем обратиться к Вашему брокеру.
Станислав, спасибо, что наконец обратили внимание на мой пост. Ответы к сожалению, Вы дали как-то избирательно. Да и в указанной Вами ветке, ответов на мои вопросы нет. Кстати, прочитал я её, ещё до обращения к Вам. Давайте попробуем иначе... Помогите пожалуйста разобраться с причиной не срабатывания флагов, а дальше самостоятельно решать буду. В таблице стоп-заявок результат - отвергнута ТС.
if bit.band(stop_order.flags,0x400)==0x1 then to_log(tostring(SECCODE).." OnStopOrder(): Стоп-заявка № "..tostring(NO).." сработала, но была отвергнута торговой системой.") end
if bit.band(stop_order.flags,0x800)==0x1 then to_log(tostring(SECCODE).." OnStopOrder(): Стоп-заявка № "..tostring(NO).." сработала, но не прошла контроль лимитов.") end
На указанные выше флаги реакции никакой.
Ниже по коду есть ещё 1 флаг:
if bit.band(stop_order.flags,0x2)==0x0 and bit.band(stop_order.flags,0x1)==0x0 then to_log(tostring(SECCODE).." OnStopOrder(): Cтоп-заявка № "..tostring(NO).." исполнена.") end
Он чётко отработал. Вот и непонятно мне почему, флаги сигнализирующие об исполнении заявки срабатывают, а о том, что отвергнута ТС нет.
QUIK clients support
Сообщений: Регистрация: 27.01.2015
02.04.2018 20:21:28
Добрый день,
Просьба прислать полный пример скрипта на котором проявляется проблема.
Пользователь
Сообщений: Регистрация: 20.10.2016
07.04.2018 11:38:53
Цитата
Stanislav Tvorogov написал: Просьба прислать полный пример скрипта на котором проявляется проблема.
Станислав, спасибо. Разобрался самостоятельно.
Пользователь
Сообщений: Регистрация: 20.10.2016
11.04.2018 09:34:31
Цитата
sav 312 написал: Станислав, спасибо. Разобрался самостоятельно.
Похоже поторопился я с выводами. Ошибку в коде исправил, но флаги на отвергнутые заявки так и не срабатывают. В любом случае в логах вижу, что стоп-заявка исполнена, но когда заявка рождённая стоп-заявкой выставляется, то запоминается ее номер и т.д. ,а когда отвергнута ТС реакции никакой.
Код
if bit.band(stop_order.flags,0x2)==0x0 and bit.band(stop_order.flags,0x1)==0x0 then
to_log(tostring(SECCODE).." OnStopOrder(): Cтоп-заявка № "..tostring(NO).." исполнена.")
if stop_order.linkedorder > 0 then
OrderNum_CLOSE = stop_order.linkedorder;
to_log(tostring(SECCODE).." OnStopOrder(): Запоминаем номер созданной стоп-заявкой заявки - № "..tostring(OrderNum_CLOSE))
close_pos = 2
elseif bit.band(stop_order.flags,0x400)==0x1 then
to_log(tostring(SECCODE).." OnStopOrder(): Стоп-заявка № "..tostring(NO).." сработала, но была отвергнута торговой системой.")
close_pos = 1
elseif bit.band(stop_order.flags,0x800)==0x1 then
to_log(tostring(SECCODE).." OnStopOrder(): Стоп-заявка № "..tostring(NO).." сработала, но не прошла контроль лимитов.")
close_pos = 1
end
end
Пользователь
Сообщений: Регистрация: 20.10.2016
12.04.2018 08:29:53
Ау.. Люди...
Пользователь
Сообщений: Регистрация: 20.10.2016
12.04.2018 12:00:11
Up
Пользователь
Сообщений: Регистрация: 20.10.2016
13.04.2018 09:13:03
Ждемс...
Michael Bulychev
Гость
13.04.2018 11:06:32
Добрый день. у Вас ошибка в коде. Вместо bit.band(stop_order.flags,0x400)==0x1 надо проверять bit.band(stop_order.flags,0x400) ~= 0 Результат битового AND нужно сравнивать не с единицей, а на неравенство с нулем.
Пользователь
Сообщений: Регистрация: 20.10.2016
13.04.2018 11:08:24
Цитата
Michael Bulychev написал: Добрый день. у Вас ошибка в коде. Вместо bit.band(stop_order.flags,0x400)==0x1 надо проверять bit.band(stop_order.flags,0x400) ~= 0 Результат битового AND нужно сравнивать не с единицей, а на неравенство с нулем.