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