Strategi ini adalah strategi yang mirip dengan Grid Bot, terutama digunakan untuk perdagangan algoritmik. Ini menggunakan grid grid yang dinamis dan non-berinterval yang didasarkan pada volume perdagangan, dan hanya memperbarui grid ketika RSI memenuhi kondisi tertentu. Ini juga memiliki karakteristik perdagangan yang terobosan, berbeda dari Grid Bot biasa (Grid Bot yang khas dijual ketika mencapai garis grid yang lebih tinggi, sedangkan strategi ini dijual ketika jatuh ke garis grid yang lebih rendah dalam kondisi tertentu).
Singkatnya, setiap kali RSI melintasi garis sinyal beli/beli, strategi ini memperbarui grid menjadi harga tertinggi/rendah berdasarkan volume transaksi dari sumber data yang Anda berikan (setel “src”). Ini akan menghasilkan garis dengan jarak rata-rata 5 garis berdasarkan interval ini, dan menggunakan sumber data saat ini untuk menentukan sumber data yang paling dekat.
Anda dapat mengkonfigurasi posisi kosong, sumber data, panjang siklus RSI, dan overbought dan oversold dalam pengaturan.
Logika inti dari strategi ini adalah:
Menggunakan indikator RSI untuk menentukan titik balik tren, dengan garis RSI melintasi area overbought atau oversold yang ditetapkan sebagai sinyal konfirmasi.
Pada saat sinyal konfirmasi RSI muncul, catat harga tertinggi dan terendah dalam periode tertentu, dan atur sebagai batas bawah pada grid.
Berdasarkan batas atas dan bawah dibagi menjadi 5 garis grid, dalam waktu nyata menilai harga mendekati garis grid.
Ketika harga menembus garis grid di atas, masuklah lebih banyak; ketika harga jatuh di bawah garis grid, masuklah dengan posisi kosong.
Dengan menggunakan cara menembus grid, bukan dengan cara Grid Bot biasa yang menyentuh grid, Anda bisa lebih baik menangkap tren yang terobosan.
Pada akhir hari perdagangan, tutup semua pesanan piramida untuk menghindari risiko malam hari.
Strategi ini terdiri dari:
Pengaturan parameter input: termasuk sumber data, parameter RSI, melakukan lebih banyak pilihan blanko, dll.
Perhitungan indikator RSI: menghitung indikator RSI dan menilai apakah ada sinyal melintasi.
Pengaturan Grid Dinamis: Catat kisaran harga dan hitung garis grid saat sinyal RSI terjadi.
Signal judgment: mendeteksi apakah harga menembus grid on atau off line, dan menilai apakah ada sinyal shorting.
Manajemen pesanan: Mengirim sinyal over-sharing dan melakukan placement piramida sebelum penutupan.
Menggambar antarmuka: menampilkan garis grid, membuat lebih banyak area kosong, dll.
Dengan pembaruan grid secara dinamis, pengertian tren dan sinyal penembusan yang dikombinasikan dengan indikator RSI, memungkinkan strategi untuk secara efektif melacak tren dan menyesuaikan arah pada waktu yang tepat saat berbalik. Penutupan sebelum penutupan dapat secara efektif mengendalikan risiko semalam.
Strategi ini memiliki keuntungan utama sebagai berikut:
Grid dinamis dapat beradaptasi dengan tren, dan lebih fleksibel daripada grid yang tidak berubah.
Hanya ketika RSI mengkonfirmasi trend reversal, grid dapat disesuaikan untuk memfilter beberapa sinyal noise.
Dengan menggunakan sinyal breakout daripada hanya sinyal touch, titik-titik perubahan tren dapat ditangkap dengan lebih akurat.
“Kalau tidak ada perubahan, maka kita tidak akan bisa menginvestasikan dana dalam hal ini.
Indikator RSI lebih baik untuk menilai overbought dan oversold, dan bekerja dengan grid dinamis.
Dengan menggunakan mode breakout daripada mode callback, Anda bisa mendapatkan peluang masuk yang lebih baik di awal tren.
Adaptasi jarak grid dan rasio volume perdagangan memungkinkan fleksibilitas dalam penyesuaian karakteristik risiko dan keuntungan dari strategi.
Antarmuka grafis secara intuitif menampilkan distribusi grid dan area kosong tambahan.
Anda dapat memilih untuk membuka posisi kosong atau tidak untuk memenuhi kebutuhan pedagang yang berbeda.
Aturan yang sederhana dan jelas, mudah dipahami dan diterapkan, cocok untuk perdagangan algoritmik.
Keuntungan di atas memungkinkan strategi untuk secara otomatis melacak tren, sementara mengendalikan risiko, cocok untuk aplikasi real-time perdagangan kuantitatif.
Strategi ini juga memiliki beberapa risiko potensial yang perlu diperhatikan:
Dalam tren gempa besar, risiko stop loss mungkin terjadi. Anda dapat dengan tepat melonggarkan batas stop loss, atau menangguhkan strategi selama gempa.
Pada malam hari, bisa terjadi lonjakan besar dalam satu malam, yang menyebabkan posisi terbuka lebih besar. Untuk menghindari risiko ini, pertimbangkan untuk mengurangi rasio posisi.
Setting parameter yang tidak tepat dapat menyebabkan frekuensi transaksi atau sinyal yang salah. Parameter optimasi harus diuji dengan hati-hati.
Jika biaya transaksi lebih tinggi, keuntungan dari perdagangan jaringan dapat dimakan berulang kali. Sebaiknya menyesuaikan jumlah transaksi atau memilih bursa dengan biaya yang lebih rendah.
Sinyal-sinyal penembusan mungkin akan muncul sedikit lebih lambat dari titik balik tren, dan perlu disetel dengan tepat untuk penembusan.
Strategi ini mungkin tidak bekerja dengan baik pada fase kenaikan pasar saham yang stabil. Dapat dipertimbangkan untuk digunakan dalam kombinasi dengan indikator lain.
Dibutuhkan cukup dana untuk mendukung posisi yang lebih besar dan posisi piramida, jika tidak, tidak akan efektif. Posisi harus disesuaikan dengan jumlah dana.
Tanggapan:
Optimalkan parameter, mengurangi frekuensi transaksi, dan mencegah over-trading.
Bergabung dengan indikator tren, hindari perdagangan di masa-masa gejolak.
Mengatur posisi, mengurangi rasio transaksi tunggal, dan mengendalikan risiko.
Uji berbagai parameter amplitudo penembusan, seimbang dengan waktu dan stabilitas.
Pertimbangan untuk mengkombinasikan dengan indikator lain untuk mendapatkan informasi lebih lanjut tentang pasar.
Meningkatkan jumlah dana, memperluas ukuran posisi, dan meningkatkan ruang untuk keuntungan.
Dengan metode optimasi parameter, manajemen risiko, dan kombinasi dengan strategi lainnya, risiko strategi dapat dikurangi hingga tingkat tertentu sehingga dapat beroperasi secara stabil.
Strategi ini dapat dioptimalkan lebih lanjut dalam hal:
Optimalkan parameter RSI, uji panjang siklus RSI yang berbeda, dan cari kombinasi parameter yang optimal.
Uji pengaturan jarak kisi yang berbeda untuk menemukan kisi yang memiliki rasio risiko / keuntungan optimal.
Cobalah untuk menggabungkan sinyal penyaringan dengan indikator lain, seperti MACD, KD, dan sebagainya, untuk meningkatkan akurasi.
Mengembangkan strategi stop loss yang dapat disesuaikan, dan menyesuaikan stop loss secara dinamis sesuai dengan volatilitas pasar.
Meningkatkan kondisi untuk membuka posisi, hanya membuka posisi ketika tren cukup jelas, untuk menghindari kebocoran.
Optimalkan retesting, uji data untuk jangka waktu yang lebih lama, dan evaluasi stabilitas parameter.
Cobalah untuk mengoptimalkan parameter dinamis berdasarkan pembelajaran mesin, sehingga strategi dapat beradaptasi dengan lingkungan pasar.
Menjelajahi strategi untuk menggunakan opsi untuk melindungi risiko posisi.
Adaptasi parameter optimasi strategi sesuai dengan karakteristik pasar terkini, menjaga efektivitas strategi.
Mengembangkan platform optimasi strategi grafis untuk membantu tes optimasi cepat.
Strategi ini dapat mencapai stabilitas dan tingkat pengembalian yang lebih baik, menjadi strategi perdagangan kuantitatif yang benar-benar andal, melalui optimasi parameter otomatisasi, kombinasi strategi, dan pengenalan informasi pasar yang lebih banyak.
Secara keseluruhan, strategi grid RSI menggunakan indikator RSI untuk menilai sinyal konfirmasi reversal tren, mengatur grid dinamis kisaran harga, berdagang saat menerobos garis grid, dan benar-benar kosong di dalam hari, membentuk strategi perdagangan algoritma pelacakan tren yang fleksibel. Dibandingkan dengan strategi grid tetap, ini dapat beradaptasi lebih baik dengan perubahan pasar.
Strategi ini memiliki beberapa keunggulan, termasuk kombinasi RSI untuk menilai tren, adaptasi jaringan dinamis, perdagangan break-out dan posisi kosong penuh dalam sehari. Ini memungkinkan untuk secara efektif melacak tren dan mengendalikan risiko. Tetapi strategi ini juga memiliki beberapa risiko potensial yang perlu diperhatikan, seperti risiko stop loss di bawah tren getaran, risiko terbang malam hari, dll.
Strategi ini juga memiliki banyak cara untuk dioptimalkan, dengan cara memperkenalkan lebih banyak indikator, parameter pengoptimalan pembelajaran mesin, dan platform umpan balik grafis. Secara keseluruhan, strategi ini memberikan kerangka algoritma pelacakan tren yang dapat diandalkan dan mudah dioperasikan untuk perdagangan kuantitatif.
/*backtest
start: 2023-09-29 00:00:00
end: 2023-10-29 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © wbburgin
//@version=5
// strategy("RSI Box Strategy (pseudo-Grid Bot)", overlay=true, initial_capital = 10000,
// default_qty_type = strategy.percent_of_equity, default_qty_value = 1, pyramiding = 33, commission_value=0.10)
src = input.source(close,"Source")
rsiLength = input.int(14,"RSI Length")
oblvl = input.int(70,"Overbought Level")
oslvl = input.int(30,"Oversold Level")
useShorts = input.bool(false,"Use Shorts",inline="B")
showGrid = input.bool(false,"Show Grid",inline="B")
rsi = ta.rsi(src,rsiLength)
rsi_crossdn = ta.crossunder(rsi,oblvl)
rsi_crossup = ta.crossover(rsi,oslvl)
highest = ta.vwma(ta.highest(src,rsiLength),rsiLength)
lowest = ta.vwma(ta.lowest(src,rsiLength), rsiLength)
gridTop = ta.valuewhen(rsi_crossdn,highest,0)
gridBottom = ta.valuewhen(rsi_crossup,lowest,0)
gridMiddle = math.avg(gridTop,gridBottom)
gridMidTop = math.avg(gridMiddle,gridTop)
gridMidBottom = math.avg(gridMiddle,gridBottom)
diff1 = math.abs(src - gridTop)
diff2 = math.abs(src - gridBottom)
diff3 = math.abs(src - gridMiddle)
diff4 = math.abs(src - gridMidTop)
diff5 = math.abs(src - gridMidBottom)
minDiff = math.min(diff1, diff2, diff3, diff4, diff5)
// Determine which line is the closest
float closestLine = na
if minDiff == diff1
closestLine := gridTop
else if minDiff == diff2
closestLine := gridBottom
else if minDiff == diff3
closestLine := gridMiddle
else if minDiff == diff4
closestLine := gridMidTop
else if minDiff == diff5
closestLine := gridMidBottom
buyCrosses = ta.crossover(src,gridTop) or ta.crossover(src,gridBottom) or ta.crossover(src,gridMiddle) or ta.crossover(src,gridMidTop) or ta.crossover(src,gridMidBottom)
sellCrosses= ta.crossunder(src,gridTop) or ta.crossunder(src,gridBottom) or ta.crossunder(src,gridMiddle) or ta.crossunder(src,gridMidTop) or ta.crossunder(src,gridMidBottom)
condition_bull = buyCrosses
condition_bear = sellCrosses
var float bull_status_line = na
var float bear_status_line = na
var float bull_buy_line = na
var float bear_sell_line = na
if condition_bull
bull_status_line := closestLine
if condition_bear
bear_status_line := closestLine
if bull_status_line == gridBottom
bull_buy_line := gridMidBottom
if bull_status_line == gridMidBottom
bull_buy_line := gridMiddle
if bull_status_line == gridMiddle
bull_buy_line := gridMidTop
if bull_status_line == gridMidTop
bull_buy_line := gridTop
if bear_status_line == gridTop
bear_sell_line := gridMidTop
if bear_status_line == gridMidTop
bear_sell_line := gridMiddle
if bear_status_line == gridMiddle
bear_sell_line := gridMidBottom
if bear_status_line == gridMidBottom
bear_sell_line := gridBottom
l = ta.crossover(src,bull_buy_line)
s = ta.crossunder(src,bear_sell_line)
if l
strategy.entry("Long",strategy.long)
if s
strategy.close("Long")
if useShorts
strategy.entry("Short",strategy.short)
// Plotting
in_buy = ta.barssince(l) < ta.barssince(s)
u=plot(bull_buy_line,color=na,title="Buy Plot")
d=plot(bear_sell_line,color=na,title="Sell Plot")
plot(not showGrid?na:gridBottom,color=color.new(color.white,75),title="Grid Line -2")
plot(not showGrid?na:gridMidBottom,color=color.new(color.white,75),title="Grid Line -1")
plot(not showGrid?na:gridMiddle,color=color.new(color.white,75),title="Grid Line 0")
plot(not showGrid?na:gridMidTop,color=color.new(color.white,75),title="Grid Line 1")
plot(not showGrid?na:gridTop,color=color.new(color.white,75),title="Grid Line 2")
fill(u,d,color=in_buy ? color.new(color.lime,75) : color.new(color.red,75))