Strategi perdagangan rentang harga dinamis dan divergensi RSI: penyaringan tren rata-rata pergerakan multi-periode dan pengoptimalan manajemen posisi dinamis

RSI MA DIVERGENCE DYNAMIC POSITION SIZING TREND FILTERING BOX RANGE
Tanggal Pembuatan: 2025-05-15 16:07:47 Akhirnya memodifikasi: 2025-05-15 16:07:47
menyalin: 3 Jumlah klik: 306
2
fokus pada
319
Pengikut

Strategi perdagangan rentang harga dinamis dan divergensi RSI: penyaringan tren rata-rata pergerakan multi-periode dan pengoptimalan manajemen posisi dinamis Strategi perdagangan rentang harga dinamis dan divergensi RSI: penyaringan tren rata-rata pergerakan multi-periode dan pengoptimalan manajemen posisi dinamis

Ringkasan

Strategi perdagangan jarak jauh dari RSI adalah sistem perdagangan kuantitatif yang komprehensif yang menggabungkan tiga teknologi inti: deteksi jarak jauh dari harga, sinyal jarak jauh dari RSI, dan analisis tren rata-rata bergerak. Strategi ini dirancang khusus untuk platform robot sinyal OKX, dengan fungsionalitas yang lebih tinggi dari penyesuaian posisi dinamis dan sebagian posisi posisi. Strategi ini terutama mengidentifikasi titik-titik terobosan dari jarak jauh dari harga, menggabungkan sinyal jarak jauh dari RSI, dan memfilter tren pasar melalui rata-rata bergerak berkala, sehingga dapat menemukan banyak peluang dalam tren turun, dan menangkap waktu perdagangan yang tepat.

Keunikan strategi ini adalah sistem manajemen posisi dinamis yang dapat secara dinamis menyesuaikan skala perdagangan berdasarkan selisih antara harga saat ini dan harga rata-rata kepemilikan posisi, memungkinkan strategi untuk meningkatkan posisi saat harga terus bergerak ke arah yang menguntungkan, sementara secara bertahap mengurangi posisi saat harga mulai berbalik, sehingga mengoptimalkan efisiensi modal dan ROI.

Prinsip Strategi

Strategi ini didasarkan pada tiga komponen inti yang bekerja sama:

  1. Deteksi kisaran hargaStrategi: menentukan kisaran harga dengan menghitung harga tertinggi dan terendah dalam periode tertentu (pengaturan parameter boxLength). Tingkat harga ini digambarkan di grafik sebagai garis batas atas dan bawah, memberikan kisaran referensi harga yang terlihat untuk perdagangan.

  2. RSI menyimpang dari deteksiStrategi ini menggunakan indeks relative strengths (RSI) untuk menghitung pergerakan pasar dan mendeteksi perbedaan antara harga dan RSI. Ketika harga mencapai level rendah baru dan RSI mencapai level rendah yang lebih tinggi, maka terjadi deflection bullish. Ketika harga mencapai level tinggi baru dan RSI mencapai level tinggi yang lebih rendah, maka terjadi deflection bullish. Strategi ini mengidentifikasi titik ekstrim lokal dengan tepat dengan mengatur siklus mundur kiri dan kanan (leftLookback dan rightLookback).

  3. Analisis tren rata-rata bergerakStrategi menghitung beberapa jenis moving average (MA20, MA50, MA100, dan MA200) pada kerangka waktu yang disesuaikan untuk menentukan tren pasar dengan menganalisis susunan dan posisi harga rata-rata ini terhadap garis rata-rata. Strategi hanya memicu beberapa sinyal pada tren turun untuk memastikan perdagangan konsisten dengan lingkungan pasar secara keseluruhan.

