Julat harga dinamik dan strategi dagangan perbezaan RSI: penapisan aliran purata bergerak berbilang tempoh dan pengoptimuman pengurusan kedudukan dinamik

RSI MA DIVERGENCE DYNAMIC POSITION SIZING TREND FILTERING BOX RANGE
Tarikh penciptaan: 2025-05-15 16:07:47 Akhirnya diubah suai: 2025-05-15 16:07:47
Salin: 3 Bilangan klik: 306
2
fokus pada
319
Pengikut

Julat harga dinamik dan strategi dagangan perbezaan RSI: penapisan aliran purata bergerak berbilang tempoh dan pengoptimuman pengurusan kedudukan dinamik Julat harga dinamik dan strategi dagangan perbezaan RSI: penapisan aliran purata bergerak berbilang tempoh dan pengoptimuman pengurusan kedudukan dinamik

Gambaran keseluruhan

Strategi perdagangan selang harga dinamik dengan RSI adalah sistem perdagangan kuantitatif yang komprehensif, yang menggabungkan tiga teknologi teras pengesanan selang harga, isyarat isyarat RSI dan analisis trend purata bergerak. Strategi ini direka khas untuk platform robot isyarat OKX, dengan penyesuaian kedudukan dinamika dan fungsi lanjutan untuk kedudukan kedudukan.

Keunikan strategi ini adalah bahawa sistem pengurusan kedudukan dinamiknya dapat menyesuaikan skala perdagangan secara dinamik berdasarkan jurang antara harga semasa dan harga memegang kedudukan purata, membolehkan strategi untuk meningkatkan kedudukan apabila harga terus bergerak ke arah yang menguntungkan, sambil mengurangkan kedudukan secara beransur-ansur apabila harga mula berbalik, sehingga mengoptimumkan kecekapan modal dan ganjaran risiko.

Prinsip Strategi

Strategi ini berasaskan kepada tiga komponen teras yang bekerjasama:

  1. Pengesanan Julat HargaStrategi: Mengesan julat harga dengan mengira harga tertinggi dan terendah dalam tempoh tertentu (tetapan parameter boxLength). Tahap harga ini digambarkan sebagai garis sempadan atas dan bawah pada carta untuk memberikan julat rujukan harga yang dapat dilihat untuk perdagangan.

  2. RSI berpatah balik daripada pengesananStrategi ini menggunakan indeks kekuatan relatif lemah (RSI) untuk mengira pergerakan pasaran dan mengesan perbezaan harga dengan RSI. Apabila harga mencapai rendah baru dan RSI mencapai rendah yang lebih tinggi, penyokong penyokong terbentuk; apabila harga mencapai tinggi baru dan RSI mencapai tinggi yang lebih rendah, penyokong penyokong terbentuk. Strategi ini mengenal pasti nilai teratas tempatan dengan menetapkan kitaran mundur kiri dan kanan (leftLookback dan rightLookback).

  3. Analisis trend purata bergerakStrategi mengira pelbagai jenis purata bergerak (MA20, MA50, MA100, dan MA200) pada jangka masa yang disesuaikan untuk menentukan trend pasaran dengan menganalisis susunan dan kedudukan harga garis rata-rata ini berbanding dengan garis rata-rata. Strategi hanya mencetuskan beberapa isyarat semasa trend menurun untuk memastikan perdagangan selaras dengan keadaan pasaran keseluruhan.

Logik urus niaga adalah seperti berikut:

  • Buat lebih banyak isyarat: Ia akan dicetuskan apabila harga melepasi sempadan bawah dan mendeteksi RSI berpatah balik, dan memastikan ia hanya dilakukan dalam keadaan trend menurun. Sistem akan menyesuaikan saiz kedudukan secara dinamik mengikut perbezaan harga semasa dengan harga purata pegangan.
  • Isyarat penurunan: Ia akan dicetuskan apabila harga melepasi sempadan atas dan mendeteksi RSI berpatah balik dari penurunan, dan memastikan ia hanya dilaksanakan dalam keadaan trend menaik. Sistem akan menutup sebahagian kedudukan mengikut dinamik perubahan harga berbanding harga purata pegangan.

