Files
talib/README.md
T
beejay f1c96eaf1d feat(overlap): add advanced overlap studies wrappers and wire TA-Lib symbols
- add TA-Lib function pointer signatures in functions.go for:
  MA, MAMA, MAVP, MIDPOINT, MIDPRICE, SAR, SAREXT, SMA, T3, TEMA, TRIMA, WMA
- register new symbols in Load() via purego.RegisterLibFunc in loader.go
- add public overlap study wrappers in overlap_studies.go with consistent nil-on-failure behavior
- update README overlap studies list to match implemented API
2026-07-27 16:04:46 +09:00

3.4 KiB

talib

Go wrapper for selected TA-Lib functions using purego to dynamically load the native TA-Lib shared library at runtime.

This project currently exposes a focused subset of TA-Lib functions:

Cycle Indicators (Hilbert Transform)

  • HT_DCPERIOD
  • HT_DCPHASE
  • HT_PHASOR
  • HT_SINE
  • HT_TRENDMODE

Math Operators

  • Add, Sub, Mult, Div
  • Max, MaxIndex, Min, MinIndex
  • MinMax, MinMaxIndex
  • Sum

Math Transforms

  • Trigonometric: Cos, Sin, Tan, ACos, ASin, ATan
  • Hyperbolic: CosH, SinH, TanH
  • Exponential/Logarithmic: Exp, Ln, Log10
  • Rounding: Ceil, Floor, Sqrt

Momentum Indicators

  • Directional Movement: ADX, ADXR, DX, MinusDI, MinusDM, PlusDI, PlusDM
  • Oscillators: APO, Aroon, AroonOsc, BOP, CCI, CMO, IMI, MFI, MOM, PPO, RSI, Trix, WillR, UltOsc
  • Rate of Change: ROC, ROCP, ROCR, ROCR100
  • MACD family: MACD, MACDExt, MACDFix
  • Stochastic family: Stoch, StochF, StochRSI

Overlap Studies

  • AccBands, BBands, DEMA, EMA, HT_TRENDLINE, KAMA, MA, MAMA, MAVP, MidPoint, MidPrice, SAR, SARExt, SMA, T3, TEMA, TRIMA, WMA

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. The loader looks for the platform-specific library name:

  • macOS: libta-lib.dylib
  • Linux: libta-lib.so
  • Windows: libta-lib.dll

Lookup order:

  1. $TA_LIB_PATH/<library file>
  2. ./<library file>
  3. /usr/local/lib/<library file>
  4. /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)
	}

	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 nil when the underlying TA-Lib call fails.
  • Native TA-Lib functions are exposed with Go-style exported names such as Add, Div, Max, and Sum.
  • Functions accepting a moving-average type use the MAType constant (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 are nil on failure.

Project status

This is currently a focused wrapper around a limited subset of TA-Lib. Additional indicators can be added by registering more native functions in Load() and exposing Go wrappers for them.