Николай Бехтерев (Все сообщения пользователя)
Ясно, что описаны, просто я не совсем понимаю, что делают другие битовые функции, вот и спросил, есть ли способ за одну битовую функцию на этими битами узнать всё и сразу. Ясно, будем тыкать.
Хорошо, но если в описании функции КоллБека не передать табличку, то она не обновится, верно?Т.е. в моём примере выше, в отличие от вашего табличка с данными обновится, а в вашем нет, по сколько функции не передаётся таблица, верно?
И ещё пару вопросов, у меня вот такого вида код:
ЦитатаSergey Gorokhov написал:Здравствуйте,OnFuturesClientHolding(fut_pos)message(type(fut_pos))end ЦитатаНиколай Камынин написал:пардон опечаткаПопробую пояснить далее Вот примерный алгоритм Вашего робота: ---------------------------- СОСТОЯНИЯ ( S) 1) свободно 2) торгуем 3) ждем ------------------------- OnQuote S==1 - если нет позы, то покупаем, иначе продаем. Выставляем заявку по лучшей цене , S=3 S==2 - цена в заявке хуже лучшей, снимаем заявку, S=3 ------------------------- OnOrder если заявка активна, то S=2, иначе S=1 ---------------------Угу, я уже сам понял, что состояния робота фиксируются в глобальных переменных, которые логично менять внутри коллбеков.
Я подведу небольшой итог:1. КоллБеки поступают последовательно, пока не будет обработан весь коллбек, пусть даже с очень длинным циклом внутри, другой коллбек не поступит в обработку.2. Майн и КоллБеки работают в скрипте параллельно, при условии многоядерности машины.
Цитата Николай Бехтерев написал:sleep( ) прерывается КоллБеками? Цитата Николай Бехтерев написал:А что будет если замутить в коллБеке OnQuote( ) цикл while (пока заявка активна) do sendTransaction(убить заявку) Цитата Старатель написал:вы не получите следующий колбэк, пока не закончите обрабатывать текущий. А чтобы получить новое состояние заявки - снята - терминал должен получить колбэк OnOrder с этим состоянием. ЦитатаСтаратель написал:1. sleep в колбэке с большой долей вероятности приводит к зависанию скрипта и QUIK в целом. Поэтому, использовать sleep в колбэках опасно.2. Даже если бы это было не так, вы не получите следующий колбэк, пока не закончите обрабатывать текущий. А чтобы получить новое состояние заявки - снята - терминал должен получить колбэк OnOrder с этим состоянием. Поэтому, после подачи транзакции на снятие заявки вам ничего не остаётся, как ждать следующего OnOrder с новыми флагами. ЦитатаНиколай Камынин написалНе в обиду будет сказано, но Ваш пост свидетельствует о том, что Вы пытаетесь, еще не придуманный свой роман писать сразу на японском, без словаря, спрашивая на форуме, как написать на японском . то или иное слово и зачем это слово надо писать. ------------------Примерно так.Да ладно вам, я же спрашиваю конкретный вопрос про функционал КоллБеков, под конкретную задачу:Выставляем лучшую заявку и обновляем её, пока нашу заявку не сожрут.
Я уже узнал, что всё можно закидать в КоллБеки мне это очень понравилось, этого не было в help'e и я наивно полагал, что коллбеки нужно использовать лишь для получения данных. Я уже смотрю на скрипт qlua другими глазами.Осталось уточнить как работают КоллБеки.
То что робот это состояния, это понятно любому, кто попыхтел над самым маленьким скриптом или программой :)) Но всё равно спасибо за напоминание. Всегда приятно удостовериться, что ты на правильном пути.
Вот я и спрашиваю, после появления состояния "Оффер обновился":-- Нам нужно опять выставиться лучшей заявкой, но для этого нужно снять старую заявку, что мы тут же и делаем при помощи sendTransaction ( ) в КоллБеке OnQuote( ), где мы и узнали про новый "Оффер". У меня появился закономерный вопрос: ставить sleep ( ) ? или довериться новым включениям КоллБеков и новой проверки состояния старой заявки? Что логичнее, или точнее что быстрее сработает?!По сути это вопрос технический, я узнаю как устроен qLua, разве нет?
Цитата Николай Бехтерев написал:И такой вопрос, допустим выставление лучшей заявки мы засовываем в коллбек OnOrder, в OnTrade мы получаем информацию о том взята заявка или нет, как исключить момент исполнения двух заявок? Без sleep() и ожидания ответа о том, что заявка снята - тут никак не обойтись, я правильно понимаю?но ведь всё равно будет какая-то разница во времени между sendTransaction для снятия заявки и коллбеком OnOrder?
Вот вы говорите номер. Ну запомили мы номер первой выставленной нашей заявки, далее, когда в стакане появляется цена лучше нашей, мы проверяем по номеру не снята ли заявка (а может быть и взята рынком), если снята, выставляем новую, а если нет? Если заявка стоит и её надо снять, мы тут же в OnQuote кидаем sendTransaction и? Время же тикает пока заявка будет снята и мы увидим это по флагам. Что в это длящееся время будет происходить в OnQuote?