
Gagasan inti dari strategi ini adalah kombinasi indikator RSI dari periode yang berbeda untuk menilai area harga saat ini, dan mengambil tindakan pembelian atau penjualan yang sesuai pada periode yang lebih kecil ketika indikator RSI periode yang lebih besar mengalami terobosan. Strategi ini menggabungkan keuntungan dari indikator teknis dari periode yang berbeda untuk menilai nilai relatif harga saat ini melalui beberapa dimensi waktu untuk mencari titik masuk yang lebih baik.
Strategi ini didasarkan pada beberapa langkah untuk menentukan area harga dan mencari peluang perdagangan:
Sebagai contoh, ketika RSI di garis harian menembus tinggi baru, kita menilai saat ini berada dalam posisi bullish, dan jika RSI di garis harian menembus rendah baru, kita menilai saat ini berada dalam posisi kosong, dalam kedua kasus ini kita mengambil operasi beli dan jual di garis 5 menit.
Strategi ini memiliki beberapa keuntungan dibandingkan dengan strategi tradisional yang hanya berfokus pada satu siklus waktu:
Mengukur nilai relatif dari harga saat ini lebih akurat. Indikator siklus besar seperti garis matahari dapat menyaring kebisingan pasar jangka pendek dan menilai tren siklus besar dan area nilai.
Kombinasi dengan indikator siklus waktu yang berbeda, meningkatkan keandalan sinyal. Mengandalkan indikator siklus tunggal mudah terjadi kesalahan sinyal, sedangkan beberapa indikator siklus sinyal simultan lebih dapat diandalkan.
Lebih efektif dalam mengambil kesempatan dalam jangka pendek. Penembusan siklus besar seperti garis matahari memberi kita arah yang lebih besar, dan kita hanya perlu mencari peluang dalam jangka pendek seperti 5 menit untuk mendapatkan keuntungan.
Pengunduran diri lebih kecil. Kombinasi lintas siklus waktu membantu untuk menghindari penargetan. Ketika indikator siklus besar bergeser, kita akan menghentikan kerugian dengan tepat waktu.
Risiko utama dari strategi ini adalah:
Indikator siklus besar membuat kesalahan. Indikator seperti RSI pada hari yang sama tidak dapat secara efektif menentukan area nilai, yang dapat menyebabkan kesalahan sinyal. Ini memerlukan pengaturan parameter RSI yang dioptimalkan.
Periode kecil tidak sesuai dengan periode besar. Kadang-kadang, pergerakan harga periode kecil akan melawan tren periode besar, dan pada saat itu Anda perlu mengatur stop loss untuk mengendalikan kerugian.
Manajemen uang yang tidak tepat. Jika manajemen risiko yang tidak tepat, kerugian tunggal terlalu besar, dapat menyebabkan sulit untuk pulih.
Ada banyak ruang untuk optimasi dalam strategi ini, terutama dari beberapa aspek:
Optimalisasi parameter siklus. Anda dapat menguji lebih banyak kombinasi siklus untuk mencari parameter optimal.
Optimasi parameter RSI. Anda dapat menyesuaikan parameter RSI untuk melihat apakah dapat meningkatkan akurasi penilaian.
Tambahkan indikator lain. Anda dapat menambahkan lebih banyak indikator untuk kombinasi, seperti menambahkan garis rata-rata untuk menentukan arah tren.
Optimalkan mekanisme stop loss. Stop loss dapat disesuaikan secara dinamis sesuai dengan situasi penarikan.
Mengoptimalkan manajemen posisi. Anda dapat mengelola posisi tertentu untuk setiap transaksi dengan lebih ilmiah dan masuk akal.
Strategi ini melakukan nilai arbitrage antara dimensi waktu yang berbeda dengan mengevaluasi posisi bullish indikator RSI lintas-siklus. Pemikiran untuk penilaian lintas-siklus ini layak untuk digali lebih lanjut, dan kita dapat terus menyempurnakan strategi ini dengan cara optimasi parameter, optimasi stop loss, dan optimasi kombinasi. Secara keseluruhan, strategi ini memiliki pemikiran yang unik dan ruang optimasi yang besar.
/*backtest
start: 2022-12-05 00:00:00
end: 2023-12-11 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=3
strategy("Swing MTF", shorttitle="Swing MTF", overlay=false, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, initial_capital = 10000, slippage = 5)
//
otf_period = input(defval=2, title="Look Back Period (2nd Timeframe)")
otf = input(defval="180", title="Second Momentum Timeframe")
// Function to dectect a new bar
is_newbar(res) =>
t = time(res)
change(t) != 0 ? true : false
// Check how many bars are in our upper timeframe
since_new_bar = barssince(is_newbar(otf))
otf_total_bars = na
otf_total_bars := since_new_bar == 0 ? since_new_bar[1] : otf_total_bars[1]
//Calculate RSI Values
ctf_rsi = rsi(open, otf_period)
breakline=input(title="Breaks in lines", defval = true, type=bool)
so = request.security(syminfo.tickerid, otf, rsi(open, otf_period))
sc = request.security(syminfo.tickerid, otf, rsi(close, otf_period))
final_otf_so = na
final_otf_so := barstate.isrealtime ? since_new_bar == otf_total_bars ? so : final_otf_so[1] : so
final_otf_sc = na
final_otf_sc := barstate.isrealtime ? since_new_bar == otf_total_bars ? sc : final_otf_sc[1] : sc
barsback = input(11, title='Bars back to check for a swing')
// showsig = input(false, title='Show Signal Markers')
swing_detection(index)=>
swing_high = false
swing_low = false
start = (index*2) - 1 // -1 so we have an even number of
swing_point_high = final_otf_so[index]
swing_point_low = final_otf_sc[index]
//Swing Highs
for i = 0 to start
swing_high := true
if i < index
if final_otf_so[i] > swing_point_high
swing_high := false
break
// Have to do checks before pivot and after seperately because we can get
// two highs of the same value in a row. Notice the > and >= difference
if i > index
if final_otf_so[i] >= swing_point_high
swing_high := false
break
//Swing lows
for i = 0 to start
swing_low := true
if i < index
if final_otf_sc[i] < swing_point_low
swing_low := false
break
// Have to do checks before pivot and after seperately because we can get
// two lows of the same value in a row. Notice the > and >= difference
if i > index
if final_otf_sc[i] <= swing_point_low
swing_low := false
break
[swing_high, swing_low]
// Check for a swing
[swing_high, swing_low] = swing_detection(barsback)
long = final_otf_so > final_otf_sc
short = final_otf_so < final_otf_sc
if swing_low and long
strategy.entry("My Long Entry Id", strategy.long)
if swing_high and short
strategy.entry("My Short Entry Id", strategy.short)