Files
talib/README.md
T
beejay e77cd88cd9 feat: expand TA-Lib wrapper with math transform functions
- Add 13 new math transform functions: Cos, Sin, Tan, ACos, ASin, ATan, CosH, SinH, TanH, Ceil, Exp, Floor, Sqrt, Ln, Log10
- Implement proper TA-Lib bindings for all math transform operations
- Add comprehensive documentation comments to all new functions
- Standardize error handling across all wrapper functions using slog.Debug
- Refactor function definitions for consistency and maintainability

The wrapper now exposes a comprehensive set of mathematical operations from TA-Lib,
including trigonometric, hyperbolic, exponential, logarithmic, and rounding functions.
All functions follow the established pattern of vector element-wise transformations.
2026-07-23 11:05:32 +09:00

2.6 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 small 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

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.