Kelebihan Strategik

  1. Mekanisme pengesahan pelbagai dimensiGabungan antara penembusan harga, penapis RSI dari isyarat dan penapis trend dari purata bergerak, mewujudkan sistem pengesahan perdagangan pelbagai dimensi yang meningkatkan kebolehpercayaan dan ketepatan isyarat perdagangan.

  2. Pengurusan kedudukan dinamikStrategi: Menyesuaikan saiz kedudukan secara dinamik mengikut keadaan pasaran dan perubahan harga, dan bukannya menggunakan peruntukan kedudukan tetap. Ini membolehkan strategi memaksimumkan potensi keuntungan dalam keadaan pasaran yang baik, sambil mengawal risiko dalam keadaan yang tidak baik.math.max(math.min(math.pow((avgPrice - close)* 1000/5,1.1), 100), minEnterPercent)Pastikan perubahan kedudukan adalah fleksibel dan terhad.

  3. Sesuaikan diri dengan keadaan pasaranMelalui analisis silang dan berturut-turut rata-rata bergerak, strategi dapat menyesuaikan diri dengan keadaan pasaran yang berbeza dan melakukan perdagangan hanya jika bentuk teknikal selaras dengan trend keseluruhan.

  4. Tempat masuk dan keluar yang tepat: Isyarat jauh dari isyarat ditambah dengan penembusan julat harga memberikan titik masuk dan keluar yang tepat, mengurangkan kemungkinan isyarat palsu. Parameter melihat kembali (leftLookback dan rightLookback) meningkatkan ketepatan pengenalan titik titik ekstrem.

  5. Maklum balas visualStrategi: Menggambar julat harga, purata bergerak dan tanda isyarat dagangan pada carta, memberikan maklum balas visual yang intuitif untuk memudahkan peniaga memahami dan mengesahkan keputusan dagangan.

  6. Konfigurasi parameter yang fleksibelPelbagai parameter yang boleh disesuaikan membolehkan strategi menyesuaikan diri dengan gaya pasaran dan perdagangan yang berbeza, seperti panjang RSI, kitaran selang harga dan kitaran mundur.

Risiko Strategik

  1. Risiko penembusan palsuPenembusan dalam julat harga kadang-kadang boleh menjadi sementara dan bukan permulaan trend sebenar. Ini boleh menyebabkan perdagangan yang tidak perlu dan mengakibatkan kerugian. Cara untuk mengurangkan risiko adalah dengan menambah faktor pengesahan, seperti memanjangkan kitaran pengembalian atau meningkatkan pengesahan jumlah transaksi.

  2. Risiko perdagangan berlebihanPembaikan kedudukan yang dinamik boleh menyebabkan perdagangan berlebihan dan meningkatkan kos perdagangan. Ia disyorkan untuk menetapkan had penyesuaian minimum yang munasabah (minEnterPercent dan minExitPercent) untuk mengelakkan pergerakan harga kecil yang mencetuskan perdagangan yang kerap.

  3. Risiko ketinggalan garis purata: Rata-rata bergerak mempunyai keterlambatan, terutamanya dalam pasaran yang berubah dengan cepat. Risiko ini dapat dikurangkan dengan menyesuaikan jenis rata-rata yang digunakan (seperti beralih dari SMA ke EMA) atau menyesuaikan kitaran rata-rata.

  4. Kepekaan ParameterStrategi bergantung kepada pelbagai parameter, seperti nilai RSI, kitaran rata-rata, dan lain-lain, dan perubahan kecil dalam parameter ini boleh memberi kesan yang ketara terhadap prestasi strategi. Adalah disyorkan untuk mencari tetapan yang kuat dengan mengkaji semula kombinasi parameter yang berbeza, dan mengoptimumkan semula parameter secara berkala untuk menyesuaikan diri dengan keadaan pasaran yang berubah.

  5. Ketergantungan kepada pasaran tunggalStrategi mungkin berfungsi dengan baik di bawah keadaan pasaran tertentu dan tidak berfungsi dengan baik di bawah keadaan pasaran lain. Ia disyorkan untuk menguji strategi dalam persekitaran pasaran yang berbeza dan bingkai masa yang berbeza, dan pertimbangkan untuk memasukkan penapis keadaan pasaran untuk menghentikan perdagangan di bawah keadaan pasaran yang tidak sesuai.

