Sumber daya yang dimuat... Pemuatan...

Strategi Hedging Momentum Multi-RSI-EMA dengan Scaling Posisi

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

img

Gambaran umum

Ini adalah strategi perdagangan lindung nilai momentum berdasarkan indikator RSI dan rata-rata bergerak EMA. Strategi ini memanfaatkan periode RSI ganda (RSI-14 dan RSI-2) dikombinasikan dengan garis EMA tiga kali lipat (50, 100, 200) untuk menangkap peluang pembalikan tren pasar, menerapkan lindung nilai melalui manajemen posisi dinamis. Fitur inti dari strategi ini adalah secara bertahap meningkatkan posisi ketika kondisi masuk terpenuhi, dengan kondisi pengambilan keuntungan berdasarkan tingkat overbought / oversold RSI.

Prinsip Strategi

Strategi ini menggunakan RSI-14 dan RSI-2 dengan periode yang berbeda, bersama dengan EMA-50, EMA-100, dan EMA-200 untuk menentukan sinyal perdagangan. Kondisi panjang membutuhkan RSI-14 di bawah 31 dan RSI-2 melintasi di atas 10, sementara EMA harus berada dalam keselarasan bearish (EMA-50 < EMA-100 < EMA-200). Kondisi pendek berlawanan, membutuhkan RSI-14 di atas 69 dan RSI-2 melintasi di bawah 90, dengan EMA dalam keselarasan bullish (EMA-50 > EMA-100 > EMA-200). Strategi ini menggunakan leverage 20x dan secara dinamis menghitung jumlah perdagangan berdasarkan ekuitas saat ini. Posisi baru dibuka dengan dua kali ukuran posisi saat ini ketika kondisi dipenuhi. Kondisi mengambil keuntungan ditetapkan berdasarkan reverse breakout indikator RSI.

Keuntungan Strategi

  1. Validasi silang beberapa indikator teknis meningkatkan keandalan sinyal
  2. Manajemen posisi dinamis memungkinkan penyesuaian portofolio yang fleksibel
  3. Mekanisme perdagangan dua arah memungkinkan keuntungan dari kedua arah
  4. Kondisi adaptasi untuk mengambil keuntungan mencegah keluarnya awal
  5. Antarmuka grafis yang jelas yang menunjukkan sinyal perdagangan dan kondisi pasar
  6. Mekanisme lindung nilai mengurangi eksposur risiko arah
  7. Perhitungan posisi dinamis berbasis ekuitas untuk kontrol risiko yang lebih baik

Risiko Strategi

  1. Leverage tinggi (20x) dapat menyebabkan risiko likuidasi yang signifikan
  2. Posisi tambahan dapat menyebabkan kerugian besar selama volatilitas pasar
  3. Tidak adanya kondisi stop loss dapat menghadapi risiko penarikan terus menerus
  4. Indikator RSI dapat menghasilkan sinyal palsu di pasar yang bervariasi
  5. Kombinasi beberapa indikator teknis dapat mengurangi peluang perdagangan
  6. Metode manajemen posisi dapat mengumpulkan risiko yang berlebihan selama perdagangan berturut-turut

Arah Optimasi Strategi

  1. Memperkenalkan mekanisme stop loss adaptif berdasarkan ATR atau volatilitas
  2. Mengoptimalkan pengganda leverage dengan penyesuaian dinamis berdasarkan volatilitas pasar
  3. Tambahkan filter waktu untuk menghindari perdagangan selama periode volatilitas rendah
  4. Masukkan indikator volume untuk meningkatkan keandalan sinyal
  5. Mengoptimalkan posisi peningkatan pengganda dengan batas posisi maksimum
  6. Tambahkan filter kekuatan tren untuk menghindari perdagangan dalam tren yang lemah
  7. Meningkatkan manajemen risiko dengan batas kerugian maksimum harian

Ringkasan

Strategi yang komprehensif ini menggabungkan momentum dan trend berikut, menggunakan beberapa indikator teknis untuk meningkatkan akurasi perdagangan. Strategi ini berinovasi melalui manajemen posisi dinamis dan mekanisme lindung nilai, meskipun membawa risiko yang signifikan. Melalui optimalisasi mekanisme pengendalian risiko dan pengenalan filter tambahan, strategi ini memiliki potensi untuk kinerja yang lebih baik dalam perdagangan langsung. backtesting menyeluruh dan optimasi parameter dianjurkan sebelum implementasi 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 banyak