// 修复后的完整策略代码 // 请勿修改package包名和任意函数名 package llmjob import ( "github.com/banbox/banbot/config" "github.com/banbox/banbot/core" "github.com/banbox/banbot/strat" ta "github.com/banbox/banta" "math" ) func J3127(pol *config.RunPolicyConfig) *strat.TradeStrat { buyThreshold := pol.Def("buyThreshold", 0.025, core.PNorm(0.005, 0.05)) sellThreshold := pol.Def("sellThreshold", 0.025, core.PNorm(0.005, 0.05)) lookbackPeriod := pol.DefInt("lookbackPeriod", 16, core.PNorm(5, 20)) return &strat.TradeStrat{ WarmupNum: lookbackPeriod, HedgeOff: true, EachMaxLong: 1, RunTimeFrames: []string{"15m"}, OnBar: func(s *strat.StratJob) { e := s.Env closePrice := e.Close.Get(0) if math.IsNaN(closePrice) { return } // 修复:使用收盘价计算历史极值 highest := ta.Highest(e.Close, lookbackPeriod).Get(0) lowest := ta.Lowest(e.Close, lookbackPeriod).Get(0) buyTrigger := highest * (1 - buyThreshold) sellTrigger := lowest * (1 + sellThreshold) if closePrice < buyTrigger && len(s.LongOrders) == 0 { s.OpenOrder(&strat.EnterReq{ Tag: "Achat", Short: false, OrderType: core.OrderTypeMarket, }) } if closePrice > sellTrigger && len(s.LongOrders) > 0 { s.CloseOrders(&strat.ExitReq{ Tag: "Vente", Dirt: core.OdDirtLong, Force: true, }) } }, } }