Trend Berikutan EMA dan RSI Strategi

Penulis:ChaoZhang, Tarikh: 2023-09-26 15:39:48
Tag:

Ringkasan

Strategi ini memanfaatkan sepenuhnya purata bergerak dan indeks kekuatan relatif untuk mengenal pasti dan mengikuti trend. Ia hanya memerlukan dua penunjuk untuk menentukan trend dan mencari masa masuk / keluar yang betul. Strategi ini bertujuan untuk menangkap trend harga jangka menengah hingga panjang sambil mengelakkan bunyi pasaran jangka pendek.

Logika Strategi

Strategi ini menggunakan tiga EMA dengan tempoh yang berbeza, dengan EMA-A mempunyai tempoh yang paling pendek, EMA-B medium, dan EMA-C yang paling lama. Apabila EMA-A yang lebih pendek melintasi di atas EMA-B yang lebih panjang, ia menandakan trend menaik, sehingga panjang. Sebaliknya, apabila EMA-A melintasi di bawah EMA-B, ia menandakan trend menurun, sehingga pendek. Untuk menapis isyarat palsu, ia juga menggunakan EMA-C yang paling panjang - hanya mempertimbangkan kemasukan selepas harga memecahkan EMA-C.

Strategi ini juga menggunakan RSI untuk mencari titik keluar. Apabila panjang, ia menutup kedudukan jika RSI melintasi di atas 70. Apabila pendek, ia keluar jika RSI jatuh di bawah 30. Ini mengunci keuntungan trend dan menghalang kerugian daripada berkembang lebih lanjut.

Analisis Kelebihan

  • Menggunakan kekuatan EMA dalam pengenalan trend
  • RSI membantu masa masuk dan keluar
  • Strategi mudah dengan hanya 2 penunjuk
  • Parameter yang boleh disesuaikan untuk menyesuaikan gaya strategi
  • Keuntungan dari peringkat awal, pertengahan dan akhir trend

Analisis Risiko

  • Pullbacks dalam trend utama boleh menghasilkan isyarat palsu
  • Ringan terhadap whipsaws di pasaran yang berbeza
  • Parameter RSI yang tidak betul boleh menyebabkan keluar awal
  • Tempoh EMA perlu dipilih dengan teliti, terlalu pendek mungkin sensitif terhadap bunyi bising, terlalu lama mungkin tidak trend

Risiko ini boleh dikurangkan dengan mengoptimumkan parameter RSI, menambah penapis, dan menggabungkan dengan analisis trend.

Arahan pengoptimuman

  • Mengoptimumkan parameter RSI untuk mengambil keuntungan yang lebih baik dan kawalan risiko
  • Uji gabungan tempoh EMA yang berbeza
  • Tambah jumlah atau penunjuk pengesahan lain
  • Gunakan ATR untuk ukuran stop loss
  • Pertimbangkan untuk mengurangkan saiz kedudukan pada pertengahan trend
  • Mengoptimumkan masa kemasukan dengan pecah, jumlah, dll
  • Meneroka mekanisme kemasukan semula

Ringkasan

Strategi ini menggabungkan trend berikut dan penunjuk pengayun untuk pengenalan trend dan menangkap. Dengan parameter mudah dan pengoptimuman logik, ia boleh dipertingkatkan dengan baik sambil mengekalkan kesederhanaan.


/*backtest
start: 2023-08-26 00:00:00
end: 2023-09-25 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
//@author Alorse

//@version=5
// strategy(title='Tendency EMA + RSI [Alorse]', shorttitle='Tendece EMA + RSI [Alorse]', overlay=true, pyramiding=0, currency=currency.USD, default_qty_type=strategy.percent_of_equity, initial_capital=1000, default_qty_value=20, commission_type=strategy.commission.percent, commission_value=0.01)

// Bollinger Bands
len = input.int(14, minval=1, title='Length', group='RSI')
src = input.source(close, 'Source', group='RSI')
rsi = ta.rsi(src, len)

// Moving Averages
len_a = input.int(10, minval=1, title='EMA A Length', group='Moving Averages')
out_a = ta.ema(close, len_a)
plot(out_a, title='EMA A', color=color.purple)

len_b = input.int(20, minval=1, title='EMA B Length', group='Moving Averages')
out_b = ta.ema(close, len_b)
plot(out_b, title='EMA B', color=color.orange)

len_c = input.int(100, minval=1, title='EMA C Length', group='Moving Averages')
out_c = ta.ema(close, len_c)
plot(out_c, title='EMA B', color=color.green)

// Strategy Conditions
stratGroup = 'Strategy'
showLong = input.bool(true, title='Long entries', group=stratGroup)
showShort = input.bool(false, title='Short entries', group=stratGroup)
closeAfterXBars = input.bool(true, title='Close after X # bars', tooltip='If trade is in profit', group=stratGroup)
xBars = input.int(24, title='# bars')

entryLong = ta.crossover(out_a, out_b) and out_a > out_c and close > open
exitLong = rsi > 70

entryShort = ta.crossunder(out_a, out_b) and out_a < out_c and close < open
exitShort = rsi < 30


bought = strategy.opentrades[0] == 1 and strategy.position_size[0] > strategy.position_size[1]
entry_price = ta.valuewhen(bought, open, 0)
var int nPastBars = 0
if strategy.position_size > 0
    nPastBars := nPastBars + 1
    nPastBars
if strategy.position_size == 0
    nPastBars := 0
    nPastBars
if closeAfterXBars
    exitLong := nPastBars >= xBars and close > entry_price ? true : exitLong
    exitLong
    exitShort := nPastBars >= xBars and close < entry_price ? true : exitShort
    exitShort

// Long Entry
strategy.entry('Long', strategy.long, when=entryLong and showLong)
strategy.close('Long', when=exitLong)

// Short Entry
strategy.entry('Short', strategy.short, when=entryShort and showShort)
strategy.close('Short', when=exitShort)



Lebih lanjut