defmodule TalibEx do
@moduledoc """
Interface for talib
"""
# Generated File
alias TalibEx.{Nif, Executer}
@dialyzer {:nowarn_function, acos: 1}
@spec acos([{:values, [number()]}]) :: {:ok, result :: [number() | :nan]} | {:error, term()}
@doc """
Vector Trigonometric ACos
---
Inputs
- `values`
---
Outputs
- `result`
---
TA-LIB src `TA_ACOS`
"""
def acos(params) do
params
|> Executer.new()
|> Executer.load(:values, :double_array)
|> Executer.call(&Nif.nif_acos/1)
end
@dialyzer {:nowarn_function, ad: 1}
@spec ad([
{:high, [number()]} | {:low, [number()]} | {:close, [number()]} | {:volume, [number()]}
]) :: {:ok, result :: [number() | :nan]} | {:error, term()}
@doc """
Chaikin A/D Line
---
Inputs
- `high`: High Price List
- `low`: Low Price List
- `close`: Close Price List
- `volume`: Volume List
---
Outputs
- `result`
---
TA-LIB src `TA_AD`
"""
def ad(params) do
params
|> Executer.new()
|> Executer.load(:high, :double_array)
|> Executer.load(:low, :double_array)
|> Executer.load(:close, :double_array)
|> Executer.load(:volume, :double_array)
|> Executer.call(&Nif.nif_ad/4)
end
@dialyzer {:nowarn_function, add: 1}
@spec add([{:values0, [number()]} | {:values1, [number()]}]) ::
{:ok, result :: [number() | :nan]} | {:error, term()}
@doc """
Vector Arithmetic Add
---
Inputs
- `values0`
- `values1`
---
Outputs
- `result`
---
TA-LIB src `TA_ADD`
"""
def add(params) do
params
|> Executer.new()
|> Executer.load(:values0, :double_array)
|> Executer.load(:values1, :double_array)
|> Executer.call(&Nif.nif_add/2)
end
@dialyzer {:nowarn_function, adosc: 1}
@spec adosc([
{:high, [number()]}
| {:low, [number()]}
| {:close, [number()]}
| {:volume, [number()]}
| {:fast_period, pos_integer()}
| {:slow_period, pos_integer()}
]) :: {:ok, result :: [number() | :nan]} | {:error, term()}
@doc """
Chaikin A/D Oscillator
---
Inputs
- `high`: High Price List
- `low`: Low Price List
- `close`: Close Price List
- `volume`: Volume List
- `fast_period` (default `5`): Number of period for the fast MA (between `2` and `100000`)
- `slow_period` (default `15`): Number of period for the slow MA (between `2` and `100000`)
---
Outputs
- `result`
---
TA-LIB src `TA_ADOSC`
"""
def adosc(params) do
params
|> Executer.new()
|> Executer.load(:high, :double_array)
|> Executer.load(:low, :double_array)
|> Executer.load(:close, :double_array)
|> Executer.load(:volume, :double_array)
|> Executer.load(:fast_period, :integer, %{default: 5, min: 2, max: 100_000})
|> Executer.load(:slow_period, :integer, %{default: 15, min: 2, max: 100_000})
|> Executer.call(&Nif.nif_adosc/6)
end
@dialyzer {:nowarn_function, adx: 1}
@spec adx([
{:high, [number()]}
| {:low, [number()]}
| {:close, [number()]}
| {:time_period, pos_integer()}
]) :: {:ok, result :: [number() | :nan]} | {:error, term()}
@doc """
Average Directional Movement Index
---
Inputs
- `high`: High Price List
- `low`: Low Price List
- `close`: Close Price List
- `time_period` (default `5`): Number of period (between `1` and `100000`)
---
Outputs
- `result`
---
TA-LIB src `TA_ADX`
"""
def adx(params) do
params
|> Executer.new()
|> Executer.load(:high, :double_array)
|> Executer.load(:low, :double_array)
|> Executer.load(:close, :double_array)
|> Executer.load(:time_period, :integer, %{default: 5, min: 1, max: 100_000})
|> Executer.call(&Nif.nif_adx/4)
end
@dialyzer {:nowarn_function, adxr: 1}
@spec adxr([
{:high, [number()]}
| {:low, [number()]}
| {:close, [number()]}
| {:time_period, pos_integer()}
]) :: {:ok, result :: [number() | :nan]} | {:error, term()}
@doc """
Average Directional Movement Index Rating
---
Inputs
- `high`: High Price List
- `low`: Low Price List
- `close`: Close Price List
- `time_period` (default `5`): Number of period (between `1` and `100000`)
---
Outputs
- `result`
---
TA-LIB src `TA_ADXR`
"""
def adxr(params) do
params
|> Executer.new()
|> Executer.load(:high, :double_array)
|> Executer.load(:low, :double_array)
|> Executer.load(:close, :double_array)
|> Executer.load(:time_period, :integer, %{default: 5, min: 1, max: 100_000})
|> Executer.call(&Nif.nif_adxr/4)
end
@dialyzer {:nowarn_function, apo: 1}
@spec apo([
{:values, [number()]}
| {:fast_period, pos_integer()}
| {:slow_period, pos_integer()}
| {:moving_average_type,
:sma | :ema | :wma | :dema | :tema | :trima | :kama | :mama | :t3}
]) :: {:ok, result :: [number() | :nan]} | {:error, term()}
@doc """
Absolute Price Oscillator
---
Inputs
- `values`
- `fast_period` (default `5`): Number of period for the fast MA (between `2` and `100000`)
- `slow_period` (default `15`): Number of period for the slow MA (between `2` and `100000`)
- `moving_average_type` (default `:sma`): Type of moving average. `sma` | `ema` | `wma` | `dema` | `tema` | `trima` | `kama` | `mama` | `t3`
---
Outputs
- `result`
---
TA-LIB src `TA_APO`
"""
def apo(params) do
params
|> Executer.new()
|> Executer.load(:values, :double_array)
|> Executer.load(:fast_period, :integer, %{default: 5, min: 2, max: 100_000})
|> Executer.load(:slow_period, :integer, %{default: 15, min: 2, max: 100_000})
|> Executer.load(:moving_average_type, :ma_type, %{default: :sma})
|> Executer.call(&Nif.nif_apo/4)
end
@dialyzer {:nowarn_function, aroon: 1}
@spec aroon([{:high, [number()]} | {:low, [number()]} | {:time_period, pos_integer()}]) ::
{:ok, down :: [number() | :nan], up :: [number() | :nan]} | {:error, term()}
@doc """
Aroon
---
Inputs
- `high`: High Price List
- `low`: Low Price List
- `time_period` (default `5`): Number of period (between `1` and `100000`)
---
Outputs
- `down`: Arron Down
- `up`: Arron Up
---
TA-LIB src `TA_AROON`
"""
def aroon(params) do
params
|> Executer.new()
|> Executer.load(:high, :double_array)
|> Executer.load(:low, :double_array)
|> Executer.load(:time_period, :integer, %{default: 5, min: 1, max: 100_000})
|> Executer.call(&Nif.nif_aroon/3)
end
@dialyzer {:nowarn_function, aroonosc: 1}
@spec aroonosc([{:high, [number()]} | {:low, [number()]} | {:time_period, pos_integer()}]) ::
{:ok, result :: [number() | :nan]} | {:error, term()}
@doc """
Aroon Oscillator
---
Inputs
- `high`: High Price List
- `low`: Low Price List
- `time_period` (default `5`): Number of period (between `1` and `100000`)
---
Outputs
- `result`
---
TA-LIB src `TA_AROONOSC`
"""
def aroonosc(params) do
params
|> Executer.new()
|> Executer.load(:high, :double_array)
|> Executer.load(:low, :double_array)
|> Executer.load(:time_period, :integer, %{default: 5, min: 1, max: 100_000})
|> Executer.call(&Nif.nif_aroonosc/3)
end
@dialyzer {:nowarn_function, asin: 1}
@spec asin([{:values, [number()]}]) :: {:ok, result :: [number() | :nan]} | {:error, term()}
@doc """
Vector Trigonometric ASin
---
Inputs
- `values`
---
Outputs
- `result`
---
TA-LIB src `TA_ASIN`
"""
def asin(params) do
params
|> Executer.new()
|> Executer.load(:values, :double_array)
|> Executer.call(&Nif.nif_asin/1)
end
@dialyzer {:nowarn_function, atan: 1}
@spec atan([{:values, [number()]}]) :: {:ok, result :: [number() | :nan]} | {:error, term()}
@doc """
Vector Trigonometric ATan
---
Inputs
- `values`
---
Outputs
- `result`
---
TA-LIB src `TA_ATAN`
"""
def atan(params) do
params
|> Executer.new()
|> Executer.load(:values, :double_array)
|> Executer.call(&Nif.nif_atan/1)
end
@dialyzer {:nowarn_function, atr: 1}
@spec atr([
{:high, [number()]}
| {:low, [number()]}
| {:close, [number()]}
| {:time_period, pos_integer()}
]) :: {:ok, result :: [number() | :nan]} | {:error, term()}
@doc """
Average True Range
---
Inputs
- `high`: High Price List
- `low`: Low Price List
- `close`: Close Price List
- `time_period` (default `5`): Number of period (between `1` and `100000`)
---
Outputs
- `result`
---
TA-LIB src `TA_ATR`
"""
def atr(params) do
params
|> Executer.new()
|> Executer.load(:high, :double_array)
|> Executer.load(:low, :double_array)
|> Executer.load(:close, :double_array)
|> Executer.load(:time_period, :integer, %{default: 5, min: 1, max: 100_000})
|> Executer.call(&Nif.nif_atr/4)
end
@dialyzer {:nowarn_function, avgprice: 1}
@spec avgprice([
{:open, [number()]} | {:high, [number()]} | {:low, [number()]} | {:close, [number()]}
]) :: {:ok, result :: [number() | :nan]} | {:error, term()}
@doc """
Average Price
---
Inputs
- `open`: Open Price List
- `high`: High Price List
- `low`: Low Price List
- `close`: Close Price List
---
Outputs
- `result`
---
TA-LIB src `TA_AVGPRICE`
"""
def avgprice(params) do
params
|> Executer.new()
|> Executer.load(:open, :double_array)
|> Executer.load(:high, :double_array)
|> Executer.load(:low, :double_array)
|> Executer.load(:close, :double_array)
|> Executer.call(&Nif.nif_avgprice/4)
end
@dialyzer {:nowarn_function, bbands: 1}
@spec bbands([
{:values, [number()]}
| {:time_period, pos_integer()}
| {:np_dev_up, number()}
| {:np_dev_down, number()}
| {:moving_average_type,
:sma | :ema | :wma | :dema | :tema | :trima | :kama | :mama | :t3}
]) ::
{:ok, upper :: [number() | :nan], middle :: [number() | :nan],
lower :: [number() | :nan]}
| {:error, term()}
@doc """
Bollinger Bands
---
Inputs
- `values`
- `time_period` (default `5`): Number of period (between `1` and `100000`)
- `np_dev_up`: Deviation multiplier for upper band
- `np_dev_down`: Deviation multiplier for lower band
- `moving_average_type` (default `:sma`): Type of moving average. `sma` | `ema` | `wma` | `dema` | `tema` | `trima` | `kama` | `mama` | `t3`
---
Outputs
- `upper`: Upper Band
- `middle`: Middle Band
- `lower`: Lower Band
---
TA-LIB src `TA_BBANDS`
"""
def bbands(params) do
params
|> Executer.new()
|> Executer.load(:values, :double_array)
|> Executer.load(:time_period, :integer, %{default: 5, min: 1, max: 100_000})
|> Executer.load(:np_dev_up, :double)
|> Executer.load(:np_dev_down, :double)
|> Executer.load(:moving_average_type, :ma_type, %{default: :sma})
|> Executer.call(&Nif.nif_bbands/5)
end
@dialyzer {:nowarn_function, beta: 1}
@spec beta([{:values0, [number()]} | {:values1, [number()]} | {:time_period, pos_integer()}]) ::
{:ok, result :: [number() | :nan]} | {:error, term()}
@doc """
Beta
---
Inputs
- `values0`
- `values1`
- `time_period` (default `5`): Number of period (between `1` and `100000`)
---
Outputs
- `result`
---
TA-LIB src `TA_BETA`
"""
def beta(params) do
params
|> Executer.new()
|> Executer.load(:values0, :double_array)
|> Executer.load(:values1, :double_array)
|> Executer.load(:time_period, :integer, %{default: 5, min: 1, max: 100_000})
|> Executer.call(&Nif.nif_beta/3)
end
@dialyzer {:nowarn_function, bop: 1}
@spec bop([
{:open, [number()]} | {:high, [number()]} | {:low, [number()]} | {:close, [number()]}
]) :: {:ok, result :: [number() | :nan]} | {:error, term()}
@doc """
Balance Of Power
---
Inputs
- `open`: Open Price List
- `high`: High Price List
- `low`: Low Price List
- `close`: Close Price List
---
Outputs
- `result`
---
TA-LIB src `TA_BOP`
"""
def bop(params) do
params
|> Executer.new()
|> Executer.load(:open, :double_array)
|> Executer.load(:high, :double_array)
|> Executer.load(:low, :double_array)
|> Executer.load(:close, :double_array)
|> Executer.call(&Nif.nif_bop/4)
end
@dialyzer {:nowarn_function, cci: 1}
@spec cci([
{:high, [number()]}
| {:low, [number()]}
| {:close, [number()]}
| {:time_period, pos_integer()}
]) :: {:ok, result :: [number() | :nan]} | {:error, term()}
@doc """
Commodity Channel Index
---
Inputs
- `high`: High Price List
- `low`: Low Price List
- `close`: Close Price List
- `time_period` (default `5`): Number of period (between `1` and `100000`)
---
Outputs
- `result`
---
TA-LIB src `TA_CCI`
"""
def cci(params) do
params
|> Executer.new()
|> Executer.load(:high, :double_array)
|> Executer.load(:low, :double_array)
|> Executer.load(:close, :double_array)
|> Executer.load(:time_period, :integer, %{default: 5, min: 1, max: 100_000})
|> Executer.call(&Nif.nif_cci/4)
end
@dialyzer {:nowarn_function, cdl2_crows: 1}
@spec cdl2_crows([
{:open, [number()]} | {:high, [number()]} | {:low, [number()]} | {:close, [number()]}
]) :: {:ok, list :: [integer() | :nan]} | {:error, term()}
@doc """
Two Crows
---
Inputs
- `open`: Open Price List
- `high`: High Price List
- `low`: Low Price List
- `close`: Close Price List
---
Outputs
- `list`
---
TA-LIB src `TA_CDL2CROWS`
"""
def cdl2_crows(params) do
params
|> Executer.new()
|> Executer.load(:open, :double_array)
|> Executer.load(:high, :double_array)
|> Executer.load(:low, :double_array)
|> Executer.load(:close, :double_array)
|> Executer.call(&Nif.nif_cdl2_crows/4)
end
@dialyzer {:nowarn_function, cdl3_black_crows: 1}
@spec cdl3_black_crows([
{:open, [number()]} | {:high, [number()]} | {:low, [number()]} | {:close, [number()]}
]) :: {:ok, list :: [integer() | :nan]} | {:error, term()}
@doc """
Three Black Crows
---
Inputs
- `open`: Open Price List
- `high`: High Price List
- `low`: Low Price List
- `close`: Close Price List
---
Outputs
- `list`
---
TA-LIB src `TA_CDL3BLACKCROWS`
"""
def cdl3_black_crows(params) do
params
|> Executer.new()
|> Executer.load(:open, :double_array)
|> Executer.load(:high, :double_array)
|> Executer.load(:low, :double_array)
|> Executer.load(:close, :double_array)
|> Executer.call(&Nif.nif_cdl3_black_crows/4)
end
@dialyzer {:nowarn_function, cdl3_inside: 1}
@spec cdl3_inside([
{:open, [number()]} | {:high, [number()]} | {:low, [number()]} | {:close, [number()]}
]) :: {:ok, list :: [integer() | :nan]} | {:error, term()}
@doc """
Three Inside Up/Down
---
Inputs
- `open`: Open Price List
- `high`: High Price List
- `low`: Low Price List
- `close`: Close Price List
---
Outputs
- `list`
---
TA-LIB src `TA_CDL3INSIDE`
"""
def cdl3_inside(params) do
params
|> Executer.new()
|> Executer.load(:open, :double_array)
|> Executer.load(:high, :double_array)
|> Executer.load(:low, :double_array)
|> Executer.load(:close, :double_array)
|> Executer.call(&Nif.nif_cdl3_inside/4)
end
@dialyzer {:nowarn_function, cdl3_line_strike: 1}
@spec cdl3_line_strike([
{:open, [number()]} | {:high, [number()]} | {:low, [number()]} | {:close, [number()]}
]) :: {:ok, list :: [integer() | :nan]} | {:error, term()}
@doc """
Three-Line Strike
---
Inputs
- `open`: Open Price List
- `high`: High Price List
- `low`: Low Price List
- `close`: Close Price List
---
Outputs
- `list`
---
TA-LIB src `TA_CDL3LINESTRIKE`
"""
def cdl3_line_strike(params) do
params
|> Executer.new()
|> Executer.load(:open, :double_array)
|> Executer.load(:high, :double_array)
|> Executer.load(:low, :double_array)
|> Executer.load(:close, :double_array)
|> Executer.call(&Nif.nif_cdl3_line_strike/4)
end
@dialyzer {:nowarn_function, cdl3_outside: 1}
@spec cdl3_outside([
{:open, [number()]} | {:high, [number()]} | {:low, [number()]} | {:close, [number()]}
]) :: {:ok, list :: [integer() | :nan]} | {:error, term()}
@doc """
Three Outside Up/Down
---
Inputs
- `open`: Open Price List
- `high`: High Price List
- `low`: Low Price List
- `close`: Close Price List
---
Outputs
- `list`
---
TA-LIB src `TA_CDL3OUTSIDE`
"""
def cdl3_outside(params) do
params
|> Executer.new()
|> Executer.load(:open, :double_array)
|> Executer.load(:high, :double_array)
|> Executer.load(:low, :double_array)
|> Executer.load(:close, :double_array)
|> Executer.call(&Nif.nif_cdl3_outside/4)
end
@dialyzer {:nowarn_function, cdl3_stars_in_south: 1}
@spec cdl3_stars_in_south([
{:open, [number()]} | {:high, [number()]} | {:low, [number()]} | {:close, [number()]}
]) :: {:ok, list :: [integer() | :nan]} | {:error, term()}
@doc """
Three Stars In The South
---
Inputs
- `open`: Open Price List
- `high`: High Price List
- `low`: Low Price List
- `close`: Close Price List
---
Outputs
- `list`
---
TA-LIB src `TA_CDL3STARSINSOUTH`
"""
def cdl3_stars_in_south(params) do
params
|> Executer.new()
|> Executer.load(:open, :double_array)
|> Executer.load(:high, :double_array)
|> Executer.load(:low, :double_array)
|> Executer.load(:close, :double_array)
|> Executer.call(&Nif.nif_cdl3_stars_in_south/4)
end
@dialyzer {:nowarn_function, cdl3_white_soldiers: 1}
@spec cdl3_white_soldiers([
{:open, [number()]} | {:high, [number()]} | {:low, [number()]} | {:close, [number()]}
]) :: {:ok, list :: [integer() | :nan]} | {:error, term()}
@doc """
Three Advancing White Soldiers
---
Inputs
- `open`: Open Price List
- `high`: High Price List
- `low`: Low Price List
- `close`: Close Price List
---
Outputs
- `list`
---
TA-LIB src `TA_CDL3WHITESOLDIERS`
"""
def cdl3_white_soldiers(params) do
params
|> Executer.new()
|> Executer.load(:open, :double_array)
|> Executer.load(:high, :double_array)
|> Executer.load(:low, :double_array)
|> Executer.load(:close, :double_array)
|> Executer.call(&Nif.nif_cdl3_white_soldiers/4)
end
@dialyzer {:nowarn_function, cdl_abandoned_baby: 1}
@spec cdl_abandoned_baby([
{:open, [number()]}
| {:high, [number()]}
| {:low, [number()]}
| {:close, [number()]}
| {:pentration, number()}
]) :: {:ok, list :: [integer() | :nan]} | {:error, term()}
@doc """
Abandoned Baby
---
Inputs
- `open`: Open Price List
- `high`: High Price List
- `low`: Low Price List
- `close`: Close Price List
- `pentration`: Percentage of penetration of a candle within another candle (minuimum `0`)
---
Outputs
- `list`
---
TA-LIB src `TA_CDLABANDONEDBABY`
"""
def cdl_abandoned_baby(params) do
params
|> Executer.new()
|> Executer.load(:open, :double_array)
|> Executer.load(:high, :double_array)
|> Executer.load(:low, :double_array)
|> Executer.load(:close, :double_array)
|> Executer.load(:pentration, :double, %{min: 0})
|> Executer.call(&Nif.nif_cdl_abandoned_baby/5)
end
@dialyzer {:nowarn_function, cdl_advance_block: 1}
@spec cdl_advance_block([
{:open, [number()]} | {:high, [number()]} | {:low, [number()]} | {:close, [number()]}
]) :: {:ok, list :: [integer() | :nan]} | {:error, term()}
@doc """
Advance Block
---
Inputs
- `open`: Open Price List
- `high`: High Price List
- `low`: Low Price List
- `close`: Close Price List
---
Outputs
- `list`
---
TA-LIB src `TA_CDLADVANCEBLOCK`
"""
def cdl_advance_block(params) do
params
|> Executer.new()
|> Executer.load(:open, :double_array)
|> Executer.load(:high, :double_array)
|> Executer.load(:low, :double_array)
|> Executer.load(:close, :double_array)
|> Executer.call(&Nif.nif_cdl_advance_block/4)
end
@dialyzer {:nowarn_function, cdl_belt_hold: 1}
@spec cdl_belt_hold([
{:open, [number()]} | {:high, [number()]} | {:low, [number()]} | {:close, [number()]}
]) :: {:ok, list :: [integer() | :nan]} | {:error, term()}
@doc """
Belt-hold
---
Inputs
- `open`: Open Price List
- `high`: High Price List
- `low`: Low Price List
- `close`: Close Price List
---
Outputs
- `list`
---
TA-LIB src `TA_CDLBELTHOLD`
"""
def cdl_belt_hold(params) do
params
|> Executer.new()
|> Executer.load(:open, :double_array)
|> Executer.load(:high, :double_array)
|> Executer.load(:low, :double_array)
|> Executer.load(:close, :double_array)
|> Executer.call(&Nif.nif_cdl_belt_hold/4)
end
@dialyzer {:nowarn_function, cdl_breakaway: 1}
@spec cdl_breakaway([
{:open, [number()]} | {:high, [number()]} | {:low, [number()]} | {:close, [number()]}
]) :: {:ok, list :: [integer() | :nan]} | {:error, term()}
@doc """
Breakaway
---
Inputs
- `open`: Open Price List
- `high`: High Price List
- `low`: Low Price List
- `close`: Close Price List
---
Outputs
- `list`
---
TA-LIB src `TA_CDLBREAKAWAY`
"""
def cdl_breakaway(params) do
params
|> Executer.new()
|> Executer.load(:open, :double_array)
|> Executer.load(:high, :double_array)
|> Executer.load(:low, :double_array)
|> Executer.load(:close, :double_array)
|> Executer.call(&Nif.nif_cdl_breakaway/4)
end
@dialyzer {:nowarn_function, cdl_closing_marubozu: 1}
@spec cdl_closing_marubozu([
{:open, [number()]} | {:high, [number()]} | {:low, [number()]} | {:close, [number()]}
]) :: {:ok, list :: [integer() | :nan]} | {:error, term()}
@doc """
Closing Marubozu
---
Inputs
- `open`: Open Price List
- `high`: High Price List
- `low`: Low Price List
- `close`: Close Price List
---
Outputs
- `list`
---
TA-LIB src `TA_CDLCLOSINGMARUBOZU`
"""
def cdl_closing_marubozu(params) do
params
|> Executer.new()
|> Executer.load(:open, :double_array)
|> Executer.load(:high, :double_array)
|> Executer.load(:low, :double_array)
|> Executer.load(:close, :double_array)
|> Executer.call(&Nif.nif_cdl_closing_marubozu/4)
end
@dialyzer {:nowarn_function, cdl_conceal_baby_swallow: 1}
@spec cdl_conceal_baby_swallow([
{:open, [number()]} | {:high, [number()]} | {:low, [number()]} | {:close, [number()]}
]) :: {:ok, list :: [integer() | :nan]} | {:error, term()}
@doc """
Concealing Baby Swallow
---
Inputs
- `open`: Open Price List
- `high`: High Price List
- `low`: Low Price List
- `close`: Close Price List
---
Outputs
- `list`
---
TA-LIB src `TA_CDLCONCEALBABYSWALL`
"""
def cdl_conceal_baby_swallow(params) do
params
|> Executer.new()
|> Executer.load(:open, :double_array)
|> Executer.load(:high, :double_array)
|> Executer.load(:low, :double_array)
|> Executer.load(:close, :double_array)
|> Executer.call(&Nif.nif_cdl_conceal_baby_swallow/4)
end
@dialyzer {:nowarn_function, cdl_counterattack: 1}
@spec cdl_counterattack([
{:open, [number()]} | {:high, [number()]} | {:low, [number()]} | {:close, [number()]}
]) :: {:ok, list :: [integer() | :nan]} | {:error, term()}
@doc """
Counterattack
---
Inputs
- `open`: Open Price List
- `high`: High Price List
- `low`: Low Price List
- `close`: Close Price List
---
Outputs
- `list`
---
TA-LIB src `TA_CDLCOUNTERATTACK`
"""
def cdl_counterattack(params) do
params
|> Executer.new()
|> Executer.load(:open, :double_array)
|> Executer.load(:high, :double_array)
|> Executer.load(:low, :double_array)
|> Executer.load(:close, :double_array)
|> Executer.call(&Nif.nif_cdl_counterattack/4)
end
@dialyzer {:nowarn_function, cdl_dark_cloud_cover: 1}
@spec cdl_dark_cloud_cover([
{:open, [number()]}
| {:high, [number()]}
| {:low, [number()]}
| {:close, [number()]}
| {:peneration, number()}
]) :: {:ok, list :: [integer() | :nan]} | {:error, term()}
@doc """
Dark Cloud Cover
---
Inputs
- `open`: Open Price List
- `high`: High Price List
- `low`: Low Price List
- `close`: Close Price List
- `peneration`
---
Outputs
- `list`
---
TA-LIB src `TA_CDLDARKCLOUDCOVER`
"""
def cdl_dark_cloud_cover(params) do
params
|> Executer.new()
|> Executer.load(:open, :double_array)
|> Executer.load(:high, :double_array)
|> Executer.load(:low, :double_array)
|> Executer.load(:close, :double_array)
|> Executer.load(:peneration, :double)
|> Executer.call(&Nif.nif_cdl_dark_cloud_cover/5)
end
@dialyzer {:nowarn_function, cdl_doji: 1}
@spec cdl_doji([
{:open, [number()]} | {:high, [number()]} | {:low, [number()]} | {:close, [number()]}
]) :: {:ok, list :: [integer() | :nan]} | {:error, term()}
@doc """
Doji
---
Inputs
- `open`: Open Price List
- `high`: High Price List
- `low`: Low Price List
- `close`: Close Price List
---
Outputs
- `list`
---
TA-LIB src `TA_CDLDOJI`
"""
def cdl_doji(params) do
params
|> Executer.new()
|> Executer.load(:open, :double_array)
|> Executer.load(:high, :double_array)
|> Executer.load(:low, :double_array)
|> Executer.load(:close, :double_array)
|> Executer.call(&Nif.nif_cdl_doji/4)
end
@dialyzer {:nowarn_function, cdl_doji_star: 1}
@spec cdl_doji_star([
{:open, [number()]} | {:high, [number()]} | {:low, [number()]} | {:close, [number()]}
]) :: {:ok, list :: [integer() | :nan]} | {:error, term()}
@doc """
Doji Star
---
Inputs
- `open`: Open Price List
- `high`: High Price List
- `low`: Low Price List
- `close`: Close Price List
---
Outputs
- `list`
---
TA-LIB src `TA_CDLDOJISTAR`
"""
def cdl_doji_star(params) do
params
|> Executer.new()
|> Executer.load(:open, :double_array)
|> Executer.load(:high, :double_array)
|> Executer.load(:low, :double_array)
|> Executer.load(:close, :double_array)
|> Executer.call(&Nif.nif_cdl_doji_star/4)
end
@dialyzer {:nowarn_function, cdl_dragonfly_doji: 1}
@spec cdl_dragonfly_doji([
{:open, [number()]} | {:high, [number()]} | {:low, [number()]} | {:close, [number()]}
]) :: {:ok, list :: [integer() | :nan]} | {:error, term()}
@doc """
Dragonfly Doji
---
Inputs
- `open`: Open Price List
- `high`: High Price List
- `low`: Low Price List
- `close`: Close Price List
---
Outputs
- `list`
---
TA-LIB src `TA_CDLDRAGONFLYDOJI`
"""
def cdl_dragonfly_doji(params) do
params
|> Executer.new()
|> Executer.load(:open, :double_array)
|> Executer.load(:high, :double_array)
|> Executer.load(:low, :double_array)
|> Executer.load(:close, :double_array)
|> Executer.call(&Nif.nif_cdl_dragonfly_doji/4)
end
@dialyzer {:nowarn_function, cdl_engulfing: 1}
@spec cdl_engulfing([
{:open, [number()]} | {:high, [number()]} | {:low, [number()]} | {:close, [number()]}
]) :: {:ok, list :: [integer() | :nan]} | {:error, term()}
@doc """
Engulfing Pattern
---
Inputs
- `open`: Open Price List
- `high`: High Price List
- `low`: Low Price List
- `close`: Close Price List
---
Outputs
- `list`
---
TA-LIB src `TA_CDLENGULFING`
"""
def cdl_engulfing(params) do
params
|> Executer.new()
|> Executer.load(:open, :double_array)
|> Executer.load(:high, :double_array)
|> Executer.load(:low, :double_array)
|> Executer.load(:close, :double_array)
|> Executer.call(&Nif.nif_cdl_engulfing/4)
end
@dialyzer {:nowarn_function, cdl_evening_doji_star: 1}
@spec cdl_evening_doji_star([
{:open, [number()]}
| {:high, [number()]}
| {:low, [number()]}
| {:close, [number()]}
| {:peneration, number()}
]) :: {:ok, list :: [integer() | :nan]} | {:error, term()}
@doc """
Evening Doji Star
---
Inputs
- `open`: Open Price List
- `high`: High Price List
- `low`: Low Price List
- `close`: Close Price List
- `peneration`
---
Outputs
- `list`
---
TA-LIB src `TA_CDLEVENINGDOJISTAR`
"""
def cdl_evening_doji_star(params) do
params
|> Executer.new()
|> Executer.load(:open, :double_array)
|> Executer.load(:high, :double_array)
|> Executer.load(:low, :double_array)
|> Executer.load(:close, :double_array)
|> Executer.load(:peneration, :double)
|> Executer.call(&Nif.nif_cdl_evening_doji_star/5)
end
@dialyzer {:nowarn_function, cdl_evening_star: 1}
@spec cdl_evening_star([
{:open, [number()]}
| {:high, [number()]}
| {:low, [number()]}
| {:close, [number()]}
| {:peneration, number()}
]) :: {:ok, list :: [integer() | :nan]} | {:error, term()}
@doc """
Evening Star
---
Inputs
- `open`: Open Price List
- `high`: High Price List
- `low`: Low Price List
- `close`: Close Price List
- `peneration`
---
Outputs
- `list`
---
TA-LIB src `TA_CDLEVENINGSTAR`
"""
def cdl_evening_star(params) do
params
|> Executer.new()
|> Executer.load(:open, :double_array)
|> Executer.load(:high, :double_array)
|> Executer.load(:low, :double_array)
|> Executer.load(:close, :double_array)
|> Executer.load(:peneration, :double)
|> Executer.call(&Nif.nif_cdl_evening_star/5)
end
@dialyzer {:nowarn_function, cdl_gap_side_side_white: 1}
@spec cdl_gap_side_side_white([
{:open, [number()]} | {:high, [number()]} | {:low, [number()]} | {:close, [number()]}
]) :: {:ok, list :: [integer() | :nan]} | {:error, term()}
@doc """
Up/Down-gap side-by-side white lines
---
Inputs
- `open`: Open Price List
- `high`: High Price List
- `low`: Low Price List
- `close`: Close Price List
---
Outputs
- `list`
---
TA-LIB src `TA_CDLGAPSIDESIDEWHITE`
"""
def cdl_gap_side_side_white(params) do
params
|> Executer.new()
|> Executer.load(:open, :double_array)
|> Executer.load(:high, :double_array)
|> Executer.load(:low, :double_array)
|> Executer.load(:close, :double_array)
|> Executer.call(&Nif.nif_cdl_gap_side_side_white/4)
end
@dialyzer {:nowarn_function, cdl_gravestone_doji: 1}
@spec cdl_gravestone_doji([
{:open, [number()]} | {:high, [number()]} | {:low, [number()]} | {:close, [number()]}
]) :: {:ok, list :: [integer() | :nan]} | {:error, term()}
@doc """
Gravestone Doji
---
Inputs
- `open`: Open Price List
- `high`: High Price List
- `low`: Low Price List
- `close`: Close Price List
---
Outputs
- `list`
---
TA-LIB src `TA_CDLGRAVESTONEDOJI`
"""
def cdl_gravestone_doji(params) do
params
|> Executer.new()
|> Executer.load(:open, :double_array)
|> Executer.load(:high, :double_array)
|> Executer.load(:low, :double_array)
|> Executer.load(:close, :double_array)
|> Executer.call(&Nif.nif_cdl_gravestone_doji/4)
end
@dialyzer {:nowarn_function, cdl_hammer: 1}
@spec cdl_hammer([
{:open, [number()]} | {:high, [number()]} | {:low, [number()]} | {:close, [number()]}
]) :: {:ok, list :: [integer() | :nan]} | {:error, term()}
@doc """
Hammer
---
Inputs
- `open`: Open Price List
- `high`: High Price List
- `low`: Low Price List
- `close`: Close Price List
---
Outputs
- `list`
---
TA-LIB src `TA_CDLHAMMER`
"""
def cdl_hammer(params) do
params
|> Executer.new()
|> Executer.load(:open, :double_array)
|> Executer.load(:high, :double_array)
|> Executer.load(:low, :double_array)
|> Executer.load(:close, :double_array)
|> Executer.call(&Nif.nif_cdl_hammer/4)
end
@dialyzer {:nowarn_function, cdl_hanging_man: 1}
@spec cdl_hanging_man([
{:open, [number()]} | {:high, [number()]} | {:low, [number()]} | {:close, [number()]}
]) :: {:ok, list :: [integer() | :nan]} | {:error, term()}
@doc """
Hanging Man
---
Inputs
- `open`: Open Price List
- `high`: High Price List
- `low`: Low Price List
- `close`: Close Price List
---
Outputs
- `list`
---
TA-LIB src `TA_CDLHANGINGMAN`
"""
def cdl_hanging_man(params) do
params
|> Executer.new()
|> Executer.load(:open, :double_array)
|> Executer.load(:high, :double_array)
|> Executer.load(:low, :double_array)
|> Executer.load(:close, :double_array)
|> Executer.call(&Nif.nif_cdl_hanging_man/4)
end
@dialyzer {:nowarn_function, cdl_harami: 1}
@spec cdl_harami([
{:open, [number()]} | {:high, [number()]} | {:low, [number()]} | {:close, [number()]}
]) :: {:ok, list :: [integer() | :nan]} | {:error, term()}
@doc """
Harami Pattern
---
Inputs
- `open`: Open Price List
- `high`: High Price List
- `low`: Low Price List
- `close`: Close Price List
---
Outputs
- `list`
---
TA-LIB src `TA_CDLHARAMI`
"""
def cdl_harami(params) do
params
|> Executer.new()
|> Executer.load(:open, :double_array)
|> Executer.load(:high, :double_array)
|> Executer.load(:low, :double_array)
|> Executer.load(:close, :double_array)
|> Executer.call(&Nif.nif_cdl_harami/4)
end
@dialyzer {:nowarn_function, cdl_harami_cross: 1}
@spec cdl_harami_cross([
{:open, [number()]} | {:high, [number()]} | {:low, [number()]} | {:close, [number()]}
]) :: {:ok, list :: [integer() | :nan]} | {:error, term()}
@doc """
Harami Cross Pattern
---
Inputs
- `open`: Open Price List
- `high`: High Price List
- `low`: Low Price List
- `close`: Close Price List
---
Outputs
- `list`
---
TA-LIB src `TA_CDLHARAMICROSS`
"""
def cdl_harami_cross(params) do
params
|> Executer.new()
|> Executer.load(:open, :double_array)
|> Executer.load(:high, :double_array)
|> Executer.load(:low, :double_array)
|> Executer.load(:close, :double_array)
|> Executer.call(&Nif.nif_cdl_harami_cross/4)
end
@dialyzer {:nowarn_function, cdl_highwave: 1}
@spec cdl_highwave([
{:open, [number()]} | {:high, [number()]} | {:low, [number()]} | {:close, [number()]}
]) :: {:ok, list :: [integer() | :nan]} | {:error, term()}
@doc """
High-Wave Candle
---
Inputs
- `open`: Open Price List
- `high`: High Price List
- `low`: Low Price List
- `close`: Close Price List
---
Outputs
- `list`
---
TA-LIB src `TA_CDLHIGHWAVE`
"""
def cdl_highwave(params) do
params
|> Executer.new()
|> Executer.load(:open, :double_array)
|> Executer.load(:high, :double_array)
|> Executer.load(:low, :double_array)
|> Executer.load(:close, :double_array)
|> Executer.call(&Nif.nif_cdl_highwave/4)
end
@dialyzer {:nowarn_function, cdl_hikkake: 1}
@spec cdl_hikkake([
{:open, [number()]} | {:high, [number()]} | {:low, [number()]} | {:close, [number()]}
]) :: {:ok, list :: [integer() | :nan]} | {:error, term()}
@doc """
Hikkake Pattern
---
Inputs
- `open`: Open Price List
- `high`: High Price List
- `low`: Low Price List
- `close`: Close Price List
---
Outputs
- `list`
---
TA-LIB src `TA_CDLHIKKAKE`
"""
def cdl_hikkake(params) do
params
|> Executer.new()
|> Executer.load(:open, :double_array)
|> Executer.load(:high, :double_array)
|> Executer.load(:low, :double_array)
|> Executer.load(:close, :double_array)
|> Executer.call(&Nif.nif_cdl_hikkake/4)
end
@dialyzer {:nowarn_function, cdl_hikkake_mod: 1}
@spec cdl_hikkake_mod([
{:open, [number()]} | {:high, [number()]} | {:low, [number()]} | {:close, [number()]}
]) :: {:ok, list :: [integer() | :nan]} | {:error, term()}
@doc """
Modified Hikkake Pattern
---
Inputs
- `open`: Open Price List
- `high`: High Price List
- `low`: Low Price List
- `close`: Close Price List
---
Outputs
- `list`
---
TA-LIB src `TA_CDLHIKKAKEMOD`
"""
def cdl_hikkake_mod(params) do
params
|> Executer.new()
|> Executer.load(:open, :double_array)
|> Executer.load(:high, :double_array)
|> Executer.load(:low, :double_array)
|> Executer.load(:close, :double_array)
|> Executer.call(&Nif.nif_cdl_hikkake_mod/4)
end
@dialyzer {:nowarn_function, cdl_homing_pigeon: 1}
@spec cdl_homing_pigeon([
{:open, [number()]} | {:high, [number()]} | {:low, [number()]} | {:close, [number()]}
]) :: {:ok, list :: [integer() | :nan]} | {:error, term()}
@doc """
Homing Pigeon
---
Inputs
- `open`: Open Price List
- `high`: High Price List
- `low`: Low Price List
- `close`: Close Price List
---
Outputs
- `list`
---
TA-LIB src `TA_CDLHOMINGPIGEON`
"""
def cdl_homing_pigeon(params) do
params
|> Executer.new()
|> Executer.load(:open, :double_array)
|> Executer.load(:high, :double_array)
|> Executer.load(:low, :double_array)
|> Executer.load(:close, :double_array)
|> Executer.call(&Nif.nif_cdl_homing_pigeon/4)
end
@dialyzer {:nowarn_function, cdl_identical_3_crows: 1}
@spec cdl_identical_3_crows([
{:open, [number()]} | {:high, [number()]} | {:low, [number()]} | {:close, [number()]}
]) :: {:ok, list :: [integer() | :nan]} | {:error, term()}
@doc """
Identical Three Crows
---
Inputs
- `open`: Open Price List
- `high`: High Price List
- `low`: Low Price List
- `close`: Close Price List
---
Outputs
- `list`
---
TA-LIB src `TA_CDLIDENTICAL3CROWS`
"""
def cdl_identical_3_crows(params) do
params
|> Executer.new()
|> Executer.load(:open, :double_array)
|> Executer.load(:high, :double_array)
|> Executer.load(:low, :double_array)
|> Executer.load(:close, :double_array)
|> Executer.call(&Nif.nif_cdl_identical_3_crows/4)
end
@dialyzer {:nowarn_function, cdl_inneck: 1}
@spec cdl_inneck([
{:open, [number()]} | {:high, [number()]} | {:low, [number()]} | {:close, [number()]}
]) :: {:ok, list :: [integer() | :nan]} | {:error, term()}
@doc """
In-Neck Pattern
---
Inputs
- `open`: Open Price List
- `high`: High Price List
- `low`: Low Price List
- `close`: Close Price List
---
Outputs
- `list`
---
TA-LIB src `TA_CDLINNECK`
"""
def cdl_inneck(params) do
params
|> Executer.new()
|> Executer.load(:open, :double_array)
|> Executer.load(:high, :double_array)
|> Executer.load(:low, :double_array)
|> Executer.load(:close, :double_array)
|> Executer.call(&Nif.nif_cdl_inneck/4)
end
@dialyzer {:nowarn_function, cdl_inverted_hammer: 1}
@spec cdl_inverted_hammer([
{:open, [number()]} | {:high, [number()]} | {:low, [number()]} | {:close, [number()]}
]) :: {:ok, list :: [integer() | :nan]} | {:error, term()}
@doc """
Inverted Hammer
---
Inputs
- `open`: Open Price List
- `high`: High Price List
- `low`: Low Price List
- `close`: Close Price List
---
Outputs
- `list`
---
TA-LIB src `TA_CDLINVERTEDHAMMER`
"""
def cdl_inverted_hammer(params) do
params
|> Executer.new()
|> Executer.load(:open, :double_array)
|> Executer.load(:high, :double_array)
|> Executer.load(:low, :double_array)
|> Executer.load(:close, :double_array)
|> Executer.call(&Nif.nif_cdl_inverted_hammer/4)
end
@dialyzer {:nowarn_function, cdl_kicking: 1}
@spec cdl_kicking([
{:open, [number()]} | {:high, [number()]} | {:low, [number()]} | {:close, [number()]}
]) :: {:ok, list :: [integer() | :nan]} | {:error, term()}
@doc """
Kicking
---
Inputs
- `open`: Open Price List
- `high`: High Price List
- `low`: Low Price List
- `close`: Close Price List
---
Outputs
- `list`
---
TA-LIB src `TA_CDLKICKING`
"""
def cdl_kicking(params) do
params
|> Executer.new()
|> Executer.load(:open, :double_array)
|> Executer.load(:high, :double_array)
|> Executer.load(:low, :double_array)
|> Executer.load(:close, :double_array)
|> Executer.call(&Nif.nif_cdl_kicking/4)
end
@dialyzer {:nowarn_function, cdl_kicking_by_length: 1}
@spec cdl_kicking_by_length([
{:open, [number()]} | {:high, [number()]} | {:low, [number()]} | {:close, [number()]}
]) :: {:ok, list :: [integer() | :nan]} | {:error, term()}
@doc """
Kicking - bull/bear determined by the longer marubozu
---
Inputs
- `open`: Open Price List
- `high`: High Price List
- `low`: Low Price List
- `close`: Close Price List
---
Outputs
- `list`
---
TA-LIB src `TA_CDLKICKINGBYLENGTH`
"""
def cdl_kicking_by_length(params) do
params
|> Executer.new()
|> Executer.load(:open, :double_array)
|> Executer.load(:high, :double_array)
|> Executer.load(:low, :double_array)
|> Executer.load(:close, :double_array)
|> Executer.call(&Nif.nif_cdl_kicking_by_length/4)
end
@dialyzer {:nowarn_function, cdl_ladder_bottom: 1}
@spec cdl_ladder_bottom([
{:open, [number()]} | {:high, [number()]} | {:low, [number()]} | {:close, [number()]}
]) :: {:ok, list :: [integer() | :nan]} | {:error, term()}
@doc """
Ladder Bottom
---
Inputs
- `open`: Open Price List
- `high`: High Price List
- `low`: Low Price List
- `close`: Close Price List
---
Outputs
- `list`
---
TA-LIB src `TA_CDLLADDERBOTTOM`
"""
def cdl_ladder_bottom(params) do
params
|> Executer.new()
|> Executer.load(:open, :double_array)
|> Executer.load(:high, :double_array)
|> Executer.load(:low, :double_array)
|> Executer.load(:close, :double_array)
|> Executer.call(&Nif.nif_cdl_ladder_bottom/4)
end
@dialyzer {:nowarn_function, cdl_long_legged_doji: 1}
@spec cdl_long_legged_doji([
{:open, [number()]} | {:high, [number()]} | {:low, [number()]} | {:close, [number()]}
]) :: {:ok, list :: [integer() | :nan]} | {:error, term()}
@doc """
Long Legged Doji
---
Inputs
- `open`: Open Price List
- `high`: High Price List
- `low`: Low Price List
- `close`: Close Price List
---
Outputs
- `list`
---
TA-LIB src `TA_CDLLONGLEGGEDDOJI`
"""
def cdl_long_legged_doji(params) do
params
|> Executer.new()
|> Executer.load(:open, :double_array)
|> Executer.load(:high, :double_array)
|> Executer.load(:low, :double_array)
|> Executer.load(:close, :double_array)
|> Executer.call(&Nif.nif_cdl_long_legged_doji/4)
end
@dialyzer {:nowarn_function, cdl_long_line: 1}
@spec cdl_long_line([
{:open, [number()]} | {:high, [number()]} | {:low, [number()]} | {:close, [number()]}
]) :: {:ok, list :: [integer() | :nan]} | {:error, term()}
@doc """
Long Line Candle
---
Inputs
- `open`: Open Price List
- `high`: High Price List
- `low`: Low Price List
- `close`: Close Price List
---
Outputs
- `list`
---
TA-LIB src `TA_CDLLONGLINE`
"""
def cdl_long_line(params) do
params
|> Executer.new()
|> Executer.load(:open, :double_array)
|> Executer.load(:high, :double_array)
|> Executer.load(:low, :double_array)
|> Executer.load(:close, :double_array)
|> Executer.call(&Nif.nif_cdl_long_line/4)
end
@dialyzer {:nowarn_function, cdl_marubozu: 1}
@spec cdl_marubozu([
{:open, [number()]} | {:high, [number()]} | {:low, [number()]} | {:close, [number()]}
]) :: {:ok, list :: [integer() | :nan]} | {:error, term()}
@doc """
Marubozu
---
Inputs
- `open`: Open Price List
- `high`: High Price List
- `low`: Low Price List
- `close`: Close Price List
---
Outputs
- `list`
---
TA-LIB src `TA_CDLMARUBOZU`
"""
def cdl_marubozu(params) do
params
|> Executer.new()
|> Executer.load(:open, :double_array)
|> Executer.load(:high, :double_array)
|> Executer.load(:low, :double_array)
|> Executer.load(:close, :double_array)
|> Executer.call(&Nif.nif_cdl_marubozu/4)
end
@dialyzer {:nowarn_function, cdl_matching_low: 1}
@spec cdl_matching_low([
{:open, [number()]} | {:high, [number()]} | {:low, [number()]} | {:close, [number()]}
]) :: {:ok, list :: [integer() | :nan]} | {:error, term()}
@doc """
Matching Low
---
Inputs
- `open`: Open Price List
- `high`: High Price List
- `low`: Low Price List
- `close`: Close Price List
---
Outputs
- `list`
---
TA-LIB src `TA_CDLMATCHINGLOW`
"""
def cdl_matching_low(params) do
params
|> Executer.new()
|> Executer.load(:open, :double_array)
|> Executer.load(:high, :double_array)
|> Executer.load(:low, :double_array)
|> Executer.load(:close, :double_array)
|> Executer.call(&Nif.nif_cdl_matching_low/4)
end
@dialyzer {:nowarn_function, cdl_mat_hold: 1}
@spec cdl_mat_hold([
{:open, [number()]}
| {:high, [number()]}
| {:low, [number()]}
| {:close, [number()]}
| {:pentration, number()}
]) :: {:ok, list :: [integer() | :nan]} | {:error, term()}
@doc """
Mat Hold
---
Inputs
- `open`: Open Price List
- `high`: High Price List
- `low`: Low Price List
- `close`: Close Price List
- `pentration`: Percentage of penetration of a candle within another candle (minuimum `0`)
---
Outputs
- `list`
---
TA-LIB src `TA_CDLMATHOLD`
"""
def cdl_mat_hold(params) do
params
|> Executer.new()
|> Executer.load(:open, :double_array)
|> Executer.load(:high, :double_array)
|> Executer.load(:low, :double_array)
|> Executer.load(:close, :double_array)
|> Executer.load(:pentration, :double, %{min: 0})
|> Executer.call(&Nif.nif_cdl_mat_hold/5)
end
@dialyzer {:nowarn_function, cdl_morning_doji_star: 1}
@spec cdl_morning_doji_star([
{:open, [number()]}
| {:high, [number()]}
| {:low, [number()]}
| {:close, [number()]}
| {:pentration, number()}
]) :: {:ok, list :: [integer() | :nan]} | {:error, term()}
@doc """
Morning Doji Star
---
Inputs
- `open`: Open Price List
- `high`: High Price List
- `low`: Low Price List
- `close`: Close Price List
- `pentration`: Percentage of penetration of a candle within another candle (minuimum `0`)
---
Outputs
- `list`
---
TA-LIB src `TA_CDLMORNINGDOJISTAR`
"""
def cdl_morning_doji_star(params) do
params
|> Executer.new()
|> Executer.load(:open, :double_array)
|> Executer.load(:high, :double_array)
|> Executer.load(:low, :double_array)
|> Executer.load(:close, :double_array)
|> Executer.load(:pentration, :double, %{min: 0})
|> Executer.call(&Nif.nif_cdl_morning_doji_star/5)
end
@dialyzer {:nowarn_function, cdl_morning_star: 1}
@spec cdl_morning_star([
{:open, [number()]}
| {:high, [number()]}
| {:low, [number()]}
| {:close, [number()]}
| {:pentration, number()}
]) :: {:ok, list :: [integer() | :nan]} | {:error, term()}
@doc """
Morning Star
---
Inputs
- `open`: Open Price List
- `high`: High Price List
- `low`: Low Price List
- `close`: Close Price List
- `pentration`: Percentage of penetration of a candle within another candle (minuimum `0`)
---
Outputs
- `list`
---
TA-LIB src `TA_CDLMORNINGSTAR`
"""
def cdl_morning_star(params) do
params
|> Executer.new()
|> Executer.load(:open, :double_array)
|> Executer.load(:high, :double_array)
|> Executer.load(:low, :double_array)
|> Executer.load(:close, :double_array)
|> Executer.load(:pentration, :double, %{min: 0})
|> Executer.call(&Nif.nif_cdl_morning_star/5)
end
@dialyzer {:nowarn_function, cdl_on_neck: 1}
@spec cdl_on_neck([
{:open, [number()]} | {:high, [number()]} | {:low, [number()]} | {:close, [number()]}
]) :: {:ok, list :: [integer() | :nan]} | {:error, term()}
@doc """
On-Neck Pattern
---
Inputs
- `open`: Open Price List
- `high`: High Price List
- `low`: Low Price List
- `close`: Close Price List
---
Outputs
- `list`
---
TA-LIB src `TA_CDLONNECK`
"""
def cdl_on_neck(params) do
params
|> Executer.new()
|> Executer.load(:open, :double_array)
|> Executer.load(:high, :double_array)
|> Executer.load(:low, :double_array)
|> Executer.load(:close, :double_array)
|> Executer.call(&Nif.nif_cdl_on_neck/4)
end
@dialyzer {:nowarn_function, cdl_piercing: 1}
@spec cdl_piercing([
{:open, [number()]} | {:high, [number()]} | {:low, [number()]} | {:close, [number()]}
]) :: {:ok, list :: [integer() | :nan]} | {:error, term()}
@doc """
Piercing Pattern
---
Inputs
- `open`: Open Price List
- `high`: High Price List
- `low`: Low Price List
- `close`: Close Price List
---
Outputs
- `list`
---
TA-LIB src `TA_CDLPIERCING`
"""
def cdl_piercing(params) do
params
|> Executer.new()
|> Executer.load(:open, :double_array)
|> Executer.load(:high, :double_array)
|> Executer.load(:low, :double_array)
|> Executer.load(:close, :double_array)
|> Executer.call(&Nif.nif_cdl_piercing/4)
end
@dialyzer {:nowarn_function, cdl_rickshaw_man: 1}
@spec cdl_rickshaw_man([
{:open, [number()]} | {:high, [number()]} | {:low, [number()]} | {:close, [number()]}
]) :: {:ok, list :: [integer() | :nan]} | {:error, term()}
@doc """
Rickshaw Man
---
Inputs
- `open`: Open Price List
- `high`: High Price List
- `low`: Low Price List
- `close`: Close Price List
---
Outputs
- `list`
---
TA-LIB src `TA_CDLRICKSHAWMAN`
"""
def cdl_rickshaw_man(params) do
params
|> Executer.new()
|> Executer.load(:open, :double_array)
|> Executer.load(:high, :double_array)
|> Executer.load(:low, :double_array)
|> Executer.load(:close, :double_array)
|> Executer.call(&Nif.nif_cdl_rickshaw_man/4)
end
@dialyzer {:nowarn_function, cdl_rise_fall_3_methods: 1}
@spec cdl_rise_fall_3_methods([
{:open, [number()]} | {:high, [number()]} | {:low, [number()]} | {:close, [number()]}
]) :: {:ok, list :: [integer() | :nan]} | {:error, term()}
@doc """
Rickshaw Man
---
Inputs
- `open`: Open Price List
- `high`: High Price List
- `low`: Low Price List
- `close`: Close Price List
---
Outputs
- `list`
---
TA-LIB src `TA_CDLRISEFALL3METHODS`
"""
def cdl_rise_fall_3_methods(params) do
params
|> Executer.new()
|> Executer.load(:open, :double_array)
|> Executer.load(:high, :double_array)
|> Executer.load(:low, :double_array)
|> Executer.load(:close, :double_array)
|> Executer.call(&Nif.nif_cdl_rise_fall_3_methods/4)
end
@dialyzer {:nowarn_function, cdl_separating_lines: 1}
@spec cdl_separating_lines([
{:open, [number()]} | {:high, [number()]} | {:low, [number()]} | {:close, [number()]}
]) :: {:ok, list :: [integer() | :nan]} | {:error, term()}
@doc """
Separating Lines
---
Inputs
- `open`: Open Price List
- `high`: High Price List
- `low`: Low Price List
- `close`: Close Price List
---
Outputs
- `list`
---
TA-LIB src `TA_CDLSEPARATINGLINES`
"""
def cdl_separating_lines(params) do
params
|> Executer.new()
|> Executer.load(:open, :double_array)
|> Executer.load(:high, :double_array)
|> Executer.load(:low, :double_array)
|> Executer.load(:close, :double_array)
|> Executer.call(&Nif.nif_cdl_separating_lines/4)
end
@dialyzer {:nowarn_function, cdl_shooting_star: 1}
@spec cdl_shooting_star([
{:open, [number()]} | {:high, [number()]} | {:low, [number()]} | {:close, [number()]}
]) :: {:ok, list :: [integer() | :nan]} | {:error, term()}
@doc """
Shooting Star
---
Inputs
- `open`: Open Price List
- `high`: High Price List
- `low`: Low Price List
- `close`: Close Price List
---
Outputs
- `list`
---
TA-LIB src `TA_CDLSHOOTINGSTAR`
"""
def cdl_shooting_star(params) do
params
|> Executer.new()
|> Executer.load(:open, :double_array)
|> Executer.load(:high, :double_array)
|> Executer.load(:low, :double_array)
|> Executer.load(:close, :double_array)
|> Executer.call(&Nif.nif_cdl_shooting_star/4)
end
@dialyzer {:nowarn_function, cdl_short_line: 1}
@spec cdl_short_line([
{:open, [number()]} | {:high, [number()]} | {:low, [number()]} | {:close, [number()]}
]) :: {:ok, list :: [integer() | :nan]} | {:error, term()}
@doc """
Short Line Candle
---
Inputs
- `open`: Open Price List
- `high`: High Price List
- `low`: Low Price List
- `close`: Close Price List
---
Outputs
- `list`
---
TA-LIB src `TA_CDLSHORTLINE`
"""
def cdl_short_line(params) do
params
|> Executer.new()
|> Executer.load(:open, :double_array)
|> Executer.load(:high, :double_array)
|> Executer.load(:low, :double_array)
|> Executer.load(:close, :double_array)
|> Executer.call(&Nif.nif_cdl_short_line/4)
end
@dialyzer {:nowarn_function, cdl_spinning_top: 1}
@spec cdl_spinning_top([
{:open, [number()]} | {:high, [number()]} | {:low, [number()]} | {:close, [number()]}
]) :: {:ok, list :: [integer() | :nan]} | {:error, term()}
@doc """
Spinning Top
---
Inputs
- `open`: Open Price List
- `high`: High Price List
- `low`: Low Price List
- `close`: Close Price List
---
Outputs
- `list`
---
TA-LIB src `TA_CDLSPINNINGTOP`
"""
def cdl_spinning_top(params) do
params
|> Executer.new()
|> Executer.load(:open, :double_array)
|> Executer.load(:high, :double_array)
|> Executer.load(:low, :double_array)
|> Executer.load(:close, :double_array)
|> Executer.call(&Nif.nif_cdl_spinning_top/4)
end
@dialyzer {:nowarn_function, cdl_stalled_pattern: 1}
@spec cdl_stalled_pattern([
{:open, [number()]} | {:high, [number()]} | {:low, [number()]} | {:close, [number()]}
]) :: {:ok, list :: [integer() | :nan]} | {:error, term()}
@doc """
Stalled Pattern
---
Inputs
- `open`: Open Price List
- `high`: High Price List
- `low`: Low Price List
- `close`: Close Price List
---
Outputs
- `list`
---
TA-LIB src `TA_CDLSTALLEDPATTERN`
"""
def cdl_stalled_pattern(params) do
params
|> Executer.new()
|> Executer.load(:open, :double_array)
|> Executer.load(:high, :double_array)
|> Executer.load(:low, :double_array)
|> Executer.load(:close, :double_array)
|> Executer.call(&Nif.nif_cdl_stalled_pattern/4)
end
@dialyzer {:nowarn_function, cdl_stick_sandwich: 1}
@spec cdl_stick_sandwich([
{:open, [number()]} | {:high, [number()]} | {:low, [number()]} | {:close, [number()]}
]) :: {:ok, list :: [integer() | :nan]} | {:error, term()}
@doc """
Stick Sandwich
---
Inputs
- `open`: Open Price List
- `high`: High Price List
- `low`: Low Price List
- `close`: Close Price List
---
Outputs
- `list`
---
TA-LIB src `TA_CDLSTICKSANDWICH`
"""
def cdl_stick_sandwich(params) do
params
|> Executer.new()
|> Executer.load(:open, :double_array)
|> Executer.load(:high, :double_array)
|> Executer.load(:low, :double_array)
|> Executer.load(:close, :double_array)
|> Executer.call(&Nif.nif_cdl_stick_sandwich/4)
end
@dialyzer {:nowarn_function, cdl_takuri: 1}
@spec cdl_takuri([
{:open, [number()]} | {:high, [number()]} | {:low, [number()]} | {:close, [number()]}
]) :: {:ok, list :: [integer() | :nan]} | {:error, term()}
@doc """
Takuri (Dragonfly Doji with very long lower shadow)
---
Inputs
- `open`: Open Price List
- `high`: High Price List
- `low`: Low Price List
- `close`: Close Price List
---
Outputs
- `list`
---
TA-LIB src `TA_CDLTAKURI`
"""
def cdl_takuri(params) do
params
|> Executer.new()
|> Executer.load(:open, :double_array)
|> Executer.load(:high, :double_array)
|> Executer.load(:low, :double_array)
|> Executer.load(:close, :double_array)
|> Executer.call(&Nif.nif_cdl_takuri/4)
end
@dialyzer {:nowarn_function, cdl_tasuki_gap: 1}
@spec cdl_tasuki_gap([
{:open, [number()]} | {:high, [number()]} | {:low, [number()]} | {:close, [number()]}
]) :: {:ok, list :: [integer() | :nan]} | {:error, term()}
@doc """
Tasuki Gap
---
Inputs
- `open`: Open Price List
- `high`: High Price List
- `low`: Low Price List
- `close`: Close Price List
---
Outputs
- `list`
---
TA-LIB src `TA_CDLTASUKIGAP`
"""
def cdl_tasuki_gap(params) do
params
|> Executer.new()
|> Executer.load(:open, :double_array)
|> Executer.load(:high, :double_array)
|> Executer.load(:low, :double_array)
|> Executer.load(:close, :double_array)
|> Executer.call(&Nif.nif_cdl_tasuki_gap/4)
end
@dialyzer {:nowarn_function, cdl_thrusting: 1}
@spec cdl_thrusting([
{:open, [number()]} | {:high, [number()]} | {:low, [number()]} | {:close, [number()]}
]) :: {:ok, list :: [integer() | :nan]} | {:error, term()}
@doc """
Thrusting Pattern
---
Inputs
- `open`: Open Price List
- `high`: High Price List
- `low`: Low Price List
- `close`: Close Price List
---
Outputs
- `list`
---
TA-LIB src `TA_CDLTHRUSTING`
"""
def cdl_thrusting(params) do
params
|> Executer.new()
|> Executer.load(:open, :double_array)
|> Executer.load(:high, :double_array)
|> Executer.load(:low, :double_array)
|> Executer.load(:close, :double_array)
|> Executer.call(&Nif.nif_cdl_thrusting/4)
end
@dialyzer {:nowarn_function, cdl_tri_star: 1}
@spec cdl_tri_star([
{:open, [number()]} | {:high, [number()]} | {:low, [number()]} | {:close, [number()]}
]) :: {:ok, list :: [integer() | :nan]} | {:error, term()}
@doc """
Tristar Pattern
---
Inputs
- `open`: Open Price List
- `high`: High Price List
- `low`: Low Price List
- `close`: Close Price List
---
Outputs
- `list`
---
TA-LIB src `TA_CDLTRISTAR`
"""
def cdl_tri_star(params) do
params
|> Executer.new()
|> Executer.load(:open, :double_array)
|> Executer.load(:high, :double_array)
|> Executer.load(:low, :double_array)
|> Executer.load(:close, :double_array)
|> Executer.call(&Nif.nif_cdl_tri_star/4)
end
@dialyzer {:nowarn_function, cdl_unique_3_river: 1}
@spec cdl_unique_3_river([
{:open, [number()]} | {:high, [number()]} | {:low, [number()]} | {:close, [number()]}
]) :: {:ok, list :: [integer() | :nan]} | {:error, term()}
@doc """
Unique 3 River
---
Inputs
- `open`: Open Price List
- `high`: High Price List
- `low`: Low Price List
- `close`: Close Price List
---
Outputs
- `list`
---
TA-LIB src `TA_CDLUNIQUE3RIVER`
"""
def cdl_unique_3_river(params) do
params
|> Executer.new()
|> Executer.load(:open, :double_array)
|> Executer.load(:high, :double_array)
|> Executer.load(:low, :double_array)
|> Executer.load(:close, :double_array)
|> Executer.call(&Nif.nif_cdl_unique_3_river/4)
end
@dialyzer {:nowarn_function, cdl_upside_gap_2_crows: 1}
@spec cdl_upside_gap_2_crows([
{:open, [number()]} | {:high, [number()]} | {:low, [number()]} | {:close, [number()]}
]) :: {:ok, list :: [integer() | :nan]} | {:error, term()}
@doc """
Upside Gap Two Crows
---
Inputs
- `open`: Open Price List
- `high`: High Price List
- `low`: Low Price List
- `close`: Close Price List
---
Outputs
- `list`
---
TA-LIB src `TA_CDLUPSIDEGAP2CROWS`
"""
def cdl_upside_gap_2_crows(params) do
params
|> Executer.new()
|> Executer.load(:open, :double_array)
|> Executer.load(:high, :double_array)
|> Executer.load(:low, :double_array)
|> Executer.load(:close, :double_array)
|> Executer.call(&Nif.nif_cdl_upside_gap_2_crows/4)
end
@dialyzer {:nowarn_function, cdl_upside_downside_gap_3_methods: 1}
@spec cdl_upside_downside_gap_3_methods([
{:open, [number()]} | {:high, [number()]} | {:low, [number()]} | {:close, [number()]}
]) :: {:ok, list :: [integer() | :nan]} | {:error, term()}
@doc """
Upside/Downside Gap Three Methods
---
Inputs
- `open`: Open Price List
- `high`: High Price List
- `low`: Low Price List
- `close`: Close Price List
---
Outputs
- `list`
---
TA-LIB src `TA_CDLXSIDEGAP3METHODS`
"""
def cdl_upside_downside_gap_3_methods(params) do
params
|> Executer.new()
|> Executer.load(:open, :double_array)
|> Executer.load(:high, :double_array)
|> Executer.load(:low, :double_array)
|> Executer.load(:close, :double_array)
|> Executer.call(&Nif.nif_cdl_upside_downside_gap_3_methods/4)
end
@dialyzer {:nowarn_function, ceil: 1}
@spec ceil([{:values, [number()]}]) :: {:ok, result :: [number() | :nan]} | {:error, term()}
@doc """
Vector Ceil
---
Inputs
- `values`
---
Outputs
- `result`
---
TA-LIB src `TA_CEIL`
"""
def ceil(params) do
params
|> Executer.new()
|> Executer.load(:values, :double_array)
|> Executer.call(&Nif.nif_ceil/1)
end
@dialyzer {:nowarn_function, cmo: 1}
@spec cmo([{:values, [number()]} | {:time_period, pos_integer()}]) ::
{:ok, result :: [number() | :nan]} | {:error, term()}
@doc """
Chande Momentum Oscillator
---
Inputs
- `values`
- `time_period` (default `5`): Number of period (between `1` and `100000`)
---
Outputs
- `result`
---
TA-LIB src `TA_CMO`
"""
def cmo(params) do
params
|> Executer.new()
|> Executer.load(:values, :double_array)
|> Executer.load(:time_period, :integer, %{default: 5, min: 1, max: 100_000})
|> Executer.call(&Nif.nif_cmo/2)
end
@dialyzer {:nowarn_function, correl: 1}
@spec correl([{:values0, [number()]} | {:values1, [number()]} | {:time_period, pos_integer()}]) ::
{:ok, result :: [number() | :nan]} | {:error, term()}
@doc """
Pearson's Correlation Coefficient (r)
---
Inputs
- `values0`
- `values1`
- `time_period` (default `5`): Number of period (between `1` and `100000`)
---
Outputs
- `result`
---
TA-LIB src `TA_CORREL`
"""
def correl(params) do
params
|> Executer.new()
|> Executer.load(:values0, :double_array)
|> Executer.load(:values1, :double_array)
|> Executer.load(:time_period, :integer, %{default: 5, min: 1, max: 100_000})
|> Executer.call(&Nif.nif_correl/3)
end
@dialyzer {:nowarn_function, cos: 1}
@spec cos([{:values, [number()]}]) :: {:ok, result :: [number() | :nan]} | {:error, term()}
@doc """
Vector Trigonometric Cos
---
Inputs
- `values`
---
Outputs
- `result`
---
TA-LIB src `TA_COS`
"""
def cos(params) do
params
|> Executer.new()
|> Executer.load(:values, :double_array)
|> Executer.call(&Nif.nif_cos/1)
end
@dialyzer {:nowarn_function, cosh: 1}
@spec cosh([{:values, [number()]}]) :: {:ok, result :: [number() | :nan]} | {:error, term()}
@doc """
Vector Trigonometric Cosh
---
Inputs
- `values`
---
Outputs
- `result`
---
TA-LIB src `TA_COSH`
"""
def cosh(params) do
params
|> Executer.new()
|> Executer.load(:values, :double_array)
|> Executer.call(&Nif.nif_cosh/1)
end
@dialyzer {:nowarn_function, dema: 1}
@spec dema([{:values, [number()]} | {:time_period, pos_integer()}]) ::
{:ok, result :: [number() | :nan]} | {:error, term()}
@doc """
Double Exponential Moving Average
---
Inputs
- `values`
- `time_period` (default `5`): Number of period (between `1` and `100000`)
---
Outputs
- `result`
---
TA-LIB src `TA_DEMA`
"""
def dema(params) do
params
|> Executer.new()
|> Executer.load(:values, :double_array)
|> Executer.load(:time_period, :integer, %{default: 5, min: 1, max: 100_000})
|> Executer.call(&Nif.nif_dema/2)
end
@dialyzer {:nowarn_function, div: 1}
@spec div([{:values0, [number()]} | {:values1, [number()]}]) ::
{:ok, result :: [number() | :nan]} | {:error, term()}
@doc """
Vector Arithmetic Div
---
Inputs
- `values0`
- `values1`
---
Outputs
- `result`
---
TA-LIB src `TA_DIV`
"""
def div(params) do
params
|> Executer.new()
|> Executer.load(:values0, :double_array)
|> Executer.load(:values1, :double_array)
|> Executer.call(&Nif.nif_div/2)
end
@dialyzer {:nowarn_function, dx: 1}
@spec dx([
{:high, [number()]}
| {:low, [number()]}
| {:close, [number()]}
| {:time_period, pos_integer()}
]) :: {:ok, result :: [number() | :nan]} | {:error, term()}
@doc """
Directional Movement Index
---
Inputs
- `high`: High Price List
- `low`: Low Price List
- `close`: Close Price List
- `time_period` (default `5`): Number of period (between `1` and `100000`)
---
Outputs
- `result`
---
TA-LIB src `TA_DX`
"""
def dx(params) do
params
|> Executer.new()
|> Executer.load(:high, :double_array)
|> Executer.load(:low, :double_array)
|> Executer.load(:close, :double_array)
|> Executer.load(:time_period, :integer, %{default: 5, min: 1, max: 100_000})
|> Executer.call(&Nif.nif_dx/4)
end
@dialyzer {:nowarn_function, ema: 1}
@spec ema([{:values, [number()]} | {:time_period, pos_integer()}]) ::
{:ok, result :: [number() | :nan]} | {:error, term()}
@doc """
Exponential Moving Average
---
Inputs
- `values`
- `time_period` (default `5`): Number of period (between `1` and `100000`)
---
Outputs
- `result`
---
TA-LIB src `TA_EMA`
"""
def ema(params) do
params
|> Executer.new()
|> Executer.load(:values, :double_array)
|> Executer.load(:time_period, :integer, %{default: 5, min: 1, max: 100_000})
|> Executer.call(&Nif.nif_ema/2)
end
@dialyzer {:nowarn_function, exp: 1}
@spec exp([{:values, [number()]}]) :: {:ok, result :: [number() | :nan]} | {:error, term()}
@doc """
Vector Arithmetic Exp
---
Inputs
- `values`
---
Outputs
- `result`
---
TA-LIB src `TA_EXP`
"""
def exp(params) do
params
|> Executer.new()
|> Executer.load(:values, :double_array)
|> Executer.call(&Nif.nif_exp/1)
end
@dialyzer {:nowarn_function, floor: 1}
@spec floor([{:values, [number()]}]) :: {:ok, result :: [number() | :nan]} | {:error, term()}
@doc """
Vector Floor
---
Inputs
- `values`
---
Outputs
- `result`
---
TA-LIB src `TA_FLOOR`
"""
def floor(params) do
params
|> Executer.new()
|> Executer.load(:values, :double_array)
|> Executer.call(&Nif.nif_floor/1)
end
@dialyzer {:nowarn_function, ht_dcperiod: 1}
@spec ht_dcperiod([{:values, [number()]}]) ::
{:ok, result :: [number() | :nan]} | {:error, term()}
@doc """
Hilbert Transform - Dominant Cycle Period
---
Inputs
- `values`
---
Outputs
- `result`
---
TA-LIB src `TA_HT_DCPERIOD`
"""
def ht_dcperiod(params) do
params
|> Executer.new()
|> Executer.load(:values, :double_array)
|> Executer.call(&Nif.nif_ht_dcperiod/1)
end
@dialyzer {:nowarn_function, ht_dcphase: 1}
@spec ht_dcphase([{:values, [number()]}]) ::
{:ok, result :: [number() | :nan]} | {:error, term()}
@doc """
Hilbert Transform - Dominant Cycle Phase
---
Inputs
- `values`
---
Outputs
- `result`
---
TA-LIB src `TA_HT_DCPHASE`
"""
def ht_dcphase(params) do
params
|> Executer.new()
|> Executer.load(:values, :double_array)
|> Executer.call(&Nif.nif_ht_dcphase/1)
end
@dialyzer {:nowarn_function, ht_phasor: 1}
@spec ht_phasor([{:values, [number()]}]) ::
{:ok, in_phase :: [number() | :nan], quadrature :: [number() | :nan]} | {:error, term()}
@doc """
Hilbert Transform - Phasor Components
---
Inputs
- `values`
---
Outputs
- `in_phase`
- `quadrature`
---
TA-LIB src `TA_HT_PHASOR`
"""
def ht_phasor(params) do
params
|> Executer.new()
|> Executer.load(:values, :double_array)
|> Executer.call(&Nif.nif_ht_phasor/1)
end
@dialyzer {:nowarn_function, ht_sine: 1}
@spec ht_sine([{:values, [number()]}]) ::
{:ok, sine :: [number() | :nan], leadSine :: [number() | :nan]} | {:error, term()}
@doc """
Hilbert Transform - SineWave
---
Inputs
- `values`
---
Outputs
- `sine`
- `leadSine`
---
TA-LIB src `TA_HT_SINE`
"""
def ht_sine(params) do
params
|> Executer.new()
|> Executer.load(:values, :double_array)
|> Executer.call(&Nif.nif_ht_sine/1)
end
@dialyzer {:nowarn_function, ht_trendline: 1}
@spec ht_trendline([{:values, [number()]}]) ::
{:ok, list :: [number() | :nan]} | {:error, term()}
@doc """
Hilbert Transform - Instantaneous Trendline
---
Inputs
- `values`
---
Outputs
- `list`
---
TA-LIB src `TA_HT_TRENDLINE`
"""
def ht_trendline(params) do
params
|> Executer.new()
|> Executer.load(:values, :double_array)
|> Executer.call(&Nif.nif_ht_trendline/1)
end
@dialyzer {:nowarn_function, ht_trendmode: 1}
@spec ht_trendmode([{:values, [number()]}]) ::
{:ok, list :: [integer() | :nan]} | {:error, term()}
@doc """
Hilbert Transform - Trend vs Cycle Mode
---
Inputs
- `values`
---
Outputs
- `list`
---
TA-LIB src `TA_HT_TRENDMODE`
"""
def ht_trendmode(params) do
params
|> Executer.new()
|> Executer.load(:values, :double_array)
|> Executer.call(&Nif.nif_ht_trendmode/1)
end
@dialyzer {:nowarn_function, kama: 1}
@spec kama([{:values, [number()]} | {:time_period, pos_integer()}]) ::
{:ok, result :: [number() | :nan]} | {:error, term()}
@doc """
Kaufman Adaptive Moving Average
---
Inputs
- `values`
- `time_period` (default `5`): Number of period (between `1` and `100000`)
---
Outputs
- `result`
---
TA-LIB src `TA_KAMA`
"""
def kama(params) do
params
|> Executer.new()
|> Executer.load(:values, :double_array)
|> Executer.load(:time_period, :integer, %{default: 5, min: 1, max: 100_000})
|> Executer.call(&Nif.nif_kama/2)
end
@dialyzer {:nowarn_function, linear_reg: 1}
@spec linear_reg([{:values, [number()]} | {:time_period, pos_integer()}]) ::
{:ok, result :: [number() | :nan]} | {:error, term()}
@doc """
Linear Regression
---
Inputs
- `values`
- `time_period` (default `5`): Number of period (between `1` and `100000`)
---
Outputs
- `result`
---
TA-LIB src `TA_LINEARREG`
"""
def linear_reg(params) do
params
|> Executer.new()
|> Executer.load(:values, :double_array)
|> Executer.load(:time_period, :integer, %{default: 5, min: 1, max: 100_000})
|> Executer.call(&Nif.nif_linear_reg/2)
end
@dialyzer {:nowarn_function, linear_reg_angle: 1}
@spec linear_reg_angle([{:values, [number()]} | {:time_period, pos_integer()}]) ::
{:ok, result :: [number() | :nan]} | {:error, term()}
@doc """
Linear Regression Angle
---
Inputs
- `values`
- `time_period` (default `5`): Number of period (between `1` and `100000`)
---
Outputs
- `result`
---
TA-LIB src `TA_LINEARREG_ANGLE`
"""
def linear_reg_angle(params) do
params
|> Executer.new()
|> Executer.load(:values, :double_array)
|> Executer.load(:time_period, :integer, %{default: 5, min: 1, max: 100_000})
|> Executer.call(&Nif.nif_linear_reg_angle/2)
end
@dialyzer {:nowarn_function, linear_reg_intercept: 1}
@spec linear_reg_intercept([{:values, [number()]} | {:time_period, pos_integer()}]) ::
{:ok, result :: [number() | :nan]} | {:error, term()}
@doc """
Linear Regression Intercept
---
Inputs
- `values`
- `time_period` (default `5`): Number of period (between `1` and `100000`)
---
Outputs
- `result`
---
TA-LIB src `TA_LINEARREG_INTERCEPT`
"""
def linear_reg_intercept(params) do
params
|> Executer.new()
|> Executer.load(:values, :double_array)
|> Executer.load(:time_period, :integer, %{default: 5, min: 1, max: 100_000})
|> Executer.call(&Nif.nif_linear_reg_intercept/2)
end
@dialyzer {:nowarn_function, linear_reg_slope: 1}
@spec linear_reg_slope([{:values, [number()]} | {:time_period, pos_integer()}]) ::
{:ok, result :: [number() | :nan]} | {:error, term()}
@doc """
Linear Regression Slope
---
Inputs
- `values`
- `time_period` (default `5`): Number of period (between `1` and `100000`)
---
Outputs
- `result`
---
TA-LIB src `TA_LINEARREG_SLOPE`
"""
def linear_reg_slope(params) do
params
|> Executer.new()
|> Executer.load(:values, :double_array)
|> Executer.load(:time_period, :integer, %{default: 5, min: 1, max: 100_000})
|> Executer.call(&Nif.nif_linear_reg_slope/2)
end
@dialyzer {:nowarn_function, ln: 1}
@spec ln([{:values, [number()]}]) :: {:ok, result :: [number() | :nan]} | {:error, term()}
@doc """
Vector Log Natural
---
Inputs
- `values`
---
Outputs
- `result`
---
TA-LIB src `TA_LN`
"""
def ln(params) do
params
|> Executer.new()
|> Executer.load(:values, :double_array)
|> Executer.call(&Nif.nif_ln/1)
end
@dialyzer {:nowarn_function, log10: 1}
@spec log10([{:values, [number()]}]) :: {:ok, result :: [number() | :nan]} | {:error, term()}
@doc """
Vector Log10
---
Inputs
- `values`
---
Outputs
- `result`
---
TA-LIB src `TA_LOG10`
"""
def log10(params) do
params
|> Executer.new()
|> Executer.load(:values, :double_array)
|> Executer.call(&Nif.nif_log10/1)
end
@dialyzer {:nowarn_function, ma: 1}
@spec ma([
{:values, [number()]}
| {:time_period, pos_integer()}
| {:moving_average_type,
:sma | :ema | :wma | :dema | :tema | :trima | :kama | :mama | :t3}
]) :: {:ok, result :: [number() | :nan]} | {:error, term()}
@doc """
Moving average
---
Inputs
- `values`
- `time_period` (default `5`): Number of period (between `1` and `100000`)
- `moving_average_type` (default `:sma`): Type of moving average. `sma` | `ema` | `wma` | `dema` | `tema` | `trima` | `kama` | `mama` | `t3`
---
Outputs
- `result`
---
TA-LIB src `TA_MA`
"""
def ma(params) do
params
|> Executer.new()
|> Executer.load(:values, :double_array)
|> Executer.load(:time_period, :integer, %{default: 5, min: 1, max: 100_000})
|> Executer.load(:moving_average_type, :ma_type, %{default: :sma})
|> Executer.call(&Nif.nif_ma/3)
end
@dialyzer {:nowarn_function, macd: 1}
@spec macd([
{:values, [number()]}
| {:fast_period, pos_integer()}
| {:slow_period, pos_integer()}
| {:signal_period, pos_integer()}
]) ::
{:ok, macd :: [number() | :nan], macd_signal :: [number() | :nan],
macd_hist :: [number() | :nan]}
| {:error, term()}
@doc """
Moving Average Convergence/Divergence
---
Inputs
- `values`
- `fast_period` (default `5`): Number of period for the fast MA (between `2` and `100000`)
- `slow_period` (default `15`): Number of period for the slow MA (between `2` and `100000`)
- `signal_period` (default `1`): Smoothing for the signal line (between `1` and `100000`)
---
Outputs
- `macd`
- `macd_signal`
- `macd_hist`
---
TA-LIB src `TA_MACD`
"""
def macd(params) do
params
|> Executer.new()
|> Executer.load(:values, :double_array)
|> Executer.load(:fast_period, :integer, %{default: 5, min: 2, max: 100_000})
|> Executer.load(:slow_period, :integer, %{default: 15, min: 2, max: 100_000})
|> Executer.load(:signal_period, :integer, %{default: 1, min: 1, max: 100_000})
|> Executer.call(&Nif.nif_macd/4)
end
@dialyzer {:nowarn_function, macdext: 1}
@spec macdext([
{:values, [number()]}
| {:fast_period, pos_integer()}
| {:fast_moving_average_type,
:sma | :ema | :wma | :dema | :tema | :trima | :kama | :mama | :t3}
| {:slow_period, pos_integer()}
| {:slow_moving_average_type,
:sma | :ema | :wma | :dema | :tema | :trima | :kama | :mama | :t3}
| {:signal_period, pos_integer()}
| {:single_moving_average_type,
:sma | :ema | :wma | :dema | :tema | :trima | :kama | :mama | :t3}
]) ::
{:ok, macd :: [number() | :nan], macd_signal :: [number() | :nan],
macd_hist :: [number() | :nan]}
| {:error, term()}
@doc """
MACD with controllable MA type
---
Inputs
- `values`
- `fast_period` (default `5`): Number of period for the fast MA (between `2` and `100000`)
- `fast_moving_average_type` (default `:sma`): Type of moving average. `sma` | `ema` | `wma` | `dema` | `tema` | `trima` | `kama` | `mama` | `t3`
- `slow_period` (default `15`): Number of period for the slow MA (between `2` and `100000`)
- `slow_moving_average_type` (default `:sma`): Type of moving average. `sma` | `ema` | `wma` | `dema` | `tema` | `trima` | `kama` | `mama` | `t3`
- `signal_period` (default `1`): Smoothing for the signal line (between `1` and `100000`)
- `single_moving_average_type` (default `:sma`): Type of moving average. `sma` | `ema` | `wma` | `dema` | `tema` | `trima` | `kama` | `mama` | `t3`
---
Outputs
- `macd`
- `macd_signal`
- `macd_hist`
---
TA-LIB src `TA_MACDEXT`
"""
def macdext(params) do
params
|> Executer.new()
|> Executer.load(:values, :double_array)
|> Executer.load(:fast_period, :integer, %{default: 5, min: 2, max: 100_000})
|> Executer.load(:fast_moving_average_type, :ma_type, %{default: :sma})
|> Executer.load(:slow_period, :integer, %{default: 15, min: 2, max: 100_000})
|> Executer.load(:slow_moving_average_type, :ma_type, %{default: :sma})
|> Executer.load(:signal_period, :integer, %{default: 1, min: 1, max: 100_000})
|> Executer.load(:single_moving_average_type, :ma_type, %{default: :sma})
|> Executer.call(&Nif.nif_macdext/7)
end
@dialyzer {:nowarn_function, macdfix: 1}
@spec macdfix([{:values, [number()]} | {:signal_period, pos_integer()}]) ::
{:ok, macd :: [number() | :nan], macd_signal :: [number() | :nan],
macd_hist :: [number() | :nan]}
| {:error, term()}
@doc """
Moving Average Convergence/Divergence Fix 12/26
---
Inputs
- `values`
- `signal_period` (default `1`): Smoothing for the signal line (between `1` and `100000`)
---
Outputs
- `macd`
- `macd_signal`
- `macd_hist`
---
TA-LIB src `TA_MACDFIX`
"""
def macdfix(params) do
params
|> Executer.new()
|> Executer.load(:values, :double_array)
|> Executer.load(:signal_period, :integer, %{default: 1, min: 1, max: 100_000})
|> Executer.call(&Nif.nif_macdfix/2)
end
@dialyzer {:nowarn_function, mama: 1}
@spec mama([{:values, [number()]} | {:fast_limit, number()} | {:slow_limit, number()}]) ::
{:ok, mama :: [number() | :nan], fama :: [number() | :nan]} | {:error, term()}
@doc """
MESA Adaptive Moving Average
---
Inputs
- `values`
- `fast_limit` (default `0.75`): Upper limit use in the adaptive algorithm (between `0.01` and `0.99`)
- `slow_limit` (default `0.25`): Lower limit use in the adaptive algorithm (between `0.01` and `0.99`)
---
Outputs
- `mama`
- `fama`
---
TA-LIB src `TA_MAMA`
"""
def mama(params) do
params
|> Executer.new()
|> Executer.load(:values, :double_array)
|> Executer.load(:fast_limit, :double, %{default: 0.75, min: 0.01, max: 0.99})
|> Executer.load(:slow_limit, :double, %{default: 0.25, min: 0.01, max: 0.99})
|> Executer.call(&Nif.nif_mama/3)
end
@dialyzer {:nowarn_function, mavp: 1}
@spec mavp([
{:values, [number()]}
| {:periods, [number()]}
| {:min_period, pos_integer()}
| {:max_period, pos_integer()}
| {:moving_average_type,
:sma | :ema | :wma | :dema | :tema | :trima | :kama | :mama | :t3}
]) :: {:ok, list :: [number() | :nan]} | {:error, term()}
@doc """
Moving average with variable period
---
Inputs
- `values`
- `periods`
- `min_period` (default `5`): Value less than minimum will be changed to Minimum period (between `2` and `100000`)
- `max_period` (default `15`): Value higher than maximum will be changed to Maximum period (between `2` and `100000`)
- `moving_average_type` (default `:sma`): Type of moving average. `sma` | `ema` | `wma` | `dema` | `tema` | `trima` | `kama` | `mama` | `t3`
---
Outputs
- `list`
---
TA-LIB src `TA_MAVP`
"""
def mavp(params) do
params
|> Executer.new()
|> Executer.load(:values, :double_array)
|> Executer.load(:periods, :double_array)
|> Executer.load(:min_period, :integer, %{default: 5, min: 2, max: 100_000})
|> Executer.load(:max_period, :integer, %{default: 15, min: 2, max: 100_000})
|> Executer.load(:moving_average_type, :ma_type, %{default: :sma})
|> Executer.call(&Nif.nif_mavp/5)
end
@dialyzer {:nowarn_function, max: 1}
@spec max([{:values, [number()]} | {:time_period, pos_integer()}]) ::
{:ok, result :: [number() | :nan]} | {:error, term()}
@doc """
Highest value over a specified period
---
Inputs
- `values`
- `time_period` (default `5`): Number of period (between `1` and `100000`)
---
Outputs
- `result`
---
TA-LIB src `TA_MAX`
"""
def max(params) do
params
|> Executer.new()
|> Executer.load(:values, :double_array)
|> Executer.load(:time_period, :integer, %{default: 5, min: 1, max: 100_000})
|> Executer.call(&Nif.nif_max/2)
end
@dialyzer {:nowarn_function, max_index: 1}
@spec max_index([{:values, [number()]} | {:time_period, pos_integer()}]) ::
{:ok, list :: [integer() | :nan]} | {:error, term()}
@doc """
Index of highest value over a specified period
---
Inputs
- `values`
- `time_period` (default `5`): Number of period (between `1` and `100000`)
---
Outputs
- `list`
---
TA-LIB src `TA_MAXINDEX`
"""
def max_index(params) do
params
|> Executer.new()
|> Executer.load(:values, :double_array)
|> Executer.load(:time_period, :integer, %{default: 5, min: 1, max: 100_000})
|> Executer.call(&Nif.nif_max_index/2)
end
@dialyzer {:nowarn_function, med_price: 1}
@spec med_price([{:high, [number()]} | {:low, [number()]}]) ::
{:ok, result :: [number() | :nan]} | {:error, term()}
@doc """
Median Price
---
Inputs
- `high`: High Price List
- `low`: Low Price List
---
Outputs
- `result`
---
TA-LIB src `TA_MEDPRICE`
"""
def med_price(params) do
params
|> Executer.new()
|> Executer.load(:high, :double_array)
|> Executer.load(:low, :double_array)
|> Executer.call(&Nif.nif_med_price/2)
end
@dialyzer {:nowarn_function, mfi: 1}
@spec mfi([
{:high, [number()]}
| {:low, [number()]}
| {:close, [number()]}
| {:volume, [number()]}
| {:time_period, pos_integer()}
]) :: {:ok, result :: [number() | :nan]} | {:error, term()}
@doc """
Money Flow Index
---
Inputs
- `high`: High Price List
- `low`: Low Price List
- `close`: Close Price List
- `volume`: Volume List
- `time_period` (default `5`): Number of period (between `1` and `100000`)
---
Outputs
- `result`
---
TA-LIB src `TA_MFI`
"""
def mfi(params) do
params
|> Executer.new()
|> Executer.load(:high, :double_array)
|> Executer.load(:low, :double_array)
|> Executer.load(:close, :double_array)
|> Executer.load(:volume, :double_array)
|> Executer.load(:time_period, :integer, %{default: 5, min: 1, max: 100_000})
|> Executer.call(&Nif.nif_mfi/5)
end
@dialyzer {:nowarn_function, mid_point: 1}
@spec mid_point([{:values, [number()]} | {:time_period, pos_integer()}]) ::
{:ok, result :: [number() | :nan]} | {:error, term()}
@doc """
MidPoint over period
---
Inputs
- `values`
- `time_period` (default `5`): Number of period (between `1` and `100000`)
---
Outputs
- `result`
---
TA-LIB src `TA_MIDPOINT`
"""
def mid_point(params) do
params
|> Executer.new()
|> Executer.load(:values, :double_array)
|> Executer.load(:time_period, :integer, %{default: 5, min: 1, max: 100_000})
|> Executer.call(&Nif.nif_mid_point/2)
end
@dialyzer {:nowarn_function, mid_price: 1}
@spec mid_price([{:high, [number()]} | {:low, [number()]} | {:time_period, pos_integer()}]) ::
{:ok, result :: [number() | :nan]} | {:error, term()}
@doc """
Midpoint Price over period
---
Inputs
- `high`: High Price List
- `low`: Low Price List
- `time_period` (default `5`): Number of period (between `1` and `100000`)
---
Outputs
- `result`
---
TA-LIB src `TA_MIDPRICE`
"""
def mid_price(params) do
params
|> Executer.new()
|> Executer.load(:high, :double_array)
|> Executer.load(:low, :double_array)
|> Executer.load(:time_period, :integer, %{default: 5, min: 1, max: 100_000})
|> Executer.call(&Nif.nif_mid_price/3)
end
@dialyzer {:nowarn_function, min: 1}
@spec min([{:values, [number()]} | {:time_period, pos_integer()}]) ::
{:ok, result :: [number() | :nan]} | {:error, term()}
@doc """
Lowest value over a specified period
---
Inputs
- `values`
- `time_period` (default `5`): Number of period (between `1` and `100000`)
---
Outputs
- `result`
---
TA-LIB src `TA_MIN`
"""
def min(params) do
params
|> Executer.new()
|> Executer.load(:values, :double_array)
|> Executer.load(:time_period, :integer, %{default: 5, min: 1, max: 100_000})
|> Executer.call(&Nif.nif_min/2)
end
@dialyzer {:nowarn_function, min_index: 1}
@spec min_index([{:values, [number()]} | {:time_period, pos_integer()}]) ::
{:ok, list :: [integer() | :nan]} | {:error, term()}
@doc """
Index of lowest value over a specified period
---
Inputs
- `values`
- `time_period` (default `5`): Number of period (between `1` and `100000`)
---
Outputs
- `list`
---
TA-LIB src `TA_MININDEX`
"""
def min_index(params) do
params
|> Executer.new()
|> Executer.load(:values, :double_array)
|> Executer.load(:time_period, :integer, %{default: 5, min: 1, max: 100_000})
|> Executer.call(&Nif.nif_min_index/2)
end
@dialyzer {:nowarn_function, min_max: 1}
@spec min_max([{:values, [number()]} | {:time_period, pos_integer()}]) ::
{:ok, min :: [number() | :nan], max :: [number() | :nan]} | {:error, term()}
@doc """
Lowest and highest values over a specified period
---
Inputs
- `values`
- `time_period` (default `5`): Number of period (between `1` and `100000`)
---
Outputs
- `min`
- `max`
---
TA-LIB src `TA_MINMAX`
"""
def min_max(params) do
params
|> Executer.new()
|> Executer.load(:values, :double_array)
|> Executer.load(:time_period, :integer, %{default: 5, min: 1, max: 100_000})
|> Executer.call(&Nif.nif_min_max/2)
end
@dialyzer {:nowarn_function, min_max_index: 1}
@spec min_max_index([{:values, [number()]} | {:time_period, pos_integer()}]) ::
{:ok, min :: [integer() | :nan], max :: [integer() | :nan]} | {:error, term()}
@doc """
Indexes of lowest and highest values over a specified period
---
Inputs
- `values`
- `time_period` (default `5`): Number of period (between `1` and `100000`)
---
Outputs
- `min`
- `max`
---
TA-LIB src `TA_MINMAXINDEX`
"""
def min_max_index(params) do
params
|> Executer.new()
|> Executer.load(:values, :double_array)
|> Executer.load(:time_period, :integer, %{default: 5, min: 1, max: 100_000})
|> Executer.call(&Nif.nif_min_max_index/2)
end
@dialyzer {:nowarn_function, minus_di: 1}
@spec minus_di([
{:high, [number()]}
| {:low, [number()]}
| {:close, [number()]}
| {:time_period, pos_integer()}
]) :: {:ok, list :: [number() | :nan]} | {:error, term()}
@doc """
Minus Directional Indicator
---
Inputs
- `high`: High Price List
- `low`: Low Price List
- `close`: Close Price List
- `time_period` (default `5`): Number of period (between `1` and `100000`)
---
Outputs
- `list`
---
TA-LIB src `TA_MINUS_DI`
"""
def minus_di(params) do
params
|> Executer.new()
|> Executer.load(:high, :double_array)
|> Executer.load(:low, :double_array)
|> Executer.load(:close, :double_array)
|> Executer.load(:time_period, :integer, %{default: 5, min: 1, max: 100_000})
|> Executer.call(&Nif.nif_minus_di/4)
end
@dialyzer {:nowarn_function, minus_dm: 1}
@spec minus_dm([{:high, [number()]} | {:low, [number()]} | {:time_period, pos_integer()}]) ::
{:ok, list :: [number() | :nan]} | {:error, term()}
@doc """
Minus Directional Movement
---
Inputs
- `high`: High Price List
- `low`: Low Price List
- `time_period` (default `5`): Number of period (between `1` and `100000`)
---
Outputs
- `list`
---
TA-LIB src `TA_MINUS_DM`
"""
def minus_dm(params) do
params
|> Executer.new()
|> Executer.load(:high, :double_array)
|> Executer.load(:low, :double_array)
|> Executer.load(:time_period, :integer, %{default: 5, min: 1, max: 100_000})
|> Executer.call(&Nif.nif_minus_dm/3)
end
@dialyzer {:nowarn_function, mom: 1}
@spec mom([{:values, [number()]} | {:time_period, pos_integer()}]) ::
{:ok, list :: [number() | :nan]} | {:error, term()}
@doc """
Momentum
---
Inputs
- `values`
- `time_period` (default `5`): Number of period (between `1` and `100000`)
---
Outputs
- `list`
---
TA-LIB src `TA_MOM`
"""
def mom(params) do
params
|> Executer.new()
|> Executer.load(:values, :double_array)
|> Executer.load(:time_period, :integer, %{default: 5, min: 1, max: 100_000})
|> Executer.call(&Nif.nif_mom/2)
end
@dialyzer {:nowarn_function, mult: 1}
@spec mult([{:values0, [number()]} | {:values1, [number()]}]) ::
{:ok, result :: [number() | :nan]} | {:error, term()}
@doc """
Vector Arithmetic Mult
---
Inputs
- `values0`
- `values1`
---
Outputs
- `result`
---
TA-LIB src `TA_MULT`
"""
def mult(params) do
params
|> Executer.new()
|> Executer.load(:values0, :double_array)
|> Executer.load(:values1, :double_array)
|> Executer.call(&Nif.nif_mult/2)
end
@dialyzer {:nowarn_function, natr: 1}
@spec natr([
{:high, [number()]}
| {:low, [number()]}
| {:close, [number()]}
| {:time_period, pos_integer()}
]) :: {:ok, result :: [number() | :nan]} | {:error, term()}
@doc """
Normalized Average True Range
---
Inputs
- `high`: High Price List
- `low`: Low Price List
- `close`: Close Price List
- `time_period` (default `5`): Number of period (between `1` and `100000`)
---
Outputs
- `result`
---
TA-LIB src `TA_NATR`
"""
def natr(params) do
params
|> Executer.new()
|> Executer.load(:high, :double_array)
|> Executer.load(:low, :double_array)
|> Executer.load(:close, :double_array)
|> Executer.load(:time_period, :integer, %{default: 5, min: 1, max: 100_000})
|> Executer.call(&Nif.nif_natr/4)
end
@dialyzer {:nowarn_function, obv: 1}
@spec obv([{:values, [number()]} | {:volume, [number()]}]) ::
{:ok, result :: [number() | :nan]} | {:error, term()}
@doc """
On Balance Volume
---
Inputs
- `values`
- `volume`: Volume List
---
Outputs
- `result`
---
TA-LIB src `TA_OBV`
"""
def obv(params) do
params
|> Executer.new()
|> Executer.load(:values, :double_array)
|> Executer.load(:volume, :double_array)
|> Executer.call(&Nif.nif_obv/2)
end
@dialyzer {:nowarn_function, plus_di: 1}
@spec plus_di([
{:high, [number()]}
| {:low, [number()]}
| {:close, [number()]}
| {:time_period, pos_integer()}
]) :: {:ok, result :: [number() | :nan]} | {:error, term()}
@doc """
Plus Directional Indicator
---
Inputs
- `high`: High Price List
- `low`: Low Price List
- `close`: Close Price List
- `time_period` (default `5`): Number of period (between `1` and `100000`)
---
Outputs
- `result`
---
TA-LIB src `TA_PLUS_DI`
"""
def plus_di(params) do
params
|> Executer.new()
|> Executer.load(:high, :double_array)
|> Executer.load(:low, :double_array)
|> Executer.load(:close, :double_array)
|> Executer.load(:time_period, :integer, %{default: 5, min: 1, max: 100_000})
|> Executer.call(&Nif.nif_plus_di/4)
end
@dialyzer {:nowarn_function, plus_dm: 1}
@spec plus_dm([{:high, [number()]} | {:low, [number()]} | {:time_period, pos_integer()}]) ::
{:ok, result :: [number() | :nan]} | {:error, term()}
@doc """
Plus Directional Movement
---
Inputs
- `high`: High Price List
- `low`: Low Price List
- `time_period` (default `5`): Number of period (between `1` and `100000`)
---
Outputs
- `result`
---
TA-LIB src `TA_PLUS_DM`
"""
def plus_dm(params) do
params
|> Executer.new()
|> Executer.load(:high, :double_array)
|> Executer.load(:low, :double_array)
|> Executer.load(:time_period, :integer, %{default: 5, min: 1, max: 100_000})
|> Executer.call(&Nif.nif_plus_dm/3)
end
@dialyzer {:nowarn_function, ppo: 1}
@spec ppo([
{:values, [number()]}
| {:fast_period, pos_integer()}
| {:slow_period, pos_integer()}
| {:moving_average_type,
:sma | :ema | :wma | :dema | :tema | :trima | :kama | :mama | :t3}
]) :: {:ok, result :: [number() | :nan]} | {:error, term()}
@doc """
Percentage Price Oscillator
---
Inputs
- `values`
- `fast_period` (default `5`): Number of period for the fast MA (between `2` and `100000`)
- `slow_period` (default `15`): Number of period for the slow MA (between `2` and `100000`)
- `moving_average_type` (default `:sma`): Type of moving average. `sma` | `ema` | `wma` | `dema` | `tema` | `trima` | `kama` | `mama` | `t3`
---
Outputs
- `result`
---
TA-LIB src `TA_PPO`
"""
def ppo(params) do
params
|> Executer.new()
|> Executer.load(:values, :double_array)
|> Executer.load(:fast_period, :integer, %{default: 5, min: 2, max: 100_000})
|> Executer.load(:slow_period, :integer, %{default: 15, min: 2, max: 100_000})
|> Executer.load(:moving_average_type, :ma_type, %{default: :sma})
|> Executer.call(&Nif.nif_ppo/4)
end
@dialyzer {:nowarn_function, roc: 1}
@spec roc([{:values, [number()]} | {:time_period, pos_integer()}]) ::
{:ok, result :: [number() | :nan]} | {:error, term()}
@doc """
Rate of change : ((price/prevPrice)-1)*100
---
Inputs
- `values`
- `time_period` (default `5`): Number of period (between `1` and `100000`)
---
Outputs
- `result`
---
TA-LIB src `TA_ROC`
"""
def roc(params) do
params
|> Executer.new()
|> Executer.load(:values, :double_array)
|> Executer.load(:time_period, :integer, %{default: 5, min: 1, max: 100_000})
|> Executer.call(&Nif.nif_roc/2)
end
@dialyzer {:nowarn_function, rocp: 1}
@spec rocp([{:values, [number()]} | {:time_period, pos_integer()}]) ::
{:ok, result :: [number() | :nan]} | {:error, term()}
@doc """
Rate of change Percentage: (price-prevPrice)/prevPrice
---
Inputs
- `values`
- `time_period` (default `5`): Number of period (between `1` and `100000`)
---
Outputs
- `result`
---
TA-LIB src `TA_ROCP`
"""
def rocp(params) do
params
|> Executer.new()
|> Executer.load(:values, :double_array)
|> Executer.load(:time_period, :integer, %{default: 5, min: 1, max: 100_000})
|> Executer.call(&Nif.nif_rocp/2)
end
@dialyzer {:nowarn_function, rocr: 1}
@spec rocr([{:values, [number()]} | {:time_period, pos_integer()}]) ::
{:ok, result :: [number() | :nan]} | {:error, term()}
@doc """
Rate of change ratio: (price/prevPrice)
---
Inputs
- `values`
- `time_period` (default `5`): Number of period (between `1` and `100000`)
---
Outputs
- `result`
---
TA-LIB src `TA_ROCR`
"""
def rocr(params) do
params
|> Executer.new()
|> Executer.load(:values, :double_array)
|> Executer.load(:time_period, :integer, %{default: 5, min: 1, max: 100_000})
|> Executer.call(&Nif.nif_rocr/2)
end
@dialyzer {:nowarn_function, rocr100: 1}
@spec rocr100([{:values, [number()]} | {:time_period, pos_integer()}]) ::
{:ok, result :: [number() | :nan]} | {:error, term()}
@doc """
Rate of change ratio 100 scale: (price/prevPrice)*100
---
Inputs
- `values`
- `time_period` (default `5`): Number of period (between `1` and `100000`)
---
Outputs
- `result`
---
TA-LIB src `TA_ROCR100`
"""
def rocr100(params) do
params
|> Executer.new()
|> Executer.load(:values, :double_array)
|> Executer.load(:time_period, :integer, %{default: 5, min: 1, max: 100_000})
|> Executer.call(&Nif.nif_rocr100/2)
end
@dialyzer {:nowarn_function, rsi: 1}
@spec rsi([{:values, [number()]} | {:time_period, pos_integer()}]) ::
{:ok, result :: [number() | :nan]} | {:error, term()}
@doc """
Relative Strength Index
---
Inputs
- `values`
- `time_period` (default `5`): Number of period (between `1` and `100000`)
---
Outputs
- `result`
---
TA-LIB src `TA_RSI`
"""
def rsi(params) do
params
|> Executer.new()
|> Executer.load(:values, :double_array)
|> Executer.load(:time_period, :integer, %{default: 5, min: 1, max: 100_000})
|> Executer.call(&Nif.nif_rsi/2)
end
@dialyzer {:nowarn_function, sar: 1}
@spec sar([
{:high, [number()]}
| {:low, [number()]}
| {:acceleration, number()}
| {:maximum, number()}
]) :: {:ok, result :: [number() | :nan]} | {:error, term()}
@doc """
Parabolic SAR
---
Inputs
- `high`: High Price List
- `low`: Low Price List
- `acceleration` (default `0`): Acceleration Factor used up to the Maximum value (minuimum `0`)
- `maximum` (default `0`): Acceleration Factor Maximum value (minuimum `0`)
---
Outputs
- `result`
---
TA-LIB src `TA_SAR`
"""
def sar(params) do
params
|> Executer.new()
|> Executer.load(:high, :double_array)
|> Executer.load(:low, :double_array)
|> Executer.load(:acceleration, :double, %{default: 0, min: 0})
|> Executer.load(:maximum, :double, %{default: 0, min: 0})
|> Executer.call(&Nif.nif_sar/4)
end
@dialyzer {:nowarn_function, sarext: 1}
@spec sarext([
{:high, [number()]}
| {:low, [number()]}
| {:start_value, number()}
| {:offset_on_reverse, number()}
| {:acceleration_init_long, number()}
| {:acceleration_long, number()}
| {:acceleration_max_long, number()}
| {:acceleration_init_short, number()}
| {:acceleration_short, number()}
| {:acceleration_max_short, number()}
]) :: {:ok, result :: [number() | :nan]} | {:error, term()}
@doc """
Parabolic SAR - Extended
---
Inputs
- `high`: High Price List
- `low`: Low Price List
- `start_value` (default `0`): Start value and direction. 0 for Auto, >0 for Long, <0 for Short
- `offset_on_reverse` (default `0`): Percent offset added/removed to initial stop on short/long reversal (minuimum `0`)
- `acceleration_init_long` (default `0`): Acceleration Factor initial value for the Long direction (minuimum `0`)
- `acceleration_long` (default `0`): Acceleration Factor for the Long direction (minuimum `0`)
- `acceleration_max_long` (default `0`): Acceleration Factor maximum value for the Long direction (minuimum `0`)
- `acceleration_init_short` (default `0`): Acceleration Factor initial value for the Short direction (minuimum `0`)
- `acceleration_short` (default `0`): Acceleration Factor for the Short direction (minuimum `0`)
- `acceleration_max_short` (default `0`): Acceleration Factor maximum value for the Short direction (minuimum `0`)
---
Outputs
- `result`
---
TA-LIB src `TA_SAREXT`
"""
def sarext(params) do
params
|> Executer.new()
|> Executer.load(:high, :double_array)
|> Executer.load(:low, :double_array)
|> Executer.load(:start_value, :double, %{default: 0})
|> Executer.load(:offset_on_reverse, :double, %{default: 0, min: 0})
|> Executer.load(:acceleration_init_long, :double, %{default: 0, min: 0})
|> Executer.load(:acceleration_long, :double, %{default: 0, min: 0})
|> Executer.load(:acceleration_max_long, :double, %{default: 0, min: 0})
|> Executer.load(:acceleration_init_short, :double, %{default: 0, min: 0})
|> Executer.load(:acceleration_short, :double, %{default: 0, min: 0})
|> Executer.load(:acceleration_max_short, :double, %{default: 0, min: 0})
|> Executer.call(&Nif.nif_sarext/10)
end
@dialyzer {:nowarn_function, sin: 1}
@spec sin([{:values, [number()]}]) :: {:ok, result :: [number() | :nan]} | {:error, term()}
@doc """
Vector Trigonometric Sin
---
Inputs
- `values`
---
Outputs
- `result`
---
TA-LIB src `TA_SIN`
"""
def sin(params) do
params
|> Executer.new()
|> Executer.load(:values, :double_array)
|> Executer.call(&Nif.nif_sin/1)
end
@dialyzer {:nowarn_function, sinh: 1}
@spec sinh([{:values, [number()]}]) :: {:ok, result :: [number() | :nan]} | {:error, term()}
@doc """
Vector Trigonometric Sinh
---
Inputs
- `values`
---
Outputs
- `result`
---
TA-LIB src `TA_SINH`
"""
def sinh(params) do
params
|> Executer.new()
|> Executer.load(:values, :double_array)
|> Executer.call(&Nif.nif_sinh/1)
end
@dialyzer {:nowarn_function, sma: 1}
@spec sma([{:values, [number()]} | {:time_period, pos_integer()}]) ::
{:ok, result :: [number() | :nan]} | {:error, term()}
@doc """
Simple Moving Average
---
Inputs
- `values`
- `time_period` (default `5`): Number of period (between `1` and `100000`)
---
Outputs
- `result`
---
TA-LIB src `TA_SMA`
"""
def sma(params) do
params
|> Executer.new()
|> Executer.load(:values, :double_array)
|> Executer.load(:time_period, :integer, %{default: 5, min: 1, max: 100_000})
|> Executer.call(&Nif.nif_sma/2)
end
@dialyzer {:nowarn_function, sqrt: 1}
@spec sqrt([{:values, [number()]}]) :: {:ok, result :: [number() | :nan]} | {:error, term()}
@doc """
Vector Square Root
---
Inputs
- `values`
---
Outputs
- `result`
---
TA-LIB src `TA_SQRT`
"""
def sqrt(params) do
params
|> Executer.new()
|> Executer.load(:values, :double_array)
|> Executer.call(&Nif.nif_sqrt/1)
end
@dialyzer {:nowarn_function, stddev: 1}
@spec stddev([
{:values, [number()]}
| {:time_period, pos_integer()}
| {:number_of_deviations, number()}
]) :: {:ok, result :: [number() | :nan]} | {:error, term()}
@doc """
Standard Deviation
---
Inputs
- `values`
- `time_period` (default `5`): Number of period (between `1` and `100000`)
- `number_of_deviations`: Number of deviations
---
Outputs
- `result`
---
TA-LIB src `TA_STDDEV`
"""
def stddev(params) do
params
|> Executer.new()
|> Executer.load(:values, :double_array)
|> Executer.load(:time_period, :integer, %{default: 5, min: 1, max: 100_000})
|> Executer.load(:number_of_deviations, :double)
|> Executer.call(&Nif.nif_stddev/3)
end
@dialyzer {:nowarn_function, stoch: 1}
@spec stoch([
{:high, [number()]}
| {:low, [number()]}
| {:close, [number()]}
| {:fast_k_period, pos_integer()}
| {:slow_k_period, pos_integer()}
| {:slow_k_moving_average_type,
:sma | :ema | :wma | :dema | :tema | :trima | :kama | :mama | :t3}
| {:slow_d_period, pos_integer()}
| {:slow_d_moving_average_type,
:sma | :ema | :wma | :dema | :tema | :trima | :kama | :mama | :t3}
]) :: {:ok, slow_k :: [number() | :nan], slow_d :: [number() | :nan]} | {:error, term()}
@doc """
Stochastic
---
Inputs
- `high`: High Price List
- `low`: Low Price List
- `close`: Close Price List
- `fast_k_period`: Time period for building the Fast-K line (between `1` and `100000`)
- `slow_k_period`: Smoothing for making the Slow-K line. Usually set to 3 (between `1` and `100000`)
- `slow_k_moving_average_type` (default `:sma`): Type of Moving Average for Slow-K
- `slow_d_period`: Smoothing for making the Slow-D line (between `1` and `100000`)
- `slow_d_moving_average_type` (default `:sma`): Type of Moving Average for Slow-K
---
Outputs
- `slow_k`
- `slow_d`
---
TA-LIB src `TA_STOCH`
"""
def stoch(params) do
params
|> Executer.new()
|> Executer.load(:high, :double_array)
|> Executer.load(:low, :double_array)
|> Executer.load(:close, :double_array)
|> Executer.load(:fast_k_period, :integer, %{min: 1, max: 100_000})
|> Executer.load(:slow_k_period, :integer, %{min: 1, max: 100_000})
|> Executer.load(:slow_k_moving_average_type, :ma_type, %{default: :sma})
|> Executer.load(:slow_d_period, :integer, %{min: 1, max: 100_000})
|> Executer.load(:slow_d_moving_average_type, :ma_type, %{default: :sma})
|> Executer.call(&Nif.nif_stoch/8)
end
@dialyzer {:nowarn_function, stochf: 1}
@spec stochf([
{:high, [number()]}
| {:low, [number()]}
| {:close, [number()]}
| {:fast_k_period, pos_integer()}
| {:fast_d_period, pos_integer()}
| {:fast_d_moving_average_type,
:sma | :ema | :wma | :dema | :tema | :trima | :kama | :mama | :t3}
]) :: {:ok, fast_k :: [number() | :nan], fast_d :: [number() | :nan]} | {:error, term()}
@doc """
Stochastic Fast
---
Inputs
- `high`: High Price List
- `low`: Low Price List
- `close`: Close Price List
- `fast_k_period`: Time period for building the Fast-K line (between `1` and `100000`)
- `fast_d_period`: Smoothing for making the Fast-D line. Usually set to 3 (between `1` and `100000`)
- `fast_d_moving_average_type` (default `:sma`): Type of Moving Average for Fast-D
---
Outputs
- `fast_k`
- `fast_d`
---
TA-LIB src `TA_STOCHF`
"""
def stochf(params) do
params
|> Executer.new()
|> Executer.load(:high, :double_array)
|> Executer.load(:low, :double_array)
|> Executer.load(:close, :double_array)
|> Executer.load(:fast_k_period, :integer, %{min: 1, max: 100_000})
|> Executer.load(:fast_d_period, :integer, %{min: 1, max: 100_000})
|> Executer.load(:fast_d_moving_average_type, :ma_type, %{default: :sma})
|> Executer.call(&Nif.nif_stochf/6)
end
@dialyzer {:nowarn_function, stochrsi: 1}
@spec stochrsi([
{:values, [number()]}
| {:time_period, pos_integer()}
| {:fast_k_period, pos_integer()}
| {:fast_d_period, pos_integer()}
| {:fast_d_moving_average_type,
:sma | :ema | :wma | :dema | :tema | :trima | :kama | :mama | :t3}
]) :: {:ok, fast_k :: [number() | :nan], fast_d :: [number() | :nan]} | {:error, term()}
@doc """
Stochastic Relative Strength Index
---
Inputs
- `values`
- `time_period` (default `5`): Number of period (between `1` and `100000`)
- `fast_k_period`: Time period for building the Fast-K line (between `1` and `100000`)
- `fast_d_period`: Smoothing for making the Fast-D line. Usually set to 3 (between `1` and `100000`)
- `fast_d_moving_average_type` (default `:sma`): Type of Moving Average for Fast-D
---
Outputs
- `fast_k`
- `fast_d`
---
TA-LIB src `TA_STOCHRSI`
"""
def stochrsi(params) do
params
|> Executer.new()
|> Executer.load(:values, :double_array)
|> Executer.load(:time_period, :integer, %{default: 5, min: 1, max: 100_000})
|> Executer.load(:fast_k_period, :integer, %{min: 1, max: 100_000})
|> Executer.load(:fast_d_period, :integer, %{min: 1, max: 100_000})
|> Executer.load(:fast_d_moving_average_type, :ma_type, %{default: :sma})
|> Executer.call(&Nif.nif_stochrsi/5)
end
@dialyzer {:nowarn_function, sub: 1}
@spec sub([{:values0, [number()]} | {:values1, [number()]}]) ::
{:ok, result :: [number() | :nan]} | {:error, term()}
@doc """
Vector Arithmetic Substraction
---
Inputs
- `values0`
- `values1`
---
Outputs
- `result`
---
TA-LIB src `TA_SUB`
"""
def sub(params) do
params
|> Executer.new()
|> Executer.load(:values0, :double_array)
|> Executer.load(:values1, :double_array)
|> Executer.call(&Nif.nif_sub/2)
end
@dialyzer {:nowarn_function, sum: 1}
@spec sum([{:values, [number()]} | {:time_period, pos_integer()}]) ::
{:ok, result :: [number() | :nan]} | {:error, term()}
@doc """
Summation
---
Inputs
- `values`
- `time_period` (default `5`): Number of period (between `1` and `100000`)
---
Outputs
- `result`
---
TA-LIB src `TA_SUM`
"""
def sum(params) do
params
|> Executer.new()
|> Executer.load(:values, :double_array)
|> Executer.load(:time_period, :integer, %{default: 5, min: 1, max: 100_000})
|> Executer.call(&Nif.nif_sum/2)
end
@dialyzer {:nowarn_function, t3: 1}
@spec t3([{:values, [number()]} | {:time_period, pos_integer()} | {:v_factor, number()}]) ::
{:ok, result :: [number() | :nan]} | {:error, term()}
@doc """
Triple Exponential Moving Average (T3)
---
Inputs
- `values`
- `time_period` (default `5`): Number of period (between `1` and `100000`)
- `v_factor`: Volume Factor (between `0` and `1`)
---
Outputs
- `result`
---
TA-LIB src `TA_T3`
"""
def t3(params) do
params
|> Executer.new()
|> Executer.load(:values, :double_array)
|> Executer.load(:time_period, :integer, %{default: 5, min: 1, max: 100_000})
|> Executer.load(:v_factor, :double, %{min: 0, max: 1})
|> Executer.call(&Nif.nif_t3/3)
end
@dialyzer {:nowarn_function, tan: 1}
@spec tan([{:values, [number()]}]) :: {:ok, result :: [number() | :nan]} | {:error, term()}
@doc """
Vector Trigonometric Tan
---
Inputs
- `values`
---
Outputs
- `result`
---
TA-LIB src `TA_TAN`
"""
def tan(params) do
params
|> Executer.new()
|> Executer.load(:values, :double_array)
|> Executer.call(&Nif.nif_tan/1)
end
@dialyzer {:nowarn_function, tanh: 1}
@spec tanh([{:values, [number()]}]) :: {:ok, result :: [number() | :nan]} | {:error, term()}
@doc """
Vector Trigonometric Tanh
---
Inputs
- `values`
---
Outputs
- `result`
---
TA-LIB src `TA_TANH`
"""
def tanh(params) do
params
|> Executer.new()
|> Executer.load(:values, :double_array)
|> Executer.call(&Nif.nif_tanh/1)
end
@dialyzer {:nowarn_function, tema: 1}
@spec tema([{:values, [number()]} | {:time_period, pos_integer()}]) ::
{:ok, result :: [number() | :nan]} | {:error, term()}
@doc """
Triple Exponential Moving Average
---
Inputs
- `values`
- `time_period` (default `5`): Number of period (between `1` and `100000`)
---
Outputs
- `result`
---
TA-LIB src `TA_TEMA`
"""
def tema(params) do
params
|> Executer.new()
|> Executer.load(:values, :double_array)
|> Executer.load(:time_period, :integer, %{default: 5, min: 1, max: 100_000})
|> Executer.call(&Nif.nif_tema/2)
end
@dialyzer {:nowarn_function, trange: 1}
@spec trange([{:high, [number()]} | {:low, [number()]} | {:close, [number()]}]) ::
{:ok, result :: [number() | :nan]} | {:error, term()}
@doc """
True Range
---
Inputs
- `high`: High Price List
- `low`: Low Price List
- `close`: Close Price List
---
Outputs
- `result`
---
TA-LIB src `TA_TRANGE`
"""
def trange(params) do
params
|> Executer.new()
|> Executer.load(:high, :double_array)
|> Executer.load(:low, :double_array)
|> Executer.load(:close, :double_array)
|> Executer.call(&Nif.nif_trange/3)
end
@dialyzer {:nowarn_function, trima: 1}
@spec trima([{:values, [number()]} | {:time_period, pos_integer()}]) ::
{:ok, result :: [number() | :nan]} | {:error, term()}
@doc """
Triangular Moving Average
---
Inputs
- `values`
- `time_period` (default `5`): Number of period (between `1` and `100000`)
---
Outputs
- `result`
---
TA-LIB src `TA_TRIMA`
"""
def trima(params) do
params
|> Executer.new()
|> Executer.load(:values, :double_array)
|> Executer.load(:time_period, :integer, %{default: 5, min: 1, max: 100_000})
|> Executer.call(&Nif.nif_trima/2)
end
@dialyzer {:nowarn_function, trix: 1}
@spec trix([{:values, [number()]} | {:time_period, pos_integer()}]) ::
{:ok, result :: [number() | :nan]} | {:error, term()}
@doc """
1-day Rate-Of-Change (ROC) of a Triple Smooth EMA
---
Inputs
- `values`
- `time_period` (default `5`): Number of period (between `1` and `100000`)
---
Outputs
- `result`
---
TA-LIB src `TA_TRIX`
"""
def trix(params) do
params
|> Executer.new()
|> Executer.load(:values, :double_array)
|> Executer.load(:time_period, :integer, %{default: 5, min: 1, max: 100_000})
|> Executer.call(&Nif.nif_trix/2)
end
@dialyzer {:nowarn_function, tsf: 1}
@spec tsf([{:values, [number()]} | {:time_period, pos_integer()}]) ::
{:ok, result :: [number() | :nan]} | {:error, term()}
@doc """
Time Series Forecast
---
Inputs
- `values`
- `time_period` (default `5`): Number of period (between `1` and `100000`)
---
Outputs
- `result`
---
TA-LIB src `TA_TSF`
"""
def tsf(params) do
params
|> Executer.new()
|> Executer.load(:values, :double_array)
|> Executer.load(:time_period, :integer, %{default: 5, min: 1, max: 100_000})
|> Executer.call(&Nif.nif_tsf/2)
end
@dialyzer {:nowarn_function, typprice: 1}
@spec typprice([{:high, [number()]} | {:low, [number()]} | {:close, [number()]}]) ::
{:ok, result :: [number() | :nan]} | {:error, term()}
@doc """
Typical Price
---
Inputs
- `high`: High Price List
- `low`: Low Price List
- `close`: Close Price List
---
Outputs
- `result`
---
TA-LIB src `TA_TYPPRICE`
"""
def typprice(params) do
params
|> Executer.new()
|> Executer.load(:high, :double_array)
|> Executer.load(:low, :double_array)
|> Executer.load(:close, :double_array)
|> Executer.call(&Nif.nif_typprice/3)
end
@dialyzer {:nowarn_function, ultosc: 1}
@spec ultosc([
{:high, [number()]}
| {:low, [number()]}
| {:close, [number()]}
| {:time_period1, pos_integer()}
| {:time_period2, pos_integer()}
| {:time_period3, pos_integer()}
]) :: {:ok, result :: [number() | :nan]} | {:error, term()}
@doc """
Ultimate Oscillator
---
Inputs
- `high`: High Price List
- `low`: Low Price List
- `close`: Close Price List
- `time_period1`: Number of bars for 1st period (between `1` and `100000`)
- `time_period2`: Number of bars for 2nd period (between `1` and `100000`)
- `time_period3`: Number of bars for 3rd period (between `1` and `100000`)
---
Outputs
- `result`
---
TA-LIB src `TA_ULTOSC`
"""
def ultosc(params) do
params
|> Executer.new()
|> Executer.load(:high, :double_array)
|> Executer.load(:low, :double_array)
|> Executer.load(:close, :double_array)
|> Executer.load(:time_period1, :integer, %{min: 1, max: 100_000})
|> Executer.load(:time_period2, :integer, %{min: 1, max: 100_000})
|> Executer.load(:time_period3, :integer, %{min: 1, max: 100_000})
|> Executer.call(&Nif.nif_ultosc/6)
end
@dialyzer {:nowarn_function, var: 1}
@spec var([
{:values, [number()]}
| {:time_period, pos_integer()}
| {:number_of_deviations, number()}
]) :: {:ok, result :: [number() | :nan]} | {:error, term()}
@doc """
Variance
---
Inputs
- `values`
- `time_period` (default `5`): Number of period (between `1` and `100000`)
- `number_of_deviations`: Number of deviations
---
Outputs
- `result`
---
TA-LIB src `TA_VAR`
"""
def var(params) do
params
|> Executer.new()
|> Executer.load(:values, :double_array)
|> Executer.load(:time_period, :integer, %{default: 5, min: 1, max: 100_000})
|> Executer.load(:number_of_deviations, :double)
|> Executer.call(&Nif.nif_var/3)
end
@dialyzer {:nowarn_function, wclprice: 1}
@spec wclprice([{:high, [number()]} | {:low, [number()]} | {:close, [number()]}]) ::
{:ok, result :: [number() | :nan]} | {:error, term()}
@doc """
Weighted Close Price
---
Inputs
- `high`: High Price List
- `low`: Low Price List
- `close`: Close Price List
---
Outputs
- `result`
---
TA-LIB src `TA_WCLPRICE`
"""
def wclprice(params) do
params
|> Executer.new()
|> Executer.load(:high, :double_array)
|> Executer.load(:low, :double_array)
|> Executer.load(:close, :double_array)
|> Executer.call(&Nif.nif_wclprice/3)
end
@dialyzer {:nowarn_function, willr: 1}
@spec willr([
{:high, [number()]}
| {:low, [number()]}
| {:close, [number()]}
| {:time_period, pos_integer()}
]) :: {:ok, result :: [number() | :nan]} | {:error, term()}
@doc """
Williams' %R
---
Inputs
- `high`: High Price List
- `low`: Low Price List
- `close`: Close Price List
- `time_period` (default `5`): Number of period (between `1` and `100000`)
---
Outputs
- `result`
---
TA-LIB src `TA_WILLR`
"""
def willr(params) do
params
|> Executer.new()
|> Executer.load(:high, :double_array)
|> Executer.load(:low, :double_array)
|> Executer.load(:close, :double_array)
|> Executer.load(:time_period, :integer, %{default: 5, min: 1, max: 100_000})
|> Executer.call(&Nif.nif_willr/4)
end
@dialyzer {:nowarn_function, wma: 1}
@spec wma([{:values, [number()]} | {:time_period, pos_integer()}]) ::
{:ok, result :: [number() | :nan]} | {:error, term()}
@doc """
Weighted Moving Average
---
Inputs
- `values`
- `time_period` (default `5`): Number of period (between `1` and `100000`)
---
Outputs
- `result`
---
TA-LIB src `TA_WMA`
"""
def wma(params) do
params
|> Executer.new()
|> Executer.load(:values, :double_array)
|> Executer.load(:time_period, :integer, %{default: 5, min: 1, max: 100_000})
|> Executer.call(&Nif.nif_wma/2)
end
end