Skip to content

Commit

Permalink
feat(indicator): include indicator module (#178)
Browse files Browse the repository at this point in the history
  • Loading branch information
rodrigo-brito authored Jul 22, 2022
1 parent 0bab420 commit a85bdd9
Show file tree
Hide file tree
Showing 6 changed files with 523 additions and 11 deletions.
6 changes: 3 additions & 3 deletions examples/strategies/emacross.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@ package strategies

import (
"github.com/rodrigo-brito/ninjabot"
"github.com/rodrigo-brito/ninjabot/indicator"
"github.com/rodrigo-brito/ninjabot/service"
"github.com/rodrigo-brito/ninjabot/strategy"

"github.com/markcheno/go-talib"
log "github.com/sirupsen/logrus"
)

Expand All @@ -20,8 +20,8 @@ func (e CrossEMA) WarmupPeriod() int {
}

func (e CrossEMA) Indicators(df *ninjabot.Dataframe) []strategy.ChartIndicator {
df.Metadata["ema8"] = talib.Ema(df.Close, 8)
df.Metadata["sma21"] = talib.Sma(df.Close, 21)
df.Metadata["ema8"] = indicator.EMA(df.Close, 8)
df.Metadata["sma21"] = indicator.SMA(df.Close, 21)

return []strategy.ChartIndicator{
{
Expand Down
5 changes: 3 additions & 2 deletions examples/strategies/ocosell.go
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
package strategies

import (
"github.com/markcheno/go-talib"
"github.com/rodrigo-brito/ninjabot/indicator"
"github.com/rodrigo-brito/ninjabot/model"
"github.com/rodrigo-brito/ninjabot/service"
"github.com/rodrigo-brito/ninjabot/strategy"

"github.com/markcheno/go-talib"
log "github.com/sirupsen/logrus"
)

Expand All @@ -20,7 +21,7 @@ func (e OCOSell) WarmupPeriod() int {
}

func (e OCOSell) Indicators(df *model.Dataframe) []strategy.ChartIndicator {
df.Metadata["stoch"], df.Metadata["stoch_signal"] = talib.Stoch(
df.Metadata["stoch"], df.Metadata["stoch_signal"] = indicator.Stoch(
df.High,
df.Low,
df.Close,
Expand Down
7 changes: 4 additions & 3 deletions examples/strategies/trailingstop.go
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
package strategies

import (
"github.com/markcheno/go-talib"
"github.com/rodrigo-brito/ninjabot"
"github.com/rodrigo-brito/ninjabot/indicator"
"github.com/rodrigo-brito/ninjabot/model"
"github.com/rodrigo-brito/ninjabot/service"
"github.com/rodrigo-brito/ninjabot/strategy"
"github.com/rodrigo-brito/ninjabot/tools"

log "github.com/sirupsen/logrus"
)

Expand Down Expand Up @@ -38,8 +39,8 @@ func (t trailing) WarmupPeriod() int {
}

func (t trailing) Indicators(df *model.Dataframe) []strategy.ChartIndicator {
df.Metadata["ema_fast"] = talib.Ema(df.Close, 8)
df.Metadata["sma_slow"] = talib.Sma(df.Close, 21)
df.Metadata["ema_fast"] = indicator.EMA(df.Close, 8)
df.Metadata["sma_slow"] = indicator.SMA(df.Close, 21)

return nil
}
Expand Down
6 changes: 3 additions & 3 deletions examples/strategies/turtle.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@ package strategies

import (
"github.com/rodrigo-brito/ninjabot"
"github.com/rodrigo-brito/ninjabot/indicator"
"github.com/rodrigo-brito/ninjabot/service"
"github.com/rodrigo-brito/ninjabot/strategy"

"github.com/markcheno/go-talib"
log "github.com/sirupsen/logrus"
)

Expand All @@ -21,8 +21,8 @@ func (e Turtle) WarmupPeriod() int {
}

func (e Turtle) Indicators(df *ninjabot.Dataframe) []strategy.ChartIndicator {
df.Metadata["turtleHighest"] = talib.Max(df.Close, 40)
df.Metadata["turtleLowest"] = talib.Min(df.Close, 20)
df.Metadata["turtleHighest"] = indicator.Max(df.Close, 40)
df.Metadata["turtleLowest"] = indicator.Min(df.Close, 20)

return nil
}
Expand Down
47 changes: 47 additions & 0 deletions indicator/supertrend.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
package indicator

import "github.com/markcheno/go-talib"

func SuperTrend(high, low, close []float64, atrPeriod int, factor float64) []float64 {
atr := talib.Atr(high, low, close, atrPeriod)
basicUpperBand := make([]float64, len(atr))
basicLowerBand := make([]float64, len(atr))
finalUpperBand := make([]float64, len(atr))
finalLowerBand := make([]float64, len(atr))
superTrend := make([]float64, len(atr))

for i := 1; i < len(basicLowerBand); i++ {
basicUpperBand[i] = (high[i]+low[i])/2.0 + atr[i]*factor
basicLowerBand[i] = (high[i]+low[i])/2.0 - atr[i]*factor

if basicUpperBand[i] < finalUpperBand[i-1] ||
close[i-1] > finalUpperBand[i-1] {
finalUpperBand[i] = basicUpperBand[i]
} else {
finalUpperBand[i] = finalUpperBand[i-1]
}

if basicLowerBand[i] > finalLowerBand[i-1] ||
close[i-1] < finalLowerBand[i-1] {
finalLowerBand[i] = basicLowerBand[i]
} else {
finalLowerBand[i] = finalLowerBand[i-1]
}

if finalUpperBand[i-1] == superTrend[i-1] {
if close[i] > finalUpperBand[i] {
superTrend[i] = finalLowerBand[i]
} else {
superTrend[i] = finalUpperBand[i]
}
} else {
if close[i] < finalLowerBand[i] {
superTrend[i] = finalUpperBand[i]
} else {
superTrend[i] = finalLowerBand[i]
}
}
}

return superTrend
}
Loading

0 comments on commit a85bdd9

Please sign in to comment.