package llmjob import ( "github.com/banbox/banbot/config" "github.com/banbox/banbot/core" "github.com/banbox/banbot/strat" ta "github.com/banbox/banta" ) func J1357(pol *config.RunPolicyConfig) *strat.TradeStrat { fastLength := pol.DefInt("fastLength", 16, core.PNorm(5, 20)) slowLength := pol.DefInt("slowLength", 26, core.PNorm(15, 50)) signalLength := pol.DefInt("signalLength", 9, core.PNorm(5, 15)) return &strat.TradeStrat{ WarmupNum: slowLength + signalLength, EachMaxLong: 3, EachMaxShort: 3, HedgeOff: true, RunTimeFrames: []string{"8h"}, OnBar: func(s *strat.StratJob) { e := s.Env // 计算MACD指标 macd, signal := ta.MACD(e.Close, fastLength, slowLength, signalLength) // 检测MACD线与信号线的交叉 buySignal := macd.Cross(signal) sellSignal := signal.Cross(macd) // 买入信号:MACD线上穿信号线 if buySignal == 1 { // 开多单 s.OpenOrder(&strat.EnterReq{ Tag: "Long Trigger", }) // 平空单 s.CloseOrders(&strat.ExitReq{ Tag: "Close Short Trigger", Dirt: core.OdDirtShort, }) } // 卖出信号:MACD线下穿信号线 if sellSignal == 1 { // 开空单 s.OpenOrder(&strat.EnterReq{ Tag: "Short Trigger", Short: true, }) // 平多单 s.CloseOrders(&strat.ExitReq{ Tag: "Close Long Trigger", Dirt: core.OdDirtLong, }) } }, } }