init
This commit is contained in:
61
llmjob/8179.go
Normal file
61
llmjob/8179.go
Normal file
@@ -0,0 +1,61 @@
|
||||
package llmjob
|
||||
|
||||
import (
|
||||
"github.com/banbox/banbot/config"
|
||||
"github.com/banbox/banbot/core"
|
||||
"github.com/banbox/banbot/strat"
|
||||
ta "github.com/banbox/banta"
|
||||
)
|
||||
|
||||
func J8179(pol *config.RunPolicyConfig) *strat.TradeStrat {
|
||||
// 定义可调超参数
|
||||
lookback := pol.DefInt("lookback", 20, core.PNorm(5, 25)) // 随机振荡器计算周期
|
||||
kSmoothing := pol.DefInt("kSmoothing", 4, core.PNorm(1, 10)) // %K线平滑周期
|
||||
maLookback := pol.DefInt("maLookback", 19, core.PNorm(5, 30)) // %K线均线周期
|
||||
|
||||
return &strat.TradeStrat{
|
||||
WarmupNum: lookback + kSmoothing + maLookback + 10, // 确保有足够的历史数据
|
||||
EachMaxLong: 1, // 每个品种最多1个多单
|
||||
EachMaxShort: 1, // 每个品种最多1个空单
|
||||
TimeFrames: "8h",
|
||||
OnBar: func(s *strat.StratJob) {
|
||||
e := s.Env
|
||||
|
||||
// 计算随机振荡器 KDJ
|
||||
// KDJ返回[K, D, RSV],其中K就是我们需要的%K线
|
||||
stochK, _, _ := ta.KDJ(e.High, e.Low, e.Close, lookback, kSmoothing, 3)
|
||||
|
||||
// 计算%K线的移动平均线
|
||||
maStochK := ta.SMA(stochK, maLookback)
|
||||
|
||||
// 检测交叉信号
|
||||
// Cross返回: 1=上穿, -1=下穿, 0=重合或未知
|
||||
crossSignal := stochK.Cross(maStochK)
|
||||
|
||||
// 根据交叉信号生成交易决策
|
||||
if crossSignal == 1 {
|
||||
// %K线上穿其均线,买入做多
|
||||
s.OpenOrder(&strat.EnterReq{
|
||||
Tag: "long_cross",
|
||||
Short: false,
|
||||
})
|
||||
// 同时平掉空单(如果有)
|
||||
s.CloseOrders(&strat.ExitReq{
|
||||
Tag: "close_short",
|
||||
Dirt: core.OdDirtShort,
|
||||
})
|
||||
} else if crossSignal == -1 {
|
||||
// %K线下穿其均线,卖出做空
|
||||
s.OpenOrder(&strat.EnterReq{
|
||||
Tag: "short_cross",
|
||||
Short: true,
|
||||
})
|
||||
// 同时平掉多单(如果有)
|
||||
s.CloseOrders(&strat.ExitReq{
|
||||
Tag: "close_long",
|
||||
Dirt: core.OdDirtLong,
|
||||
})
|
||||
}
|
||||
},
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user