Complete the TA-Lib candlestick pattern recognition coverage by adding the second half of the Cdl* function family. New functions in pattern_recognitions.go (all return []int32, OHLC inputs): CdlLadderBottom, CdlLongLeggedDoji, CdlLongLine, CdlMarubozu, CdlMatchingLow, CdlMatHold(penetration), CdlMorningDojiStar(penetration), CdlMorningStar(penetration), CdlOnNeck, CdlPiercing, CdlRickshawMan, CdlRiseFall3Methods, CdlSeparatingLines, CdlShootingStar, CdlShortLine, CdlSpinningTop, CdlStalledPattern, CdlStickSandwich, CdlTakuri, CdlTasukiGap, CdlThrusting, CdlTristar, CdlUnique3River, CdlUpsideGap2Crows, CdlXSideGap3Methods Supporting changes: - functions.go: add 25 C function pointer declarations (TA_CDL* signatures) - loader.go: register all 25 new symbols via purego.RegisterLibFunc in Load() - cli/main.go: extend smoke harness to exercise all new wrappers - README.md: document all new patterns in the Pattern Recognition section
3.9 KiB
talib
Go wrapper for all TA-Lib functions using purego to dynamically load the native TA-Lib shared library at runtime.
This package exposes the complete TA-Lib function set across these categories:
- Cycle Indicators: Hilbert Transform (
HT_*) - Math Operators: Vector operations (Add, Sub, Mult, Div, Max, Min, Sum, etc.)
- Math Transforms: Trigonometric, hyperbolic, exponential, and rounding functions
- Momentum Indicators: ADX, MACD, RSI, Stoch, Aroon, oscillators, ROC, directional movement
- Overlap Studies: Moving averages and bands (EMA, SMA, BBands, KAMA, MAMA, SAR, etc.)
- Price Transforms: Per-bar price composites (AvgPrice, TypPrice, WCLPrice, etc.)
- Statistic Functions: Regression, correlation, and dispersion (Beta, Correl, LinearReg*, StdDev, Var)
- Volatility Indicators: ATR, NATR, TRANGE
- Volume Indicators: AD, ADOsc, CMF, OBV, PVI, PVO
- Pattern Recognition: 61 candlestick patterns (
Cdl*)
For a complete function reference with descriptions, see TA-Lib's official function list.
Requirements
- Go
1.26 - A native TA-Lib shared library installed on the host system
This package does not bundle TA-Lib itself. You must install the native library separately.
How library loading works
Call talib.Load() once before using any indicator function. After loading, you can call talib.Version() to read the native TA-Lib version string. The loader looks for the platform-specific library name:
- macOS:
libta-lib.dylib - Linux:
libta-lib.so - Windows:
libta-lib.dll
Lookup order:
$TA_LIB_PATH/<library file>./<library file>/usr/local/lib/<library file>/usr/lib/<library file>
Installing TA-Lib
macOS
If you use Homebrew:
brew install ta-lib
If the library is installed outside the default lookup paths, set:
export TA_LIB_PATH=/path/to/lib
Linux
Install TA-Lib with your package manager if available, or build it from source and place the shared library in a standard library directory such as /usr/local/lib.
Windows
Install the TA-Lib DLL and make sure libta-lib.dll is reachable through TA_LIB_PATH or from the current working directory.
Usage
package main
import (
"fmt"
"log"
"math"
"beejay.kim/lib/talib"
)
func main() {
if _, err := talib.Load(); err != nil {
log.Fatal(err)
}
fmt.Println("TA-Lib version:", talib.Version())
var series []float64
for i := 0; i < 100; i++ {
series = append(series, math.Sin(float64(i)/7)*4.5+math.Cos(float64(i)/19)*1.75)
}
period := talib.HT_DCPERIOD(series)
fmt.Println(period)
sum := talib.Add(series, series)
fmt.Println(sum)
rollingMax := talib.Max(series, 14)
fmt.Println(rollingMax)
}
API notes
- Indicator functions return
nilwhen the underlying TA-Lib call fails. Version()returns the TA-Lib version string exposed byTA_GetVersionString(call afterLoad()).- Native TA-Lib functions are exposed with Go-style exported names such as
Add,Div,Max, andSum. - Functions accepting a moving-average type use the
MATypeconstant (MA_SMA,MA_EMA,MA_WMA,MA_DEMA,MA_TEMA,MA_TRIMA,MA_KAMA,MA_MAMA,MA_T3). - Functions returning multiple outputs (e.g.
Aroon,MACD,Stoch) return multiple slices; all arenilon failure. - Pattern-recognition functions (
Cdl*) return[]int32signals; typical values are-100(bearish),0(no pattern), and100(bullish).
Project status
This wrapper provides complete coverage of the TA-Lib function library. All ~100 indicators across 10 function categories are exposed with Go-idiomatic APIs. New versions of TA-Lib may introduce additional functions; updating this wrapper requires adding function pointer declarations in functions.go, registering them in loader.go, and exposing Go wrappers in the appropriate *_indicators.go file.