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

59
trend/pcmp.go Normal file
View File

@@ -0,0 +1,59 @@
package trend
import (
"github.com/banbox/banbot/config"
"github.com/banbox/banbot/core"
"github.com/banbox/banbot/strat"
)
func pcmp(pol *config.RunPolicyConfig) *strat.TradeStrat {
// 定义可优化的超参数
shortPeriod := int(pol.Def("short", 7, core.PNorm(5, 10)))
longPeriod := int(pol.Def("long", 14, core.PNorm(10, 20)))
return &strat.TradeStrat{
WarmupNum: longPeriod + 5, // 预热数据数量,确保有足够的历史数据
EachMaxLong: 1, // 最多持有1个多单
EachMaxShort: 1, // 最多持有1个空单
OnBar: func(s *strat.StratJob) {
e := s.Env
curPrice := e.Close.Get(0)
// 检查当前价格是否高于短周期和长周期前的价格
shortPriceHigher := curPrice > e.Close.Get(shortPeriod)
longPriceHigher := curPrice > e.Close.Get(longPeriod)
// 检查当前价格是否低于短周期和长周期前的价格
shortPriceLower := curPrice < e.Close.Get(shortPeriod)
longPriceLower := curPrice < e.Close.Get(longPeriod)
// 多头信号:当前价格比两个周期前都高
goLong := shortPriceHigher && longPriceHigher
// 空头信号:当前价格比两个周期前都低
goShort := shortPriceLower && longPriceLower
// 检查当前订单状态
hasLongOrder := len(s.LongOrders) > 0
hasShortOrder := len(s.ShortOrders) > 0
// 开多单逻辑:当前价格比两个周期前都高,且没有持仓
if goLong && !hasLongOrder && !hasShortOrder {
s.OpenOrder(&strat.EnterReq{Tag: "long"})
} else if goShort && !hasShortOrder && !hasLongOrder {
// 开空单逻辑:当前价格比两个周期前都低,且没有持仓
s.OpenOrder(&strat.EnterReq{Tag: "short", Short: true})
}
// 平多单逻辑:不满足做多条件,且有多单持仓
if !goLong && hasLongOrder {
s.CloseOrders(&strat.ExitReq{Tag: "close_long", Dirt: core.OdDirtLong})
}
// 平空单逻辑:不满足做空条件,且有空单持仓
if !goShort && hasShortOrder {
s.CloseOrders(&strat.ExitReq{Tag: "close_short", Dirt: core.OdDirtShort})
}
},
}
}