sdcoffey
techan
Go

Technical Analysis Library for Golang

Last updated Jul 8, 2026
904
Stars
155
Forks
17
Issues
0
Stars/day
Attention Score
72
Language breakdown
No language data available.
Files click to expand
README

Techan

codecov

TechAn is a technical analysis library for Go! It provides a suite of tools and frameworks to analyze financial data and make trading decisions.

Features

  • Basic and advanced technical analysis indicators
  • Profit and trade analysis
  • Strategy building

Installation

$ go get github.com/sdcoffey/techan

Quickstart

series := techan.NewTimeSeries()

// fetch this from your preferred exchange dataset := [][]string{ // Timestamp, Open, Close, High, Low, volume {"1234567", "1", "2", "3", "5", "6"}, }

for _, datum := range dataset { start, _ := strconv.ParseInt(datum[0], 10, 64) period := techan.NewTimePeriod(time.Unix(start, 0), time.Hour*24)

candle := techan.NewCandle(period) candle.OpenPrice = big.NewFromString(datum[1]) candle.ClosePrice = big.NewFromString(datum[2]) candle.MaxPrice = big.NewFromString(datum[3]) candle.MinPrice = big.NewFromString(datum[4])

series.AddCandle(candle) }

closePrices := techan.NewClosePriceIndicator(series) movingAverage := techan.NewEMAIndicator(closePrices, 10) // Create an exponential moving average with a window of 10

if series.LastIndex() >= 9 { fmt.Println(movingAverage.Calculate(series.LastIndex()).FormattedString(2)) }

Windowed indicators such as SMA and EMA return 0 until enough data exists to fill their first window. For example, a 10-period EMA starts producing calculated values at index 9.

Creating trading strategies

indicator := techan.NewClosePriceIndicator(series)

// record trades on this object record := techan.NewTradingRecord()

entryConstant := techan.NewConstantIndicator(30) exitConstant := techan.NewConstantIndicator(10)

// Is satisfied when the price ema moves above 30 and the current position is new entryRule := techan.And( techan.NewCrossUpIndicatorRule(entryConstant, indicator), techan.PositionNewRule{}) // Is satisfied when the price ema moves below 10 and the current position is open exitRule := techan.And( techan.NewCrossDownIndicatorRule(indicator, exitConstant), techan.PositionOpenRule{})

strategy := techan.RuleStrategy{ UnstablePeriod: 10, // Period before which ShouldEnter and ShouldExit will always return false EntryRule: entryRule, ExitRule: exitRule, }

strategy.ShouldEnter(0, record) // returns false

Enjoying this project?

Are you using techan in production? You can sponsor its development by buying me a coffee! ☕

ETH: 0x2D9d3A1c16F118A3a59d0e446d574e1F01F62949

Credits

Techan is heavily influenced by the great ta4j. Many of the ideas and frameworks in this library owe their genesis to the great work done over there.

License

Techan is released under the MIT license. See LICENSE for details.

🔗 More in this category

© 2026 GitRepoTrend · sdcoffey/techan · Updated daily from GitHub