Strategi Julat Purata Bergerak Eksponen adaptif

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

img

Ringkasan

Strategi ini menggunakan Exponential Hull Moving Average (EHMA) yang lebih cepat dan saluran adaptif untuk membina strategi trend berikut. Oleh kerana EHMA mengira lebih cepat, ia dapat mengenal pasti perubahan trend harga dengan berkesan dan mengelakkan perdagangan yang tidak perlu yang disebabkan oleh pecah palsu. Pada masa yang sama, saluran adaptif dapat menapis beberapa turun naik harga. Perdagangan hanya dicetuskan apabila harga menembusi saluran, mengurangkan kebarangkalian perdagangan yang tidak berkesan dan meningkatkan keuntungan.

Prinsip Strategi

  1. Mengira purata bergerak EHMA berdasarkan parameter Tempoh. EHMA mengira lebih cepat dan boleh mengesan perubahan trend harga dengan berkesan.

  2. Membina saluran adaptif di atas dan di bawah EHMA berdasarkan parameter RangeWidth. Hanya apabila harga meningkat di atas garis saluran atas atau jatuh di bawah garis saluran bawah, trend dianggap telah berubah dan isyarat perdagangan dicetuskan.

  3. Tentukan hubungan harga dengan saluran. Panjang apabila harga menembusi garis atas, pendek apabila menembusi garis bawah. Tutup kedudukan panjang apabila harga melintasi di bawah garis atas, tutup kedudukan pendek apabila harga melintasi di atas garis bawah.

Analisis Kelebihan

Berbanding dengan strategi purata bergerak biasa, strategi ini mempunyai kelebihan berikut:

  1. Gunakan algoritma EHMA untuk mengira purata bergerak. EHMA bertindak balas dengan lebih sensitif terhadap perubahan harga dan dapat mengenal pasti perubahan trend dengan berkesan untuk mengelakkan perdagangan yang tidak perlu yang disebabkan oleh pecah palsu.

  2. Saluran adaptif dapat menapis turun naik harga dengan berkesan. Isyarat perdagangan hanya dicetuskan apabila trend harga telah berubah dengan kukuh. Ini dapat menapis beberapa perdagangan yang tidak berkesan dan meningkatkan keuntungan.

  3. Lebar saluran boleh diselaraskan secara fleksibel untuk menyesuaikan diri dengan keadaan pasaran yang berbeza. Saluran yang lebih luas boleh menapis lebih banyak turun naik dan mengurangkan kekerapan perdagangan. Saluran yang lebih sempit dapat mengenal pasti perubahan trend lebih awal dan meningkatkan kekerapan perdagangan.

Analisis Risiko

Terdapat juga beberapa risiko dengan strategi ini:

  1. Penembusan palsu masih tidak dapat dielakkan sepenuhnya. Harga mungkin jurang di luar saluran. Parameter perlu diselaraskan dengan betul untuk mengawal risiko.

  2. Sesetengah peluang perdagangan mungkin terlepas jika saluran terlalu luas.

  3. Saluran yang terlalu sempit boleh meningkatkan perdagangan yang tidak berkesan.

Arahan pengoptimuman

Strategi ini boleh dioptimumkan dalam aspek berikut:

  1. Mengoptimumkan parameter Tempoh. Sesuaikan kitaran pengiraan purata bergerak untuk menyesuaikan diri dengan produk dan jangka masa yang berbeza.

  2. Mengoptimumkan parameter RangeWidth. Sesuaikan skop saluran berdasarkan turun naik pasaran dan pilihan risiko peribadi.

  3. Tambah strategi stop loss. Tetapkan titik stop loss yang munasabah semasa memegang kedudukan untuk mengawal kerugian maksimum setiap perdagangan dengan berkesan.

  4. Gabungkan dengan penunjuk lain untuk penapisan entri. Sebagai contoh, tambah jumlah untuk mengurangkan entri palsu.

  5. Mengubahsuai aplikasi strategi dan mengoptimumkan parameter. Uji dan mengoptimumkan parameter universal di lebih banyak produk dan jangka masa.

Ringkasan

Strategi ini menggabungkan penunjuk EHMA dan penunjuk saluran adaptif untuk membentuk trend berikut strategi. Ia boleh mengenal pasti trend pasaran dengan berkesan dan menapis turun naik harga untuk mengelakkan perdagangan yang tidak perlu. Selepas satu siri pengoptimuman parameter dan kawalan risiko, keuntungan yang stabil dapat dicapai merentasi pelbagai produk dan jangka masa.


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