Strategi Skala Lindung Nilai Momentum RSI-EMA Ganda

RSI EMA TP SL
Tanggal Pembuatan: 2024-12-04 15:41:10 Akhirnya memodifikasi: 2024-12-04 15:41:10
menyalin: 0 Jumlah klik: 514
1
fokus pada
1617
Pengikut

Strategi Skala Lindung Nilai Momentum RSI-EMA Ganda

Ringkasan

Ini adalah strategi perdagangan lindung nilai dinamis berdasarkan indikator RSI dan EMA. Strategi ini menggunakan periode waktu RSI ganda ((RSI-14 dan RSI-2) dalam kombinasi dengan EMA ganda ((50 , 100 , 200) untuk menangkap peluang reversal tren pasar, dan memberikan efek penarikan melalui manajemen posisi dinamis.

Prinsip Strategi

Strategi ini menggunakan indeks RSI-14 dan RSI-2 yang relatif kuat dari dua periode yang berbeda, bekerja dengan tiga garis rata-rata EMA-50, EMA-100 dan EMA-200 untuk menentukan sinyal perdagangan. Berbagai kondisi membutuhkan RSI-14 di bawah 31 dan RSI-2 ke atas untuk menembus 10, sambil meminta tiga garis rata untuk menunjukkan urutan kosong kosong (EMA-50 < EMA-100 < EMA-200). Sebaliknya, kondisi kosong membutuhkan RSI-14 di atas 69 dan RSI-2 ke bawah untuk menembus 90, sambil ketiga garis menunjukkan urutan ganda (EMA-50 > EMA-100 > EMA-200).

Keunggulan Strategis

  1. Verifikasi silang indikator teknologi multi-lapisan untuk meningkatkan keandalan sinyal
  2. Manajemen Posisi Dinamis, Fleksibel dalam Mengatur Posisi Berdasarkan Kondisi Pasar
  3. Mekanisme perdagangan dua arah, dapat menghasilkan keuntungan di dua arah di ruang kosong
  4. Adaptasi dalam kondisi yang tidak nyaman, menghindari keberangkatan lebih awal
  5. Antarmuka grafis menampilkan sinyal perdagangan dan status pasar dengan jelas
  6. Sistem perlindungan dapat mengurangi paparan risiko satu arah
  7. Perhitungan Posisi Dinamis Berdasarkan Hak-Hak, Pengendalian Risiko Lebih Rasional

Risiko Strategis

  1. Leverage yang tinggi ((20 kali) dapat membawa risiko eksposur yang lebih besar
  2. Posisi yang meningkat dapat menyebabkan kerugian besar pada saat pasar bergejolak
  3. Tidak ada kondisi stop loss yang ditetapkan, kemungkinan risiko penurunan yang berkelanjutan
  4. Indikator RSI dapat menghasilkan sinyal palsu di pasar sideways
  5. Kombinasi dari beberapa indikator teknis dapat mengurangi peluang perdagangan
  6. Manajemen posisi mungkin memiliki risiko yang sangat besar dalam perdagangan berturut-turut

Arah optimasi strategi

  1. Memperkenalkan mekanisme stop loss yang adaptif, seperti stop loss dinamis berbasis ATR atau volatilitas
  2. Optimalkan leverage multiplier yang dapat dipertimbangkan untuk disesuaikan dengan dinamika volatilitas pasar
  3. Menambahkan filter waktu untuk menghindari perdagangan di saat volatilitas rendah
  4. Masuknya indikator volume lalu lintas untuk meningkatkan keandalan sinyal
  5. Optimalkan multiples dari peningkatan posisi, pertimbangkan untuk mengatur batas posisi maksimum
  6. Menambahkan filter kekuatan tren untuk menghindari perdagangan dalam tren yang lemah
  7. Meningkatkan mekanisme manajemen risiko, seperti pembatasan kerugian maksimum harian

Meringkaskan

Ini adalah strategi komprehensif yang menggabungkan momentum dan tren untuk meningkatkan akurasi perdagangan dengan kombinasi beberapa indikator teknis. Inovasi strategi ini adalah penggunaan manajemen posisi yang dinamis dan mekanisme perlindungan, tetapi juga membawa risiko yang lebih tinggi. Dengan mengoptimalkan mekanisme pengendalian risiko dan memperkenalkan lebih banyak kondisi penyaringan, strategi ini diharapkan untuk mendapatkan kinerja yang lebih baik dalam perdagangan nyata.

Kode Sumber Strategi
/*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