Alexey K пишет: Хочу чтобы скрипт отслеживал определенное нажатие клавиши. Можете подсказать где и что почитать, чтобы сделать это без лишних заморочек?
Если нужно отследить с вашей таблицы, то поможет то, что предлагает Николай Камынин , а если нужно круче , то придется писать приложение или подключать стороннюю библиотеку.
А если не делать умное лицо и нужно просто и незатейливо, то пишется скрипт js из трех строчек. Этот скрипт дописывает файл протокола клавиш. Вызывается по сочетанию клавиш (быстрый вызов). Протокол клавиш читается откуда угодно.
Sam Gold пишет: Здравствуйте! Мне нужен совет, я не знаю к кому обратиться для создания торгового робота. Вопросы которые для меня актуальны: 1) Какой язык программирования оптимальней для работы через quik 2) Стоит ли доверять частным лицам или все таки это должна быть компания (пускай маленькая) 3) Могу ли я рассчитывать на нормальную оболочку у софта. Или будет все совсем кустарно и архаично
Если не в ту тему, то с ориентируйте пожалуйста куда идти и к кому обратиться. Буду очень признателен. Кто вообще лидеры рынка и кому стоит доверять?
1. Неважно. Исполнитель сам выберет подходящую среду программирования (если он в состоянии это сделать) 2. Компания в подавляющем большинстве случаев наймет того же частника, но ей вы тоже заплатите 3. Можете. Все зависит от глубины вашего кармана
Вот хорошая статья, которую имеет смысл прочесть перед заказом робота.
Согласно документации , длина такой таблицы (#tab) должна быть 6 , но у меня показывает 9 . Это ошибка в документации или в самом Lua/QLUA?
Ошибки нет.
The length of a table t is defined to be ANY integer index n such that t[n] is not nil and t[n+1] is nil; moreover, if t[1] is nil, n can be zero. For a regular array, with non-nil values from 1 to a given n, its length is exactly that n, the index of its last value. If the array has "holes" (that is, nil values between other non-nil values), then #t can be ANY of the indices that directly precedes a nil value (that is, it may consider any such nil value as the end of the array).
Я выделил слово ANY из вашей документации большими буквами.
Сделайте так, чтобы можно было на текущих исторических данных прогнать роботов написанных на QPILE и на LUA, а то непонятно как тестировать робота, т.е. получается купил робота на QPILE, а чтобы подогнать ему оптимальные параметры, приходится такого-же робота заказывать например под TSLab и там уже тестировать. Геморой однако выходит, а если ты не программист, то еще и двойная трата денег.
Михаил. Методом научного тыка обнаружил виновника. Какая-то проблема обосновалась в table.sforeachi. Что там конкретно - сказать не могу. Ощущение, что sforeachi, будучи вызвана из главного потока quik что-то не делит со вложенными table.s*
А может, все совсем и не так. Но после замены sforeachi на обычные семафоры эффект пропал.
Пожалуйста, прокомментируйте механизм работы конструкции getInfoParam("servertime") более детально. Если есть особенности, связанные с потоковой моделью, остановитесь на этом пожалуйста максимально подробно.
Сергей Парахин пишет: Здравствуйте ! Минимальные системные требования читал. Все же, что важнее при выборе провайдера VDS для квика под WIndows Server 2012 R2. При одинаковой стоимости какую конф-ю выбрать: 1) Intel Xeon, 2.6ГГц - 4 ядра,2 гига опертивки; 2) Intel Xeon, 2.6ГГц - 1 ядро, 4 гига оперативки. Или вообще хватит 2 ядра и 2 оперативки ? Будут крутиться два портфеля на qpile.
Сергей. Запустите конфигурацию, которая должна работать на VDS на своем локальном компьютере.
Посмотрите, какой объём памяти занимает терминал квик. Округлите до гигабайта в бОльшую сторону и прибавьте гигабайт для операционной системы - столько памяти вам потребуется.
Про ядра. Посмотрите загрузку , которую даёт процесс квик в диспетчре процессов. Если она менее 15% - вам хватит одного ядра.
На winServer 2012 квик прекрасно работает, если не извращаться с разными заумностями.
В таком виде все прекрасно работает, в логе верные цифры, никаких проблем нет.
Если я заменяю 00:00:00 на получение серверного времени, то через некоторое (разное) время зависает главный поток терминала. При этом логирование ВСЕГДА завершается выводом цифры 4. Эффект абсолютно стабильный, самомодификации кода в скрипте нет.
В колбеках идет активная работа со стаканами, таблицей сделок и обработка .tro файла
Дмитрий Сазонов пишет: Здравствуйте. У меня такой вопрос: есть потребность вызывать методы c# класса из QLua. В какой-то степени удалось что-то сделать с помощью LuaInterface.dll и luanet.dll, которые как раз и предназначены для этого. Однако возникла такая проблема: почему-то методы вызываются, если они применяются в main функции. Если же я вызываю экспортируемые методы из обработчиков событий, то ничего не происходит, как будто куска кода нет. Кто-то может сказать, в чем причина кроется? Насколько я знаю, обработчики и main функция крутятся в разных потоках, может это связано с этим? Вообще у кого-то есть успешный опыт использования c#, или подобные вещи стоит делать только через с api lua ?
Верно. Проблема в двухпоточности. Эти библиотеки можно использовать только из того потока, в котором они созданы.
Юрий пишет: Ну вот развели демагогию, а умный человек подсказал, что все действительно придумано до нас: getInfoParam("SERVERTIME") - время сервера, а с миллисекундами: в таблице «Таблица сделок» («trades») в datetime есть поле с миллисекундами и поле с микросекундами, т.е. getItem(«trades»,e).datetime.ms и getItem(«trades»,e).datetime.mcs соответственно. Вот и все.
Вам это только кажется.
servertine - это время сервера. Время сделок идет по времени биржи. Они похожи, но не равны. А еще есть время доставки данных от брокера до вас.
Например, когда вы спрашиваете сервертиме, то получаете время в момент прихода запроса на сервер. Далее оно возвращается вам. Ничто не мешает его вам получить уже в следующей секунде.
Путь тупиковый. В идеальных условиях все будет более-менее нормально, чуть посложнее - и все рассыплется.
Eugene Korno пишет: Добрый день. Подскажите как работает данный коллбэк. У меня он срабатывает несколько раз при изменении позиции. Код приведен ниже.
Код
require"QL"
log="log.log"
is_run = true
function OnStop(s)
is_run = false
toLog(log,'OnStop. Script finished manually')
message ("auto_stop finished manually", 2)
end
function OnFuturesClientHolding(fut_pos)
message("Произошла сделка по инструменту "..fut_pos.sec_code,3)
end
function main()
log=getScriptPath()..'\\'..log
toLog(log,"Start main")
while is_run do
sleep(5000)
end
toLog(log,"Main ended")
end
Евгений. Этот колбек срабатывает не на сделку, на какие-то изменения в портфеле срочного рынка. Эти изменения могут быть вам видны глазом в экранной таблице квика, а могут быть и не видны.
Нет никакой гарантии, что сделка по инструменту вызовет только один колбек, и точно также нет никакой гарантии, что этот колбек будет срабатывать только про исполнению сделок (причин для изменений в таблице позиций срочного рынка много разных)
Для установления факта сделки существует колбек onTrade.
Сергей Радченко пишет: какая сейчас актуальная и без багов библиотека для реализации графического интерфейса(формы) для ввода данных пользователем в рамках Quik Lua?
В рамках Qlua все что есть, описано в документации.
Внешние библиотеки на первый взгляд позволяют создавать граф интерфейс к скриптам, но на второй - уже нет. В текущей реализации Qlua использование внешних граф библиотек гарантированно сопряжено с проблемами. Причина известна и на текущий момент средствами пользователя неустранима.
Дмитрий пишет: Под "подробными комментариями относительно назначения каждого параметра и т.п." я имел в виду нечто большее, чем просто русскоязычный текст с названием параметра. Иногда только по названию сложно однозначно понять, что именно обозначает тот или иной параметр, как он рассчитывается биржей и т.п. Разработчики в данном случае любят отсылать за подробностями на биржу, но на сайте Московской биржи я не замечал подробных описаний параметров (да и вообще каких-либо их описаний). Было бы очень хорошо, если бы разработчики привели хотя бы ссылку на такую информацию на сайте биржи. Ведь сами они где-то брали в свое время описание всех параметров ТТП, которое приведено в руководстве по QUIK (которое правда уже несколько отстало от жизни).
Дмитрий.
Бирж в мире очень много разных. У каждой биржи свои параметры и свои особенности этих параметров. Шлюзы есть к нескольким из них. Описать все нюансы невозможно.
Павел Bosco пишет: Почему для того чтобы CreateDataSource вернул не пустой массив, нужно чтобы на рабочем месте хоть раз был открыт график по этому инструменту? Сегодня проводил несколько экспериментов - создавал DataSource для пятиминуток в Si-9.15 Изначально графиков с ним открытых не было - только Si-6.15 (предыдущий) и возвращался в результате пустой DS если Si-9.15 внести в таблицу параметров - это не влияет на DataSource - так и возвращается пустой. если же открыть хотя бы часовой график Si-9.15, то DataSource даже для 5минуток начинает возвращать свечи.
в настройках стоит "с учётом настроек Связь/Списки", в настройках "Связь/Списки" фильр для инструментов не задан (доступны все).
неужели обязательно теперь будет открывать новый график, чтобы программа на Lua корректно получала данные?
Если график инструмента на нужном таймфрейме открыт - данные есть в наличии и вы их видите сразу Если график не открыт, то требуется время для доставки данных в терминал.
Функции O, H, L, C, V, T Функции в качестве параметра принимают индекс свечи и возвращают соответствующее значение. Время свечи возвращается с точностью до миллисекунд в виде таблицы с полями: {year, month, day, week_day, hour, min, sec, ms, count}
Почему параметры sec и ms всегда равны нулю?
Потому что вы смотрите регулярный таймфрейм. Переключитесь на тики.
s_mike@rambler.ru пишет: Сергей, при помощи этой библиотеки можно общаться далеко не со всеми почтовыми серверами.
Значит нужно выбрать тот сервер с которым она работает
Серверов, не нуждающихся, например, в TLS/SSL, уже мало и количество их уменьшается. Обычно это древние сервера. Дописывать библиотеку для поддержки новых стандартов, как я понимаю, никто не собирается.
sam063rus пишет: думаю, совсем было бы чудом, если со временем каким-то образом можно было бы построить полноценную "улыбку волатильности", а также весь открытый интерес по всем страйкам (страйки по абсциссе, а величина OI - по ординате разумеется). Но, это уже врядли возможно без создания полноценного модуля отрисовки чартов.
s_mike@rambler.ru пишет: Но если уже на то пошло, то имея на руках алгоритм работы условной стоп-заявки на сервере брокера, узнать можно. Тут сработает тейк-профит . Однако это сокровенное знание не является документированным.
Без анализа движения цены разве можно так утверждать?
При ТАКОМ движении цены - можно. При ДРУГОМ движении цены за время жизни этой же стоп-заявки результат может быть иным.
Николай Камынин пишет: если выставление стопов соответствует их названию, то можно определить по расположению цены сделки предшествующей срабатыванию стопа по отношению к расположению позиции относительно рынка.
В общем случае это неверно. В большинстве случаев так прикинуть можно, но далеко не всегда.
Поэтому утвердительно ответить на первоначальный вопрос нельзя.
Это голословное утверждение. приведите пример, но соблюдайте указанные мною условия.
Условий я не видел.
Вот вам живой пример:
стоп лосс 99 тейкпрофит 101 / 2 Выставляется, когда цена равна 100
движение цены: 100 -> 101 -> 99
Условие срабатывания неопределено.
---------------------
Но если уже на то пошло, то имея на руках алгоритм работы условной стоп-заявки на сервере брокера, узнать можно. Тут сработает тейк-профит. Однако это сокровенное знание не является документированным.