Доброе утро. Написал торгового робота, который умеет подавать заявки и снимать заявки. Этот торговый робот работает круглосуточно. Проблема в том, что сама биржа не работает круглосуточно. Из-за этого часто появляются сообщения "Ошибка создания заявки. [GW][3] "Сейчас эта сессия не идет."." Как определить средствами quik+lua возможно ли подавать заявки или нет?
Здравствуйте, Проверить можно через параметры TRADINGSTATUS или STATUS с помощью функции getParamEx Или еще проще, добавить проверку текущего времени. Расписание торгов заранее известно и меняется крайне редко
Sergey Gorokhov написал: Здравствуйте, Проверить можно через параметры TRADINGSTATUS или STATUS с помощью функции getParamEx Или еще проще, добавить проверку текущего времени. Расписание торгов заранее известно и меняется крайне редко
День добрый, у меня аналогичная проблема, на демо тестировал lua-скрипт на SiH8, Quik 7.16.1.36 02.02.18 в 15:48:17 (основная сессия, вечерний период) появилась аналогичная ошибка, при этом заявка в это время ни вручную ни скриптом не отправлялась. Также прошу пояснить, что произошло и как понять какие процессы происходили в терминале, так как скрипт после этого в окне "Доступные скрипты" также виден с зеленым треугольником, т.е. типа запущен, но при этом по факту не работает, так как никаких событий и сообщений в ходе его работы не появилось, т.е. дальше он не работал.
На демках использование TRADINGSTATUS и STATUS сомнительно. У меня они на паре демок просто не работали. Расписание сессий в демках в ТТТ тоже недостоверны, у меня там и сессий больше было (4 против 3 на реале). Может, с демками не повезло.
О расписании торгов в реале. Даже если вам приходит сообщение, что вечерка начнется в 19:10, то по факту она может начаться и в 19:05.
Поддержка, наверное, ответит в рабочее время, а пока я думаю так, на демо-сервере сдвинули время клиринга, но при чем тогда эта ошибка, если заявка не создавалась и не уходила на сервер? Хотя и не по теме второй вопрос, все жду ответа, почему запущенный в терминале скрипт не работал, может есть какой-то механизм с сервера этой ошибкой останавливать поток в терминале или что-то в этом роде?
Sergey Gorokhov написал: Проверить можно через параметры TRADINGSTATUS или STATUS с помощью функции getParamEx Или еще проще, добавить проверку текущего времени. Расписание торгов заранее известно и меняется крайне редко
Спасибо, попробую так и сделать. P.S. Это в США стабильность и понятный график торгов по времени -- а у нас суета -- на бирже СПБ теперь есть утренняя торговая сессия -- и хаотично меняющийся список "кто утром есть, а кого утром нет". Бардак и суета на ровном месте, как в колхозе.
Юрий Волошин, Я ещё на один "бардак" сегодня напоролся. Точнее, на их комбинацию: у буржуев всё просто: минимальный размер лота всегда 1 акция, а у нас их может быть, мягко говоря, МНОГО (например, размер лота у ВТБ 10000 акций). Сначала я записывал размер лота в файл и читал их оттуда - напоролся на то, что у некоторых моих тикеров он вдруг изменился и, соответственно, стала неправильно вычисляться сумма покупки/продажи. Тогда я стал читать размер лота при запуске скрипта через getParamEx-LOTSIZE. Всё было прекрасно, пока не начались утренние торги, к которым рублёвые акции подключаются только в 10 часов. А при раннем запуске LOTSIZE у них нулевой! А больше-то я его не перечитываю. Придётся, видимо, сделать так: файл результатов я теперь записываю не только по выходу, но и периодически, примерно раз в полчаса (Квик заставил, который пару раз издох на ровном месте), так в этот момент я теперь буду и перечитывать LOTSIZE, "на всякий пожарный".
Что до "кто утром есть, а кого утром нет" - я на днях давал набросок алгоритма в одной из местных веток, как с этим бороться.
я некоторые ключевые показатели -- втч getParamEx(XXXXsFull[key].birzha, key, 'TRADINGSTATUS').param_image пересчитываю каждые 9999 милисекунд... а что делать...
Владимир написал: Что делать? Видимо, то же, что и я: ВААПЩЕ не использовать TRADINGSTATUS!
Это ужасно, но Вы наверно правы! Сейчас все индикаторы TRADINGSTATUS -- ОДИНАКОВЫЕ -- хотя торги по AAPL на бирже СПБ идут, а торгов по Северсталь на Московской бирже нет! Я проверил по массиву из более чем 100 акций через dbgview -- ВСЕ ИНДИКАТОРЫ ОДИНАКОВЫЕ! По TRADINGSTATUS утренняя сессия на бирже СПБ неотличима никак! Золхоз и колхозники, их жеж мать!
ТАК КАК ЖЕ НАМ ОПРЕДЕЛИТЬ -- ЕСТЬ ТОРГИ ИЛИ НЕТ ПО ДАННОЙ ПОЗИЦИИ? По любой бирже -- биржа СПБ (утром и в нормальное время), Московская биржа, NYSE, Nasdaq...
Sergey Gorokhov написал: Здравствуйте, Проверить можно через параметры TRADINGSTATUS или STATUS с помощью функции getParamEx Или еще проще, добавить проверку текущего времени. Расписание торгов заранее известно и меняется крайне редко
Ваша фантазия не соответствует реальной жизни. Вот прямо сейчас торги идут, а в Lua QUIK 8.13 мы видим: 11:07 01.04.2021 [8928] key = CCL [8928] .param_image = закрыта [8928] .param_value = 0.000000 [8928] .result = 1
ВАША TRADINGSTATUS с помощью функции getParamEx НЕ РАБОТАЕТ В РЕАЛЬНОЙ ЖИЗНИ. СОВСЕМ НЕ РАБОТАЕТ. Проблема. Надо как-то реагировать. Ваш косяк? Косяк брокера? Косяк биржи? Кто у нас колхозник сегодня?
Приведите, пожалуйста, пример конкретного инструмента определенного класса, по которому наблюдается описанное поведение: в таблице терминала статус - открыта, а значение tradingstatus, полученное в Lua - закрыта. Пришлите, пожалуйста, снимок экрана, наглядно демонстрирующий проблему и фрагмент кода.
Приветствую всех! В развитие темы пара вопросов: 1) Как получить доступ через LUA к информационным сообщениям QUIK? В частности к информации о наличии обновлений. Вопрос далеко не праздный, т.к. многие поля таблиц иногда отказываются работать если не скачать последние обновления. Отсюда вытекают сложности с автономной работой: ваш робот может не прочитать поле из-за того, что в сети появилось обновление (например поля STATUS и TRADINGSTATUS), со всеми вытекающими. Поддержка везде советует их использовать, но умалчивает о том, что они не работают когда системе необходимо обновление. 2) Как получить доступ к данным котировок начиная с определенного времени или сессии? Другими словами, как получить данные, например, с текущего момента времени без подгрузки истории?
Приведите, пожалуйста, пример конкретного инструмента определенного класса, по которому наблюдается описанное поведение: в таблице терминала статус - открыта , а значение tradingstatus, полученное в Lua - закрыта . Пришлите, пожалуйста, снимок экрана, наглядно демонстрирующий проблему и фрагмент кода.
Заранее благодарим.
Проверил. Проблема не у вас в Lua QUIK, проблема в криворуких макаках на биржах России или у брокера на Сервере. Вот прямо сейчас, 9:40 суббота -- все биржи закрыты -- а при этом статус "торгуется" "открыта" стоит практически у всех акции Московской биржи и у всех акций биржи СПБ (кроме немецких, немецкие в статусе "закрыта") -- макаки-с... К вам претензий нет. Как писать грамотную программу на Lua QUIK, если на Московской бирже и на Бирже СПБ макаки -- я не знаю... открыта RUAL на Московской бирже, открыта GOOG на бирже СПБ -- в 9:45 субботы, ага... Или кто за это отвечает? Кто настраивает поле "статус" - "торгуется" -- оно же getParamEx(XXXXsFull[key].birzha, key, 'TRADINGSTATUS').param_image == 'открыта'?! Кто за это отвечает?!
Юрий Волошин, Никто ни за что не отвечает. А определить, когда идет торговая сессия, а когда нет, очень просто: если торги (по данному инструменту) идут, то значения LAST в ТТТ меняются. Если не меняются, нет и торгов. По любой причине: биржа не работает, брокер спит, провайдер в Инет не пускает или ещё почему.
Вот "прямо сейчас, 14:50 суббота -- все биржи закрыты", запустил Квик, запустил скрипт, в Инет не входил (данные, стало быть, вчерашние - что на Мосбирже, что на бирже СПБ, что русские акции, что немецкие, что американские, что китайские) - всё работает, а заявок скрипт не даёт, при этом статус "торгуется" "открыта" вообще не проверяется. Даванул на кнопочку "купить" для RUAL - говорит "Дай прогреться" (первую минуту у меня сделки запрещены, программа осматривается), даванул через минуту - и лишь тогда "Result=Not connected".
Теперь вхожу в Инет (скрипт по-прежнему работает)... МАМА ДОРОГАЯ! ЧТО ЭТО?! Куча сделок, продаж и покупок, и все в одну и ту же секунду! Во поэкспериментировал, блин! Раньше я сначала входил в сеть, а потом запускал скрипт. Что бы это значило?! Ха-ха-ха! Я просто В ДИКОМ восторге! Сделки-то есть, а заявок ни одной, это она залудила кучу прерываний OnTrade по моим ВЧЕРАШНИМ заявкам, вчера же и исполненным! О, сколько нам открытий чудных... Причём пока связи не было, не было и прерываний. Это брокер подсуетился, штоле? А мой-то скрипт ВЕРИТ этой лапше! Он заявки не подавал, но думает, что их подавал юзер, вручную, через стаканы и, соответственно, учитывает это как сделки по "левым" заявкам. ДА УЖЖЖЖ!
Регламент работы учебного сервера QUIK-Junior можно посмотреть по ссылке: QUIK-Брокер учебная копия — ARQA Technologies Период клиринга длится с 15:45 до 16:00 по МСК - 15 минут, до начала вечерней торговой сессии.