Индикатор средняя по RSI

Страницы: 1
RSS
Индикатор средняя по RSI, Некорректно отражается индикатор.
 
Добрый день!

Пытаюсь написать среднюю скользящую по RSI. Идентификатор на графике есть, но при запуске рисуется прямая.
При этом после установки индикатора со временем постепенно идет прорисовка, но явно не средняя получается (картинка: https://dropmefiles.com/8uQPI )

Индикатор:
Код
Settings=
{
  Name = "ma_rsi_period2",
  period = 10,
  ID_RSI = "SBER_RSI_ID",
  line = 
       {
         { Name = "RSI MA Simple", 
      Color = #ff0000,
           Type = TYPE_LINE,
           Width = 2
         }
       }
}


function Init() 
   t = {}
   start_ind = 0 
   tindex = 0
   lastSMARSI = 0 
    return 1
end 

function OnCalculate(index)
   

   if index>=1 then
      Graph_RSI, Number_RSI, Legend_RSI = getCandlesByIndex(Settings.ID_RSI, 0, index-1, 1)
   else
      return nil
   end
   
   
   if Graph_RSI~=0 then
   
      local Graph_RSI = Graph_RSI[0].close
      
      if Graph_RSI == 0 or Graph_RSI == nil then 
         return nil 
      else
         if start_ind == 0 then start_ind = index end
      end
      
      
         if index < (Settings.period + start_ind) then
            
            if tindex < index then

               table.insert(t, Graph_RSI)
               tindex = index
            end
            
            
            return nil
                        
         else
            
            local sum = 0
            
            if index > tindex then
            
               table.insert(t, Graph_RSI)
               table.remove(t, 1)
               
               for i = 1, #t do
                  sum = sum + tonumber(t[i])
               end
               
               sum = sum + tonumber(Graph_RSI)
               tindex = index
            
               lastSMARSI = sum/Settings.period
               
               return sum/Settings.period
            
            
            end
         
            
            return lastSMARSI
         
         
         end
      
   else
      return nil
   end
   
end

В код пришлось вводить много дополнительных условий и переменных, т.к. в процессе написания выяснилось, что иногда бывает несколько одинаковых index на свечу. Поэтому ввел lastSMARSI которая должна выводиться, если скрипт работает с той же самой свечкой.

Может есть какое-то более простое решение.
 
Добрый день!

Не я не про код! Только маленькая ремарка в отношении смысла. Про постановку вопроса?
А зачем?

Вы читаете значение из RSI?, и пытаетесь его ещё дополнительно сгладить, Вы представляете какой период оцениваете?

Нет технических вопросов совсем нет,  до нас все придумали !
Вашем исполнении техника мягко говоря  хромает,. зачем создавать индикатор в QUIk а потом  его читать,  (QUIk без Вашей помощи упадет :cry: )

Алгоритмы все известны, пишите сразу RSI, усредняйте (Period RSI + Period Вашего усреднения).
А зачем? Это из области "Если Все прыгнули в колодец, то и мне пора" :wink:

Высказываясь так, "Ни чего личного", хочу чтоб Вы для себя с формулировали задачу. А зачем?

Альфа эквивалентной EMA связана с длиной простой скользящей средней как            

Альфа
= 2/(P+1);

Не если вы  не Инвестор!  
 
Цитата
VPM написал:

А зачем?
Обычно на такое не отвечаю, но просто чтобы не набежала еще толпа желающих просто посотрясать воздух и пофилосовствовать, коих на форуме стала тьма, а не посоветовать что-то в конкретном коде: я вообще RSI не использую. Это простой пример.

Любой индикатор легко считается в скрипте qlua, сделать там же среднюю по значениям индикатора не проблема, вопрос именно в пристыковке средней к индикатору на графике силами кода индикатора.
 
Цитата
Сергей написал:
Любой индикатор легко считается в скрипте qlua, сделать там же среднюю по значениям индикатора не проблема, вопрос именно в пристыковке средней к индикатору на графике силами кода индикатора.
Вы сами то понимаете что написали?
Цитата
Сергей написал:
Обычно на такое не отвечаю, но просто чтобы не набежала еще толпа желающих просто посотрясать воздух и пофилосовствовать, коих на форуме стала тьма
Вам тут больше на код не кто не скажет, "Белиберда", просто потому что время дороже.
Цитата
Сергей написал:
а не посоветовать что-то в конкретном коде:
Цитата
VPM написал:
Алгоритмы все известны, пишите сразу RSI, усредняйте (Period RSI + Period Вашего усреднения).
Индикаторы Опубликованы на этом сайте, берите, усредняйте, при вычислении результатов учитывайте два периода усреднения (Период усреднения RSI и Ваш период).
Примеров двойного усреднения полно опубликованных.
Хотел в своей библиотеке найти где то был сразу не нашел.
Но вот пример как я пользуюсь индикаторами через присвоение.

function Cached.RSI__()
local log=math.log
local exp=math.exp
local abs=math.abs
local Price={}
local EMA={}
local Noise,Peak={},{}
local UOE={}

local fLaguerre=Cached.Laguerre_Ehlers()
local fPeriod=Cached.Period_SineWave()

return function( I,FSettings,ds )

 local I = I
 local ds=ds
 local FSettings = (FSettings or {})

Cached -- моя библиотека
дальше присвоение и создание переменных (для данной ф. это глобальные).

return function( I,FSettings,ds ) - это замыкание в луа, собственно сама функция  то что мы считаем.
 дальше присвоение и  создание локальных переменных

и считаем все что угодно.
 
Цитата
Сергей написал:
В код пришлось вводить много дополнительных условий и переменных, т.к. в процессе написания выяснилось, что иногда бывает несколько одинаковых index на свечу.
Не бывает ни когда. Индекс пришел или не пришел.

Можно отслеживать:

newbar = Индекс > Индекс1 or false;
Индекс1=Индекс
Страницы: 1
Читают тему
Наверх