Strategi Perdagangan Sistem Purata Bergerak

Penulis:ChaoZhang, Tarikh: 2024-01-05 15:36:00
Tag:

img

Ringkasan

Artikel ini membincangkan strategi perdagangan berdasarkan purata bergerak mudah. Strategi ini membandingkan harga penutupan dengan purata bergerak 17 tempoh, pergi lama apabila harga penutupan melintasi di atas purata bergerak dan pergi pendek apabila melintasi di bawah.

Logika Strategi

Pengiraan purata bergerak

Strategi menggunakan parameter berikut untuk mengira purata bergerak:

  • Sumber MA: Default kepada purata OHLC (OHLC4)
  • Jenis MA: Default kepada Purata Bergerak Sederhana (SMA)
  • MA Length: Default kepada 17

Berdasarkan parameter ini, fungsi getMAType (() dipanggil untuk mengira SMA 17 tempoh harga penutupan.

Generasi Isyarat Dagangan

Kemudian bandingkan hubungan antara harga penutupan dan purata bergerak:

  • Tutup > Purata Bergerak: Isyarat panjang
  • Tutup < Purata Bergerak: Isyarat Pendek

Apabila harga penutupan melintasi di atas purata bergerak dari bawah, isyarat panjang dihasilkan. Apabila melintasi di bawah dari atas, isyarat pendek dihasilkan.

Pelaksanaan Perdagangan

Semasa tempoh backtest, buka kedudukan panjang apabila isyarat panjang muncul dan buka kedudukan pendek apabila isyarat pendek muncul.

Analisis Kelebihan

Kelebihan terbesar strategi ini adalah bahawa logiknya sangat mudah dan jelas. Dengan hanya satu penunjuk, ia menilai pembalikan trend berdasarkan perubahan arah penunjuk. Strategi ini mudah difahami dan dilaksanakan, sesuai untuk pemula belajar.

Di samping itu, purata bergerak termasuk dalam penunjuk trend, yang dapat dengan berkesan mengesan perubahan trend dan mengelakkan gangguan oleh bunyi pasaran jangka pendek.

Dengan menyesuaikan parameter, ia boleh menyesuaikan diri dengan kitaran yang berbeza dan produk yang berbeza.

Analisis Risiko

Pertama, strategi ini hanya bergantung kepada satu penunjuk, jadi kriteria penilaian agak tunggal, yang boleh menghasilkan lebih banyak isyarat palsu.

Juga, sebagai sistem yang mengikuti trend, ia tidak berfungsi dengan baik di pasaran terhad dan sampingan.

Selain itu, tanpa stop loss atau mengambil keuntungan, terdapat risiko peningkatan kerugian.

Penyelesaian adalah untuk menggabungkan penunjuk lain, mengoptimumkan kombinasi parameter untuk mengurangkan isyarat palsu. Tambah stop loss dan mengambil keuntungan untuk mengawal risiko dan mengoptimumkan drawdowns.

Arahan pengoptimuman

Berikut adalah beberapa idea untuk mengoptimumkan strategi:

  1. Penyesuaian parameter purata bergerak, mengoptimumkan nombor tempoh, contohnya perubahan kepada tempoh 30 atau 50.

  2. Cuba pelbagai jenis purata bergerak, seperti EMA, VIDYA dan lain-lain. Mereka mempunyai sensitiviti yang berbeza terhadap perubahan harga.

  3. Tambah penunjuk lain dalam kombinasi, contohnya MACD untuk menilai kekuatan; RSI untuk mengurangkan isyarat palsu.

  4. Tambah mekanisme stop loss. Tetapkan peratusan tetap atau kehilangan stop trailing berdasarkan ATR untuk mengawal jumlah kerugian perdagangan tunggal.

  5. Tambah mekanisme mengambil keuntungan. Tetapkan peratusan keuntungan sasaran untuk memaksimumkan keuntungan.

Pengoptimuman ini boleh menjadikan prestasi strategi lebih stabil dan mengelakkan pengeluaran yang berlebihan.

Ringkasan

Artikel ini menganalisis strategi dagangan yang mudah berdasarkan purata bergerak 17 tempoh. Strategi ini mempunyai sumber isyarat yang mudah difahami dan dilaksanakan, yang tergolong dalam sistem trend berikut yang tipikal. Melalui tafsiran mendalam mengenai strategi, kebaikan dan keburukan ia dianalisis, dan pelbagai dimensi idea pengoptimuman dicadangkan.


/*backtest
start: 2023-12-05 00:00:00
end: 2024-01-04 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Simple 17 BF 🚀", overlay=true, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.0)

/////////////// Time Frame ///////////////
testStartYear = input(2012, "Backtest Start Year") 
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay, 0, 0)

testStopYear = input(2019, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(31, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay, 0, 0)

testPeriod() => true

///////////// Moving Average /////////////
source = input(title="MA Source", defval=ohlc4)
maType = input(title="MA Type", defval="sma", options=["sma", "ema", "swma", "wma", "vwma", "rma"])
length = input(title="MA Length", defval=17)

///////////// Get MA Function /////////////
getMAType(maType, sourceType, maLen) => 
    res = sma(close, 1)
    
    if maType == "ema"
        res := ema(sourceType, maLen)
    if maType == "sma"
        res := sma(sourceType, maLen)
    if maType == "swma"
        res := swma(sourceType)
    if maType == "wma"
        res := wma(sourceType, maLen)
    if maType == "vwma"
        res := vwma(sourceType, maLen)
    if maType == "rma"
        res := rma(sourceType, maLen)
    res
    
MA = getMAType(maType, source, length)

/////////////// Strategy ///////////////
long = close > MA
short = close < MA

last_long = 0.0
last_short = 0.0
last_long := long ? time : nz(last_long[1])
last_short := short ? time : nz(last_short[1])

long_signal = crossover(last_long, last_short)
short_signal = crossover(last_short, last_long)

/////////////// Execution /////////////// 
if testPeriod()
    strategy.entry("L", strategy.long, when=long_signal)
    strategy.entry("S", strategy.short, when=short_signal)

/////////////// Plotting /////////////// 
p1 = plot(MA, color = long ? color.lime : color.red, linewidth=2)
p2 = plot(close, linewidth=2)
fill(p1, p2, color=strategy.position_size > 0 ? color.lime : strategy.position_size < 0 ? color.red : color.white, transp=80)

Lebih lanjut