Arah pengoptimuman

  1. Tingkatkan pengesahan volumStrategi semasa hanya bergantung pada harga dan RSI untuk membuat keputusan perdagangan. Dengan menambah analisis jumlah dagangan, kesahihan penembusan dalam julat harga dapat disahkan, dan penembusan palsu yang tidak mencukupi dapat dielakkan.

  2. Memperkenalkan mekanisme penyesuaian kadar turun naikPada masa-masa lonjakan yang tinggi, tambahkan penapis isyarat atau sesuaikan formula saiz kedudukan untuk mengurangkan risiko isyarat palsu dan mengawal celah risiko maksimum. Indikator ATR (Average True Range) boleh digunakan untuk mengukur lonjakan dan menyesuaikan parameter perdagangan secara dinamik.

  3. Menambah penapis keuntungan berbanding kerugian: Menganggarkan nisbah potensi risiko-reward sebelum setiap perdagangan, dan hanya menjalankan perdagangan yang mencapai nilai rugi nisbah keuntungan minimum, dengan itu mengoptimumkan jangkaan keuntungan strategi keseluruhan. Ini boleh dicapai dengan menetapkan tahap stop loss dan stop loss dinamik berdasarkan ATR.

  4. Pengenalan analisis pelbagai kerangka masaDengan menambah pengesahan trend pada jangka masa yang lebih tinggi, kualiti isyarat dapat ditingkatkan. Sebagai contoh, hanya menjalankan perdagangan apabila trend garis matahari selaras dengan trend pada jangka masa perdagangan semasa.

  5. Peningkatan algoritma kedudukan dinamik: Fungsi tiub semasa mungkin menghasilkan penyesuaian yang terlalu besar atau terlalu kecil dalam keadaan yang melampau. Algoritma yang lebih kompleks boleh dipertimbangkan, seperti formula penyesuaian diri berdasarkan turun naik pasaran dan keadaan keuntungan semasa, atau memperkenalkan had pintu risiko untuk memastikan bahawa perdagangan tunggal tidak terlalu mempengaruhi portfolio keseluruhan.

  6. Menambah optimasi parameter automatik: mewujudkan kitaran pengoptimuman parameter automatik, menyesuaikan parameter strategi secara berkala berdasarkan data pasaran terkini, supaya strategi dapat menyesuaikan diri dengan lebih baik dengan keadaan pasaran yang berubah. Ini boleh dilakukan melalui rangka kerja feedback atau algoritma pembelajaran mesin.

ringkaskan

Strategi perdagangan jarak harga dinamik dan RSI adalah sistem perdagangan kuantitatif yang canggih yang menggabungkan pelbagai kaedah analisis teknikal, yang menyediakan kerangka keputusan perdagangan yang kuat melalui harga jarak, jarak RSI dan trend purata bergerak. Kelebihan utamanya adalah sistem pengurusan kedudukan dinamik yang dapat menyesuaikan skala perdagangan secara automatik mengikut keadaan pasaran, mengoptimumkan kecekapan modal sambil mengekalkan kawalan risiko.

Walaupun terdapat beberapa risiko yang wujud dalam strategi, seperti penembusan palsu dan sensitiviti parameter, kestabilan dan kesesuaian strategi dapat dipertingkatkan lagi melalui arah pengoptimuman yang disyorkan, seperti menambah pengesahan jumlah transaksi, memperkenalkan penyesuaian kadar turun naik dan analisis jangka masa berbilang. Bagi peniaga yang ingin menggunakan strategi lanjutan di platform perdagangan automatik (seperti robot isyarat OKX), ini memberikan kerangka kerja asas yang fleksibel dan berfungsi yang kuat, yang boleh disesuaikan dan diperluas mengikut gaya perdagangan dan keutamaan pasaran individu.

Kod 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)