sdcoffey / techan

Technical Analysis Library for Golang
https://godoc.org/github.com/sdcoffey/techan
MIT License
836 stars 142 forks source link
bitcoin cryptocurrency go golang stock stock-market technical-analysis trading-bot trading-strategies

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

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

fmt.Println(movingAverage.Calculate(0).FormattedString(2))

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.