Strategi RSI Box Grid

Penulis:ChaoZhang, Tanggal: 2023-10-30 11:29:30
Tag:

img

Gambaran umum

Strategi ini adalah bot pseudo-grid yang dimaksudkan terutama untuk perdagangan algoritmik. Strategi ini menggunakan grid dinamis yang diperhitungkan volume yang hanya diperbarui ketika RSI memenuhi kondisi tertentu. Ini juga merupakan strategi breakout, sedangkan bot grid normal tidak (bot grid khas menjual ketika grid yang lebih tinggi tercapai, sedangkan strategi ini menjual ketika grid yang lebih rendah dilanggar dalam kondisi tertentu).

Singkatnya, strategi memperbarui kisi-kisinya ke nilai tertinggi / terendah yang dipertimbangkan volume dari sumber yang diberikan (src dalam pengaturan) setiap kali RSI melintasi di bawah / di atas tingkat overbought / oversold. Dari kisaran ini, ia menghasilkan kisi-kisi berjarak lima garis, dan menggunakan sumber saat ini untuk menentukan garis kisi mana yang paling dekat. Kemudian, jika sumber melintasi garis langsung di atas, ia memasuki panjang. Jika sumber melintasi di bawah garis langsung di bawah, ia memasuki pendek.

Anda dapat mengkonfigurasi short, sumber, panjang RSI, dan tingkat overbought/oversold di pengaturan.

Logika Strategi

Logika inti dari strategi ini adalah:

  1. Menggunakan indikator RSI untuk menentukan titik pembalikan tren, menggunakan rantai silang RSI dari tingkat overbought/oversold sebagai sinyal konfirmasi.

  2. Ketika sinyal RSI terjadi, catat harga tertinggi/terendah selama periode sebagai batas atas/bawah grid.

  3. Pembagi kisaran menjadi 5 garis grid yang jaraknya merata. Periksa secara real time garis mana yang paling dekat dengan harga.

  4. Ketika harga melintasi garis di atas, pergi panjang. Ketika harga melintasi garis di bawah, rata panjang dan pergi pendek.

  5. Dengan menggunakan breakout alih-alih sentuhan, dapat lebih baik menangkap pembalikan tren.

  6. Tutup semua perintah piramida sebelum menutup untuk menghindari risiko semalam.

Strategi ini terdiri dari:

  1. Pengaturan input: sumber, parameter RSI, panjang/pendek dll.

  2. Perhitungan RSI: menghitung RSI dan memeriksa sinyal silang.

  3. Garis dinamis: merekam kisaran harga pada sinyal RSI dan menghitung garis grid.

  4. Pemeriksaan sinyal: mendeteksi garis grid harga untuk sinyal panjang/pendek.

  5. Manajemen pesanan: mengirim pesanan dan rata sebelum menutup.

  6. Membuat grafik: garis grid plot, zona panjang/pendek dll.

Dengan memperbarui grid secara dinamis dan menggunakan RSI untuk konteks tren ditambah sinyal breakout, strategi ini dapat secara efektif melacak tren dan membalikkan ketika tren berubah.

Analisis Keuntungan

Keuntungan utama dari strategi ini adalah:

  1. Grid dinamis beradaptasi dengan tren, tidak seperti grid tetap.

  2. Hanya menyesuaikan grid pada konfirmasi RSI, mengurangi kebisingan.

  3. Sinyal breakout menangkap pembalikan lebih baik daripada sentuhan.

  4. Perlahan sebelum menutup untuk menghindari risiko celah semalam.

  5. RSI efektif untuk mendeteksi overbought/sold.

  6. Mode Breakout memberikan entri tren awal dibandingkan dengan pembalikan.

  7. Menyesuaikan jarak dan ukuran grid memungkinkan penyesuaian risiko.

  8. Jaringan visual & zona panjang/pendek.

  9. Gaun pendek opsional untuk memenuhi pedagang yang berbeda.

  10. Logika sederhana yang jelas cocok untuk perdagangan algo.

Ini membuat strategi mampu melacak tren otomatis dengan kontrol risiko untuk perdagangan langsung.

Analisis Risiko

