У меня Windows 8.1, MS Visual C++2015. Под Lua 5.1.5 64-бит работает. Под Lua 5.3.5 и 64- и 32-бит только компилируется (с /DNLUA51) и линкуется. При require ("luacom") сбой в 9-й строке luacom5.lua. Дистрибут скачал с https://github.com/davidm/luacom. Файл luacom5.loh построил из luacom5.lua с помощью bin2c.lua. Может быть компилятору для machine:x64 нужны какие-то ключи генерации кода, не используемые для x86? Я ещё не инстолировал Quik 8.5. Нет ли там случайно готового luacom.dll? Можно ли откуда-то скачать luacom.dll?
На ММВБ активность торгов опционами ничтожна. Заявок или нет вовсе или с громадными спредами. Сделки очень редки и они случаются не каждый день. Ставить условные заявки на цену опциона в таких условиях - безнадёжное дело. Но если выставить заявку по теоретической цене, её скорое исполнение весьма вероятно. Предлагаю: 1) Ввести условные заявки купли опциона при прохождении снизу его теоретической ценой заданного уровня. Аналогично, ввести условные заявки продажи опциона при прохождении сверху его теоретической ценой заданного уровня. 2) Установить срок действия таких условных заявок вплоть до экспирации опциона.
Известно, что котировки ряда фьючерсов выражаются через доллар. Например, фьючерс на золото примерно отражает в пунктах текущую цену унции в долларах. Это не очень удобно, т.к. на брокерском счёте размещены рубли. Ставить стопы на изменение фьючерса в долларовых пунктах тоже не всегда уместно. Например, при снижении котировки фьючерса на индекс РТС в долларовых пунктах на 33.33% и одновременном росте курса доллара на 50% рублевая стоимость фьючерса (объём позиции) не меняются. Желательно иметь перед глазами график не долларовых котировок, а рублёвых. На текущий момент приходится использовать те возможности, которые даёт QLua для построения индикаторов. Рублевая стоимость фьючерса получается с использованием двух параметров, которые в Quik'е показаны в "Таблице текущих параметров" в колонках "Шаг цены" и "Стоимость шага". К сожалению, история этих параметров дольше текущего дня недоступна. Поэтому, приближённую оценку рублёвой стоимости фьючерса можно получить из графика фьючерса на курс доллара к рублю (Si). Код индикатора прилагается.
Код
-- Перемножает Close'ы графиков RI на Si
-- При запуске на загрузке Quik'а работает код предыдущей загрузки
-- с последними свойствами, полученными из кода или интерактивно.
-- При запуске старые бары графика данных сканируются дважды,
-- только если есть подключение к серверу.
-- При смене тайм-фрейма старые бары сканируются только единожды.
-- При загрузке Quik'а первый скан до подключения к серверу.
FirstValid = nil
Settings = {
Name = "_RIxSi"
,line = {
{Name = "RIxSi"
,Color = RGB(255,255,0) -- Жёлтый
,Type = TYPE_POINT
,Width = 2}
}
,GraphId1 = "RI-1" -- Перезадать оба после первой загрузки.
,GraphId2 = "Si-1" -- Сохраняются при последующих запусках.
,Factor = 2e-5
}
function Init()
return #Settings.line
end -- Init()
function CalcIt (index)
local tbl1 = getCandlesByIndex (Settings.GraphId1, 0, index-1, 1)
local tbl2 = getCandlesByIndex (Settings.GraphId2, 0, index-1, 1)
if tbl1[0].close == 0 or tbl2[0].close == 0 then
return nil -- Пропускаем бары с неполными данными.
end
local sum = tbl1[0].close * tbl2[0].close * Settings.Factor
return sum
end -- CalcIt()
function OnCalculate(index)
if index == 1 then
FirstValid = nil
end
if (0 == getNumCandles (Settings.GraphId1) or
0 == getNumCandles (Settings.GraphId2)) then
if index == 1 then
message ("GraphId error")
end
return nil
end
if not FirstValid then
local tbl1 = getCandlesByIndex (Settings.GraphId1, 0, index-1, 1)
local tbl2 = getCandlesByIndex (Settings.GraphId2, 0, index-1, 1)
if tbl1[0].close ~= 0 and tbl2[0].close ~= 0 then
FirstValid = index
local count = getNumCandles (Settings.GraphId1)
if FirstValid == count then
for idx = 1, index-1 do
SetValue (idx, 1, CalcIt (idx))
end
end
end
end
return CalcIt (index)
end -- OnCalculate()
Можно ли так установить Quik-Junior, чтобы играть сразу на двух демо-счётах по двум встречным позициям в одном активе? Ведь демо-счета нужны не только чтобы посмотреть, что такое Quik, но и для отладки алгоритмов на QLua. А для игры одновременно в лонг и шорт по одному и тому же активу, например, фьючерсе на индекс РТС, в Quik'е нужны два разных счёта. Это что-то вроде арбитража по времени.
Если в версии Quik 7.1.1.16 задать в "Свойствах диаграммы": "Интервал" 1 мин, "Фильтр по времени" 10:00 - 23:50, то в этой диаграмме можно отобразить график с баром котировок на каждый минутный интервал не более, чем на 6 торговых дней. Очень желательно отображать 1-минутные бары за 23 торговых дня. Я собираю из Quik'а историю теоретических цен месячных опционов для оптимизации игры в опционы. Других источников этих данных практически не существует.
Я предлагаю обеспечить возможность отображать в диаграмме не менее 19090 баров. Это позволит получить историю котировок за любой месяц на 1-минутных барах.
Вот такая ситуация в Quik 6.16.1.15. Помещаю в диаграмме несколько окон. Например, в 1-м окне график фьючерса на индекс РТС, а во 2-м - график опциона на этот фьючерс. Затем в диалоге "Параметры диаграммы в разделе "Показывать графики" в пункте "выбрать с" изменяю начальную дату интервала дат показа графиков. И график опциона сам собой заменяется на график фьючерса. Чего я вовсе не просил. То же самое происходит со 2-м графиком 1-го окна.
Я предлагаю так доработать Quik, чтобы после изменения интервала дат показа графиков в диалоге "Параметры диаграммы" разные инструменты графиков в разных окнах диаграммы не заменялись на 1-й инструмент из 1-го окна диаграммы.
При ручной подаче заявки, например, тэйк-профита и стоп-лимита на выход из позиции, указав в поле "Поручение" цену и дату входа в позицию, мы получаем этот текст в колонке "Комментарий" в таблице "Стоп-заявок". Это помогает ориентироваться в структуре портфеля при сроке действия заявки более одного дня, особенно на ФОРТСе. К сожалению, при программной подаче условной заявки функцией sendTransaction (tbl) из скрипта на QLua содержимое поля tbl.COMMENT не попадает в колонку "Комментарий" в таблице "Стоп-заявки" Quik'а.
Я предлагаю так доработать Quik, чтобы после подачи заявки из скрипта QLua посредством функции sendTransaction (tbl) текст из поля tbl.COMMENT передавался бы в колонку "Комментарий" таблицы "Стоп-заявки" Quik'а.
На форуме "Стоп-заявки в системе Quik" мне сказали, что при отработке заявки "Тэйк-профит и стоп-лимит", даже если задать "Отступ от max" = 0, всё равно сервер после активизации слежения за лучшей ценой профита будет ждать следующей сделки, прежде чем даст лимит-заявку на фиксацию прибыли.
Логически это не очень оправдано - ждать-то ведь нечего! А при торговле опционами это ещё и рискованно. Сделки по опционам очень редки и их цены меняются резкими скачками. Так что следующая сделка может случиться через значительный промежуток времени, когда уровень бидов-асков будет уже гораздо хуже. А использовать стоп-заявку "Со связанной заявкой" неудобно, потому что в ней нет возможности задать срок действия более 1 дня.
Если в заявке take-profit в разделе "Выставить тэйк-профит" задать "Отступ от max" = 0, можно ли рассчитывать, что сервер подаст заданную лимит-заявку при первой же сделке, цена которой равна или лучше той, что указана в поле "тэйк-профит, если цена..." в разделе "Условие активации заявки"? Или же сервер будет ждать следующей сделки, для анализа текущей цены, цены активации и "Отступа от max"? Этот вопрос важен при игре в опционы. Сделки по опционам так редки, что следующей сделки после достижения цены активации можно ждать очень долго и уровень бидов-асков может сильно ухудшиться. А заменить тэйк-профит лимитной заявкой невыгодно, потому что текущая цена может резко перепрыгнуть уровень активации, но если в очереди будет маячить моя лимит-заявка, то её могут удовлетворить по цене хуже уровня скачка.
Ув. Quik. Ваш терминал сильно приблизится к идеалу, если добавить в него возможность присоединения к лимит-заявке на куплю-продажу актива, например, фьючерса, ещё и стоп-заявки, например, тэйк-профита со стоп-лимитом. так чтобы эта пара заявок выполнялась на клиентском ПК одной транзакцией. А на сервере брокера после исполнения лимит-заявки должна инициироваться регистрация стоп-заявки. Может быть, для этого потребуется ограничить тип лимит-заявки "входом по рынку", но это уже не столь важно. Можно ли ожидать такого усовершенствования в 2015-м году? С уважением, Ростилав Дмитриевич Кудряшов.