Strategi Rentang Rata-rata Pergerakan Eksponensial Adaptif


Tanggal Pembuatan: 2024-02-26 14:58:32 Akhirnya memodifikasi: 2024-02-26 14:58:32
menyalin: 2 Jumlah klik: 650
1
fokus pada
1617
Pengikut

Strategi Rentang Rata-rata Pergerakan Eksponensial Adaptif

Ringkasan

Strategi ini menggunakan indikator linear rata-rata bobot (EHMA) yang lebih cepat dihitung dan saluran adaptif untuk membangun strategi mengikuti tren. Karena EHMA dihitung lebih cepat, tren perubahan harga dapat diidentifikasi secara efektif dan menghindari terobosan palsu yang menghasilkan sinyal perdagangan yang tidak perlu.

Prinsip Strategi

  1. Rata-rata indeks linear tertimbang EHMA berdasarkan parameter Period. Perhitungan EHMA cepat dan efektif untuk melacak tren perubahan harga.

  2. Berdasarkan parameter RangeWidth, di atas dan di bawah EHMA memperluas satu saluran yang beradaptasi. Hanya jika harga lebih tinggi dari saluran atas atau lebih rendah dari saluran bawah, pergeseran tren dianggap terjadi dan sinyal perdagangan dikirimkan.

  3. Perbandingan antara harga dan saluran. Harga lebih tinggi saat melintasi saluran, kosong saat melintasi saluran bawah. Harga lebih rendah saat melintasi saluran, kosong saat melintasi saluran bawah.

Analisis Keunggulan

Strategi ini memiliki beberapa keunggulan dibandingkan dengan strategi moving average biasa:

  1. Menggunakan algoritma EHMA untuk menghitung rata-rata. Respons EHMA terhadap tren perubahan harga lebih sensitif, dapat secara efektif mengidentifikasi perubahan tren, menghindari terobosan palsu yang menyebabkan perdagangan yang tidak perlu.

  2. Adaptive channel dapat secara efektif menyaring pergerakan harga. Hanya akan menghasilkan sinyal perdagangan ketika harga menentukan perubahan tren. Dapat menyaring sebagian perdagangan yang tidak efektif, meningkatkan probabilitas keuntungan.

  3. lebar saluran dapat disesuaikan secara fleksibel untuk menyesuaikan dengan lingkungan pasar yang berbeda. lebar saluran dapat memfilter lebih banyak getaran, mengurangi frekuensi transaksi; saluran sempit dapat lebih cepat mengenali perubahan tren, meningkatkan frekuensi transaksi.

Analisis risiko

Strategi ini juga memiliki risiko sebagai berikut:

  1. Masih tidak dapat sepenuhnya menghindari terobosan palsu. Harga mungkin terpecah, langsung naik atau turun melalui jalur jalur. Parameter perlu disesuaikan dengan tepat untuk mengendalikan risiko.

  2. Jika saluran terlalu luas, beberapa peluang perdagangan mungkin terlewatkan. Saluran yang lebih sempit dapat meningkatkan sensitivitas.

  3. Jika saluran terlalu sempit, maka akan meningkatkan jumlah transaksi yang tidak valid. Anda dapat memperluas lebar saluran untuk meningkatkan stabilitas.

Arah optimasi

Strategi ini dapat dioptimalkan dalam beberapa hal:

  1. Parameter pengoptimalan Period. Sesuaikan siklus penghitungan rata-rata dengan karakteristik varietas dan diagram periode yang berbeda.

  2. Parameter pengoptimalan RangeWidth. Adaptasi jangkauan saluran sesuai dengan tingkat fluktuasi pasar dan preferensi risiko pribadi.

  3. Meningkatkan strategi stop loss. Menetapkan titik stop loss yang masuk akal dalam proses memegang posisi, dan secara efektif mengontrol kerugian maksimum dalam satu transaksi.

  4. Filter Entries dalam kombinasi dengan indikator lain. Misalnya, meningkatkan penilaian volume transaksi dan mengurangi inefisiensi Entries.

  5. Aplikasi multivariasi dengan optimasi parameter. Melakukan pengujian pada lebih banyak varietas dan siklus, mengoptimalkan parameter umum.

Meringkaskan

Strategi ini mengintegrasikan indikator EHMA dan indikator saluran adaptif, membentuk strategi mengikuti tren. Strategi ini dapat secara efektif mengidentifikasi tren pasar, sekaligus menyaring pergerakan harga, dan menghindari perdagangan yang tidak perlu. Setelah serangkaian parameter dioptimalkan dan dikontrol risiko, dapat menghasilkan keuntungan yang stabil di berbagai varietas dan siklus.

Kode Sumber Strategi
/*backtest
start: 2023-02-25 00:00:00
end: 2024-02-25 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
args: [["v_input_1",1]]
*/

// Credit is due where credit is due:
// Hull Moving Average: developed by Alan Hull
// EHMA: coded by Twitter @borserman
// I've built on their work in an attempt to create a strategy more robust to fake moves
// @0xLetoII

//@version=4
strategy(
  title="EHMA Range Strategy",
  process_orders_on_close=true,
  explicit_plot_zorder=true,
  overlay=true, 
  initial_capital=1500, 
  default_qty_type=strategy.percent_of_equity, 
  commission_type=strategy.commission.percent, 
  commission_value=0.085,
  default_qty_value=100
  )
  

// Position Type
pos_type = input(defval = "Long", title="Position Type", options=["Both", "Long", "Short"])

// Inputs
Period = input(defval=180, title="Length")
RangeWidth = input(defval=0.02, step=0.01, title="Range Width")
sqrtPeriod = sqrt(Period)

// Function for the Borserman EMA
borserman_ema(x, y) =>
    alpha = 2 / (y + 1)
    sum = 0.0
    sum := alpha * x + (1 - alpha) * nz(sum[1])

// Calculate the Exponential Hull Moving Average
EHMA = borserman_ema(2 * borserman_ema(close, Period / 2) - borserman_ema(close, Period), sqrtPeriod)

// Create upper & lower bounds around the EHMA for broader entries & exits
upper = EHMA + (EHMA * RangeWidth)
lower = EHMA - (EHMA * RangeWidth)

// Plots
EHMAcolor = (close > EHMA ? color.green : color.red)
plot(EHMA, color=EHMAcolor, linewidth=2)
plot(lower, color=color.orange, linewidth=2)
plot(upper, color=color.blue, linewidth=2)


// Strategy
long = close > upper
exit_long = close < lower
short = close < lower
exit_short = close > upper


// Calculate start/end date and time condition
startDate  = input(timestamp("2017-01-01T00:00:00"))
finishDate = input(timestamp("2029-01-01T00:00:00"))
 
time_cond  = true


// Entries & Exits
if pos_type == "Both"
    strategy.entry("Long", strategy.long, comment="Long", when=long and time_cond)
    strategy.close("Long", comment="Exit Long", when=exit_long and time_cond)
    strategy.entry("Short", strategy.short, comment="Short", when=short and time_cond)
    strategy.close("Short", comment="Exit Short", when=exit_short and time_cond)
if pos_type == "Long"
    strategy.entry("Long", strategy.long, comment="Long", when=long and time_cond)
    strategy.close("Long", comment="Exit Long", when=exit_long and time_cond)
if pos_type == "Short"
    strategy.entry("Short", strategy.short, comment="Short", when=short and time_cond)
    strategy.close("Short", comment="Exit Short", when=exit_short and time_cond)