Блог им. miron44

Индикатор StochRSI

Здраствуйте форумчане. Ищу индикатор StochRSI для КВИКа. Мож у кого есть если не жалко. в программирование полный ноль.
заранеее благадарю за ответы.
1.3К | ★4
15 комментариев
имея такой индиктор, вы отберете все деньги форумчан....., кто ж вам его даст?
avatar
А сколько примерно стоит этот индикатор, если например его заказывать для квика?
avatar

Settings = {
Name = "*StohRSI",
round = «off»,
Period = 5,
Per_K = 9,
PeriodSO = 5,
Shift = 3,
VType = «Close», --Open, High, Low, Close, Volume, Median, Typical, Weighted, Difference
line = {
        {Name = «RSI», Type = TYPE_LINE, Color = RGB(255, 255, 128)},
        {Name = «SO», Type = TYPE_LINE, Color = RGB(255, 0, 0)},
        {Name = «Sign», Type = TYPE_LINE, Color = RGB(128, 255, 128)},        
        {Name = «line 20», Type = TYPE_LINE, Color = RGB(0, 128, 255)},        
        {Name = «line 80», Type = TYPE_LINE, Color = RGB(0, 128, 255)}        
        }
}

function Init()
    func = RSI()
    return #Settings.line
end

function OnCalculate(Index)
    if not CandleExist(Index) then
        return nil
    end
    return func(Index, Settings)
end

function RSI() --Relative Strength I(«RSI»)
    local Up = {}
    local Down = {}
    local val_Up = {}
    local val_Down = {}
    local K_MA1=MA()
    local K_MA2=MA()
    local D_MA=MA()
    local proSO={}
    local Out = {}    
return function (I, Fsettings, ds)
local Fsettings=(Fsettings or {})
local P = (Fsettings.Period or 14)
local PK = (Fsettings.Per_K or 5)
local PerSO = (Fsettings.PeriodSO or 5)
local S = (Fsettings.Shift or 3)
local PD = (Fsettings.Period_D or 3)
local VT = (Fsettings.VType or «Close»)
local R = (Fsettings.round or «off»)
local MD = (Fsettings.Metod_D or «SMA»)
local M = (Fsettings.Metod or «SMA»)
if I <=PerSO then
    Up[I] = 0
    Down[I] = 0
end
if I>PerSO then
    local Val = Value(I,«T»,ds)
    local ValPrev = Value(I-1,VT,ds)
    if ValPrev < Val then
        Up[I] = Val — ValPrev
    else
        Up[I] = 0
    end
    if ValPrev > Val then
        Down[I] = ValPrev — Val
    else
        Down[I] = 0
    end
    if (I == P) or (I == P+1) then
        local sumU = 0
        local sumD = 0
        for i = I-P+1, I do
            sumU = sumU + Up[i]
            sumD = sumD + Down[i]
        end
        val_Up[I] = sumU/P
        val_Down[I] = sumD/P
    end
    if I > P+1 then
        val_Up[I] = (val_Up[I-1] * (P-1) + Up[I]) / P
        val_Down[I] = (val_Down[I-1] * (P-1) + Down[I]) / P
        Out[I] = 100 / (1 + (val_Down[I] / val_Up[I]))        
    end    
end    
    if I > PK*2 then        
        RsiOut=D_MA(I,{Period=PK, Metod = M, VType=«Any», round=R}, Out)
    end
     _,_,proSO[I]= MaxMin(I,5,ds,3)
    if I>=(PK+3-1) then            
    SignSO=D_MA(I, {Period=3, Metod = «SMA», VType=«Any», round=«off»}, proSO)
    end
        return rounding(RsiOut, 4),rounding(proSO[I], 4),rounding(SignSO, 4),rounding(Out[I], 4)
    end    
end    

-------------------------------------------------------
-------------------------------------------------------
function MA() --Moving Average («MA»)
local t_SMA = F_SMA()
local t_EMA = F_EMA()
return function(I, Fsettings, ds)
    local Out = nil
    local Fsettings=(Fsettings or {})
    local P = (Fsettings.Period or 9)
    local M = (Fsettings.Metod or «EMA»)
    local VT = (Fsettings.VType or «Close»)
    local R = (Fsettings.round or «off»)
    if M == «SMA» then
        Out = t_SMA(I, P, VT, ds, R)
    elseif M == «EMA» then
        Out = t_EMA(I, P, VT, ds, R)
    else
        Out = nil
    end
    return rounding(Out, R)
end
end
------------------------------------------------------
function MaxMin(ind,Pk,ds,Sk)
    if ind < Pk+Sk then
        return nil
    else
   local suCM=0
   local suMM=0
         for i = ind — Sk+1, ind do
             MAX = Value(i-Pk+1,«High»,ds)
             MIN = Value(i-Pk+1,«Low»,ds)
         for k = 0, Pk-1 do
             MAX=math.max(MAX,Value(i-k,«High»,ds))
             MIN=math.min(MIN,Value(i-k,«Low»,ds))
         end
    --message('тран:'..OutWR,1)        
        suCM=suCM+(Value(i, «Close», ds)-MIN)
        suMM=suMM+(MAX-MIN)
        end
    local TenKu=(MAX+MIN)/2
    local OutWR=100*(Value(ind,«Close», ds)-MIN)/(MAX-MIN)            
    local proKol =100*suCM/suMM
    local wpr = ((MAX — Value(ind,«Close», ds)) / (MAX — MIN)) * (-100)    
        return rounding(TenKu, 6),rounding(OutWR, 6),rounding(proKol, 6)
