azoyan / talua

Techincal Analysis and Indicators Lua library

Home Page:https://azoyan.github.io/talua

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

logo build status Travis (.org) AppVeyor Coveralls github codecov License

Techincal Analysis and Indicators library written in Lua

Provides most popular technical indicators.

Getting started

Install from luarocks

luarocks install talua

Basic ideas

Common to the whole API are the functions add, last, series and reset.

add(...)

The add function is universal and can take a number, several numbers, or a table of numbers as arguments, as well as, in most cases, a candlestick (Candlestick), several candlesticks, and a table of candlesticks.

The function returns the self, so you can call it multiple times or call another method of the object. Take a look:

local SimpleMovingAverage = require "SimpleMovingAverage"

local sma = SimpleMovingAverage(4)

sma:add(4.0)
sma:add(5.0)
sma:add(6.0)
sma:add(6.0)

-- it is same as:
sma:add(4,0, 5.0, 6.0, 6.0)
-- or
sma:add{4,0, 5.0, 6.0, 6.0}
-- or
sma:add{{4.0, {5.0, {6.0, {6.0 }}}}}
-- or
sma:add(4.0):add(5.0):add(6.0):add(6.0)

You can combine numbers and Сandlesticks as you like:

local Candlestick = require "Candlestick"
local candle1 = Candlestick():close(4.0)
local candle2 = Candlestick():close(4.0)

sma:add({candle1, candle2}, {7, 1}):add(Candlestick():close(3)):add(4.0):add{5.0, 5.5}

last()

Returns last or in other words actual or current value of indicator series:

local last = sma:add{4.0, 5.0, 6.0, 6.0, 6.0, 6.0, 2.0}:last() -- 5.0

series()

Returns series of indicator values:

local sma = SimpleMovingAverage(9)

local input = {22.81, 23.09, 22.91, 23.23, 22.83, 23.05, 23.02, 23.29, 23.41, 23.49, 24.60, 24.63, 24.51, 23.73,
              23.31, 23.53, 23.06, 23.25, 23.12, 22.80, 22.84}

local series = sma:add(input):series() -- 23.07, 23.15, 23.31, 23.51, 23.65, 23.75, 23.78, 23.83, 23.81, 23.79, 23.75, 23.55, 23.35

Example:

local RelativeStrengthIndex = require "RelativeStrengthIndex"
    
local rsi = RelativeStrengthIndex(14) -- period argument

rsi:add(283.46, 280.69, 285.48, 294.08, 293.90, 299.92, 301.15, 284.45, 294.09, 302.77, 301.97, 306.85,
        305.02, 301.06, 291.97, 284.18, 286.48, 284.54, 276.82, 284.49, 275.01, 279.07, 277.85, 278.85,
        283.76, 291.72, 284.73, 291.82, 296.74, 291.13)

local last = rsi:last() -- returns last RSI value 54.17

-- To return series of RSI:
local series = rsi:series() -- 55.37, 50.07, 51.55, 50.20, 45.14, 50.48, 44.69, 47.47, 46.71, 47.45, 51.05, 56.29, 51.12, 55.58, 58.41, 54.17

local SimpleMovingAverage = require "SimpleMovingAverage"

local sma = SimpleMovingAverage(4)
-- Possibly usage:
 sma:add{4.0, 5.0, 6.0, 6.0, 6.0, 6.0, 2.0}:last() -- 5.0

List of indicators

So far there are the following indicators available.

  • Trend
    • Exponential Moving Average (EMA)
    • Simple Moving Average (SMA)
  • Oscillators
    • Relative Strength Index (RSI)
    • Fast Stochastic
    • Slow Stochastic
    • Moving Average Convergence Divergence (MACD)
    • Percentage Price Oscillator (PPO)
    • Money Flow Index (MFI)
  • Other
    • Minimum
    • Maximum
    • True Range
    • Standard Deviation (SD)
    • Average True Range (AR)
    • Efficiency Ratio (ER)
    • Bollinger Bands (BB)
    • Chandelier Exit (CE)
    • Keltner Channel (KC)
    • Rate of Change (ROC)
    • On Balance Volume (OBV)

About

Techincal Analysis and Indicators Lua library

https://azoyan.github.io/talua

License:MIT License


Languages

Language:Lua 91.4%Language:Batchfile 8.6%