72 lines
1.7 KiB
Go
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)
|
|
}
|
|
},
|
|
}
|
|
}
|