
Strategi ini disebut strategi tren yang didorong oleh likuiditas, yang bertujuan untuk mengidentifikasi arah tren harga pada periode waktu yang berbeda dan membuat keputusan membeli atau menjual sesuai dengan itu. Strategi ini menggunakan sistem linier ganda untuk menilai tren, dan menggunakan indeks kekuatan relatif selisih harga pada beberapa frame waktu untuk bereaksi tepat waktu ketika tren berubah.
Logika inti dari strategi ini didasarkan pada indikator CHOP, di mana sistem rata-rata bergerak menilai arah tren besar. Secara khusus, strategi ini menghitung RSI dari garis cepat (Length = 20) dan garis lambat (Length = 50) pada kerangka waktu periode tinggi, dan menghitung perbedaan keduanya. Ketika RSI melewati garis lambat di atas garis cepat, RSI dinilai sebagai bullish, membentuk sinyal multitasking; sebaliknya, RSI melewati garis lambat di bawah garis cepat, RSI turun, membentuk sinyal kosong.
Strategi ini juga memperkenalkan penilaian multi-frame waktu: menghitung RSI di periode yang lebih tinggi (seperti garis matahari) untuk menilai arah tren keseluruhan; berdasarkan penilaian periode yang lebih tinggi, melakukan pembelian dan penjualan spesifik di periode yang lebih rendah (seperti garis 5 menit). Kombinasi dari kerangka waktu ini, mempertimbangkan penilaian tren periode tinggi dan fleksibilitas untuk operasi periode rendah.
Solusi:
Strategi ini menggunakan perbedaan RSI untuk menilai perubahan tren potensial, untuk menangkap titik-titik perubahan yang sensitif. Penggunaan beberapa kerangka waktu memastikan penilaian tren besar, tetapi juga membuat operasi jual beli spesifik lebih fleksibel. Dibandingkan dengan strategi pelacakan tren lainnya, strategi ini lebih sederhana, langsung, parameter Settings intuitif, dan mudah disesuaikan.
/*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)