
Strategi ini dinamakan Strategi Trend Didorong Kecairan (Liquidity Driven Trend Strategy), bertujuan untuk mengenal pasti arah trend harga dalam tempoh masa yang berbeza, dan membuat keputusan membeli atau menjual dengan sewajarnya. Strategi ini menggunakan sistem dua garis sejajar untuk menilai trend, dan menggunakan indeks kekuatan relatif perbezaan harga (RSI) pada pelbagai bingkai masa untuk bereaksi tepat pada masanya apabila trend berubah.
Logik teras strategi ini adalah berdasarkan pada indikator CHOP, di mana sistem purata berubah menentukan arah trend besar. Secara khusus, strategi ini mengira nilai RSI garis cepat (Length = 20) dan garis perlahan (Length = 50) pada jangka masa yang berkala tinggi, dan mengira perbezaan antara keduanya. Apabila RSI garis perlahan melintasi RSI garis cepat, ia dianggap sebagai bullish, membentuk sinyal ganda; sebaliknya, RSI garis cepat melintasi RSI garis perlahan melintasi RSI, membentuk sinyal kosong.
Strategi ini juga memperkenalkan penilaian bingkai masa berbilang: mengira perbezaan RSI pada kitaran yang lebih tinggi (seperti garis matahari) untuk menentukan arah trend keseluruhan; melakukan pembelian dan penjualan tertentu pada kitaran yang lebih rendah (seperti garis 5 minit) berdasarkan keputusan kitaran yang lebih tinggi. Kombinasi bingkai masa berbilang ini mempertimbangkan penilaian trend kitaran tinggi dan fleksibiliti operasi kitaran rendah.
Penyelesaian:
Strategi ini menggunakan perbezaan RSI untuk menilai perubahan trend yang berpotensi, untuk menangkap titik perubahan yang sensitif. Penggunaan pelbagai bingkai masa memastikan penghakiman terhadap trend besar, tetapi juga menjadikan operasi pembelian dan penjualan yang lebih fleksibel. Berbanding dengan strategi pengesanan trend lain, strategi ini lebih mudah, lebih langsung, parameter Settings intuitif, mudah disesuaikan dan dioptimumkan.
/*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)