Idea teras strategi ini adalah untuk menilai kawasan harga semasa dengan menggabungkan RSI dari pelbagai kitaran, dan mengambil tindakan pembelian atau penjualan yang sesuai pada kitaran yang lebih kecil apabila terdapat penembusan pada RSI kitaran yang lebih besar. Strategi ini menggabungkan kelebihan indikator teknikal dari pelbagai kitaran untuk menilai nilai relatif harga semasa melalui pelbagai dimensi masa untuk mencari tempat masuk yang lebih baik.
Strategi ini bertujuan untuk menilai kawasan harga dan mencari peluang perdagangan melalui beberapa langkah berikut:
Sebagai contoh, apabila RSI pada hari itu menembusi tinggi baru, kita menilai bahawa ia berada dalam keadaan bertopeng, dan jika RSI pada hari itu menembusi rendah baru, kita menilai bahawa ia berada dalam keadaan kosong. Dalam kedua-dua kes, kita melakukan pembelian dan penjualan pada garis 5 minit.
Strategi ini mempunyai beberapa kelebihan berbanding strategi tradisional yang hanya memberi tumpuan kepada satu kitaran masa:
Penilaian nilai relatif harga semasa lebih tepat. Indikator kitaran besar seperti garis matahari dapat menyaring kebisingan pasaran jangka pendek dan menentukan trend kitaran besar dan kawasan nilai.
Gabungan dengan pelbagai indikator kitaran masa meningkatkan kebolehpercayaan isyarat. Isyarat yang bergantung kepada satu indikator kitaran mudah mengalami isyarat yang salah, dan beberapa indikator kitaran yang menghantar isyarat secara serentak lebih dipercayai.
Lebih berkesan dalam mengambil peluang jangka pendek. Pergerakan besar seperti Sunshine menunjukkan kepada kita arah yang lebih besar, dan kita hanya perlu mencari peluang dalam jangka pendek seperti 5 minit untuk mendapat keuntungan.
Pengunduran yang lebih kecil. Gabungan jangka masa membantu untuk mengelakkan terikat. Apabila indikator jangka masa besar bertukar, kita akan menghentikan kerugian dengan tepat.
Risiko utama strategi ini ialah:
Indikator kitaran besar membuat kesalahan. Indikator seperti RSI hari tidak dapat menentukan kawasan nilai dengan berkesan, menyebabkan isyarat membuat kesalahan. Ini memerlukan parameter RSI yang dioptimumkan.
Pergerakan kitaran kecil tidak sesuai dengan penilaian kitaran besar. Kadang-kadang pergerakan harga kitaran kecil akan menentang trend kitaran besar, dan ketika itu anda perlu menetapkan hentian untuk mengawal kerugian.
Pengurusan wang yang tidak betul. Jika pengurusan risiko yang tidak betul, kerugian sekali adalah terlalu besar dan akan menyebabkan sukar untuk pulih. Ini memerlukan pengurusan kedudukan yang munasabah.
Terdapat banyak ruang untuk pengoptimuman strategi ini, terutamanya dari segi berikut:
Pengoptimuman parameter kitaran. Anda boleh menguji lebih banyak kombinasi kitaran untuk mencari parameter terbaik.
Optimumkan parameter RSI. Anda boleh menyesuaikan parameter RSI untuk melihat sama ada anda dapat meningkatkan ketepatan penghakiman.
Menambah petunjuk lain. Anda boleh menambah lebih banyak petunjuk untuk kombinasi, seperti menambah garis purata untuk menentukan arah trend.
Mekanisme pengoptimuman hentian kerugian. Titik hentian boleh disesuaikan secara dinamik mengikut keadaan penarikan balik.
Mengoptimumkan pengurusan kedudukan. Anda boleh menguruskan kedudukan tertentu setiap transaksi dengan lebih saintifik dan munasabah.
Strategi ini mencapai nilai arbitraj antara dimensi masa yang berbeza dengan menilai penanda RSI yang lebih baik dari tempoh yang berlainan. Pemikiran ini untuk penilaian jangka panjang bernilai digali lebih jauh, dan kita boleh terus menyempurnakan strategi ini dengan cara optimasi parameter, pengoptimuman henti kerugian, pengoptimuman kombinasi, dan sebagainya.
/*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)