beejay e0715fb3e3 feat: add math operator wrappers and align TA-Lib binding types
Add Go wrappers for additional TA-Lib math operators:
Div, Max, MaxIndex, Min, MinIndex, MinMax, MinMaxIndex, Mult, Sub, and Sum.

Refactor the TA-Lib function signatures to use int32 consistently,
including taResult and Hilbert Transform bindings, so the Go layer
matches the native library more closely.

Fix HT_TRENDMODE to return []int32 and update related comments and
naming for better API consistency.
2026-07-22 17:18:22 +09:00
2026-07-22 15:40:16 +09:00
2026-07-22 15:40:16 +09:00
2026-07-22 15:40:16 +09:00

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 small subset of TA-Lib functions:

  • HT_DCPERIOD
  • HT_DCPHASE
  • HT_PHASOR
  • HT_SINE
  • HT_TRENDMODE
  • Add
  • Div
  • Max
  • MaxIndex
  • Min
  • MinIndex
  • MinMax
  • MinMaxIndex
  • Mult
  • Sub
  • Sum

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.

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.

S
Description
TA-Lib for Go - easy to use, cross platform, without Cgo
https://beejay.kim/lib/talib
Readme
157 KiB
Languages
Go 100%