1 (2014-01-28 21:41:16 отредактировано shishkir_aleksandr)

Тема: Индикатор арбитраж спред

Возможно ли посредством LUA в QUIKe построить в виде графика:

D=Заявки на покупку-Заявки на продажу;

т.е. спред между двумя графиками, по типу арбитража?

http://ib2.keep4u.ru/b/2014/01/28/50/500eeaed3bc5446b3f06f89008a20768.png

2

Re: Индикатор арбитраж спред

shishkir_aleksandr,
Приветствую вас на этом форуме! заходите почаще )

По поводу вашего вопроса: хорошо бы вы картинку покрупнее выложили...
В принципе, нарисовать можно, но не просто: надо придумывать как именно заявки привязывать к координатам графика и что делать с заявками, которые уже сняты/сыграли. Но в принципе так или иначе задача решаемая.

Хорошо бы вы еще уточнили между какими именно параметрами заявок надо спред вычислять? количество? цена? объем?

Re: Индикатор арбитраж спред

admin пишет:

Хорошо бы вы еще уточнили между какими именно параметрами заявок надо спред вычислять? количество? цена? объем?

 
Прошу прощения за неточную постановку вопроса)

     В QUIKe по каждому инструменту транслируется такой параметр как "СУММАРНОЕ КОЛИЧЕСТВО ЗАЯВОК НА ПОКУПКУ"  и "СУММАРНОЕ КОЛИЧЕСТВО ЗАЯВОК НА ПРОДАЖУ", по этим значениям из ТАБЛИЦЫ ИСТОРИИ ЗНАЧЕНИЙ ПАРАМЕТРОВ можно построить графики (картинку я поменял СМ. ВЫШЕ).
Т. е. в принципе имеем два графика Price построенным по некоторым параметрам, между которыми и необходимо найти "спред"(разность) и вывести на график. Надеюсь я понятно объяснил?)

Ну и уточняю свой вопрос: По какому алгоритму это возможно реализовать? получение данных с графика->вывод в таблицу->расчет->вывод из таблицы на график? или получение данных с графика->расчет->вывод  графика? или я совсем не прав и написал бред?)))

ЗЫ: В программировании я очень новичок, не судите строго)

4

Re: Индикатор арбитраж спред

у заявок получится график похожий на график цены. Вряд ли что то полезное даст такой график. имхо

5 (2014-02-03 16:34:50 отредактировано shishkir_aleksandr)

Re: Индикатор арбитраж спред

Вот что у меня получилось, реализовал расчет спреда на основе МА.

Вот только при при пропущенных данных рисует криво), как это устранить? А и еще кто-нить знает как сделать индикатор CumDelta? HELP!

Settings=
{
    Name = "Spread",
    tag = "Si",
    Ves =1,
    value_type = "C",
    line = 
    {
        {
            Name = "MA",
            Color = RGB(255, 0, 0),
            Type = TYPE_LINE,
            Width = 1
        }
    }
}
 
function dValue(i,param)
    local v = param or "C"
    
    if         v == "O" then 
                return O(i)
    elseif     v == "H" then
                return H(i)
    elseif     v == "L" then
                return L(i)
    elseif     v == "C" then
                return C(i)
    elseif     v == "V" then
                return V(i)
    elseif     v == "M" then
                return (H(i) + L(i))/2
    elseif     v == "T" then
                return (H(i) + L(i)+C(i))/3
    elseif     v == "W" then
                return (H(i) + L(i)+2*C(i))/4
    else 
        return C(i)
    end
end
 
function Init()
    return 1
end
 
function OnCalculate(index)
    
    n = getNumCandles (Settings.tag)
    
    t,n,s = getCandlesByIndex(Settings.tag,0,n-1,1)
    
    function dMas(i,param)
    
        local v = param or "C"
    
        if         v == "O" then 
                    return t[0].open
        elseif     v == "H" then
                    return t[0].high
        elseif     v == "L" then
                    return t[0].low
        elseif     v == "C" then
                    return t[0].close
        elseif     v == "M" then
                    return (t[0].high + t[0].low)/2
        elseif     v == "T" then
                    return (t[0].high + t[0].low+t[0].close)/3
        elseif     v == "W" then
                    return (t[0].high + t[0].low+t[0].close*2)/4
        else 
            return t[0].close
        end
    end
    if index < 1 then
        return nil
    else
        local sum = 0
        for i = index, index do
            sum = sum +dValue(i, Settings.value_type)-Settings.Ves*dMas(i, Settings.value_type)
        end
        return sum
    end
end

6

Re: Индикатор арбитраж спред

Вставлю и свои пять копеек.

