Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/femtotrader/TALib.jl

A Julia wrapper for TA-Lib
https://github.com/femtotrader/TALib.jl

julia ta-lib technical-analysis trading wrapper

Last synced: about 2 months ago
JSON representation

A Julia wrapper for TA-Lib

Awesome Lists containing this project

README

        

# TA-Lib

[![Build Status](https://travis-ci.org/femtotrader/TALib.jl.svg?branch=master)](https://travis-ci.org/femtotrader/TALib.jl)
[![Build status](https://ci.appveyor.com/api/projects/status/github/femtotrader/TALib.jl?svg=true&branch=master)](https://ci.appveyor.com/project/femtotrader/talib-jl/branch/master)
[![Coverage Status](https://coveralls.io/repos/femtotrader/TALib.jl/badge.svg?branch=master&service=github)](https://coveralls.io/github/femtotrader/TALib.jl?branch=master)
[![codecov.io](http://codecov.io/github/femtotrader/TALib.jl/coverage.svg?branch=master)](http://codecov.io/github/femtotrader/TALib.jl?branch=master)

A [Julia](http://julialang.org/) wrapper for [TA-Lib](http://ta-lib.org/) (Technical Analysis Library)

## Sample / Features

See [sample.jl](https://github.com/femtotrader/TALib.jl/blob/master/sample.jl)

TALib.jl supports both Array and DataFrames thanks to [multiple dispatch](https://en.wikipedia.org/wiki/Multiple_dispatch).

```julia
julia> using TALib

julia> using DataFrames
julia> filename = "test/ford_2012.csv"
julia> dfOHLCV = readtable(filename)
julia> dfOHLCV[:Date] = Date(dfOHLCV[:Date])
julia> dfOHLCV
250x6 DataFrames.DataFrame
│ Row │ Date │ Open │ High │ Low │ Close │ Volume │
├─────┼────────────┼───────┼───────┼───────┼───────┼───────────┤
│ 1 │ 2012-01-03 │ 11.0 │ 11.25 │ 10.99 │ 11.13 │ 45709900 │
│ 2 │ 2012-01-04 │ 11.15 │ 11.53 │ 11.07 │ 11.3 │ 79725200 │
│ 3 │ 2012-01-05 │ 11.33 │ 11.63 │ 11.24 │ 11.59 │ 67877500 │
│ 4 │ 2012-01-06 │ 11.74 │ 11.8 │ 11.52 │ 11.71 │ 59840700 │
│ 5 │ 2012-01-09 │ 11.83 │ 11.95 │ 11.7 │ 11.8 │ 53981500 │
│ 6 │ 2012-01-10 │ 12.0 │ 12.05 │ 11.63 │ 11.8 │ 121750600 │
│ 7 │ 2012-01-11 │ 11.74 │ 12.18 │ 11.65 │ 12.07 │ 63806000 │
│ 8 │ 2012-01-12 │ 12.16 │ 12.18 │ 11.89 │ 12.14 │ 48687700 │
│ 9 │ 2012-01-13 │ 12.01 │ 12.08 │ 11.84 │ 12.04 │ 46366700 │
│ 10 │ 2012-01-17 │ 12.2 │ 12.26 │ 11.96 │ 12.02 │ 44398400 │
│ 11 │ 2012-01-18 │ 12.03 │ 12.37 │ 12.0 │ 12.34 │ 47102700 │
│ 12 │ 2012-01-19 │ 12.48 │ 12.72 │ 12.43 │ 12.61 │ 70894200 │
│ 13 │ 2012-01-20 │ 12.55 │ 12.64 │ 12.45 │ 12.59 │ 43705700 │
│ 14 │ 2012-01-23 │ 12.69 │ 12.84 │ 12.55 │ 12.66 │ 49379700 │
│ 15 │ 2012-01-24 │ 12.56 │ 12.86 │ 12.46 │ 12.82 │ 45768400 │
│ 16 │ 2012-01-25 │ 12.8 │ 12.98 │ 12.7 │ 12.93 │ 54021600 │
│ 17 │ 2012-01-26 │ 13.03 │ 13.05 │ 12.66 │ 12.79 │ 75470700 │
│ 18 │ 2012-01-27 │ 11.96 │ 12.53 │ 11.79 │ 12.21 │ 142155300 │

│ 232 │ 2012-12-04 │ 11.4 │ 11.44 │ 11.23 │ 11.31 │ 37760200 │
│ 233 │ 2012-12-05 │ 11.32 │ 11.4 │ 11.18 │ 11.31 │ 33152400 │
│ 234 │ 2012-12-06 │ 11.26 │ 11.31 │ 11.19 │ 11.24 │ 31065800 │
│ 235 │ 2012-12-07 │ 11.27 │ 11.5 │ 11.26 │ 11.48 │ 38404500 │
│ 236 │ 2012-12-10 │ 11.41 │ 11.53 │ 11.41 │ 11.47 │ 26025200 │
│ 237 │ 2012-12-11 │ 11.51 │ 11.58 │ 11.4 │ 11.49 │ 36326900 │
│ 238 │ 2012-12-12 │ 11.52 │ 11.56 │ 11.43 │ 11.47 │ 31099900 │
│ 239 │ 2012-12-13 │ 11.46 │ 11.5 │ 11.21 │ 11.27 │ 35443200 │
│ 240 │ 2012-12-14 │ 11.27 │ 11.27 │ 11.03 │ 11.1 │ 36933500 │
│ 241 │ 2012-12-17 │ 11.16 │ 11.41 │ 11.14 │ 11.39 │ 46983300 │
│ 242 │ 2012-12-18 │ 11.48 │ 11.68 │ 11.4 │ 11.67 │ 61810400 │
│ 243 │ 2012-12-19 │ 11.79 │ 11.85 │ 11.62 │ 11.73 │ 54884700 │
│ 244 │ 2012-12-20 │ 11.74 │ 11.8 │ 11.58 │ 11.77 │ 47750100 │
│ 245 │ 2012-12-21 │ 11.55 │ 11.86 │ 11.47 │ 11.86 │ 94489300 │
│ 246 │ 2012-12-24 │ 11.67 │ 12.4 │ 11.67 │ 12.4 │ 91734900 │
│ 247 │ 2012-12-26 │ 12.31 │ 12.79 │ 12.31 │ 12.79 │ 140331900 │
│ 248 │ 2012-12-27 │ 12.79 │ 12.81 │ 12.36 │ 12.76 │ 108315100 │
│ 249 │ 2012-12-28 │ 12.55 │ 12.88 │ 12.52 │ 12.87 │ 95668600 │
│ 250 │ 2012-12-31 │ 12.88 │ 13.08 │ 12.76 │ 12.95 │ 106908900 │
```

![OHLC](screenshots/OHLC.png)

### Moving Average

```julia
julia> indic = MA(dfOHLCV, price=:Close)
250x2 DataFrames.DataFrame
│ Row │ Date │ Value │
├─────┼────────────┼─────────┤
│ 1 │ 2012-01-03 │ NaN │
│ 2 │ 2012-01-04 │ NaN │
│ 3 │ 2012-01-05 │ NaN │
│ 4 │ 2012-01-06 │ NaN │
│ 5 │ 2012-01-09 │ NaN │
│ 6 │ 2012-01-10 │ NaN │
│ 7 │ 2012-01-11 │ NaN │
│ 8 │ 2012-01-12 │ NaN │
│ 9 │ 2012-01-13 │ NaN │
│ 10 │ 2012-01-17 │ NaN │
│ 11 │ 2012-01-18 │ NaN │
│ 12 │ 2012-01-19 │ NaN │
│ 13 │ 2012-01-20 │ NaN │
│ 14 │ 2012-01-23 │ NaN │
│ 15 │ 2012-01-24 │ NaN │
│ 16 │ 2012-01-25 │ NaN │
│ 17 │ 2012-01-26 │ NaN │
│ 18 │ 2012-01-27 │ NaN │

│ 232 │ 2012-12-04 │ 10.8993 │
│ 233 │ 2012-12-05 │ 10.937 │
│ 234 │ 2012-12-06 │ 10.9727 │
│ 235 │ 2012-12-07 │ 11.022 │
│ 236 │ 2012-12-10 │ 11.0653 │
│ 237 │ 2012-12-11 │ 11.102 │
│ 238 │ 2012-12-12 │ 11.139 │
│ 239 │ 2012-12-13 │ 11.1427 │
│ 240 │ 2012-12-14 │ 11.1377 │
│ 241 │ 2012-12-17 │ 11.145 │
│ 242 │ 2012-12-18 │ 11.159 │
│ 243 │ 2012-12-19 │ 11.1693 │
│ 244 │ 2012-12-20 │ 11.193 │
│ 245 │ 2012-12-21 │ 11.225 │
│ 246 │ 2012-12-24 │ 11.274 │
│ 247 │ 2012-12-26 │ 11.3347 │
│ 248 │ 2012-12-27 │ 11.3933 │
│ 249 │ 2012-12-28 │ 11.4667 │
│ 250 │ 2012-12-31 │ 11.546 │

julia> using PyPlot
julia> plot(dfOHLCV[:Date], dfOHLCV[:Close], dfOHLCV[:Date], indic)
```

![MA](screenshots/MA.png)

### Bollinger Bands

```julia
julia> indic = BBANDS(dfOHLCV, price=:Close)
250x4 DataFrames.DataFrame
│ Row │ Date │ UpperBand │ MiddleBand │ LowerBand │
├─────┼────────────┼───────────┼────────────┼───────────┤
│ 1 │ 2012-01-03 │ NaN │ NaN │ NaN │
│ 2 │ 2012-01-04 │ NaN │ NaN │ NaN │
│ 3 │ 2012-01-05 │ NaN │ NaN │ NaN │
│ 4 │ 2012-01-06 │ NaN │ NaN │ NaN │
│ 5 │ 2012-01-09 │ NaN │ NaN │ NaN │
│ 6 │ 2012-01-10 │ NaN │ NaN │ NaN │
│ 7 │ 2012-01-11 │ NaN │ NaN │ NaN │
│ 8 │ 2012-01-12 │ NaN │ NaN │ NaN │
│ 9 │ 2012-01-13 │ NaN │ NaN │ NaN │
│ 10 │ 2012-01-17 │ NaN │ NaN │ NaN │
│ 11 │ 2012-01-18 │ NaN │ NaN │ NaN │
│ 12 │ 2012-01-19 │ NaN │ NaN │ NaN │
│ 13 │ 2012-01-20 │ NaN │ NaN │ NaN │
│ 14 │ 2012-01-23 │ NaN │ NaN │ NaN │
│ 15 │ 2012-01-24 │ NaN │ NaN │ NaN │
│ 16 │ 2012-01-25 │ NaN │ NaN │ NaN │
│ 17 │ 2012-01-26 │ NaN │ NaN │ NaN │
│ 18 │ 2012-01-27 │ NaN │ NaN │ NaN │

│ 232 │ 2012-12-04 │ 11.7437 │ 10.8993 │ 10.055 │
│ 233 │ 2012-12-05 │ 11.7499 │ 10.937 │ 10.1241 │
│ 234 │ 2012-12-06 │ 11.7404 │ 10.9727 │ 10.2049 │
│ 235 │ 2012-12-07 │ 11.7205 │ 11.022 │ 10.3235 │
│ 236 │ 2012-12-10 │ 11.7059 │ 11.0653 │ 10.4247 │
│ 237 │ 2012-12-11 │ 11.7088 │ 11.102 │ 10.4952 │
│ 238 │ 2012-12-12 │ 11.6934 │ 11.139 │ 10.5846 │
│ 239 │ 2012-12-13 │ 11.6991 │ 11.1427 │ 10.5863 │
│ 240 │ 2012-12-14 │ 11.6928 │ 11.1377 │ 10.5825 │
│ 241 │ 2012-12-17 │ 11.7074 │ 11.145 │ 10.5826 │
│ 242 │ 2012-12-18 │ 11.7513 │ 11.159 │ 10.5667 │
│ 243 │ 2012-12-19 │ 11.7896 │ 11.1693 │ 10.549 │
│ 244 │ 2012-12-20 │ 11.848 │ 11.193 │ 10.538 │
│ 245 │ 2012-12-21 │ 11.9126 │ 11.225 │ 10.5374 │
│ 246 │ 2012-12-24 │ 12.0713 │ 11.274 │ 10.4767 │
│ 247 │ 2012-12-26 │ 12.2913 │ 11.3347 │ 10.3781 │
│ 248 │ 2012-12-27 │ 12.4691 │ 11.3933 │ 10.3176 │
│ 249 │ 2012-12-28 │ 12.6315 │ 11.4667 │ 10.3019 │
│ 250 │ 2012-12-31 │ 12.778 │ 11.546 │ 10.314 │

julia> plot(
dfOHLCV[:Date], dfOHLCV[:Close],
dfOHLCV[:Date], indic[:UpperBand],
dfOHLCV[:Date], indic[:MiddleBand],
dfOHLCV[:Date], indic[:LowerBand],
)

```

![BBANDS](screenshots/BBANDS.png)

## Indicators

An `Array` containing `Symbol`s of available TA-Lib indicators can be displayed using:

```julia
julia> INDICATORS
158-element Array{Symbol,1}:
:ACOS
:AD
:ADD
:ADOSC
:ADX
:ADXR
:APO
:AROON
:AROONOSC
:ASIN
:ATAN
:ATR
:AVGPRICE
:BBANDS
:BETA
:BOP
:CCI
:CDL2CROWS
:CDL3BLACKCROWS

:STOCH
:STOCHF
:STOCHRSI
:SUB
:SUM
:T3
:TAN
:TANH
:TEMA
:TRANGE
:TRIMA
:TRIX
:TSF
:TYPPRICE
:ULTOSC
:VAR
:WCLPRICE
:WILLR
:WMA
```

An `OrderedDict` containing properties (required parameters, optional parameters, default values...)
of available TA-Lib indicators can be displayed using:

```julia
julia> D_INDICATORS
DataStructures.OrderedDict{Symbol,Any} with 158 entries:
:ACOS => Dict{AbstractString,Any}("GroupId"=>"Math Transform","CamelCaseName"=>"Acos","OutputArguments"=>[Dict{AbstractString,Any}("Flags"=>Dict{AbstractString,Any}("Flag"=>"Line"…
:AD => Dict{AbstractString,Any}("GroupId"=>"Volume Indicators","CamelCaseName"=>"Ad","OutputArguments"=>[Dict{AbstractString,Any}("Flags"=>Dict{AbstractString,Any}("Flag"=>"Line…
:ADD => Dict{AbstractString,Any}("GroupId"=>"Math Operators","CamelCaseName"=>"Add","OutputArguments"=>[Dict{AbstractString,Any}("Flags"=>Dict{AbstractString,Any}("Flag"=>"Line")…
:ADOSC => Dict{AbstractString,Any}("GroupId"=>"Volume Indicators","CamelCaseName"=>"AdOsc","OutputArguments"=>[Dict{AbstractString,Any}("Flags"=>Dict{AbstractString,Any}("Flag"=>"L…
:ADX => Dict{AbstractString,Any}("GroupId"=>"Momentum Indicators","Flags"=>Dict{AbstractString,Any}("Flag"=>"Unstable Period"),"CamelCaseName"=>"Adx","OutputArguments"=>[Dict{Abs…
:ADXR => Dict{AbstractString,Any}("GroupId"=>"Momentum Indicators","Flags"=>Dict{AbstractString,Any}("Flag"=>"Unstable Period"),"CamelCaseName"=>"Adxr","OutputArguments"=>[Dict{Ab…
:APO => Dict{AbstractString,Any}("GroupId"=>"Momentum Indicators","CamelCaseName"=>"Apo","OutputArguments"=>[Dict{AbstractString,Any}("Flags"=>Dict{AbstractString,Any}("Flag"=>"L…
:AROON => Dict{AbstractString,Any}("GroupId"=>"Momentum Indicators","CamelCaseName"=>"Aroon","OutputArguments"=>Any[Dict{AbstractString,Any}("Flags"=>Dict{AbstractString,Any}("Flag…
:AROONOSC => Dict{AbstractString,Any}("GroupId"=>"Momentum Indicators","CamelCaseName"=>"AroonOsc","OutputArguments"=>[Dict{AbstractString,Any}("Flags"=>Dict{AbstractString,Any}("Flag…
:ASIN => Dict{AbstractString,Any}("GroupId"=>"Math Transform","CamelCaseName"=>"Asin","OutputArguments"=>[Dict{AbstractString,Any}("Flags"=>Dict{AbstractString,Any}("Flag"=>"Line"…
:ATAN => Dict{AbstractString,Any}("GroupId"=>"Math Transform","CamelCaseName"=>"Atan","OutputArguments"=>[Dict{AbstractString,Any}("Flags"=>Dict{AbstractString,Any}("Flag"=>"Line"…
:ATR => Dict{AbstractString,Any}("GroupId"=>"Volatility Indicators","Flags"=>Dict{AbstractString,Any}("Flag"=>"Unstable Period"),"CamelCaseName"=>"Atr","OutputArguments"=>[Dict{A…
:AVGPRICE => Dict{AbstractString,Any}("GroupId"=>"Price Transform","Flags"=>Dict{AbstractString,Any}("Flag"=>"Overlap"),"CamelCaseName"=>"AvgPrice","OutputArguments"=>[Dict{AbstractSt…
:BBANDS => Dict{AbstractString,Any}("GroupId"=>"Overlap Studies","Flags"=>Dict{AbstractString,Any}("Flag"=>"Overlap"),"CamelCaseName"=>"Bbands","OutputArguments"=>Any[Dict{AbstractS…
:BETA => Dict{AbstractString,Any}("GroupId"=>"Statistic Functions","CamelCaseName"=>"Beta","OutputArguments"=>[Dict{AbstractString,Any}("Flags"=>Dict{AbstractString,Any}("Flag"=>"…
:BOP => Dict{AbstractString,Any}("GroupId"=>"Momentum Indicators","CamelCaseName"=>"Bop","OutputArguments"=>[Dict{AbstractString,Any}("Flags"=>Dict{AbstractString,Any}("Flag"=>"L…
:CCI => Dict{AbstractString,Any}("GroupId"=>"Momentum Indicators","CamelCaseName"=>"Cci","OutputArguments"=>[Dict{AbstractString,Any}("Flags"=>Dict{AbstractString,Any}("Flag"=>"L…
:CDL2CROWS => Dict{AbstractString,Any}("GroupId"=>"Pattern Recognition","Flags"=>Dict{AbstractString,Any}("Flag"=>"Candlestick"),"CamelCaseName"=>"Cdl2Crows","OutputArguments"=>[Dict{A…
:CDL3BLACKCROWS => Dict{AbstractString,Any}("GroupId"=>"Pattern Recognition","Flags"=>Dict{AbstractString,Any}("Flag"=>"Candlestick"),"CamelCaseName"=>"Cdl3BlackCrows","OutputArguments"=>[D…
:CDL3INSIDE => Dict{AbstractString,Any}("GroupId"=>"Pattern Recognition","Flags"=>Dict{AbstractString,Any}("Flag"=>"Candlestick"),"CamelCaseName"=>"Cdl3Inside","OutputArguments"=>[Dict{…
:CDL3LINESTRIKE => Dict{AbstractString,Any}("GroupId"=>"Pattern Recognition","Flags"=>Dict{AbstractString,Any}("Flag"=>"Candlestick"),"CamelCaseName"=>"Cdl3LineStrike","OutputArguments"=>[D…
:CDL3OUTSIDE => Dict{AbstractString,Any}("GroupId"=>"Pattern Recognition","Flags"=>Dict{AbstractString,Any}("Flag"=>"Candlestick"),"CamelCaseName"=>"Cdl3Outside","OutputArguments"=>[Dict…
:CDL3STARSINSOUTH => Dict{AbstractString,Any}("GroupId"=>"Pattern Recognition","Flags"=>Dict{AbstractString,Any}("Flag"=>"Candlestick"),"CamelCaseName"=>"Cdl3StarsInSouth","OutputArguments"=>…
:CDL3WHITESOLDIERS => Dict{AbstractString,Any}("GroupId"=>"Pattern Recognition","Flags"=>Dict{AbstractString,Any}("Flag"=>"Candlestick"),"CamelCaseName"=>"Cdl3WhiteSoldiers","OutputArguments"=…
:CDLABANDONEDBABY => Dict{AbstractString,Any}("GroupId"=>"Pattern Recognition","Flags"=>Dict{AbstractString,Any}("Flag"=>"Candlestick"),"CamelCaseName"=>"CdlAbandonedBaby","OutputArguments"=>…
:CDLADVANCEBLOCK => Dict{AbstractString,Any}("GroupId"=>"Pattern Recognition","Flags"=>Dict{AbstractString,Any}("Flag"=>"Candlestick"),"CamelCaseName"=>"CdlAdvanceBlock","OutputArguments"=>[…
:CDLBELTHOLD => Dict{AbstractString,Any}("GroupId"=>"Pattern Recognition","Flags"=>Dict{AbstractString,Any}("Flag"=>"Candlestick"),"CamelCaseName"=>"CdlBeltHold","OutputArguments"=>[Dict…
:CDLBREAKAWAY => Dict{AbstractString,Any}("GroupId"=>"Pattern Recognition","Flags"=>Dict{AbstractString,Any}("Flag"=>"Candlestick"),"CamelCaseName"=>"CdlBreakaway","OutputArguments"=>[Dic…
:CDLCLOSINGMARUBOZU => Dict{AbstractString,Any}("GroupId"=>"Pattern Recognition","Flags"=>Dict{AbstractString,Any}("Flag"=>"Candlestick"),"CamelCaseName"=>"CdlClosingMarubozu","OutputArguments"…
:CDLCONCEALBABYSWALL => Dict{AbstractString,Any}("GroupId"=>"Pattern Recognition","Flags"=>Dict{AbstractString,Any}("Flag"=>"Candlestick"),"CamelCaseName"=>"CdlConcealBabysWall","OutputArguments…
:CDLCOUNTERATTACK => Dict{AbstractString,Any}("GroupId"=>"Pattern Recognition","Flags"=>Dict{AbstractString,Any}("Flag"=>"Candlestick"),"CamelCaseName"=>"CdlCounterAttack","OutputArguments"=>…
:CDLDARKCLOUDCOVER => Dict{AbstractString,Any}("GroupId"=>"Pattern Recognition","Flags"=>Dict{AbstractString,Any}("Flag"=>"Candlestick"),"CamelCaseName"=>"CdlDarkCloudCover","OutputArguments"=…
:CDLDOJI => Dict{AbstractString,Any}("GroupId"=>"Pattern Recognition","Flags"=>Dict{AbstractString,Any}("Flag"=>"Candlestick"),"CamelCaseName"=>"CdlDoji","OutputArguments"=>[Dict{Abs…
:CDLDOJISTAR => Dict{AbstractString,Any}("GroupId"=>"Pattern Recognition","Flags"=>Dict{AbstractString,Any}("Flag"=>"Candlestick"),"CamelCaseName"=>"CdlDojiStar","OutputArguments"=>[Dict…
:CDLDRAGONFLYDOJI => Dict{AbstractString,Any}("GroupId"=>"Pattern Recognition","Flags"=>Dict{AbstractString,Any}("Flag"=>"Candlestick"),"CamelCaseName"=>"CdlDragonflyDoji","OutputArguments"=>…
:CDLENGULFING => Dict{AbstractString,Any}("GroupId"=>"Pattern Recognition","Flags"=>Dict{AbstractString,Any}("Flag"=>"Candlestick"),"CamelCaseName"=>"CdlEngulfing","OutputArguments"=>[Dic…
:CDLEVENINGDOJISTAR => Dict{AbstractString,Any}("GroupId"=>"Pattern Recognition","Flags"=>Dict{AbstractString,Any}("Flag"=>"Candlestick"),"CamelCaseName"=>"CdlEveningDojiStar","OutputArguments"…
:CDLEVENINGSTAR => Dict{AbstractString,Any}("GroupId"=>"Pattern Recognition","Flags"=>Dict{AbstractString,Any}("Flag"=>"Candlestick"),"CamelCaseName"=>"CdlEveningStar","OutputArguments"=>[D…
⋮ => ⋮
```

A `Dict` of functions by group is available using:

```julia
julia> D_GROUPS
Dict{ASCIIString,Array{Symbol,1}} with 10 entries:
"Price Transform" => [:AVGPRICE,:MEDPRICE,:TYPPRICE,:WCLPRICE]
"Momentum Indicators" => [:ADX,:ADXR,:APO,:AROON,:AROONOSC,:BOP,:CCI,:CMO,:DX,:MACD … :ROCP,:ROCR,:ROCR100,:RSI,:STOCH,:STOCHF,:STOCHRSI,:TRIX,:ULTOSC,:WILLR]
"Statistic Functions" => [:BETA,:CORREL,:LINEARREG,:LINEARREG_ANGLE,:LINEARREG_INTERCEPT,:LINEARREG_SLOPE,:STDDEV,:TSF,:VAR]
"Volatility Indicators" => [:ATR,:NATR,:TRANGE]
"Overlap Studies" => [:BBANDS,:DEMA,:EMA,:HT_TRENDLINE,:KAMA,:MA,:MAMA,:MAVP,:MIDPOINT,:MIDPRICE,:SAR,:SAREXT,:SMA,:T3,:TEMA,:TRIMA,:WMA]
"Math Transform" => [:ACOS,:ASIN,:ATAN,:CEIL,:COS,:COSH,:EXP,:FLOOR,:LN,:LOG10,:SIN,:SINH,:SQRT,:TAN,:TANH]
"Cycle Indicators" => [:HT_DCPERIOD,:HT_DCPHASE,:HT_PHASOR,:HT_SINE,:HT_TRENDMODE]
"Pattern Recognition" => [:CDL2CROWS,:CDL3BLACKCROWS,:CDL3INSIDE,:CDL3LINESTRIKE,:CDL3OUTSIDE,:CDL3STARSINSOUTH,:CDL3WHITESOLDIERS,:CDLABANDONEDBABY,:CDLADVANCEBLOCK,:CDLBELTHOLD … :CDLSPINN…
"Volume Indicators" => [:AD,:ADOSC,:OBV]
"Math Operators" => [:ADD,:DIV,:MAX,:MAXINDEX,:MIN,:MININDEX,:MINMAX,:MINMAXINDEX,:MULT,:SUB,:SUM]
```

Description of all indicators

```julia
for (func, info) in D_INDICATORS
descr = info["ShortDescription"]
println("|$func|$descr|")
end
```

should display

|Name |Short description|
|--------|-----------------|
|ACOS|Vector Trigonometric ACos|
|AD|Chaikin A/D Line|
|ADD|Vector Arithmetic Add|
|ADOSC|Chaikin A/D Oscillator|
|ADX|Average Directional Movement Index|
|ADXR|Average Directional Movement Index Rating|
|APO|Absolute Price Oscillator|
|AROON|Aroon|
|AROONOSC|Aroon Oscillator|
|ASIN|Vector Trigonometric ASin|
|ATAN|Vector Trigonometric ATan|
|ATR|Average True Range|
|AVGPRICE|Average Price|
|BBANDS|Bollinger Bands|
|BETA|Beta|
|BOP|Balance Of Power|
|CCI|Commodity Channel Index|
|CDL2CROWS|Two Crows|
|CDL3BLACKCROWS|Three Black Crows|
|CDL3INSIDE|Three Inside Up/Down|
|CDL3LINESTRIKE|Three-Line Strike |
|CDL3OUTSIDE|Three Outside Up/Down|
|CDL3STARSINSOUTH|Three Stars In The South|
|CDL3WHITESOLDIERS|Three Advancing White Soldiers|
|CDLABANDONEDBABY|Abandoned Baby|
|CDLADVANCEBLOCK|Advance Block|
|CDLBELTHOLD|Belt-hold|
|CDLBREAKAWAY|Breakaway|
|CDLCLOSINGMARUBOZU|Closing Marubozu|
|CDLCONCEALBABYSWALL|Concealing Baby Swallow|
|CDLCOUNTERATTACK|Counterattack|
|CDLDARKCLOUDCOVER|Dark Cloud Cover|
|CDLDOJI|Doji|
|CDLDOJISTAR|Doji Star|
|CDLDRAGONFLYDOJI|Dragonfly Doji|
|CDLENGULFING|Engulfing Pattern|
|CDLEVENINGDOJISTAR|Evening Doji Star|
|CDLEVENINGSTAR|Evening Star|
|CDLGAPSIDESIDEWHITE|Up/Down-gap side-by-side white lines|
|CDLGRAVESTONEDOJI|Gravestone Doji|
|CDLHAMMER|Hammer|
|CDLHANGINGMAN|Hanging Man|
|CDLHARAMI|Harami Pattern|
|CDLHARAMICROSS|Harami Cross Pattern|
|CDLHIGHWAVE|High-Wave Candle|
|CDLHIKKAKE|Hikkake Pattern|
|CDLHIKKAKEMOD|Modified Hikkake Pattern|
|CDLHOMINGPIGEON|Homing Pigeon|
|CDLIDENTICAL3CROWS|Identical Three Crows|
|CDLINNECK|In-Neck Pattern|
|CDLINVERTEDHAMMER|Inverted Hammer|
|CDLKICKING|Kicking|
|CDLKICKINGBYLENGTH|Kicking - bull/bear determined by the longer marubozu|
|CDLLADDERBOTTOM|Ladder Bottom|
|CDLLONGLEGGEDDOJI|Long Legged Doji|
|CDLLONGLINE|Long Line Candle|
|CDLMARUBOZU|Marubozu|
|CDLMATCHINGLOW|Matching Low|
|CDLMATHOLD|Mat Hold|
|CDLMORNINGDOJISTAR|Morning Doji Star|
|CDLMORNINGSTAR|Morning Star|
|CDLONNECK|On-Neck Pattern|
|CDLPIERCING|Piercing Pattern|
|CDLRICKSHAWMAN|Rickshaw Man|
|CDLRISEFALL3METHODS|Rising/Falling Three Methods|
|CDLSEPARATINGLINES|Separating Lines|
|CDLSHOOTINGSTAR|Shooting Star|
|CDLSHORTLINE|Short Line Candle|
|CDLSPINNINGTOP|Spinning Top|
|CDLSTALLEDPATTERN|Stalled Pattern|
|CDLSTICKSANDWICH|Stick Sandwich|
|CDLTAKURI|Takuri (Dragonfly Doji with very long lower shadow)|
|CDLTASUKIGAP|Tasuki Gap|
|CDLTHRUSTING|Thrusting Pattern|
|CDLTRISTAR|Tristar Pattern|
|CDLUNIQUE3RIVER|Unique 3 River|
|CDLUPSIDEGAP2CROWS|Upside Gap Two Crows|
|CDLXSIDEGAP3METHODS|Upside/Downside Gap Three Methods|
|CEIL|Vector Ceil|
|CMO|Chande Momentum Oscillator|
|CORREL|Pearson's Correlation Coefficient (r)|
|COS|Vector Trigonometric Cos|
|COSH|Vector Trigonometric Cosh|
|DEMA|Double Exponential Moving Average|
|DIV|Vector Arithmetic Div|
|DX|Directional Movement Index|
|EMA|Exponential Moving Average|
|EXP|Vector Arithmetic Exp|
|FLOOR|Vector Floor|
|HT_DCPERIOD|Hilbert Transform - Dominant Cycle Period|
|HT_DCPHASE|Hilbert Transform - Dominant Cycle Phase|
|HT_PHASOR|Hilbert Transform - Phasor Components|
|HT_SINE|Hilbert Transform - SineWave|
|HT_TRENDLINE|Hilbert Transform - Instantaneous Trendline|
|HT_TRENDMODE|Hilbert Transform - Trend vs Cycle Mode|
|KAMA|Kaufman Adaptive Moving Average|
|LINEARREG|Linear Regression|
|LINEARREG_ANGLE|Linear Regression Angle|
|LINEARREG_INTERCEPT|Linear Regression Intercept|
|LINEARREG_SLOPE|Linear Regression Slope|
|LN|Vector Log Natural|
|LOG10|Vector Log10|
|MA|Moving average|
|MACD|Moving Average Convergence/Divergence|
|MACDEXT|MACD with controllable MA type|
|MACDFIX|Moving Average Convergence/Divergence Fix 12/26|
|MAMA|MESA Adaptive Moving Average|
|MAVP|Moving average with variable period|
|MAX|Highest value over a specified period|
|MAXINDEX|Index of highest value over a specified period|
|MEDPRICE|Median Price|
|MFI|Money Flow Index|
|MIDPOINT|MidPoint over period|
|MIDPRICE|Midpoint Price over period|
|MIN|Lowest value over a specified period|
|MININDEX|Index of lowest value over a specified period|
|MINMAX|Lowest and highest values over a specified period|
|MINMAXINDEX|Indexes of lowest and highest values over a specified period|
|MINUS_DI|Minus Directional Indicator|
|MINUS_DM|Minus Directional Movement|
|MOM|Momentum|
|MULT|Vector Arithmetic Mult|
|NATR|Normalized Average True Range|
|OBV|On Balance Volume|
|PLUS_DI|Plus Directional Indicator|
|PLUS_DM|Plus Directional Movement|
|PPO|Percentage Price Oscillator|
|ROC|Rate of change : ((price/prevPrice)-1)*100|
|ROCP|Rate of change Percentage: (price-prevPrice)/prevPrice|
|ROCR|Rate of change ratio: (price/prevPrice)|
|ROCR100|Rate of change ratio 100 scale: (price/prevPrice)*100|
|RSI|Relative Strength Index|
|SAR|Parabolic SAR|
|SAREXT|Parabolic SAR - Extended|
|SIN|Vector Trigonometric Sin|
|SINH|Vector Trigonometric Sinh|
|SMA|Simple Moving Average|
|SQRT|Vector Square Root|
|STDDEV|Standard Deviation|
|STOCH|Stochastic|
|STOCHF|Stochastic Fast|
|STOCHRSI|Stochastic Relative Strength Index|
|SUB|Vector Arithmetic Substraction|
|SUM|Summation|
|T3|Triple Exponential Moving Average (T3)|
|TAN|Vector Trigonometric Tan|
|TANH|Vector Trigonometric Tanh|
|TEMA|Triple Exponential Moving Average|
|TRANGE|True Range|
|TRIMA|Triangular Moving Average|
|TRIX|1-day Rate-Of-Change (ROC) of a Triple Smooth EMA|
|TSF|Time Series Forecast|
|TYPPRICE|Typical Price|
|ULTOSC|Ultimate Oscillator|
|VAR|Variance|
|WCLPRICE|Weighted Close Price|
|WILLR|Williams' %R|
|WMA|Weighted Moving Average|

## Development

See discussion and roadmap here:
- https://github.com/femtotrader/TALib.jl/issues/1

- There is 3 levels of functions

- level 0: raw C TA-Lib function calls
- level 1: function with Julia `Array`s as inputs / outputs
- level 2: more high level functions with

- `DataFrame` (from [DataFrames.jl](http://dataframesjl.readthedocs.io/)) as inputs / outputs
- `TimeArray` (from [TimeSeries.jl](http://timeseriesjl.readthedocs.io/)) as inputs / outputs