该策略结合了VSTOP和RSI两个指标,实现当RSI超买超卖时进行做多做空操作,同时使用VSTOP来判断趋势方向,在趋势反转时及时止损。
计算RSI指标值,设置超买线和超卖线。当RSI大于超买线时,做多;当RSI小于超卖线时,做空。
计算VSTOP,它是根据价格波动范围来设置的止损线。具体计算步骤如下:
计算ATR指标,并设定ATR的系数mult
记录最大价max和最小价min
根据是否处于上升趋势is_uptrend,计算出当前的止损线stop = is_uptrend ? max - mult * ATR : min + mult * ATR
更新止损线:vstop1 = is_uptrend ? max(vstop_prev, stop) : min(vstop_prev, stop)
当趋势发生反转时,重新设置止损线vstop
在RSI超卖时,若价格上穿VSTOP,则做空;在RSI超买时,做多。
结合趋势指标和超买超卖指标,可以在趋势行情中捕捉反转机会。
使用VSTOP来设置止损,可以有效控制风险。
RSI参数设置灵活,可以针对不同品种进行优化。
VSTOP系统地跟踪止损,无需人工干预。
如果ATR参数设置过大或过小,止损线将失去意义。可以测试不同的ATR参数,也可以结合ATR的平均值来设置。
在盘整行情中,RSI可能频繁触发交易信号,从而增加交易频率和滑点成本。可以适当调整RSI的参数,或者增加过滤条件来减少无效信号。
反转失败是此策略的主要风险,交易者需要关注更大级别的趋势 direction,避免逆势操作。可以通过与长期均线结合来判断趋势方向。
可以考虑结合其他指标滤除无效信号,例如量能指标,唐奇通道等。
可以基于回测结果对参数进行优化,找到最佳的参数组合。
可以研究如何动态调整ATR的系数,在不同市场环境中进行自适应。
可以探索在特定时间段关闭策略,以规避高风险时段。
该策略整合了趋势判断和超买超卖判断,能够在趋势行情中捕捉反转机会。VSTOP系统地进行止损管理,有助于风险控制。通过参数优化和组合其他指标可以进一步增强策略效果。交易者需要关注趋势方向,避免反转失败的主要风险。
/*backtest start: 2022-10-02 00:00:00 end: 2023-10-08 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=3 strategy("Vstop and RSI", overlay=true) //RSI Section length = input(2, "RSI Period") overSold = input(30, "Oversold Level") overBought = input(70, "Overbought Level") price = close vrsi = rsi (price, length) //VSTOP Section vlength = input(2, "Vstop Length") mult = input(2, "Vstop Mult") atr_ = atr(vlength) max1=0.0 min1=0.0 is_uptrend_prev = false stop=0.0 vstop_prev=0.0 vstop1=0.0 is_uptrend=false is_trend_changed=false max_ = 0.0 min_ = 0.0 vstop=0.0 max1 := max(nz(max_[1]), close) min1 := min(nz(min_[1]), close) is_uptrend_prev := nz(is_uptrend[1], true) stop := is_uptrend_prev ? max1 - mult * atr_ : min1 + mult * atr_ vstop_prev := nz(vstop[1]) vstop1 := is_uptrend_prev ? max(vstop_prev, stop) : min(vstop_prev, stop) is_uptrend := close - vstop1 >= 0 is_trend_changed := is_uptrend != is_uptrend_prev max_ := is_trend_changed ? close : max1 min_ := is_trend_changed ? close : min1 vstop := is_trend_changed ? is_uptrend ? max_ - mult * atr_ : min_ + mult * atr_ : vstop1 plot(vstop, color = is_uptrend ? green : red, style=cross, linewidth=2) if vrsi > overBought strategy.entry("Buy", strategy.long, comment="Buy") if vrsi < overSold and vstop > price strategy.entry("Sell", strategy.short, comment="Sell")