У меня до сегодня был прекрасный интерфейс к роботу на библиотеке qvcl, но в связи с тем что сегодня все квики только 64bit а qvcl там не работает, то было принято решение запускать gui на 32bit Lua отдельном от quik.
Всё запустилось и основной необходимый мне функционал работает (кнопочки жмутся, данные шлются в квик через файл), но весь код который после инициализации окна ShowModal не запускается пока окно не закроется - я не могу обновлять данные в окне автоматически (вслед за обновлённым файлом настроек окна). Если окно инициировать по Show и после него ставить вечный цикл с синтетическим sleep на основе ping (в неквиковом lua функции sleep нет) то окно зависает. Есть у кого-нибудь идея, как, не закрывая окно, после его инициализации сделать цикл типа функции main в квиковом lua из которого можно было бы менять настройки окна?
Очень давно мной был написан робот, но последняя версия квика на которой он адекватно работает это 6.17 - потом что-то обновили в серверной филармонии и OnTrade() в следующей версии квика при случившейся сделке вместо одного раза начал срабатывать два раза, поэтому до сего дня скрипт успешно крутится на quik 6.17, но всвязи с очередным подарком биржи гдрядёт неизбежный переезд на quik 8.6. Засим вопрос к многоуважаемой аудитории:
Как лучше всего контролировать процесс исполения заявки скажем на 20 контрактов? Я отправляю заявку под своим номером, по OnOrder() я получаю номер заявки в системе, дальше по OnTrade() будут сыпаться сделки по допустим одному контракту (и по предыдущему опыту подозреваю что при сделке на один контракт OnTrade() может срабатывать дважды) - как это всё контролировать? Есть идея вытавлять пулемётной очередью 20 заявок по одному контракту вместо одной заявки на 20 контрактов - но тут будет нюанс с ограничением биржи на 50 заявок в секунду, таких очередей в скунду может быть больше трёх.
Не подскажите как разрешить вопрос контроля исполнения многоконтрактной заявки наиболее интеллегентым методом? Заранее спасибо
Коля Маржин написал: Subscribe_Level_II_Quotes("SPBFUT", "SiH0") я правильно использовал
Вроде правильно. Только подождать надо после подписки, не сразу getQuoteLevel2 дергать, а то заказанное еще не приехало скорей всего. Или в цикле со слипами подергать, пока не приедет, или в колбек OnQuote засунуть, там уж точно что-то приехало, раз колбек дернули.
разделюящий блок
while status == nil
sleep (10)
end
это ок, или в нём скрипт может зациклиться если перебои с инетом, итд? как-то по другому может лучше? Спасибо заранее!
не нашёл где править сообщение, правильная последовательность строк:
local status = Subscribe_Level_II_Quotes("SPBFUT", "SiH0") local data = getQuoteLevel2("SPBFUT", "SiH0").bidmessage ("test " .. tostring(status) .. " " .. tostring(data))
Добрый день, есть скрипт который год не запускал. Что-то поменяли на сервере и он поломался, не знаете почему во второй строке в data получается nil? (первую строчку я добавил исходя из рекомендаций в одном из недавних топиков, но она не помогла)
local status = Subscribe_Level_II_Quotes("SPBFUT", "SiH0")local data = getQuoteLevel2("SPBFUT", "SiH0").bid message ("test " .. tostring(status) .. " " .. tostring(data))
все правильно, так и должно быть. В момент утренней инициализации графики в моменте пусты и соответственно индикаторов еще тоже нет. После чего графики отрисовываются и индикаторы начинают рассчитываться.
автор скрипта не предусмотрел эту ситуацию, укажите ему на нее.
не понимаю. Есть цикл:
local candles = getNumCandles(gazprom) while candles ==0 do sleep (1000) candles = getNumCandles(gazprom) end
почему в нём в 10:00:01 будет нулевое количество свечей? График живой, индикатор строится.
Всем привет! Есть робот который должен работать круглосуточно без перезапусков по утрам. Сейчас с ним есть одна проблема: если квик не перезагружать утром, то getNumCandles() исправно работающий всю сессию выдаёт ноль в качестве количества свечек.
Что-то из серии:
local candles = getNumCandles(gazprom) while candles ==0 do sleep (1000) candles = getNumCandles(gazprom) end
- не помогает. Только перезапуск. Индикатор в это время на графике живой. Есть какие-нибудь советы?
P.S. иногда в процентах 10 случаев этой ошибки утром нет - робот спит ночью и утром в 10:00 продолжает работать
Владимир написал: Ответ есть в ветке https://forum.quik.ru/forum10/topic1409/ от Егора. Дело в том что, установив Move order=Yes;Expiration date=20160323 заявка создается без этих параметров. Версии терминалов 7.1.0.371 и 7.0.4.10. Егор, можете прокомментировать???
а я именно так всё и делаю. Не работает...
Т.е. создаю tri файл (причём делал как английскую, так и русскую версию), беру от туда нужные поля, но дата действия заявки не работает. Было подозрение на региональные настройки Windows с кучей форматов YYMMDD, YYYYMMDD, YY.MM.DD, MM/DD/YYYY - попробовал менять, не помогло.
Вопрос к сожалению никак не отвечен пока. Как видно я не один такой, с проблемой даты лимитированых заявок
в вопросе не написал второй флаг, исправляюсь: Это флаги Move order=Yes (в русской версии tri файла: Переносить заявку=Да) и Expiration date=20160613 (в русской версии tri файла: Дата экспирации=20160613)
Для выставления лимитированных заявок с длинным сроком жизни я взял соответсвующие поля из tri файла подобной заявки. Это флаги Move order=Yes (в русской версии tri файла: Переносить заявку=Да)
Из этих двух полей при выставлении заявки через Lua работает только Move order (заявка переносится через вчерний клиринг, и умирает на следующий день). Поле Expiration date не работает :-( Дату я пытался выставлять как YYYYMMDD так и как YYMMDD. Не подскажите, в чём может быть причина?
Заявка сейчас успешно выставляется в такой форме. Работает всё, кроме последнего поля.
мне необходимо, чтобы заявки переносились через вечерний клиринг. Для этого я из tri файла подобной заявки взял поля Move order = "Yea" и Expiration date = 20160620". К сожалению эти поля имеют пробел в своём названии, и lua не хочет их переваривать. Как это можно вылечить?