51 lines
1.1 KiB
Go
51 lines
1.1 KiB
Go
package trend
|
|
|
|
import (
|
|
"github.com/banbox/banbot/config"
|
|
"github.com/banbox/banbot/strat"
|
|
ta "github.com/banbox/banta"
|
|
)
|
|
|
|
func rsi_macd(p *config.RunPolicyConfig) *strat.TradeStrat {
|
|
return &strat.TradeStrat{
|
|
WarmupNum: 100,
|
|
OnBar: func(s *strat.StratJob) {
|
|
e := s.Env
|
|
rsi := ta.RSI(e.Close, 2).Get(0)
|
|
sml := ta.SMA(e.Close, 5).Get(0)
|
|
big := ta.SMA(e.Close, 20).Get(0)
|
|
if len(s.LongOrders) > 0 {
|
|
for _, od := range s.LongOrders {
|
|
barNum := e.BarCount(od.EnterAt)
|
|
if barNum > 5 {
|
|
s.CloseOrders(&strat.ExitReq{
|
|
Tag: "exitL",
|
|
OrderID: od.ID,
|
|
})
|
|
}
|
|
}
|
|
} else if rsi <= 10 && sml > big {
|
|
s.OpenOrder(&strat.EnterReq{
|
|
Tag: "long",
|
|
})
|
|
}
|
|
if len(s.ShortOrders) > 0 {
|
|
for _, od := range s.ShortOrders {
|
|
barNum := e.BarCount(od.EnterAt)
|
|
if barNum > 5 {
|
|
s.CloseOrders(&strat.ExitReq{
|
|
Tag: "exitS",
|
|
OrderID: od.ID,
|
|
})
|
|
}
|
|
}
|
|
} else if rsi >= 90 && sml < big {
|
|
s.OpenOrder(&strat.EnterReq{
|
|
Tag: "short",
|
|
Short: true,
|
|
})
|
|
}
|
|
},
|
|
}
|
|
}
|