Тема: Индикатор арбитраж спред
Возможно ли посредством LUA в QUIKe построить в виде графика:
D=Заявки на покупку-Заявки на продажу;
т.е. спред между двумя графиками, по типу арбитража?

Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
QUIK -> DDE → Lua-индикаторы → Индикатор арбитраж спред
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Возможно ли посредством LUA в QUIKe построить в виде графика:
D=Заявки на покупку-Заявки на продажу;
т.е. спред между двумя графиками, по типу арбитража?

shishkir_aleksandr,
Приветствую вас на этом форуме! заходите почаще )
По поводу вашего вопроса: хорошо бы вы картинку покрупнее выложили...
В принципе, нарисовать можно, но не просто: надо придумывать как именно заявки привязывать к координатам графика и что делать с заявками, которые уже сняты/сыграли. Но в принципе так или иначе задача решаемая.
Хорошо бы вы еще уточнили между какими именно параметрами заявок надо спред вычислять? количество? цена? объем?
Хорошо бы вы еще уточнили между какими именно параметрами заявок надо спред вычислять? количество? цена? объем?
  
Прошу прощения за неточную постановку вопроса)
     В QUIKe по каждому инструменту транслируется такой параметр как "СУММАРНОЕ КОЛИЧЕСТВО ЗАЯВОК НА ПОКУПКУ"  и "СУММАРНОЕ КОЛИЧЕСТВО ЗАЯВОК НА ПРОДАЖУ", по этим значениям из ТАБЛИЦЫ ИСТОРИИ ЗНАЧЕНИЙ ПАРАМЕТРОВ можно построить графики (картинку я поменял СМ. ВЫШЕ). 
Т. е. в принципе имеем два графика Price построенным по некоторым параметрам, между которыми и необходимо найти "спред"(разность) и вывести на график. Надеюсь я понятно объяснил?)
Ну и уточняю свой вопрос: По какому алгоритму это возможно реализовать? получение данных с графика->вывод в таблицу->расчет->вывод из таблицы на график? или получение данных с графика->расчет->вывод графика? или я совсем не прав и написал бред?)))
ЗЫ: В программировании я очень новичок, не судите строго)
у заявок получится график похожий на график цены. Вряд ли что то полезное даст такой график. имхо
Вот что у меня получилось, реализовал расчет спреда на основе МА.
Вот только при при пропущенных данных рисует криво), как это устранить? А и еще кто-нить знает как сделать индикатор 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Вставлю и свои пять копеек.
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
День добрый, могли бы вы подсказать как этим индикатором воспользоваться? Я сделал файл текстовый с расширение lua, но после добавления на график выдаёт ошибку... я что-то пропускаю наверно.
Надо файл положить в папку LuaIndicators внутри папки с QUIK.
Тогда это индикатор появится в списке индикаторов, доступных в терминале.
Если же при этом возникает какое-то сообщение об ошибке - напишите какое, тогда можно будет сто-то предметно подсказать.
у заявок получится график похожий на график цены. Вряд ли что то полезное даст такой график. имхо
отчего же? вполне себе хороший трендовый показатель. Только одного спроса/предложения мало, нужен такой же, только с объемами, участников в заявках на покупку может быть больше, а денег в заявках - меньше.
Надо файл положить в папку LuaIndicators внутри папки с QUIK.
Тогда это индикатор появится в списке индикаторов, доступных в терминале.Если же при этом возникает какое-то сообщение об ошибке - напишите какое, тогда можно будет сто-то предметно подсказать.
Вот что пишет ошибка:
"...:\Open_Broker_QUIK\LuaIndicators\paveldifference.lua:79: attempt to perform arithmetic on a nil value"
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
QUIK -> DDE → Lua-индикаторы → Индикатор арбитраж спред