Idea utama strategi ini adalah untuk menentukan julat harga semasa dengan menggabungkan penunjuk RSI dari kitaran yang berbeza, dan untuk mengambil tindakan membeli atau menjual yang sepadan dalam kitaran yang lebih kecil apabila terdapat pecah dalam RSI kitaran yang lebih besar.
Langkah utama untuk strategi ini untuk menentukan julat harga dan mencari peluang perdagangan adalah:
Sebagai contoh, apabila RSI harian memecahkan paras tertinggi sebelumnya, kita menilai bahawa ia adalah pasaran lembu pada masa ini. dan apabila RSI harian memecahkan di bawah paras terendah sebelumnya, kita menilai ia sebagai pasaran beruang. dalam kedua-dua kes kita mengambil tindakan panjang dan pendek masing-masing dalam carta 5 minit.
Berbanding dengan strategi tradisional yang hanya memberi tumpuan kepada satu tempoh, strategi ini mempunyai kelebihan berikut:
Penilaian nilai harga relatif semasa yang lebih tepat. kitaran yang lebih besar seperti harian boleh menapis bunyi pasaran jangka pendek dan menentukan trend keseluruhan dan kawasan nilai.
Menggabungkan penunjuk merentasi tempoh meningkatkan kebolehpercayaan isyarat. Bergantung hanya pada satu indikator tempoh boleh menghasilkan isyarat palsu dengan lebih mudah, sementara isyarat serentak dari beberapa tempoh lebih boleh dipercayai.
Lebih berkesan memanfaatkan peluang jangka pendek. penembusan kitaran besar menunjukkan arah keseluruhan, sementara kita hanya perlu mencari peluang dalam kitaran kecil seperti 5 minit untuk keuntungan.
Peningkatan yang lebih kecil. menggabungkan tempoh silang membantu mengelakkan terperangkap. kita boleh keluar dengan cepat apabila penunjuk kitaran besar mula berbalik.
Risiko utama strategi ini terletak pada:
Penghakiman yang salah dalam penunjuk kitaran besar. Penentuan kawasan nilai yang tidak berkesan dalam RSI harian dan lain-lain boleh menyebabkan isyarat yang rosak. Penyesuaian parameter RSI diperlukan untuk meningkatkan ketepatan.
Perbezaan antara pergerakan harga kitaran kecil dan penentuan kitaran besar. Kadang-kadang pergerakan jangka pendek menghalang trend gambaran besar. Kita perlu menetapkan stop loss yang betul untuk mengawal kerugian.
Pengurusan risiko yang tidak betul. Kerugian yang berlebihan dalam perdagangan tunggal disebabkan oleh saiz kedudukan yang tidak baik boleh membawa kepada pengurangan yang tidak dapat dipulihkan.
Masih ada ruang yang besar untuk meningkatkan strategi ini, terutamanya dari aspek berikut:
Uji lebih banyak kombinasi tempoh untuk mencari parameter optimum.
Penyesuaian parameter RSI. Sesuaikan parameter RSI lookback dll untuk meningkatkan ketepatan penghakiman.
Tambah lebih banyak penunjuk. Bawa lebih banyak penunjuk seperti MA untuk membantu menilai arah trend.
Memperbaiki mekanisme stop loss. Sesuaikan titik stop loss secara dinamik berdasarkan keadaan pengeluaran.
Mengoptimumkan peraturan saiz kedudukan. Mengurus saiz kedudukan tertentu untuk setiap perdagangan lebih saintifik.
Strategi ini merealisasikan arbitraj tempoh silang antara dimensi masa yang berbeza dengan menilai keadaan bullish dalam RSI tempoh silang. Idea penilaian tempoh silang seperti itu layak dieksploitasi lebih lanjut. Kita boleh terus memperbaikinya melalui penyesuaian parameter, pengoptimuman stop loss, kombinasi penunjuk untuk menjadikannya lebih menguntungkan. Secara keseluruhan, strategi ini mempunyai idea yang unik dan potensi besar untuk ditingkatkan.
/*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)