This commit is contained in:
2026-08-24 20:53:21 +08:00
commit 6e78bba16a
287 changed files with 32443 additions and 0 deletions

88
llmjob/5115.go Normal file
View File

@@ -0,0 +1,88 @@
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 J5115(pol *config.RunPolicyConfig) *strat.TradeStrat {
// 定义可调超参数
fastPeriod := pol.DefInt("fastPeriod", 11, core.PNorm(3, 15))
maRate := pol.Def("maRate", 4.4, core.PNorm(2.0, 8.0))
atrPeriod := pol.DefInt("atrPeriod", 14, core.PNorm(7, 30))
slMultiplier := pol.Def("slMultiplier", 1.3, core.PNorm(1.0, 5.0))
// 计算长期均线周期
longPeriod := int(float64(fastPeriod) * maRate)
// 确保预热足够长以覆盖所有指标
warmup := longPeriod + atrPeriod + 50
return &strat.TradeStrat{
Name: "Moving-Average-Convergence-Momentum-Cloud-Strategy",
WarmupNum: warmup,
HedgeOff: true, // 单向持仓
DrawDownExit: false,
RunTimeFrames: []string{"8h"},
OnBar: func(s *strat.StratJob) {
e := s.Env
close := e.Close
// 计算SMA
maShort := ta.SMA(close, fastPeriod)
maLong := ta.SMA(close, longPeriod)
cross := maShort.Cross(maLong)
// 计算ATR用于止损
atr := ta.ATR(e.High, e.Low, close, atrPeriod)
atrVal := atr.Get(0)
// RSI仅用于展示,不参与信号过滤
_ = ta.RSI(close, 14) // 保留调用但不用于条件判断
currentPrice := close.Get(0)
if math.IsNaN(currentPrice) || math.IsNaN(atrVal) {
return
}
// 买入信号:SMA上穿(无RSI过滤)
if cross == 1 {
s.OpenOrder(&strat.EnterReq{
Tag: "Buy",
StopLossVal: atrVal * slMultiplier,
StopLossTag: "atr_sl",
})
s.CloseOrders(&strat.ExitReq{
Tag: "ExitShort",
Dirt: core.OdDirtShort,
})
}
// 卖出信号:SMA下穿
if cross == -1 {
s.OpenOrder(&strat.EnterReq{
Tag: "sell",
Short: true,
StopLossVal: atrVal * slMultiplier,
StopLossTag: "atr_sl",
})
s.CloseOrders(&strat.ExitReq{
Tag: "exitLong",
Dirt: core.OdDirtLong,
})
}
// 可选:计算并保留其他指标用于分析或未来扩展
// bbU, bbM, bbL := ta.BBANDS(close, 20, 2, 2)
// tenkan := ta.SMA(ta.HL2(e.High, e.Low), 9)
// kijun := ta.SMA(ta.HL2(e.High, e.Low), 26)
// senkouA := ta.SMA(ta.Add(tenkan, kijun).Div(2), 26)
// senkouB := ta.SMA(ta.HL2(e.High, e.Low), 52)
// momentum := close.Sub(close.Back(1))
// roc := close.Sub(close.Back(12)).Div(close.Back(12)).Mul(100)
},
}
}