Ada juga beberapa risiko potensial yang perlu dicatat:

  1. Pasar Whipsaw bisa menyebabkan stop loss, bisa memperluas stop atau menghentikan trading.

  2. Kesenjangan semalam bisa meninggalkan kesenjangan yang besar dan mengurangi ukuran posisi.

  3. Penyesuaian parameter yang buruk dapat meningkatkan perdagangan atau kesalahan sinyal.

  4. Biaya tinggi dapat mengikis keuntungan dari perdagangan jaringan.

  5. Sinyal breakout mungkin sedikit tertinggal, perlu batas breakout yang wajar.

  6. Mungkin berkinerja buruk dalam tren naik yang stabil.

  7. Membutuhkan modal yang cukup untuk ukuran posisi yang lebih besar dan piramida, jika tidak hasilnya akan buruk.

Pengurangan:

  1. Mengoptimalkan parameter untuk mengurangi frekuensi perdagangan dan overtrading.

  2. Gabungkan dengan indikator tren, hindari periode perdagangan.

  3. Mengurangi ukuran perdagangan % dan risiko per perdagangan.

  4. Uji ambang batas yang berbeda untuk keseimbangan terbaik antara waktu dan stabilitas.

  5. Tambahkan lebih banyak kondisi masuk, masukkan hanya tren yang jelas untuk menghindari terjebak.

  6. Backtest selama periode yang lebih lama untuk mengevaluasi stabilitas parameter.

  7. Jelajahi optimasi parameter dinamis berbasis pembelajaran mesin untuk kemampuan adaptasi pasar.

  8. Pertimbangkan untuk menggabungkan dengan strategi opsi untuk lindung nilai risiko posisi.

  9. Sesuaikan parameter berdasarkan kondisi pasar terbaru untuk menjaga strategi tetap efektif.

  10. Membangun platform optimasi visual untuk membantu pengujian cepat.

Dengan optimasi parameter, menyisir sinyal, dan lebih banyak informasi pasar, risiko dapat dikurangi untuk membuat strategi algo yang benar-benar andal.

Peluang Peningkatan

Strategi ini dapat ditingkatkan lagi dengan:

  1. Mengoptimalkan parameter RSI, menguji periode RSI untuk kombinasi terbaik.

  2. Mencoba jarak grid yang berbeda untuk risiko-balasan yang optimal.

  3. Menambahkan indikator lain ke sinyal filter, misalnya MACD, KD dll untuk meningkatkan akurasi.

  4. Mengembangkan adaptif berhenti berdasarkan volatilitas pasar.

  5. Meningkatkan kondisi masuk, hanya masukkan tren yang jelas untuk menghindari perangkap.

  6. Backtesting selama periode yang lebih lama untuk mengevaluasi stabilitas parameter.

  7. Menjelajahi optimasi dinamis berbasis pembelajaran mesin untuk kemampuan beradaptasi.

  8. Menggabungkan strategi opsi untuk lindung nilai risiko.

  9. Menyesuaikan parameter berdasarkan kondisi pasar baru-baru ini untuk mempertahankan efektivitas.

  10. Membangun platform optimasi visual untuk pengujian cepat.

Dengan optimasi otomatis, kombinasi strategi, informasi pasar yang lebih banyak dll, dapat mencapai stabilitas dan pengembalian yang lebih baik sebagai strategi perdagangan yang sebenarnya.

Ringkasan

Singkatnya, strategi RSI Box Grid menggunakan RSI untuk mengidentifikasi konfirmasi pembalikan tren, menetapkan grid rentang harga dinamis, pemutusan perdagangan, dan meratakan intraday - membentuk tren fleksibel mengikuti strategi perdagangan algo. Dibandingkan dengan grid tetap, ia beradaptasi lebih baik dengan perubahan pasar.

Strategi ini memiliki keuntungan termasuk RSI untuk konteks tren, grid dinamis, perdagangan breakout, dan perataan penuh intraday. Hal ini memungkinkan untuk secara efektif melacak tren dengan kontrol risiko. Namun, risiko seperti stop loss whipsaw, gap overnight ada, yang membutuhkan optimasi, menyisir sinyal, dan manajemen risiko.

Ada banyak peluang peningkatan, dengan menggabungkan lebih banyak indikator, optimasi ML, pengujian backtesting visual dll, ini dapat menjadi strategi perdagangan algo laba yang lebih kuat.


/*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))

Lebih banyak