Sumber dimuat naik... memuat...

Strategi Hedging Momentum Multi-RSI-EMA dengan Peningkatan Posisi

Penulis:ChaoZhang, Tarikh: 2024-12-04 15:41:10
Tag:RSIEMATPSL

img

Ringkasan

Ini adalah strategi dagangan lindung nilai momentum berdasarkan penunjuk RSI dan purata bergerak EMA. Strategi ini menggunakan tempoh RSI berganda (RSI-14 dan RSI-2) digabungkan dengan garis EMA tiga kali (50, 100, 200) untuk menangkap peluang pembalikan trend pasaran, melaksanakan lindung nilai melalui pengurusan kedudukan dinamik. Ciri utama strategi ini adalah meningkatkan kedudukan secara beransur-ansur apabila syarat kemasukan dipenuhi, dengan syarat mengambil keuntungan berdasarkan tahap overbought / oversold RSI.

Prinsip Strategi

Strategi ini menggunakan RSI-14 dan RSI-2 dengan tempoh yang berbeza, bersama-sama dengan EMA-50, EMA-100, dan EMA-200 untuk menentukan isyarat perdagangan. Syarat panjang memerlukan RSI-14 di bawah 31 dan RSI-2 melintasi di atas 10, sementara EMA mesti sejajar menurun (EMA-50 < EMA-100 < EMA-200). Syarat pendek adalah bertentangan, memerlukan RSI-14 di atas 69 dan RSI-2 melintasi di bawah 90, dengan EMA dalam sejajar menaik (EMA-50 > EMA-100 > EMA-200). Strategi ini menggunakan leverage 20x dan secara dinamik mengira kuantiti perdagangan berdasarkan ekuiti semasa. Posisi baru dibuka dengan dua kali ganda saiz kedudukan semasa apabila syarat-syarat dipenuhi. Syarat mengambil keuntungan ditetapkan berdasarkan penembusan terbalik penunjuk RSI.

Kelebihan Strategi

  1. Penanda teknikal berbilang penanda silang meningkatkan kebolehpercayaan isyarat
  2. Pengurusan kedudukan dinamik membolehkan penyesuaian portfolio yang fleksibel
  3. Mekanisme perdagangan dua arah membolehkan keuntungan dari kedua-dua arah
  4. Keadaan mengambil keuntungan yang disesuaikan menghalang penyingkiran awal
  5. Antara muka grafik yang jelas yang menunjukkan isyarat perdagangan dan keadaan pasaran
  6. Mekanisme lindung nilai mengurangkan pendedahan risiko hala tuju
  7. Pengiraan kedudukan dinamik berasaskan ekuiti untuk kawalan risiko yang lebih baik

Risiko Strategi

  1. Leverage tinggi (20x) boleh membawa kepada risiko pembubaran yang besar
  2. Posisi tambahan boleh menyebabkan kerugian besar semasa turun naik pasaran
  3. Ketidakhadiran syarat stop-loss boleh menghadapi risiko pengambilan berterusan
  4. Indikator RSI boleh menghasilkan isyarat palsu di pasaran pelbagai
  5. Gabungan beberapa penunjuk teknikal boleh mengurangkan peluang perdagangan
  6. Kaedah pengurusan kedudukan boleh mengumpul risiko yang berlebihan semasa perdagangan berturut-turut

Arahan Pengoptimuman Strategi

  1. Memperkenalkan mekanisme stop-loss adaptif berdasarkan ATR atau turun naik
  2. Mengoptimumkan pengganda leverage dengan pelarasan dinamik berdasarkan turun naik pasaran
  3. Tambah penapis masa untuk mengelakkan perdagangan semasa tempoh turun naik yang rendah
  4. Masukkan penunjuk jumlah untuk meningkatkan kebolehpercayaan isyarat
  5. Mengoptimumkan pengganda peningkatan kedudukan dengan had kedudukan maksimum
  6. Tambah penapis kekuatan trend untuk mengelakkan perdagangan dalam trend lemah
  7. Meningkatkan pengurusan risiko dengan had kerugian maksimum harian

Ringkasan

Strategi komprehensif ini menggabungkan momentum dan trend berikut, menggunakan pelbagai penunjuk teknikal untuk meningkatkan ketepatan perdagangan. Strategi ini berinovasi melalui pengurusan kedudukan dinamik dan mekanisme lindung nilai, walaupun ia membawa risiko yang ketara. Melalui pengoptimuman mekanisme kawalan risiko dan pengenalan penapis tambahan, strategi ini berpotensi untuk prestasi yang lebih baik dalam perdagangan langsung. Ujian balik menyeluruh dan pengoptimuman parameter disyorkan sebelum pelaksanaan langsung.


