Постов с тегом "Quik Lua": 232

Quik Lua


индикатор на LUA

Добрый день всем!
Народ, кто может сделать индикатор на LUA для QUIK?

Aroon

Всем доброго дня! Друзья, есть у кого нибудь индикатор aroon на Lua. Или может как то его можно написать, где это можно сделать?
  • обсудить на форуме:
  • Quik Lua

Fn044.lua, версия 2.1

    • 29 октября 2018, 16:07
    • |
    • XXM
  • Еще

В своей торговле применяю комбинации рыночных и лимитированных заявок, (методику описывал ранее, "Настоящая торговая стратегия."  и "US500: Объемы больше, спреды уже!" ). Временами количество одновременно работающих стратегий зашкаливало за сотню и на некоторые из них не хватало денег под выставление заявок, они отключались, иногда ломая логику работы связанных с ней стратегий. В QUIK в таблице «Состояние счета» считается цифра — «Свободно» — свободные средства под заявки, но сходу вытащить ее из Lua у меня не получилось. И пришлось вписать расчет этой величины в робота.
Сегодня предлагаю вашему вниманию доработанный скрипт Fn044.lua (https://yadi.sk/d/O-6JzZdXkOxyow)
Fn044.lua, версия 2.1

в котором реализован расчет свободных средств для заявок на ФОРТС с учетом имеющихся контрактов и заявок.
Один в один вывести не получилось, как смог.
As is, и все такое!

  • обсудить на форуме:
  • Quik Lua

QUIK: Бенчмарк ОФЗ к ставке ЦБ

    Может кому будет интересен скрипт на QLUA, который выступает простым бенчмарком ОФЗ с постоянным купоном к ставке ЦБ.
Основные параметры доходность и премия к ставке ЦБ, с учетом дюрации.
Скрипт не работает онлайн (оперативность тут не принципиальна), при запуске собирает параметры в таблицу и выводит на экран.
В дальнейшем планируется эти данные использовать для анализа премии доходности по дюрации для муниципальных и корпоративных облигаций к ОФЗ.

QUIK: Бенчмарк ОФЗ к ставке ЦБ


    Код скрипта на github (на github две версии одна в utf-8 для просмотра и основная версия в win1251, т.к. quik понимает только его):
github.com/trantor77/lua_scripts/boundsOFZ.lua

    Код скрипта:
--переменные
keyRateCB = 7.5
classCode = "TQOB"

function CreateTable()
    t_id = AllocTable()
    AddColumn(t_id, 0, "Бумага", true, QTABLE_STRING_TYPE, 15)
    AddColumn(t_id, 1, "Цена", true, QTABLE_DOUBLE_TYPE, 15)
    AddColumn(t_id, 2, "Доходность, %", true, QTABLE_DOUBLE_TYPE, 15)
    AddColumn(t_id, 3, "Дюрация, лет", true, QTABLE_DOUBLE_TYPE, 15)
    AddColumn(t_id, 4, "Купон, %", true, QTABLE_DOUBLE_TYPE, 15)
    AddColumn(t_id, 5, "Премия к ЦБ, бп", true, QTABLE_INT_TYPE, 15)
    AddColumn(t_id, 6, "Погашение", true, QTABLE_STRING_TYPE, 15)
    t = CreateWindow(t_id)
    SetWindowCaption(t_id, "ОФЗ")
end

function string.split(str, sep)
    local fields = {}
    str:gsub(string.format("([^%s]+)", sep), function(f_c) fields[#fields + 1] = f_c end)
    return fields
end

function getParamNumber(code, param)
    return tonumber(getParamEx(classCode, code, param).param_value)
end

function formatData(prm)
    return string.format("%02d.%02d.%04d", prm%100, (prm%10000)/100, prm/10000)
end

CreateTable()

arr = {}
sec_list = getClassSecurities(classCode)
sec_listTable = string.split(sec_list, ',')
j = 0
for i = 1, #sec_listTable do
    secCode = sec_listTable[i]
    securityInfo = getSecurityInfo(classCode, secCode)
    short_name = securityInfo.short_name
    if short_name:find("ОФЗ 26") ~= nil then
        j = j + 1
        r = {}
        r["short_name"] = short_name
        r["price"] = getParamNumber(securityInfo.code, "PREVPRICE")
        r["yield"] = getParamNumber(securityInfo.code, "YIELD")
        r["duration"] = getParamNumber(securityInfo.code, "DURATION")/365
        couponvalue = getParamNumber(securityInfo.code, "COUPONVALUE")
        couponperiod = getParamNumber(securityInfo.code, "COUPONPERIOD")
        r["coupon"] = ((365/couponperiod) * couponvalue)/10
        r["bonus"] = (r["yield"] - keyRateCB)*100
        r["mat_date"] = getParamNumber(securityInfo.code, "MAT_DATE")
        table.insert(arr, j, r)
    end
end

table.sort(arr, function(a,b) return a["duration"] < b["duration"] end)

for j = 1, #arr do
    row = InsertRow(t_id, -1)
    SetCell(t_id, row, 0, arr[j]["short_name"])
    price = arr[j]["price"]
    SetCell(t_id, row, 1, string.format("%.2f", price), price)
    yield = arr[j]["yield"]
    SetCell(t_id, row, 2, string.format("%.2f", yield), yield)
    duration = arr[j]["duration"]
    SetCell(t_id, row, 3, string.format("%.2f", duration), duration)
    coupon = arr[j]["coupon"]
    SetCell(t_id, row, 4, string.format("%.2f", coupon), coupon)
    bonus = arr[j]["bonus"]
    SetCell(t_id, row, 5, string.format("%.0f", bonus), bonus)
    mat_date = arr[j]["mat_date"]
    SetCell(t_id, row, 6, formatData(mat_date), mat_date)
end
  • обсудить на форуме:
  • Quik Lua

Напишу робота

    • 09 октября 2018, 17:34
    • |
    • Itself
  • Еще
Коллеги, добрый день!

Готов написать робота под вашу стратегию.

Требования:
1. Небольшое количество параметров (если вы оцениваете момент входа по 100500 критериям, это не особо интересно)
2. Четкая формализация
3. Подтвержденная доходность

Ограничения:
1. Qlua

Предпочтения:
1. Спот
2. Фьючи
  • обсудить на форуме:
  • Quik Lua

fn044.lua

    • 09 октября 2018, 15:33
    • |
    • XXM
  • Еще
fn044.lua — скрипт для расчета стоимости фьючерсных контрактов в портфеле относительно депозита.
Скачать: https://yadi.sk/d/e7XRt3CQ2v7Miw

fn044.lua

Файл настроек:
-- fn044set.lua расчет стоимости фьючерсных контрактов в портфеле относительно депозита
-- © smart-lab.ru/profile/xxm 08.10.2018

-- торговый счет (из таблицы «Позиции по клиентским счетам (фьючерсы)»)
account = 'SPBFUT0003f'

--положение окна с таблицей. Левый верхний угол в координаты left,top и размеры в width и height.
xy = {} 
xy.left, xy.top, xy.width,xy.height = 0, 232, 722, nil

--ширина столбцов таблицы
t_width = {12, 6, 10, 8, 10, 10, 9, 7, 6, 11, 10, 11}

-- месяц и год исполнения, 2 символа, https://www.moex.com/s205
MonthYear = "Z8"
-- код базового актива, 2 символа
-- если 4 символа, то переменная "MonthYear" не учитывается
SecCodes={
	{"MM"}, --контракт на индекс МосБиржи
	{"Si"}, --руб/доллар FORTS
	{"SR"}, --Sber FORTS
	{"LK"}, --контракт на Лукойл
	{"GZ"}, --контракт на Газпром
	{"BRX8"}, --контракт на нефть Брент, месяц и год - "X8"
	{"ED"}, --контракт на ED
	{"RN"}, --контракт на Роснефть
	{"GD"}, -- Gold
	}

--Если xy.height == nil, то вычислить ее.
--Для разных мониторов коэффициенты (17, 45 и 868 - подобраны эмпирически) будут разными.
local height = xy.height or ((#SecCodes + 1)*17 + 45)
if height > 868 then height = 868 end
xy.height = height


( Читать дальше )
  • обсудить на форуме:
  • Quik Lua

Друзья, требуется ваша помощь!

    • 25 сентября 2018, 16:31
    • |
    • Gorazio
  • Еще
Есть те, кто может подсказать по способам создания простейших скриптов на LUA? Таких, например, как сложение значений нескольких простых индикаторов и вывод в виде одной диаграммы или сохранения на рабочей станции значений из ТТП (тех, которые брокер хранит одну торговую сессию) для последующего вывода в приемлимом графическом виде. В крайнем случае рассматриваю excel. Буду благодарен всем, кто сможет чем-то подсказать.   
  • обсудить на форуме:
  • Quik Lua

Сбербанк, Квик, Луа, Небесконечность

Коллеги! У меня руки дошли до… автоматизации торговли фьючами из под сбербанка… всё шло гуд-гудом… и вдруг везде прошли сделки, а под сбером тишина… Долго не мог ничего понять… чувствовал себя полным идиотом пока не заглянул в сообщения:
Сбербанк, Квик, Луа, Небесконечность















Ибо у меня стоит в скрипте:
["EXPIRY_DATE"] = "GTC"
Собственно, два вопроса:
1. Это у всех так, что в сбере нельзя делать стоп-заявку по типу до отмены? Для меня это новость… под всеми квиками у всех брокеров работает GTC без проблем.
2. Можно ли это как-то вылечить, чтобы пользоваться GTC?
  • обсудить на форуме:
  • Quik Lua

Парсер котировок Финама

    • 30 августа 2018, 01:12
    • |
    • Albus
  • Еще
Пост будет полезен только тем, кто кодит на Луа.
---
Написал простенькую функцию, которая работает с архивом графиков Финама. На Финаме есть история торгов за много лет. Это полезно, чтобы прогнать вашу стратегию на максимально доступных исторических данных.
Архив Финама находится здесь: https://www.finam.ru/profile/moex-akcii/sberbank/export/
---
Заходите по ссылке, видите там:
Парсер котировок Финама
Там где «Формат записи в файл» выбираете как у меня: DATE,TIME,OPEN,HIGH,LOW,CLOSE,VOL. Можно брать и другие форматы, но тогда код функции придётся переписать.
---
Выбираете вверху даты с 1 января по 31 декабря и год за годом сохраняте себе на компьютер вот так:
Парсер котировок Финама

( Читать дальше )
  • обсудить на форуме:
  • Quik Lua

LUA индикатор фрактальные уровни.

Всем доброго дня.
Народ, очень нужна ваша помощь по данному индикатору. А если кто поделится готовым, буду очень благодарен.
Намедни решил поколдовать с фрактальным индикатором, так что бы фракталы растянуть по уровню.
В итоге вот что у меня получилось. Не ахти, сразу скажу. Я конечно не спец в программировании, только учусь, поэтому и обращаюсь к вам за помощью. Как его исправить, что бы фрактальный уровень рисовался с самого начала, там где треугольники на картинке, это обычный индикатор фрактала. И заканчивался в том случае когда цена пересечёт этот уровень выше или ниже.

LUA  индикатор фрактальные уровни.



Вот сам индикатор

 

Settings =
{Name = «Fracta_l»,
period=31,
line =
{{
Name = «Level_High»,
Color = RGB(0,255,0),
Type = TYPE_POINT,
Width = 1
},{
Name = «Level_Low»,
Color = RGB(255,0,0),
Type = TYPE_POINT,
Width = 1
}}}
idx_prosl=0
function Init()
return #Settings.line
end
function OnCalculate(idx)
if idx==1 then
P = math.floor(Settings.period/2)*2+1
t_H,t_L={},{}
end
if idx~=nil and idx>P then
if idx_prosl~=idx then
local l=idx-P
for l=l,idx-1 do
t_H[l]=H(l)
t_L[l]=L(l)
end
if t_H[#t_H-(P-1)/2]==math.max(unpack(t_H,#t_H-P+1,#t_H)) then
H_ind_value=t_H[#t_H-(P-1)/2]
end
if t_L[#t_L-(P-1)/2]==math.min(unpack(t_L,#t_L-P+1,#t_L)) then
L_ind_value=t_L[#t_L-(P-1)/2]
end
end
else
H_ind_value=nil
L_ind_value=nil
end
idx_prosl=idx
return H_ind_value, L_ind_value
end


  • обсудить на форуме:
  • Quik Lua

....все тэги
UPDONW
Новый дизайн