Logika transaksi adalah sebagai berikut:

  • Buat lebih banyak sinyal.: Triggered ketika harga menembus batas bawah dan mendeteksi RSI bergeser dari bullish, dan memastikan bahwa hanya dilakukan dalam kondisi tren menurun. Sistem akan secara dinamis menyesuaikan ukuran posisi berdasarkan perbedaan antara harga saat ini dan harga rata-rata posisi.
  • Tanda penurunanTriggered when price breaks the upper boundary and detects the RSI pullback, while ensuring execution only under uptrend conditions. Sistem akan menutup sebagian posisi berdasarkan dinamika perubahan harga relative to average holding price.

Keunggulan Strategis

  1. Mekanisme Konfirmasi MultidimensiKombinasi dari harga yang terganggu, RSI deviasi dari sinyal dan filter tren rata-rata bergerak, menciptakan sistem konfirmasi perdagangan multi-dimensi, yang secara signifikan meningkatkan keandalan dan akurasi sinyal perdagangan.

  2. Manajemen Posisi DinamisStrategi: Menyesuaikan ukuran posisi secara dinamis sesuai dengan kondisi pasar dan perubahan harga, bukan dengan alokasi posisi tetap. Hal ini memungkinkan strategi untuk memaksimalkan potensi keuntungan dalam kondisi pasar yang menguntungkan, sekaligus mengendalikan risiko dalam kondisi yang tidak menguntungkan.math.max(math.min(math.pow((avgPrice - close)* 1000/5,1.1), 100), minEnterPercent)Memastikan bahwa perubahan posisi adalah fleksibel dan terbatas.

  3. Adaptasi terhadap kondisi pasarStrategi ini dapat beradaptasi dengan kondisi pasar yang berbeda melalui analisa silang dan berurutan dari moving averages, dan hanya melakukan perdagangan jika bentuk teknis sesuai dengan tren keseluruhan.

  4. Tempat masuk dan keluar yang tepat: Perbedaan dari sinyal ditambah penembusan dari kisaran harga memberikan titik masuk dan keluar yang akurat, mengurangi kemungkinan sinyal palsu. Parameter pengembalian ((leftLookback dan rightLookback) meningkatkan akurasi pengidentifikasian titik ekstrim.

  5. Umpan balik visualStrategi: Menggambar kisaran harga, moving averages, dan tag sinyal perdagangan pada grafik, memberikan umpan balik visual yang intuitif yang membantu pedagang memahami dan memverifikasi keputusan perdagangan mereka.

  6. Konfigurasi parameter yang fleksibelBerbagai parameter yang dapat disesuaikan memungkinkan strategi untuk beradaptasi dengan gaya pasar dan perdagangan yang berbeda, seperti panjang RSI, siklus interval harga, dan siklus retracement.

Risiko Strategis

  1. Risiko Penembusan PalsuPenembusan kisaran harga kadang-kadang dapat bersifat sementara, bukan awal dari tren yang sebenarnya. Hal ini dapat menyebabkan perdagangan yang tidak perlu dan menghasilkan kerugian. Cara untuk mengurangi risiko adalah dengan menambahkan faktor konfirmasi, seperti memperpanjang siklus mundur atau meningkatkan konfirmasi volume transaksi.

  2. Risiko Terlalu Banyak BerdagangAda beberapa hal yang perlu diperhatikan dalam trading Forex, seperti: Perubahan posisi yang dinamis dapat menyebabkan overtrading dan meningkatkan biaya transaksi. Disarankan untuk menetapkan batas minimal yang wajar (min EnterPercent dan min ExitPercent) untuk menghindari fluktuasi harga kecil yang memicu perdagangan yang sering terjadi.

  3. Resiko rata-rata waktu: Moving averages memiliki keterlambatan, terutama di pasar yang bergerak cepat. Risiko ini dapat dikurangi dengan menyesuaikan jenis rata-rata yang digunakan (misalnya dari SMA ke EMA) atau menyesuaikan siklus rata-rata.

  4. Parameter SensitivitasStrategi bergantung pada beberapa parameter, seperti RSI threshold, siklus rata-rata, dan lain-lain. Perubahan kecil dalam parameter ini dapat secara signifikan mempengaruhi kinerja strategi.

  5. Ketergantungan pada pasar tunggalStrategi mungkin berkinerja baik di bawah kondisi pasar tertentu dan berkinerja buruk di bawah kondisi pasar lainnya. Disarankan untuk menguji strategi di lingkungan pasar yang berbeda dan dalam kerangka waktu yang berbeda, dan pertimbangkan untuk menambahkan filter kondisi pasar untuk menghentikan perdagangan di bawah kondisi pasar yang tidak sesuai.

Arah optimasi

  1. Konfirmasi peningkatan volumeStrategi saat ini hanya mengandalkan harga dan RSI untuk membuat keputusan perdagangan. Dengan menambahkan analisis volume transaksi, efektivitas terobosan dalam kisaran harga dapat diverifikasi dan terhindar dari terobosan palsu dengan volume transaksi yang tidak mencukupi.

  2. Memperkenalkan mekanisme penyesuaian fluktuasiPada periode volatilitas tinggi, tambahkan filter sinyal atau menyesuaikan ukuran posisi rumus untuk mengurangi risiko sinyal palsu dan mengendalikan risiko maksimum. Anda dapat menggunakan indikator ATR (Average True Range) untuk mengukur volatilitas dan secara dinamis menyesuaikan parameter perdagangan.

  3. Tambahkan filter keuntungan-keuntungan: Mengestimasikan potensi risiko-pengembalian rasio sebelum setiap perdagangan, dan hanya melakukan perdagangan yang mencapai nilai rugi rasio keuntungan minimal, sehingga mengoptimalkan ekspektasi keuntungan dari strategi keseluruhan. Hal ini dapat dicapai dengan mengatur stop loss dan stop loss level dinamis berdasarkan ATR.

  4. Memperkenalkan analisis multi-frame waktuDengan menambahkan konfirmasi tren pada kerangka waktu yang lebih tinggi, kualitas sinyal dapat ditingkatkan. Misalnya, melakukan perdagangan hanya jika tren hari ini sesuai dengan tren kerangka waktu perdagangan saat ini.

  5. Peningkatan algoritma posisi dinamisFungsi leverage saat ini dapat menghasilkan penyesuaian yang terlalu besar atau terlalu kecil dalam situasi yang ekstrem. Algoritma yang lebih kompleks dapat dipertimbangkan, seperti rumus penyesuaian diri berdasarkan volatilitas pasar dan kondisi untung-rugi saat ini, atau pengendalian risiko yang diperkenalkan untuk memastikan bahwa transaksi tunggal tidak terlalu mempengaruhi portofolio keseluruhan.

  6. Tambahkan parameter optimasi otomatisImplementasi siklus pengoptimalan parameter otomatis, yang secara teratur menyesuaikan parameter strategi berdasarkan data pasar terbaru, sehingga strategi dapat beradaptasi dengan lebih baik terhadap kondisi pasar yang berubah. Hal ini dapat dilakukan melalui kerangka umpan balik atau algoritma pembelajaran mesin.

Meringkaskan

Strategi perdagangan jarak harga dinamis dan RSI adalah sistem perdagangan kuantitatif canggih yang menggabungkan berbagai metode analisis teknis, yang menggabungkan harga jarak, jarak RSI dan tren rata-rata bergerak untuk memberikan kerangka keputusan perdagangan yang kuat. Kelebihannya adalah sistem manajemen posisi dinamis yang dapat secara otomatis menyesuaikan skala perdagangan sesuai dengan kondisi pasar, serta mengoptimalkan efisiensi modal sambil tetap mengendalikan risiko.

Meskipun ada beberapa risiko yang melekat pada strategi, seperti false breakout dan sensitivitas parameter, stabilitas dan adaptasi strategi dapat ditingkatkan lebih lanjut dengan arah optimasi yang disarankan, seperti menambahkan konfirmasi volume, memperkenalkan penyesuaian volatilitas, dan analisis multi-frame waktu. Ini memberikan kerangka kerja dasar yang fleksibel dan kuat untuk pedagang yang ingin menerapkan strategi tingkat tinggi di platform perdagangan otomatis (seperti OKX Signal Robots), yang dapat disesuaikan dan diperluas sesuai dengan gaya perdagangan pribadi dan preferensi pasar.

Kode Sumber Strategi
/*backtest
start: 2025-05-07 00:00:00
end: 2025-05-14 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/

//@version=6
// Strategy: Box Range with RSI Divergence (Dynamic Adjustment - OKX Signal Format)
// © aws2333
//I'm chinese 
strategy("Kaito  Box with RSI Div(Dynamic Adjustment + MA + Long)", overlay=true,default_qty_type=strategy.percent_of_equity, default_qty_value=10)


rsiOverbought = 80 
rsiOversold = 13   
boxLength = input.int(3, title="Box Length", minval=1) 
rsiLength = input.int(2, title="RSI Length", minval=1) 
divergenceLookback = input.int(2, title="Divergence Lookback Period", minval=1) 
leftLookback = input.int(2, title="Left Lookback", minval=1)  
rightLookback = input.int(2, title="Right Lookback", minval=1) 
var float avgPrice = na       
//var float position_size = 0     

signalToken = input.string("**********", "Signal Token")
enterOrderType = input.string("limit", "Order Type", options=["market", "limit"])
enterOrderPriceOffset = input.float(0.05, "Order Price Offset", minval=0, maxval=100, step=0.01)
enterInvestmentType = input.string("percentage_investment", "Investment Type", options=["margin", "contract", "percentage_balance", "percentage_investment"])
exitOrderType = input.string("limit", "Order Type", options=["market", "limit"])
exitOrderPriceOffset = input.float(0.05, "Order Price Offset", minval=0, maxval=100, step=0.01)
exitInvestmentType = input.string("percentage_position", "Investment Type", options=["percentage_position"])
maxLag = input.float(30, "maxLag")

minEnterPercent = 1.3  
minExitPercent = 0.09  


highestHigh = ta.highest(high, boxLength) 
lowestLow = ta.lowest(low, boxLength)  


plot(highestHigh, title="Upper Box", color=color.new(color.green, 0), linewidth=1, style=plot.style_line)
plot(lowestLow, title="Lower Box", color=color.new(color.red, 0), linewidth=1, style=plot.style_line)


rsi = ta.rsi(low, rsiLength)


isLowestLeft = low < ta.lowest(low[1], leftLookback)  
isLowestRight = low <= ta.lowest(low, rightLookback) 
isLowestClose = isLowestLeft and isLowestRight      

isHighestLeft = low > ta.highest(low[1], leftLookback) 
isHighestRight = low >= ta.highest(low, rightLookback) 
isHighestClose = isHighestLeft and isHighestRight      

lowestClose = ta.lowest(low, divergenceLookback)
lowestRsi = ta.lowest(rsi, divergenceLookback)
highestClose = ta.highest(low, divergenceLookback)
highestRsi = ta.highest(rsi, divergenceLookback)


lowestClosePrev = ta.lowest(low[1], leftLookback)
lowestRsiPrev = ta.lowest(rsi[1], leftLookback)
highestClosePrev = ta.highest(low[1], leftLookback)
highestRsiPrev = ta.highest(rsi[1], leftLookback)



bullishDivergence = isLowestClose and (low < lowestClosePrev) and (rsi > lowestRsiPrev) and (rsi < rsiOversold)
bearishDivergence = isHighestClose and (low > highestClosePrev) and (rsi < highestRsiPrev) and (rsi > rsiOverbought)


ma(source, length, type) =>
    type == "SMA" ? ta.sma(source, length) :type == "EMA" ? ta.ema(source, length) :type == "SMMA (RMA)" ? ta.rma(source, length) :type == "WMA" ? ta.wma(source, length) :type == "VWMA" ? ta.vwma(source, length) :na


custom_timeframe = input.timeframe("3", "Custom time period (leave blank for current period)")


ma_type = input.string("SMA", "Moving average type", options=["SMA", "EMA", "SMMA (RMA)", "WMA", "VWMA"])


ma20_period = input.int(20, "MA20 ", minval=1)
ma50_period = input.int(50, "MA50 ", minval=1)
ma100_period = input.int(100, "MA100 ", minval=1)
ma200_period = input.int(200, "MA200 ", minval=1)


source_close = request.security(syminfo.tickerid, custom_timeframe, close)


ma20 = ma(source_close, ma20_period, ma_type)
ma50 = ma(source_close, ma50_period, ma_type)
ma100 = ma(source_close, ma100_period, ma_type)
ma200 = ma(source_close, ma200_period, ma_type)


up_signal_1 = ma20 > ma200  
up_signal_2 = ma50 > ma200  
up_signal_3 = ma100 > ma200 
up_signal_4 = (high > ma20 and high > ma50 and high > ma100 and high > ma200)
up_trend = (up_signal_1 and up_signal_2 and up_signal_3 and (source_close > ma200)) or up_signal_4 


down_signal_1 = ma20 < ma200  
down_signal_2 = ma50 < ma200  
down_signal_3 = ma100 < ma200 
down_signal_4 = (low < ma20 and low < ma50 and low < ma100 and low < ma200)
down_trend = (down_signal_1 and down_signal_2 and down_signal_3 and (source_close < ma200)) or down_signal_4 




plot(ma20, color=color.yellow, title="MA20")
plot(ma50, color=color.orange, title="MA50")
plot(ma100, color=color.red, title="MA100")
plot(ma200, color=color.maroon, title="MA200")


var float longAddPercent = na 
var float shortAddPercent = na 
roundToFourDecimals(value) => math.round(value * 10000) / 10000

if not na(avgPrice)
    if close < avgPrice
        longAddPercent := roundToFourDecimals(math.max(math.min(math.pow((avgPrice - close)* 1000/5,1.1)  , 100), minEnterPercent)) 
    if close > avgPrice
        longAddPercent := 1
 
    if close == avgPrice
        longAddPercent := 1


if not na(avgPrice)
    if close < avgPrice
        shortAddPercent := 0.01
 
    if close > avgPrice
        shortAddPercent := roundToFourDecimals(math.max(math.min(math.pow((close - avgPrice)*1000,1.1), 100), minExitPercent)) 
    if close == avgPrice
        longAddPercent := 1


longSignal = (close <= lowestLow) and bullishDivergence
shortSignal = (close >= highestHigh) and bearishDivergence
plotLongSignal = down_trend and longSignal and close < avgPrice
plotShortSignal = up_trend and shortSignal and close > avgPrice  

if plotLongSignal
    label.new(bar_index, avgPrice, "average price: " + str.tostring(avgPrice, "#.####"), style=label.style_label_up, color=color.green, textcolor=color.white )
if plotShortSignal
    label.new(bar_index, avgPrice,"average price: " + str.tostring(avgPrice, "#.####"), style=label.style_label_down, color=color.red, textcolor=color.white)




if plotLongSignal
    label.new(
         bar_index, 
         close, 
         "LONG :" + str.tostring(longAddPercent, "#.####") + "%, Close: " + str.tostring(close, "#.####"), 
         style=label.style_label_up, 
         color=color.new(color.green, 80), 
         textcolor=color.white
         )

if plotShortSignal
    label.new(
             bar_index, 
             close, 
             "EXIT LONG :" + str.tostring(shortAddPercent, "#.####") + "%, Close: " + str.tostring(close, "#.####"), 
             style=label.style_label_down, 
             color=color.new(color.red, 80), 
             textcolor=color.white
             )


if longSignal

    avgPrice := na(avgPrice) ? close : (avgPrice + close) / 2 







  
if down_trend and longSignal
     
    strategy.entry("Long",strategy.long,qty=longAddPercent )
    
var float close_size = na

if up_trend and shortSignal 

    if strategy.position_size > 0
        close_size := strategy.position_size * (shortAddPercent/100)  
        strategy.order("Partial Close Long", strategy.short, close_size)