вторник, 9 января 2024 г.

Trade, RSI, Lua

local function RSI(data, period, overbought, oversold)

   local delta = {}

   for i = 2, #data do

       delta[i] = data[i] - data[i - 1]

   end


   local gain = {}

   local loss = {}

   for i = 1, period do

       gain[i] = math.max(delta[i], 0)

       loss[i] = math.abs(math.min(delta[i], 0))

   end


   for i = period + 1, #delta do

       gain[i] = (gain[i - 1] * (period - 1) + gain[i]) / period

       loss[i] = (loss[i - 1] * (period - 1) + loss[i]) / period

   end


   local rs = {}

   for i = 1, #gain do

       rs[i] = gain[i] / loss[i]

   end


   local rsi = {}

   for i = 1, #rs do

       rsi[i] = 100 - (100 / (1 + rs[i]))

   end


   return rsi

end