init
This commit is contained in:
96
llmjob/4583.go
Normal file
96
llmjob/4583.go
Normal file
@@ -0,0 +1,96 @@
|
||||
package llmjob
|
||||
|
||||
import (
|
||||
"github.com/banbox/banbot/config"
|
||||
"github.com/banbox/banbot/core"
|
||||
"github.com/banbox/banbot/strat"
|
||||
ta "github.com/banbox/banta"
|
||||
)
|
||||
|
||||
func J4583(pol *config.RunPolicyConfig) *strat.TradeStrat {
|
||||
// 定义策略参数
|
||||
rsiLength := pol.DefInt("rsiLength", 5, core.PNorm(2, 14))
|
||||
maLength := pol.DefInt("maLength", 200, core.PNorm(50, 300))
|
||||
exitMaLength := pol.DefInt("exitMaLength", 5, core.PNorm(3, 20))
|
||||
overboughtThreshold := pol.Def("overboughtThreshold", 80, core.PNorm(70, 95))
|
||||
oversoldThreshold := pol.Def("oversoldThreshold", 20, core.PNorm(5, 30))
|
||||
stopLossPercentage := pol.Def("stopLossPercentage", 3, core.PNorm(1, 10))
|
||||
|
||||
return &strat.TradeStrat{
|
||||
WarmupNum: maLength, // 预热期设置为长期均线周期
|
||||
HedgeOff: true, // 单向持仓模式
|
||||
RunTimeFrames: []string{"1h"},
|
||||
OnBar: func(s *strat.StratJob) {
|
||||
e := s.Env
|
||||
|
||||
// 计算技术指标
|
||||
rsi2 := ta.RSI(e.Close, rsiLength)
|
||||
ma200 := ta.SMA(e.Close, maLength)
|
||||
ma5Exit := ta.SMA(e.Close, exitMaLength)
|
||||
|
||||
// 获取当前指标值
|
||||
rsiValue := rsi2.Get(0)
|
||||
closePrice := e.Close.Get(0)
|
||||
ma200Value := ma200.Get(0)
|
||||
ma5ExitValue := ma5Exit.Get(0)
|
||||
|
||||
// 判断趋势方向
|
||||
positiveTrend := closePrice > ma200Value
|
||||
negativeTrend := closePrice < ma200Value
|
||||
|
||||
// 生成交易信号
|
||||
buyCondition := rsiValue < oversoldThreshold && positiveTrend
|
||||
sellCondition := rsiValue > overboughtThreshold && negativeTrend
|
||||
|
||||
// 生成出场信号
|
||||
exitLongCondition := closePrice > ma5ExitValue
|
||||
exitShortCondition := closePrice < ma5ExitValue
|
||||
|
||||
// 执行交易逻辑
|
||||
if buyCondition && len(s.LongOrders) == 0 {
|
||||
// 开多单,设置止损百分比
|
||||
s.OpenOrder(&strat.EnterReq{
|
||||
Tag: "Buy",
|
||||
Short: false,
|
||||
StopLossRate: stopLossPercentage / 100,
|
||||
StopLossTag: "stop_loss",
|
||||
})
|
||||
} else if sellCondition && len(s.ShortOrders) == 0 {
|
||||
// 开空单,设置止损百分比
|
||||
s.OpenOrder(&strat.EnterReq{
|
||||
Tag: "Sell",
|
||||
Short: true,
|
||||
StopLossRate: stopLossPercentage / 100,
|
||||
StopLossTag: "stop_loss",
|
||||
})
|
||||
}
|
||||
|
||||
// 计算止损水平
|
||||
var stopLossLevelLong, stopLossLevelShort float64
|
||||
if len(s.LongOrders) > 0 {
|
||||
longEntryPrice := s.LongOrders[0].InitPrice
|
||||
stopLossLevelLong = longEntryPrice * (1 - stopLossPercentage/100)
|
||||
}
|
||||
if len(s.ShortOrders) > 0 {
|
||||
shortEntryPrice := s.ShortOrders[0].InitPrice
|
||||
stopLossLevelShort = shortEntryPrice * (1 + stopLossPercentage/100)
|
||||
}
|
||||
|
||||
// 多头出场条件(包含止损触发)
|
||||
if len(s.LongOrders) > 0 && (exitLongCondition || closePrice <= stopLossLevelLong) {
|
||||
s.CloseOrders(&strat.ExitReq{
|
||||
Tag: "exit_long",
|
||||
Dirt: core.OdDirtLong,
|
||||
})
|
||||
}
|
||||
|
||||
// 空头出场条件(包含止损触发)
|
||||
if len(s.ShortOrders) > 0 && (exitShortCondition || closePrice >= stopLossLevelShort) {
|
||||
s.CloseOrders(&strat.ExitReq{
|
||||
Tag: "exit_short",
|
||||
Dirt: core.OdDirtShort,
|
||||
})
|
||||
}
|
||||
},
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user