Settings=
{
    Name = "Spread",
    tag = "SI",
    Period = 10,
    value_type = "C",
    Reverse = -1,
    line = 
    {
        {
            Name = "Spread",
            Color = RGB(100, 200, 100),
            Type = TYPE_HISTOGRAM,
            Width = 2
        }
    }
}
 
function dValue(i,param)
    local v = param or "C"    
    if         v == "O" then 
                return O(i)
    elseif     v == "H" then
                return H(i)
    elseif     v == "L" then
                return L(i)
    elseif     v == "C" then
                return C(i)
    elseif     v == "V" then
                return V(i)
    elseif     v == "M" then
                return (H(i) + L(i))/2
    elseif     v == "T" then
                return (H(i) + L(i)+C(i))/3
    elseif     v == "W" then
                return (H(i) + L(i)+2*C(i))/4
    else 
        return C(i)
    end
end
 
function Init()
    return 1    
end
 
function OnCalculate(index)  
    local period = Settings.Period  
    local Ves = 0
    local R = Settings.Reverse
    
    function dMas(i,param)
    local n = getNumCandles (Settings.tag)    
        local t,_,_ = getCandlesByIndex(Settings.tag,0,n-Size()-1+i,1)    
        local v = param or "C"    
        if         v == "O" then 
                    return t[0].open
        elseif     v == "H" then
                    return t[0].high
        elseif     v == "L" then
                    return t[0].low
        elseif     v == "C" then
                    return t[0].close
        elseif     v == "M" then
                    return (t[0].high + t[0].low)/2
        elseif     v == "T" then
                    return (t[0].high + t[0].low+t[0].close)/3
        elseif     v == "W" then
                    return (t[0].high + t[0].low+t[0].close*2)/4
        else 
            return t[0].close
        end
    end
    
    if index < period*3+2 then
        return nil
    else   
 
        local sum = 0    
    local per = 0    
        local base_inc = 0
        local add_inc = 0
       
        local avg_k=0
        local sum_b=0
        local sum_a=0
        for c = index-period*3, index do            
                base_inc=math.abs(dValue(c, Settings.value_type)-dValue(c-1, Settings.value_type))
                add_inc=math.abs(dMas(c, Settings.value_type)-dMas(c-1, Settings.value_type))
            if (base_inc/math.abs(dValue(c-1, Settings.value_type))<0.3 and add_inc/math.abs(dMas(c-1, Settings.value_type))<0.3) then
                sum_b = sum_b+math.abs(base_inc)
                sum_a = sum_a+math.abs(add_inc)
            end
        end
        avg_k=sum_b/sum_a
       
        for c = index-period, index do            
                base_inc=((dValue(c, Settings.value_type)-dValue(c-1, Settings.value_type))/dValue(c-1, Settings.value_type))*100
                add_inc=((dMas(c, Settings.value_type)-dMas(c-1, Settings.value_type))/dMas(c-1, Settings.value_type))*100
        if (math.abs(base_inc)<10 and math.abs(add_inc)<10) then 
                sum = sum+(base_inc-R*add_inc*avg_k)
        per=per+1
            end
        end

        return sum/per    
    end    
end

вот моя версия индикатора спреда, параметры по умолчанию для спреда RTS/Si

7

Re: Индикатор арбитраж спред

День добрый, могли бы вы подсказать как этим индикатором воспользоваться? Я сделал файл текстовый с расширение lua, но после добавления на график выдаёт ошибку... я что-то пропускаю наверно.

8

Re: Индикатор арбитраж спред

Надо файл положить в папку LuaIndicators внутри папки с QUIK.
Тогда это индикатор появится в списке индикаторов, доступных в терминале.

Если же при этом возникает какое-то сообщение об ошибке - напишите какое, тогда можно будет сто-то предметно подсказать.

9

Re: Индикатор арбитраж спред

zyanov пишет:

у заявок получится график похожий на график цены. Вряд ли что то полезное даст такой график. имхо

отчего же? вполне себе хороший трендовый показатель. Только одного спроса/предложения мало, нужен такой же, только с объемами, участников в заявках на покупку может быть больше, а денег в заявках - меньше.

10

Re: Индикатор арбитраж спред

swerg пишет:

Надо файл положить в папку LuaIndicators внутри папки с QUIK.
Тогда это индикатор появится в списке индикаторов, доступных в терминале.

Если же при этом возникает какое-то сообщение об ошибке - напишите какое, тогда можно будет сто-то предметно подсказать.

Вот что пишет ошибка:
"...:\Open_Broker_QUIK\LuaIndicators\paveldifference.lua:79: attempt to perform arithmetic on a nil value"