init
This commit is contained in:
59
trend/dv2.go
Normal file
59
trend/dv2.go
Normal file
@@ -0,0 +1,59 @@
|
||||
package trend
|
||||
|
||||
import (
|
||||
"github.com/banbox/banbot/config"
|
||||
"github.com/banbox/banbot/strat"
|
||||
ta "github.com/banbox/banta"
|
||||
)
|
||||
|
||||
/*
|
||||
基于DV2超卖且大均线上方时做多
|
||||
基于RSI4百分位排名超卖,且大均线上方时做多
|
||||
|
||||
效果好于双均线仅做多。
|
||||
|
||||
DV2加入做空部分持续亏钱
|
||||
RSI加入做空变化不大
|
||||
*/
|
||||
|
||||
func DVRSI(p *config.RunPolicyConfig) *strat.TradeStrat {
|
||||
return &strat.TradeStrat{
|
||||
WarmupNum: 100,
|
||||
RunTimeFrames: []string{"4h"},
|
||||
OnBar: func(s *strat.StratJob) {
|
||||
e := s.Env
|
||||
c := e.Close.Get(0)
|
||||
dv := ta.DV2(e.High, e.Low, e.Close, 126, 2).Get(0)
|
||||
sma := ta.SMA(e.Close, 50).Get(0)
|
||||
ma10 := ta.SMA(e.Close, 10).Get(0)
|
||||
rsi := ta.PercentRank(ta.RSI(e.Close, 4), 126).Get(0)
|
||||
atr := ta.ATR(e.High, e.Low, e.Close, 14).Get(0)
|
||||
if len(s.LongOrders) > 0 {
|
||||
if c < ma10 {
|
||||
for _, o := range s.LongOrders {
|
||||
holdNum := e.BarCount(o.EnterAt)
|
||||
if holdNum > 5 {
|
||||
s.CloseOrders(&strat.ExitReq{Tag: "exitL", OrderID: o.ID})
|
||||
}
|
||||
}
|
||||
}
|
||||
} else if len(s.ShortOrders) > 0 {
|
||||
if c > ma10 {
|
||||
for _, o := range s.ShortOrders {
|
||||
holdNum := e.BarCount(o.EnterAt)
|
||||
if holdNum > 5 {
|
||||
s.CloseOrders(&strat.ExitReq{Tag: "exitS", OrderID: o.ID})
|
||||
}
|
||||
}
|
||||
}
|
||||
} else if dv <= 10 && c > sma {
|
||||
s.OpenOrder(&strat.EnterReq{Tag: "long", StopLossVal: atr * 3})
|
||||
} else if rsi < 10 && c > sma {
|
||||
s.OpenOrder(&strat.EnterReq{Tag: "long", StopLossVal: atr * 3})
|
||||
}
|
||||
//else if rsi > 90 && c < sma {
|
||||
// s.OpenOrder(&strat.EnterReq{Tag: "short", Short: true, StopLossVal: atr})
|
||||
//}
|
||||
},
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user