Strategi Penembusan Purata Bergerak

Penulis:ChaoZhang, Tarikh: 2023-09-26 16:18:37
Tag:

Ringkasan

Strategi breakout purata bergerak adalah strategi perdagangan jangka pendek yang menggunakan purata bergerak untuk menentukan kemasukan dan keluar.

Logika Strategi

Logik teras bergantung kepada dua purata bergerak, garis pantas dan garis perlahan, untuk mengukur trend harga. Garis pantas mempunyai tempoh yang lebih pendek dan lebih sensitif. Garis perlahan mempunyai tempoh yang lebih lama dan lebih stabil.

Kod ini membolehkan pengguna menetapkan tempoh garis cepat shortPeriod dan tempoh garis perlahan longPeriod melalui parameter input. Nilai kedua-dua purata bergerak dikira sebagai shortSMA dan longSMA.

Apabila purata bergerak pantas melintasi di atas purata bergerak perlahan, ia menandakan penembusan ke atas dan masuk panjang.

Keadaan kemasukan panjang:

Fast MA crosses above slow MA
Fast MA > Slow MA

Syarat kemasukan pendek:

Fast MA crosses below slow MA
Fast MA < Slow MA 

Strategi ini juga merangkumi tetapan stop loss, mengambil keuntungan dan saiz kedudukan untuk mengawal risiko.

Kelebihan

  • Mudah digunakan, mudah bagi pemula untuk memahami
  • Purata bergerak menapis beberapa bunyi bising
  • Fleksibiliti dalam tempoh MA penyusunan halus untuk jangka masa yang berbeza
  • Stop loss dan mengambil keuntungan yang telah ditetapkan

Risiko

  • Rendah terhadap kebocoran palsu dan whipsaws
  • Tidak sesuai untuk pasaran bergelora-gelora
  • Tanda ketinggalan, entri mungkin terlambat
  • Tidak dapat menapis pembalikan trend dengan berkesan

Pengurusan Risiko:

  • Tambah penapis untuk mengelakkan isyarat palsu
  • Menggunakan strategi apabila trend jelas
  • Mengoptimumkan parameter MA untuk kemasukan yang lebih baik
  • Membolehkan hentian yang lebih luas untuk mengelakkan hentian awal

Peluang Peningkatan

  • Mengoptimumkan parameter MA untuk mencari kombinasi terbaik
  • Tambah penunjuk tambahan seperti saluran BOLL atau KD
  • Meningkatkan peraturan keluar untuk memaksimumkan keuntungan
  • Uji ketahanan di pelbagai instrumen
  • Menggabungkan pembelajaran mesin menggunakan data besar

Kesimpulan

Strategi breakout purata bergerak mudah difahami, menghasilkan isyarat dengan MA yang cepat dan perlahan. Tetapi ia juga mempunyai beberapa kelemahan seperti rehat palsu dan masalah kelewatan. Dengan penyesuaian parameter, penapis tambahan dan penambahbaikan lain, strategi dapat ditingkatkan. Secara keseluruhan ia berfungsi sebagai langkah pertama yang mesra pemula ke dalam perdagangan algoritma, dan membuka jalan untuk strategi yang lebih maju setelah memahami konsep teras.


/*backtest
start: 2023-08-26 00:00:00
end: 2023-09-25 00:00:00
period: 1h
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/
// © YohanNaftali

//@version=5

///////////////////////////////////////////////////////////////////////////////
// Heikin Ashi Candle Startegy
// ver 2021.12.29
// © YohanNaftali
// This script composed by Yohan Naftali for educational purpose only 
// Reader who will use this signal must do own research
///////////////////////////////////////////////////////////////////////////////
strategy(
     title = 'Heikin Ashi Candle Startegy Long',  
     shorttitle = 'HA Strategy Long',  
     format = format.price,
     precision = 0,
     overlay = true)

// Input
validationPeriod = input.int( 
     defval = 3, 
     title = 'Validation Period', 
     group = 'Candle')

qtyOrder = input.float(
     defval = 1.0,
     title = 'Qty', 
     group = 'Order')

maxActive = input.float(
     defval = 1.0,
     title = 'Maximum Active Open Position', 
     group = 'Order')

// Long Strategy
tpLong = input.float(
     defval = 1,
     title = "Take Profit (%)",
     minval = 0.0, 
     step = 0.1, 
     group = "Long") * 0.01

slLong = input.float(
     defval = 25,
     title = "Stop Loss (%)", 
     minval=0.0, 
     step=0.1,
     group="Long") * 0.01

trailingStopLong = input.float(
     defval = 0.2,
     title = "Trailing Stop (%)",
     minval = 0.0, 
     step = 0.1,
     group = 'Long') * 0.01

// Calculation
haTicker = ticker.heikinashi(syminfo.tickerid)
haClose = request.security(haTicker, timeframe.period, close)
haOpen = request.security(haTicker, timeframe.period, open)

// Long
limitLong = tpLong > 0.0 ? strategy.position_avg_price * (1 + tpLong) : na
stopLong = slLong > 0.0 ? strategy.position_avg_price * (1 - slLong) : na
float trailLong = 0.0
trailLong := if strategy.position_size > 0
    trailClose = close * (1 - trailLong)
    math.max(trailClose, trailLong[1])
else
    0

isGreen = true
for i = 0 to validationPeriod-1
    isGreen := isGreen and haClose[i] > haOpen[i]        
isLong = isGreen and haClose[validationPeriod] < haOpen[validationPeriod]



plot(
     limitLong,
     title = 'Limit', 
     color = color.rgb(0, 0, 255, 0), 
     style = plot.style_stepline,
     linewidth = 1)

plot(
     trailLong,
     title = 'Trailing', 
     color = color.rgb(255, 255, 0, 0), 
     style = plot.style_stepline,
     linewidth = 1)

plot(
     stopLong,
     title = 'Stop', 
     style = plot.style_stepline,
     color = color.rgb(255, 0, 0, 0), 
     linewidth = 1)

// plotshape(
//      isLong, 
//      title = 'Entry', 
//      style = shape.arrowup, 
//      location = location.belowbar, 
//      offset = 1, 
//      color = color.new(color.green, 0), 
//      text = 'Long Entry',
//      size = size.small)

// Strategy
strategy.risk.max_position_size(maxActive)
strategy.risk.allow_entry_in(strategy.direction.long)

strategy.entry(
     id = "Long", 
     direction = strategy.long, 
     qty = qtyOrder,  
     when = isLong,       
     alert_message = "LN")
if (strategy.position_size > 0)
    strategy.exit(
         id = "Long Exit",
         from_entry = "Long",
         limit = limitLong,
         stop = stopLong,
         trail_price = trailLong,
         alert_message = "LX")      

Lebih lanjut