Files
banstagy/old/ped.go
2026-08-24 20:53:21 +08:00

72 lines
1.7 KiB
Go

package old
import (
"github.com/banbox/banbot/config"
"github.com/banbox/banbot/core"
"github.com/banbox/banbot/strat"
ta "github.com/banbox/banta"
)
type pedSta struct {
bigDirt int
midRsi float64
}
func Ped(pol *config.RunPolicyConfig) *strat.TradeStrat {
lenAtr := int(pol.Def("atr", 20, core.PNorm(7, 40)))
baseAtrLen := int(float64(lenAtr) * 4.3)
return &strat.TradeStrat{
WarmupNum: 100,
OnPairInfos: func(s *strat.StratJob) []*strat.PairSub {
return []*strat.PairSub{
{"_cur_", "15m", 100},
{"_cur_", "1h", 205},
}
},
OnStartUp: func(s *strat.StratJob) {
s.More = &pedSta{}
},
OnBar: func(s *strat.StratJob) {
m, _ := s.More.(*pedSta)
e := s.Env
c := e.Close.Get(0)
atr := ta.ATR(e.High, e.Low, e.Close, lenAtr)
atrBase := ta.Lowest(ta.Highest(atr, lenAtr), baseAtrLen).Get(0)
maBig := ta.SMA(e.Close, 10).Get(0)
rsi := ta.RSI(e.Close, 14).Get(0)
if s.OrderNum > 0 {
return
}
if m.bigDirt > 0 && m.midRsi < 70 && c > maBig && rsi > 70 {
s.OpenOrder(&strat.EnterReq{
Tag: "long",
StopLossVal: atrBase,
TakeProfitVal: atrBase * 7,
})
} else if m.bigDirt < 0 && m.midRsi > 30 && c < maBig && rsi < 30 {
s.OpenOrder(&strat.EnterReq{
Tag: "short",
Short: true,
StopLossVal: atrBase,
TakeProfitVal: atrBase * 7,
})
}
},
OnInfoBar: func(s *strat.StratJob, e *ta.BarEnv, pair, tf string) {
m, _ := s.More.(*pedSta)
if tf == "1h" {
maSml := ta.SMA(e.Close, 20).Get(0)
maBig := ta.SMA(e.Close, 100).Get(0)
if maSml > maBig {
m.bigDirt = 1
} else {
m.bigDirt = -1
}
} else {
// 15m
m.midRsi = ta.RSI(e.Close, 14).Get(0)
}
},
}
}