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

104
llmjob/570.go Normal file
View File

@@ -0,0 +1,104 @@
package llmjob
import (
"math"
"github.com/banbox/banbot/config"
"github.com/banbox/banbot/core"
"github.com/banbox/banbot/strat"
ta "github.com/banbox/banta"
)
func J570(pol *config.RunPolicyConfig) *strat.TradeStrat {
// 定义可调参数
fastLength := pol.DefInt("fastLength", 20, core.PNorm(5, 20))
macdRate := pol.Def("macdRate", 3, core.PNorm(1.5, 3.5))
MACDLength := pol.DefInt("MACDLength", 12, core.PNorm(5, 15))
macdThreshold := pol.Def("macdThreshold", -0.25, core.PNorm(-0.8, -0.1))
takeProfitValue := pol.Def("takeProfitValue", 12, core.PNorm(2, 15))
// 计算慢速EMA周期
slowLength := int(float64(fastLength) * macdRate)
// 确定预热数量,需要足够的K线来计算MACD和检测谷底
warmupNum := slowLength + MACDLength + 3
return &strat.TradeStrat{
WarmupNum: warmupNum,
HedgeOff: true, // 单向持仓模式
TimeFrames: "8h",
OnBar: func(s *strat.StratJob) {
e := s.Env
// 计算MACD指标
fastEMA := ta.EMA(e.Close, fastLength)
slowEMA := ta.EMA(e.Close, slowLength)
macd := fastEMA.Sub(slowEMA)
aMACD := ta.EMA(macd, MACDLength)
delta := macd.Sub(aMACD)
// 获取当前、前一个和前两个时间点的delta值
delta0 := delta.Get(0)
delta1 := delta.Get(1)
delta2 := delta.Get(2)
// 获取当前MACD值和收盘价
macdValue := macd.Get(0)
closePrice := e.Close.Get(0)
// 检查数据有效性
if math.IsNaN(delta0) || math.IsNaN(delta1) || math.IsNaN(delta2) ||
math.IsNaN(macdValue) || math.IsNaN(closePrice) {
return
}
// 检测MACD谷底
isValley := delta0 > delta1 && delta1 < delta2
// 谷底买入信号
if isValley && macdValue <= macdThreshold && delta0 < 0 {
// 设置止盈价格
// 生成买入订单
s.OpenOrder(&strat.EnterReq{
Tag: "valley_buy",
TakeProfitVal: takeProfitValue,
})
}
// 检测delta与0的交叉
crossResult := delta.Cross(0)
// delta上穿0,买入信号
if crossResult == 1 {
// 获取当前最高价和最低价
highPrice := e.High.Get(0)
lowPrice := e.Low.Get(0)
if !math.IsNaN(highPrice) && !math.IsNaN(lowPrice) {
// 生成买入订单,使用固定止盈值0.3
s.OpenOrder(&strat.EnterReq{
Tag: "MacdLE",
TakeProfitVal: 0.3,
})
}
}
// delta下穿0,卖出信号
if crossResult == -1 {
// 获取当前最高价和最低价
highPrice := e.High.Get(0)
lowPrice := e.Low.Get(0)
if !math.IsNaN(highPrice) && !math.IsNaN(lowPrice) {
// 生成卖出订单,使用固定止盈值0.3
s.OpenOrder(&strat.EnterReq{
Tag: "MacdSE",
Short: true,
TakeProfitVal: 0.3,
})
}
}
},
}
}