/*backtest
start: 2024-11-26 00:00:00
end: 2024-12-03 00:00:00
period: 10m
basePeriod: 10m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Custom RSI EMA Strategy Hedge", overlay=true, default_qty_type=strategy.fixed, default_qty_value=1)

// Definování vstupních podmínek
rsi_14 = ta.rsi(close, 14)
rsi_2 = ta.rsi(close, 2)
ema_50 = ta.ema(close, 50)
ema_100 = ta.ema(close, 100)
ema_200 = ta.ema(close, 200)

// Pákový efekt
leverage = 20

// Podmínky pro long pozici
longCondition = (rsi_14[1] < 31) and ta.crossover(rsi_2, 10) and (ema_50 < ema_100) and (ema_100 < ema_200)

// Podmínky pro short pozici
shortCondition = (rsi_14[1] > 69) and ta.crossunder(rsi_2, 90) and (ema_50 > ema_100) and (ema_100 > ema_200)

// Identifikátory pozic
long_id = "Long"
short_id = "Short"

// Definování průměrné ceny pozice pro long a short
var float long_avg_price = na
var float short_avg_price = na

// Sledujeme, zda se velikost pozice změnila
var float last_long_position_size = na
var float last_short_position_size = na

// Přerušení průměrné ceny pozice při změně pozice
if (last_long_position_size != strategy.position_size and strategy.position_size > 0)
    long_avg_price := na
if (last_short_position_size != strategy.position_size and strategy.position_size < 0)
    short_avg_price := na

// Aktualizace průměrné ceny pozice
if (strategy.position_size > 0)
    long_avg_price := strategy.position_avg_price
else
    long_avg_price := na

if (strategy.position_size < 0)
    short_avg_price := strategy.position_avg_price
else
    short_avg_price := na

// Uložení aktuální velikosti pozice pro příští bar
if (strategy.position_size > 0)
    last_long_position_size := strategy.position_size
else if (strategy.position_size < 0)
    last_short_position_size := strategy.position_size

// Podmínky pro take profit
takeProfitLongCondition = (rsi_14 > 69) and (rsi_2 > 90) and (long_avg_price < close)
takeProfitShortCondition = (rsi_14 < 31) and (rsi_2 < 10) and (short_avg_price > close)

// Velikost pozice
new_long_position_size = strategy.position_size == 0 ? na : math.abs(strategy.position_size) * 2
new_short_position_size = strategy.position_size == 0 ? na : math.abs(strategy.position_size) * 2

// Úprava velikosti pozice s ohledem na pákový efekt
position_value = strategy.equity * leverage
trade_qty_long = position_value / close
trade_qty_short = position_value / close

// Vstup do long pozice s dvojnásobkem aktuální pozice nebo standardní velikostí při první pozici
if (longCondition)
    strategy.entry(long_id, strategy.long, qty=new_long_position_size == na ? trade_qty_long : new_long_position_size)

// Vstup do short pozice s dvojnásobkem aktuální pozice nebo standardní velikostí při první pozici
if (shortCondition)
    strategy.entry(short_id, strategy.short, qty=new_short_position_size == na ? trade_qty_short : new_short_position_size)

// Výstup z long pozice při splnění podmínek pro take profit
if (takeProfitLongCondition)
    strategy.close(long_id)

// Výstup z short pozice při splnění podmínek pro take profit
if (takeProfitShortCondition)
    strategy.close(short_id)

// Zvýraznění části grafu, kde platí podmínky pro long
highlightLongCondition = (ema_50 < ema_100) and (ema_100 < ema_200)
bgcolor(highlightLongCondition ? color.new(color.green, 90) : na)

// Zvýraznění části grafu, kde platí podmínky pro short
highlightShortCondition = (ema_50 > ema_100) and (ema_100 > ema_200)
bgcolor(highlightShortCondition ? color.new(color.red, 90) : na)

// Přidání bodů pozic do grafu
plotshape(series=longCondition, location=location.belowbar, color=color.green, style=shape.labelup, text="L")
plotshape(series=shortCondition, location=location.abovebar, color=color.red, style=shape.labeldown, text="S")

// Vykreslení průměrné ceny pozice pro long a short pouze pokud pozice existuje
plot(strategy.position_size > 0 ? long_avg_price : na, title="Long Avg Price", color=color.blue, linewidth=2)
plot(strategy.position_size < 0 ? short_avg_price : na, title="Short Avg Price", color=color.orange, linewidth=2)

// Zvýraznění čtverců pro RSI14 > 70 (červeně) a RSI14 < 30 (zeleně)
var int rsi_above_70_start = na
var int rsi_below_30_start = na

var float top_value_above_70 = na
var float bottom_value_above_70 = na

var float top_value_below_30 = na
var float bottom_value_below_30 = na

// Identifikace začátku a konce období pro RSI14 > 70
if (rsi_14[1] > 70 and rsi_14[2] > 70)
    if na(rsi_above_70_start)
        rsi_above_70_start := bar_index
        top_value_above_70 := high
        bottom_value_above_70 := low
    else
        top_value_above_70 := math.max(top_value_above_70, high)
        bottom_value_above_70 := math.min(bottom_value_above_70, low)
else
    if not na(rsi_above_70_start)
        // box.new(left = rsi_above_70_start, right = bar_index - 1, top = top_value_above_70, bottom = bottom_value_above_70, border_color = color.red, border_width = 2, bgcolor=color.new(color.red, 90))
        rsi_above_70_start := na
        top_value_above_70 := na
        bottom_value_above_70 := na

// Identifikace začátku a konce období pro RSI14 < 30
if (rsi_14[1] < 30 and rsi_14[2] < 30)
    if na(rsi_below_30_start)
        rsi_below_30_start := bar_index
        top_value_below_30 := high
        bottom_value_below_30 := low
    else
        top_value_below_30 := math.max(top_value_below_30, high)
        bottom_value_below_30 := math.min(bottom_value_below_30, low)
else
    if not na(rsi_below_30_start)
        // box.new(left = rsi_below_30_start, right = bar_index - 1, top = top_value_below_30, bottom = bottom_value_below_30, border_color = color.green, border_width = 2, bgcolor=color.new(color.green, 90))
        rsi_below_30_start := na
        top_value_below_30 := na
        bottom_value_below_30 := na


Berkaitan

Lebih lanjut