end
end
------------------------------------------------------------------
function F_SMA()
return function (I, Period, VType, ds, R)
local Out = nil
    if I >= Period then
        local sum = 0
        for i = I-Period+1, I do
            sum = sum +Value(i, VType, ds)
        end
        Out = sum/Period
    end
    return rounding(Out,R)
end
end
---------------------------------------------------------
function F_EMA()
local EMA_TMP={}
return function(I, Period, VType, ds, R)
local Out = nil
    if I == 1 then
        EMA_TMP[I]=rounding(Value(I, VType, ds),R)
    else
        EMA_TMP[I]=rounding((EMA_TMP[I-1]*(Period-1)+2*Value(I, VType, ds)) / (Period+1),R)
        
    end
    
    if I >= Period then
        Out = EMA_TMP[I]
    end
    return rounding(Out,R)
end
end
-------------------------------------------------------
function Value(I,VType,ds)
local Out = nil
VType=(VType and string.upper(string.sub(VType,1,1))) or «A»
    if VType == «O» then        --Open
        Out = (O and O(I)) or (ds and ds:O(I))
    elseif VType == «H» then     --High
        Out = (H and H(I)) or (ds and ds:H(I))
    elseif VType == «L» then    --Low
        Out = (L and L(I)) or (ds and ds:L(I))
    elseif VType == «C» then    --Close
        Out = (C and C(I)) or (ds and ds:C(I))
    elseif VType == «V» then    --Volume
        Out = (V and V(I)) or (ds and ds:V(I))
    elseif VType == «M» then    --Median
        Out = ((Value(I,«H»,ds) + Value(I,«L»,ds)) / 2)
    elseif VType == «T» then    --Typical
        Out = ((Value(I,«M»,ds) * 2 + Value(I,«C»,ds))/3)
    elseif VType == «W» then    --Weighted
        Out = ((Value(I,«T»,ds) * 3 + Value(I,«O»,ds))/4)
    elseif VType == «D» then    --Difference
        Out = (Value(I,«H»,ds) — Value(I,«L»,ds))
    elseif VType == «A» then    --Any
        if ds then Out = ds[I] else Out = nil end
    end
return Out
end
 
function rounding(num, round)
if round and string.upper(round)== «ON» then round=0 end
if num and tonumber(round) then
    local mult = 10^round
    if num >= 0 then return math.floor(num * mult + 0.5) / mult
    else return math.ceil(num * mult — 0.5) / mult end
else return num end
end
  
Сохранить в файл с расширением lua
Например StohRsi,lua
Файл поместиь в  папку Luaindicators     

avatar
Eskware, Все сделал как написано, но индикатор не появился(( 
avatar
miron44, ТАЖЕ ХЕРЬНЯ ИНДИКАТОРА НЕТ
avatar
Eskware, у меня почему-то тоже послений квик не видит скрипты в папке луаиндикаторы, хотя до обновления видел. Есть какие-то идеи?
avatar
Glago, Если квик 8, то у меня он на линуксе через вине. Скрипты луа не правил и они работают нормально и после обновления. Как 8-ка работает на виндовозе не проверял.
avatar
Спасибо огромное.

avatar
Нужно заменить все кавычки  на  " "  Например в «Close», «RSI» и др.
Имя файла должно быть с точкой: StohRsi.lua
avatar
Не помагло(((
avatar
avatar
Eskware, а можете еще раз выложить? Недоступно.

avatar
Уфимский букинист, Попробуй отсюда 
drive.google.com/file/d/1TLUgJzCnvseGZFChY0IdOCAkiQUj98Sl/view?usp=sharing
Если не получится сообщи куда выслать
avatar

Eskware, там просит доступ.

Если не трудно на bukinistufa@gmail.com скиньте. Пожалуйста.

avatar
Eskware, спасибо большое.  Теперь осталось разобраться в них :)

avatar

Читайте на SMART-LAB:
Фото
Нефтяной рынок получил новый источник нестабильности
Европейские валюты во вторник оказались под давлением сразу с нескольких сторон: фондовые рынки снижаются, доллар укрепляется, а инвесторы...
Фото
Про нашу нейросеть ByteDog написали в Forbes
В середине апреля мы  рассказали , что с нуля создали собственную нейросеть для поиска вредоносов, которая читает файлы как текст. Мы сделали ее...
В Accent разработали сервис для оценки влияния недвижимости на портфель инвестора
Группа Accent запустила интерактивный инструмент для анализа инвестиционного портфеля. Сервис, доступный на сайте компании, позволяет оценить,...
Фото
Какой убыток мог быть у Магнита в 2025 году?
На этой неделе, вероятно, под занавес сезона годовых отчетов, свои результаты должен опубликовать Магнит. Что ждать и насколько все плохо?

теги блога Илья Миронов

....все тэги



UPDONW
Новый дизайн