Максим (Автор тем)

Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
Разрыв соединения c сервером
 
Почему квик иногда сам разрывает соединение с сервером? Приходится постоянно переподключаться.
Как сделать чтобы он сам не разрывал соединения
Как строить дивергенцию на графике RSI?
 
Пишу скрипт для заказчика. Надо считать rsi для каждой свечи и строить линии дивергенции. RSI я посчитал, но не понимаю какие значения надо сравнивать, чтобы понять когда строить линию. Подскажите, пожалуйста, или может есть какие-то статьи?
Как рисовать трендовые линии RSI?
 
Пишу скрипт для заказчика. Нужно строить трендовые линии RSI. У меня есть значения rsi для каждой свечи, как их надо сравнивать чтобы понять, когда строить линию?
В интернетах найти не смог, заказчик объяснить не может. Натолкните на решение)
Как запустить скрипт qlua из командной строки?
 
У меня есть скрипт на питоне, который запускает lua файлы в командной строке. Но с скриптами для квика это не работает. Какие есть способы запуска скриптов для квика из командной строки?
Как драйвер RSI переделать под обычный скрипт
 
Всем привет. Мне надо переделать драйвер RSI под обычный скрипт, чтобы я его мог запустить в терминале, указав в коде нужную мне бумагу.
Пытался сам и с гуглом, но ничего не получилось(
Код
Settings=
{
    Name = "*trdrobot.ru_RSI",
    RSIPeriod = 14,         
    RSIVType = "Close", 
    PivotRight = 5,     
    PivotLeft = 5,      
    RangeMax = 60,      
    RangeMin = 5,       
    line =
    {
        {
            Name = "RSI",
            Color = RGB(96, 96,255),
            Type = TYPE_LINE,
            Width = 2
        },
        {
        Name = "Diver_Bull", 
        Type = TYPET_BAR,
        Color = RGB(96, 255,96),
        Width = 2
        },
        {
        Name = "Diver_Bear", 
        Type = TYPET_BAR,
        Color = RGB(255, 96,96),
        Width = 2
        }
    }
}

local function Value(I,VType) 
local Out = nil
    if VType == "C" then    --Close
        Out = C(I)
    elseif VType == "O" then        --Open
        Out = O(I)
    elseif VType == "H" then    --High
        Out = H(I)
    elseif VType == "L" then    --Low
        Out = L(I)
    elseif VType == "V" then    --Volume
        Out = V(I)
    elseif VType == "M" then    --Median
        Out = H(I)
        if Out~=nil then 
            Out = ((Out + L(I)) / 2)
        end 
    elseif VType == "T" then    --Typical
        Out = H(I)
        if Out~=nil then 
            Out = ((Out + L(I) + C(I))/3)
        end 
    elseif VType == "W" then    --Weighted
        Out = H(I)
        if Out~=nil then 
            Out = (Out+L(I)+O(I)+C(I))/4
        end 
    elseif VType == "D" then    --Difference
        Out = H(I)
        if Out~=nil then 
            Out = (Out - L(I))
        end 
    end
return Out
end

local math_min=math.min
local math_max=math.max

function LVolF()
    local ind_l = 0
    local rsipd = 14
    local rsiVT = "C"
    local Up = 0
    local Down = 0
    local rsisma_U = {0,0}
    local rsisma_D = {0,0}
    local V_p = 0
    local V_l = 0
    local c_a={0}
    
    local pvtr=5
    local pvtl=5
    local pvts = 11
    local rmax=60
    local rmin=5
    
    local u_a={{0,0},{0,0}}
    local d_a={{0,0},{0,0}}
    
    return function(ind,FSettings)
        local j=0
        local i = 0
        local a1,a2=0,0
        if ind==1 then
            rsipd = (FSettings.RSIPeriod or 14)
            rsiVT = (string.upper(string.sub(FSettings.RSIVType,1,1)) or "C")
            pvtr = (FSettings.PivotRight or 5)
            pvtl = (FSettings.PivotLeft or 5)
            rmax = (FSettings.RangeMax or 60)
            rmin = (FSettings.RangeMin or 5)
            pvts=pvtr+pvtl+1
            u_a={{0,0},{0,0}}
            d_a={{0,0},{0,0}}
            
            ind_l = 0
            Up = 0
            Down = 0
            rsisma_U = {0,0}
            rsisma_D = {0,0}
            V_l = Value(1,rsiVT)
            if V_l==nil then V_l = 0 end
            V_p = V_l
            c_a = {0}
            return nil
        end 
        if ind_l~=ind then
            ind_l=ind   
            V_p = V_l
            rsisma_U[2],rsisma_D[2] = rsisma_U[1],rsisma_D[1]
            if ind>pvts then
                local ul,dl=c_a[ind-1],c_a[ind-1]
                local un,dn=ind-1,ind-1
                local flu,fld=false,false
                for i = 2,pvts do
                    if ul<c_a[ind-i] then ul=c_a[ind-i];un=ind-i end
                    if dl>c_a[ind-i] then dl=c_a[ind-i];dn=ind-i end
                end
                if un==(ind-pvtr-1) then 
                    u_a[2][1],u_a[2][2]=u_a[1][1],u_a[1][2]
                    u_a[1][1],u_a[1][2]=ul,un
                    flu=true
                end
                if dn==(ind-pvtr-1) then 
                    d_a[2][1],d_a[2][2]=d_a[1][1],d_a[1][2]
                    d_a[1][1],d_a[1][2]=dl,dn
                    fld=true
                end
                
                if flu and u_a[2][2]>0 and C(u_a[1][2])~=nil and C(u_a[2][2])~=nil then
                    i=u_a[1][2]-u_a[2][2]
                    if i>=rmin and i<=rmax then
                        a1=math_max(C(u_a[1][2]),O(u_a[1][2]))
                        a2=math_max(C(u_a[2][2]),O(u_a[2][2]))
                        if u_a[1][1]<u_a[2][1] and a1>a2 then
                            for j=u_a[2][2],u_a[1][2] do
                                SetValue(j,2,u_a[2][1]-(u_a[2][1]-u_a[1][1])*((j-u_a[2][2])/i))
                            end
                            message(tostring(j,3,d_a[2][1]-(d_a[2][1]-d_a[1][1])*((j-d_a[2][2])/i)))
                            os.execute("C:\\Users\\Admin\\Documents\\finbot\\venv\\Scripts\\python.exe C:\\Users\\Admin\\Documents\\finbot\\quik_lua\\message.py")
                        end
                    end
                end
                if fld and d_a[2][2]>0 and C(d_a[1][2])~=nil and C(d_a[2][2])~=nil then
                    i=d_a[1][2]-d_a[2][2]
                    if i>=rmin and i<=rmax then
                        a1=math_min(C(d_a[1][2]),O(d_a[1][2]))
                        a2=math_min(C(d_a[2][2]),O(d_a[2][2]))
                        if d_a[1][1]>d_a[2][1] and a1<a2 then
                            for j=d_a[2][2],d_a[1][2] do
                                SetValue(j,3,d_a[2][1]-(d_a[2][1]-d_a[1][1])*((j-d_a[2][2])/i))
                            end
                            message(j,3,d_a[2][1]-(d_a[2][1]-d_a[1][1])*((j-d_a[2][2])/i))
                            os.execute("C:\\Users\\Admin\\Documents\\finbot\\venv\\Scripts\\python.exe C:\\Users\\Admin\\Documents\\finbot\\quik_lua\\message.py")
                        end
                    end
                end
            end
        end
        V_l = Value(ind,rsiVT)
        if V_l==nil then V_l = V_p end
        if V_p < V_l then Up = V_l - V_p else Up = 0 end
        if V_p > V_l then Down = V_p - V_l else Down = 0 end
        rsisma_U[1]=(rsisma_U[2]*(rsipd-1)+Up)/rsipd
        rsisma_D[1]=(rsisma_D[2]*(rsipd-1)+Down)/rsipd
        
        if rsisma_D[1]==0 then 
            c_a[ind]=0
        else    
            c_a[ind] = 100-100 / (1 + (rsisma_U[1] / rsisma_D[1]))
        end 
        return c_a[ind],nil,nil
    end
end

function Init()
    lvol_f = LVolF()
    return 3
end

function OnCalculate(index)
    return lvol_f(index,Settings)
end

Страницы: 1
Наверх