package trend import ( "github.com/banbox/banbot/config" "github.com/banbox/banbot/strat" ta "github.com/banbox/banta" ) func MACDX(pol *config.RunPolicyConfig) *strat.TradeStrat { return &strat.TradeStrat{ WarmupNum: 220, EachMaxLong: 1, OnBar: func(s *strat.StratJob) { e := s.Env c := e.Close.Get(0) atr := ta.ATR(e.High, e.Low, e.Close, 29).Get(0) macd, macdSig := ta.MACD(e.Close, 12, 26, 9) macdX := macd.Cross(macdSig) maBig := ta.SMA(e.Close, 200).Get(0) isBull := c > maBig kdjK, kdjD, _ := ta.KDJ(e.High, e.Low, e.Close, 30, 5, 5) kdjX := kdjK.Cross(kdjD) if kdjX < 0 { kdjX = -kdjX } rsi := ta.RSI(e.Close, 4).Get(0) - 50 if isBull && rsi < 30 && (macdX == 1 && kdjX <= 3 || macdX > 1 && kdjX == 1) && macd.Get(0) < 0 { s.OpenOrder(&strat.EnterReq{ Tag: "long", StopLossVal: atr * 0.8, TakeProfitVal: atr * 3, }) } else if !isBull && rsi > -30 && (macdX == -1 && kdjX <= 3 || macdX < -1 && kdjX == 1) && macd.Get(0) > 0 { s.OpenOrder(&strat.EnterReq{ Tag: "short", Short: true, StopLossVal: atr * 0.8, TakeProfitVal: atr * 3, }) } }, } }