RSI追踪ADX策略是一个融合RSI指标和ADX指标的长线趋势跟踪策略。该策略通过RSI指标判断行情超买超卖与否,结合ADX指标判断当前趋势强弱,实现在趋势向上且不超买的情况下进行长仓入场,在趋势转弱或超买时进行平仓退出的长线持仓策略。
该策略主要使用RSI指标和ADX指标的组合来判断入场和退出时机。
入场条件: 1. 20日SMA上涨; 2. ADX比前一天上涨超过0.2,表示趋势增强; 3. RSI小于85,避免超买;
或者:
退出条件: 1. RSI大于75,表示超买; 2. ADX小幅上涨,趋势温和;
或者:
或者:
20日SMA转为下跌。
该策略通过RSI判断超买超卖,结合ADX判断趋势,实现在趋势向上不超买情况下买入,在超买或趋势转弱时退出,整体实现追踪中长线向上趋势的效果。
该策略主要有以下优势:
结合RSI和ADX两个指标,可以更准确判断趋势和超买超卖情况,入场出场更为精确。
通过ADX判断趋势强弱,可以减少因震荡市弱势出场。
RSI设置较宽松的参数,追踪中长线趋势,减少频繁交易。
策略操作简单,容易实施,适合长线持仓。
可配置参数灵活,可调整的空间大。
该策略也存在一定风险:
ADX指标存在滞后,可能错过趋势转换点导致损失扩大。
股价出现断崖式下跌时,止损可能较迟触发,扩大损失。
入场时RSI参数设置过宽松,可能导致超买持仓时间过长。
ADX参数设置过敏感,可能造成趋势较弱时错误出场。
大盘异常时,个股也可能出现反向运作。
对应风险管理:
适当缩短ADX参数,使其更灵敏。
设置更严格的止损线,避免扩大损失。
适当收紧RSI参数,防止超买持仓时间过长。
ADX参数不要设置过敏感,防止错误出场。
在大盘发生转折时,适当暂停策略,手动干预。
该策略可以从以下几个方面进行优化:
优化RSI参数设置,测试不同周期参数对策略效果的影响。
优化ADX参数组合,测试DI和ADX周期参数对策略捕捉趋势能力的影响。
测试加入MACD等其他指标作为辅助判断。
测试不同均线组合优化入场时机。
测试加入止盈止损策略,提高策略收益风险比。
对大盘指数状态进行判断,在大盘转折时手动暂停策略。
RSI追踪ADX策略整体是一个较为简单实用的长线趋势跟踪策略。它同时结合RSI和ADX两个指标的优势,在趋势判断和超买超卖判断上较为准确。策略操作简单,容易实施,也具有一定的参数优化空间。但也需要注意ADX滞后问题和止损设置问题。总体来说,该策略非常适合追踪中长线趋势,可以为投资者带来稳定收益。
/*backtest start: 2022-10-03 00:00:00 end: 2023-10-09 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //Copyright by Reed Asset Management registered in Shanghai, China //该策略为上海蘆田资产管理有限公司制 //@version=2 strategy("[蘆田策略]ADX+RSI", overlay=true) //ADX adxlen = input(14, title="ADX Smoothing") dilen = input(14, title="DI Length") dirmov(len) => up = change(high) down = -change(low) truerange = rma(tr, len) plus = fixnan(100 * rma(up > down and up > 0 ? up : 0, len) / truerange) minus = fixnan(100 * rma(down > up and down > 0 ? down : 0, len) / truerange) [plus, minus] adx(dilen, adxlen) => [plus, minus] = dirmov(dilen) sum = plus + minus adx = 100 * rma(abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen) sig = adx(dilen, adxlen) plot(sig, color=red, title="ADX") //ADX+RSI Strategy Long Entry longEntry1 = sma(close, 20) > sma(close, 20)[1] //check if the ADX is rising longEntry2 = (adx(14, 14) - adx(14, 14)[1]) > 0.2 longEntry3 = rsi(close, 14) < 85 longEntry4 = (adx(14, 14) - adx(14, 14)[1]) > 0 longEntry5 = (adx(14, 14) - adx(14, 14)[1] ) < 0.2 longEntry6 = rsi(close, 14) < 50 longCondition1 = longEntry1 and longEntry2 and longEntry3 longCondition2 = longEntry1 and longEntry4 and longEntry5 and longEntry6 if(longCondition1 or longCondition2) strategy.entry("long", strategy.long) //ADX+RSI Strategy Long Exit longExit1 = rsi(close, 9) > 75 longExit2 = (adx(14, 14) - adx(14, 14)[1]) > 0 longExit3 = (adx(14, 14) - adx(14, 14)[1] ) < 0.2 longExit4 = (adx(14, 14) - adx(14, 14)[1]) > 0.2 longExit5 = sma(close, 20) < sma(close,20)[1] longExitCondition1 = longExit1 and longExit2 and longExit3 longExitCondition2 = longExit1 and longExit4 longStop1 = strategy.position_avg_price + 4 * tr longExitCondition3 = longExit5 longStop2 = sma(close, 20) strategy.close_all(when = longExitCondition1) if (longExitCondition2) strategy.exit("exit", "long", stop = longStop1) if (longExitCondition3) strategy.exit("exit", "long", stop = longStop2) //Strategy