Strategi Penskalaan Lindung Nilai Momentum RSI-EMA Berbilang

RSI EMA TP SL
Tarikh penciptaan: 2024-12-04 15:41:10 Akhirnya diubah suai: 2024-12-04 15:41:10
Salin: 0 Bilangan klik: 514
1
fokus pada
1617
Pengikut

Strategi Penskalaan Lindung Nilai Momentum RSI-EMA Berbilang

Gambaran keseluruhan

Ini adalah strategi perdagangan lindung nilai momentum berdasarkan RSI dan EMA. Strategi ini menggunakan tempoh masa RSI ganda ((RSI-14 dan RSI-2) digabungkan dengan EMA tiga kali ((50 , 100 , 200) untuk menangkap peluang pembalikan trend pasaran dan mencapai kesan penangguhan melalui pengurusan kedudukan dinamik.

Prinsip Strategi

Strategi ini menggunakan RSI-14 dan RSI-2 yang agak kuat dalam dua kitaran yang berbeza, dengan tiga garis rata EMA-50, EMA-100 dan EMA-200 untuk menentukan isyarat perdagangan. Untuk melakukan banyak syarat, RSI-14 diperlukan di bawah 31 dan RSI-2 ke atas 10 dan memerlukan tiga garis rata untuk menunjukkan urutan kosong kosong (EMA-50 < EMA-100 < EMA-200). Sebaliknya, syarat kosong memerlukan RSI-14 lebih tinggi daripada 69 dan RSI-2 ke bawah 90 dan ketiga-tiga garis menunjukkan pelbagai baris EMA (EMA-50 > EMA-100 > EMA-200).

Kelebihan Strategik

  1. Penyelidikan berbilang peringkat untuk meningkatkan kebolehpercayaan isyarat
  2. Pengurusan kedudukan yang dinamik yang membolehkan anda menyesuaikan kedudukan anda dengan fleksibel mengikut keadaan pasaran
  3. Mekanisme perdagangan dua hala, yang boleh menghasilkan keuntungan dalam dua arah.
  4. Menghadapi keadaan yang tidak menyenangkan dan mengelakkan penarikan diri awal
  5. Antara muka grafik yang jelas menunjukkan isyarat perdagangan dan keadaan pasaran
  6. Sistem perlindungan boleh mengurangkan pendedahan kepada risiko satu arah
  7. Pengendalian risiko yang lebih munasabah berdasarkan perhitungan kedudukan dinamik berdasarkan hak dan kepentingan

Risiko Strategik

  1. Ganda Leverage Tinggi ((20 kali) mungkin membawa risiko besar untuk pecah kedudukan
  2. Kedudukan yang meningkat boleh menyebabkan kerugian yang besar apabila pasaran bergolak
  3. Tidak menetapkan syarat untuk menghentikan kerugian, mungkin menghadapi risiko penurunan yang berterusan
  4. Penunjuk RSI boleh menjana isyarat palsu dalam pasaran sisi
  5. Gabungan pelbagai petunjuk teknikal mungkin menyebabkan peluang perdagangan berkurangan
  6. Pengurusan kedudukan mungkin mempunyai risiko yang besar apabila berturut-turut berdagang sama arah

Arah pengoptimuman strategi

  1. Memperkenalkan mekanisme hentian yang beradaptasi, seperti hentian dinamik berdasarkan ATR atau kadar turun naik
  2. Mengoptimumkan kelipatan leverage, boleh dipertimbangkan untuk disesuaikan dengan dinamik turun naik pasaran
  3. Menambah penapis masa untuk mengelakkan dagangan semasa turun naik rendah
  4. Pengenalan penunjuk lalu lintas untuk meningkatkan kebolehpercayaan isyarat
  5. Mengoptimumkan kelipatan kenaikan kedudukan, pertimbangkan untuk menetapkan had kedudukan maksimum
  6. Penapis kekuatan aliran ditambah untuk mengelakkan dagangan dalam aliran lemah
  7. Memperbaiki mekanisme pengurusan risiko, seperti menetapkan had kerugian maksimum harian

ringkaskan

Ini adalah strategi komprehensif yang menggabungkan momentum dan trend untuk meningkatkan ketepatan dagangan dengan menggabungkan pelbagai petunjuk teknikal. Inovasi strategi ini adalah penggunaan pengurusan kedudukan dan mekanisme perlindungan yang dinamik, tetapi juga membawa risiko yang lebih tinggi. Dengan mengoptimumkan mekanisme kawalan risiko dan memperkenalkan lebih banyak syarat penapisan, strategi ini dijangka dapat mencapai prestasi yang lebih baik dalam perdagangan sebenar.

Kod 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