init
This commit is contained in:
59
trend/pcmp.go
Normal file
59
trend/pcmp.go
Normal 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})
|
||||
}
|
||||
},
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user