Files
banstagy/llmjob/6697.go
2026-08-24 20:53:21 +08:00

61 lines
2.0 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package llmjob
import (
"github.com/banbox/banbot/config"
"github.com/banbox/banbot/core"
"github.com/banbox/banbot/strat"
ta "github.com/banbox/banta"
)
func J6697(pol *config.RunPolicyConfig) *strat.TradeStrat {
// 定义可调超参数
periodK := pol.DefInt("periodK", 13, core.PNorm(5, 30))
smoothK := pol.DefInt("smoothK", 5, core.PNorm(2, 8))
periodD := pol.DefInt("periodD", 2, core.PNorm(2, 5))
tpTicks := pol.DefInt("tpTicks", 100, core.PNorm(10, 500)) // 固定tick止盈
overboughtLevel := pol.DefInt("overboughtLevel", 80, core.PNorm(70, 90))
oversoldLevel := 100 - overboughtLevel // 自动计算超卖水平
return &strat.TradeStrat{
WarmupNum: periodK + smoothK + periodD + 10, // 确保足够的数据计算指标
HedgeOff: true, // 启用单向持仓模式
EachMaxLong: 100, // 对应pyramiding=100
EachMaxShort: 100, // 对应pyramiding=100
TimeFrames: "8h",
OnBar: func(s *strat.StratJob) {
e := s.Env
// 计算KDJ指标,返回[K, D, RSV]
k, d, _ := ta.KDJ(e.High, e.Low, e.Close, periodK, smoothK, periodD)
// 获取最新值
kVal := k.Get(0)
// 计算交叉信号
kdCross := k.Cross(d) // 1:上穿, -1:下穿, 0:重合
// 使用ATR作为动态止盈参考
atr := ta.ATR(e.High, e.Low, e.Close, 14)
// 做多条件:K线上穿D线,且K值未达超买区
if kdCross == 1 && kVal < float64(overboughtLevel) {
s.OpenOrder(&strat.EnterReq{
Tag: "Long",
OrderType: core.OrderTypeMarket,
TakeProfitVal: atr.Get(0) * float64(tpTicks) / 100, // 使用ATR作为动态止盈
})
}
// 做空条件:K线下穿D线,且K值未破超卖区
if kdCross == -1 && kVal > float64(oversoldLevel) {
s.OpenOrder(&strat.EnterReq{
Tag: "Short",
Short: true,
OrderType: core.OrderTypeMarket,
TakeProfitVal: atr.Get(0) * float64(tpTicks) / 100, // 使用ATR作为动态止盈
})
}
},
}
}