You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
62 lines
1.9 KiB
62 lines
1.9 KiB
package strategy |
|
|
|
import "sig-pub/pkg/types" |
|
|
|
// SuperTrendRSI 结合super trend和rsi指标策略 |
|
type SuperTrendRSI struct { |
|
} |
|
|
|
func (s *SuperTrendRSI) New() ISigStrategy { |
|
return &SuperTrendRSI{} |
|
} |
|
|
|
func (s *SuperTrendRSI) Meta() StrategyMeta { |
|
return StrategyMeta{ |
|
Name: "SuperTrendRSI", |
|
Desc: "超级趋势结合RSI(动能过滤)策略", |
|
Input: []types.InputArg{ |
|
{Name: "trendWindow", Type: types.InputTypeUInt, Desc: "SuperTrend ATR周期"}, |
|
{Name: "trend", Type: types.InputTypeUInt, Desc: "SuperTrend multipiler"}, |
|
{Name: "rsi", Type: types.InputTypeUInt, Desc: "rsi周期"}, |
|
}, |
|
} |
|
} |
|
|
|
// Init 校验参数, 并根据参数初始化策略 |
|
func (s *SuperTrendRSI) Init(input types.Input) (err error) { |
|
return |
|
} |
|
|
|
func (s *SuperTrendRSI) CandlePeriods(ctx ISingleSigStrategyContext) int16 { |
|
return max( |
|
ctx.Indicator("SuperTrend", types.Input{ |
|
"window": ctx.Input().Int16("trendWindow"), |
|
"mul": ctx.Input().Int16("trendMul"), |
|
}).CandlePeriods(), |
|
ctx.Indicator("RSI", types.Input{"window": ctx.Input().Int16("rsi")}).CandlePeriods(), |
|
) |
|
} |
|
|
|
func (s *SuperTrendRSI) Update(ctx ISingleSigStrategyContext) (side types.Side) { |
|
superTrend := ctx.Indicator("SuperTrend", types.Input{ |
|
"window": ctx.Input().Int16("trendWindow"), |
|
"mul": ctx.Input().Int16("trendMul"), |
|
}) |
|
rsi := ctx.Indicator("RSI", types.Input{"window": ctx.Input().Int16("rsi")}) |
|
|
|
// 買入:SuperTrend 轉綠(綠線在價格下方)且 RSI > 50(確認動能向上) |
|
// 賣出:SuperTrend 轉紅,或 RSI < 30(超賣退出) |
|
// 風險控制:止損 3%(SuperTrend 線為參考),無固定止盈(讓利潤奔跑) |
|
trendDirections := superTrend.StateSeries("direction", 0, 2) |
|
if trendDirections[0] == 1 && trendDirections[1] == -1 { |
|
if rsi.Get(0) > 50 { |
|
return types.SideLong |
|
} |
|
} |
|
if trendDirections[0] == -1 && trendDirections[1] == 1 { |
|
if rsi.Get(0) < 30 { |
|
return types.SideShort |
|
} |
|
} |
|
return |
|
}
|
|
|