本策略名为“流动性驱动趋势策略”(Liquidity Driven Trend Strategy),目的是识别不同时间周期上的价格趋势方向,并相应做出买入或卖出决策。该策略运用双均线系统判断趋势,并利用多时间框架上的差价相对强度指数(RSI)实现在趋势变化时及时反应。
该策略的核心逻辑基于CHOP指标,其中变动平均系统判断大趋势方向。具体来说,策略在高周期时间框架上计算快线(Length=20)与慢线(Length=50)的 RSI 值,并计算二者差值。当快线 RSI 上穿慢线 RSI 时则判断为看涨,形成做多信号;反之,快线 RSI 下穿慢线 RSI 则看跌,形成做空信号。根据价格涨跌而变化的 RSI 差值,可 sensitive 地判断趋势变化点。
该策略还引入多时间框架判定:在较高级别周期(如日线)计算 RSI 差值,以判断整体趋势方向;根据较高级别周期的判断结果,在较低级别周期(如5分钟线)进行具体的买入卖出执行。这种多时间框架的组合,既考虑了高周期趋势判断,又兼顾低周期操作的灵活性。
解决方法:
本策略运用 RSI 差值判断潜在趋势变化,实现 sensitive 地捕捉转折点。多时间框架的运用既保证了对大趋势的判断,又使具体买卖操作更为灵活。相比其他趋势跟踪策略,该策略更加简单直接,参数Settings 直观,易于调整优化。总体来说,该策略形成了一套高效、实用的趋势交易体系,值得进一步探索应用。
/*backtest
start: 2023-11-19 00:00:00
end: 2023-12-19 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=3
strategy("Flow Trend Indicator Strategy", "FlowTI", overlay=true, calc_on_every_tick=true)
isTimeFrame(timeFrame) =>
timeFrame == timeframe.period ? true : false
Htf() =>
isTimeFrame("12") ? "60" : isTimeFrame("60") ? "300" : isTimeFrame("300") ? "D" : isTimeFrame("D") ? "W" : isTimeFrame("W") ? "M" : isTimeFrame("M") ? "5M" : "D"
TrendIndication() =>
trendFastLength = 20
trendSlowLength = 50
upFastHtf = request.security(syminfo.tickerid, Htf(), rma(max(change(close), 0), trendFastLength), barmerge.gaps_off, barmerge.lookahead_on)
downFastHtf = request.security(syminfo.tickerid, Htf(), rma(-min(change(close), 0), trendFastLength), barmerge.gaps_off, barmerge.lookahead_on)
rsiFastHtf = downFastHtf == 0 ? 100 : upFastHtf == 0 ? 0 : 100 - (100 / (1 + upFastHtf / downFastHtf))
upSlowHtf = request.security(syminfo.tickerid, Htf(), rma(max(change(close), 0), trendSlowLength), barmerge.gaps_off, barmerge.lookahead_on)
downSlowHtf = request.security(syminfo.tickerid, Htf(), rma(-min(change(close), 0), trendSlowLength), barmerge.gaps_off, barmerge.lookahead_on)
rsiSlowHtf = downSlowHtf == 0 ? 100 : upSlowHtf == 0 ? 0 : 100 - (100 / (1 + upSlowHtf / downSlowHtf))
rsiDiff = rsiFastHtf - rsiSlowHtf
crossover(rsiDiff, 0) ? true : crossunder(rsiDiff, 0) ? false : na
if (TrendIndication() == true)
strategy.entry("Long", strategy.long)
if (TrendIndication() == false)
strategy.entry("Short", strategy.short)