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

111
llmjob/592.go Normal file
View File

@@ -0,0 +1,111 @@
// 修复后的完整策略代码
// 请勿修改package包名和任意函数名
package llmjob
import (
"github.com/banbox/banbot/config"
"github.com/banbox/banbot/core"
"github.com/banbox/banbot/orm/ormo"
"github.com/banbox/banbot/strat"
ta "github.com/banbox/banta"
)
// MACD动态趋势量化交易策略
func J592(pol *config.RunPolicyConfig) *strat.TradeStrat {
// 定义可调超参数
fastPeriod := pol.DefInt("fastPeriod", 19, core.PNorm(5, 20))
slowRate := pol.Def("slowRate", 2.9, core.PNorm(1.5, 4))
signalPeriod := pol.DefInt("signalPeriod", 10, core.PNorm(5, 15))
// 计算慢线周期
slowPeriod := int(float64(fastPeriod) * slowRate)
return &strat.TradeStrat{
WarmupNum: 100, // 预热K线数量
EachMaxLong: 1, // 最多开1单做多
EachMaxShort: 1, // 最多开1单做空
DrawDownExit: true, // 启用回撤止盈
RunTimeFrames: []string{"8h"},
OnBar: func(s *strat.StratJob) {
e := s.Env
// 计算MACD指标
// 使用initType=1,符合中国主流使用习惯
macdLine, signalLine := ta.MACDBy(e.Close, fastPeriod, slowPeriod, signalPeriod, 1)
// 检测MACD线与信号线的交叉
// 返回值:1表示上穿(金叉),-1表示下穿(死叉),0表示重合或未知
cross := macdLine.Cross(signalLine)
// 计算ATR用于止损止盈
atr := ta.ATR(e.High, e.Low, e.Close, 14)
atrVal := atr.Get(0)
// 获取当前价格
// 获取当前订单数量
longOrders := s.LongOrders
shortOrders := s.ShortOrders
// 金叉信号:MACD线上穿信号线,且当前没有做多订单
if cross == 1 && len(longOrders) == 0 {
// 如果有空单,先平空单
if len(shortOrders) > 0 {
s.CloseOrders(&strat.ExitReq{
Tag: "close_short",
Dirt: core.OdDirtShort,
OrderType: core.OrderTypeMarket,
})
}
// 开多单
s.OpenOrder(&strat.EnterReq{
Tag: "long_cross",
Short: false,
OrderType: core.OrderTypeMarket,
StopLossVal: atrVal * 2, // 2倍ATR止损
TakeProfitVal: atrVal * 4, // 4倍ATR止盈
StopLossTag: "atr_stop_loss",
TakeProfitTag: "atr_take_profit",
})
}
// 死叉信号:MACD线下穿信号线,且当前没有做空订单
if cross == -1 && len(shortOrders) == 0 {
// 如果有多单,先平多单
if len(longOrders) > 0 {
s.CloseOrders(&strat.ExitReq{
Tag: "close_long",
Dirt: core.OdDirtLong,
OrderType: core.OrderTypeMarket,
})
}
// 开空单
s.OpenOrder(&strat.EnterReq{
Tag: "short_cross",
Short: true,
OrderType: core.OrderTypeMarket,
StopLossVal: atrVal * 2, // 2倍ATR止损
TakeProfitVal: atrVal * 4, // 4倍ATR止盈
StopLossTag: "atr_stop_loss",
TakeProfitTag: "atr_take_profit",
})
}
},
// 回撤止盈计算函数
GetDrawDownExitRate: func(s *strat.StratJob, od *ormo.InOutOrder, maxChg float64) float64 {
// 最大盈利超过5%后,回撤30%止盈
if maxChg > 0.05 {
return 0.3
}
// 最大盈利超过2%后,回撤50%止盈
if maxChg > 0.02 {
return 0.5
}
// 其他情况不设置回撤止盈
return 0
},
}
}