Adaptive Exponential Moving Average Range Strategi

Penulis:ChaoZhang, Tanggal: 2024-02-26 14:58:32
Tag:

img

Gambaran umum

Strategi ini menggunakan Exponential Hull Moving Average (EHMA) yang lebih cepat dan saluran adaptif untuk membangun strategi tren berikut. Karena EHMA menghitung lebih cepat, ia dapat secara efektif mengidentifikasi perubahan tren harga dan menghindari perdagangan yang tidak perlu yang disebabkan oleh pecah palsu. Pada saat yang sama, saluran adaptif dapat menyaring beberapa fluktuasi harga. Perdagangan hanya dipicu ketika harga menerobos saluran, mengurangi probabilitas perdagangan yang tidak efektif dan meningkatkan profitabilitas.

Prinsip Strategi

  1. Hitung EHMA rata-rata bergerak tertimbang eksponensial berdasarkan parameter Periode EHMA menghitung lebih cepat dan dapat melacak perubahan tren harga secara efektif.

  2. Membangun saluran adaptif di atas dan di bawah EHMA berdasarkan parameter RangeWidth. Hanya ketika harga naik di atas garis saluran atas atau turun di bawah garis saluran bawah, tren dianggap telah berubah dan sinyal perdagangan dipicu.

  3. Tentukan hubungan harga dengan saluran. Panjang ketika harga menembus garis atas, pendek ketika menembus garis bawah. Tutup posisi panjang ketika harga melintasi di bawah garis atas, tutup posisi pendek ketika harga melintasi di atas garis bawah.

Analisis Keuntungan

Dibandingkan dengan strategi rata-rata bergerak biasa, strategi ini memiliki keuntungan berikut:

  1. Gunakan algoritma EHMA untuk menghitung moving average. EHMA merespons perubahan harga dengan lebih sensitif dan dapat mengidentifikasi perubahan tren secara efektif untuk menghindari perdagangan yang tidak perlu yang disebabkan oleh kegagalan palsu.

  2. Saluran adaptif dapat menyaring fluktuasi harga secara efektif. Sinyal perdagangan hanya dipicu ketika tren harga telah berubah dengan kuat. Ini dapat menyaring beberapa perdagangan yang tidak efektif dan meningkatkan profitabilitas.

  3. Jangkauan saluran dapat disesuaikan secara fleksibel untuk menyesuaikan diri dengan kondisi pasar yang berbeda. Saluran yang lebih luas dapat menyaring lebih banyak fluktuasi dan mengurangi frekuensi perdagangan. Saluran yang lebih sempit dapat mengidentifikasi perubahan tren lebih awal dan meningkatkan frekuensi perdagangan.

Analisis Risiko

Ada juga beberapa risiko dengan strategi ini:

  1. Penembusan palsu masih belum dapat dihindari sepenuhnya. Harga mungkin selang di luar saluran. Parameter perlu disesuaikan dengan benar untuk mengendalikan risiko.

  2. Beberapa peluang perdagangan mungkin terlewatkan jika saluran terlalu lebar.

  3. Saluran yang terlalu sempit dapat meningkatkan perdagangan yang tidak efektif.

Arahan Optimasi

Strategi ini dapat dioptimalkan dalam aspek berikut:

  1. Mengoptimalkan parameter Periode Mengatur siklus perhitungan rata-rata bergerak untuk menyesuaikan dengan produk dan kerangka waktu yang berbeda.

  2. Mengoptimalkan parameter RangeWidth. Mengatur ruang lingkup saluran berdasarkan volatilitas pasar dan preferensi risiko pribadi.

  3. Tambahkan strategi stop loss. Tetapkan titik stop loss yang masuk akal selama memegang posisi untuk secara efektif mengendalikan kerugian maksimum per perdagangan.

  4. Gabungkan dengan indikator lain untuk penyaringan entri. Misalnya, tambahkan volume untuk mengurangi entri palsu.

  5. Mengdiversifikasi aplikasi strategi dan mengoptimalkan parameter Uji dan optimalkan parameter universal di lebih banyak produk dan kerangka waktu.

Ringkasan

Strategi ini menggabungkan indikator EHMA dan indikator saluran adaptif untuk membentuk strategi tren berikut. Ini dapat mengidentifikasi tren pasar secara efektif dan menyaring fluktuasi harga untuk menghindari perdagangan yang tidak perlu. Setelah serangkaian optimasi parameter dan kontrol risiko, keuntungan stabil dapat dicapai di berbagai produk dan kerangka waktu.


/*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)
    

Lebih banyak