Strategi Perdagangan Sistem Purata Bergerak


Tarikh penciptaan: 2024-01-05 15:36:00 Akhirnya diubah suai: 2024-01-05 15:36:00
Salin: 1 Bilangan klik: 683
1
fokus pada
1617
Pengikut

Strategi Perdagangan Sistem Purata Bergerak

Gambaran keseluruhan

Ini adalah strategi perdagangan berdasarkan purata bergerak sederhana. Strategi ini menggunakan purata bergerak dengan panjang 17 untuk membandingkan dengan harga penutupan, melakukan lebih banyak ketika melintasi purata bergerak pada harga penutupan, dan melakukan kosong ketika melintasi.

Prinsip Strategi

Pengiraan purata bergerak

Strategi ini menggunakan parameter berikut untuk mengira purata bergerak:

  • Sumber MA: purata default OHLC ((OHCL4))
  • Jenis MA: purata bergerak mudah (SMA) secara lalai
  • Panjang MA: 17 secara lalai

Berdasarkan parameter ini, fungsi getMAType (()) akan dikesan untuk mengira harga penutupan SMA 17 kitaran.

Sinyal dagangan dihasilkan

Kemudian bandingkan harga penutupan dengan purata bergerak:

  • Harga penutupan > Purata bergerak: isyarat kedudukan panjang
  • Harga penutupan < purata bergerak: isyarat kosong

Apabila harga penutupan melintasi purata bergerak dari bawah, ia menghasilkan isyarat melakukan lebih; apabila melintasi dari atas ke bawah, ia menghasilkan isyarat melakukan lebih.

Pelaksanaan urus niaga

Dalam kitaran pengkajian semula, apabila terdapat isyarat melakukan lebih, maka akan dibuka lebih, dan apabila terdapat isyarat melakukan kurang maka akan dibuka kosong.

Analisis kelebihan

Kelebihan terbesar strategi ini adalah bahawa pemikiran sangat mudah dan jelas. Hanya satu petunjuk untuk menilai perubahan trend dengan perubahan arahnya. Strategi ini mudah difahami, mudah dilaksanakan, sesuai untuk pelajar pemula.

Tambahan pula, purata bergerak adalah penunjuk jenis trend-following, yang dapat mengesan perubahan trend dengan berkesan dan mengelakkan gangguan oleh bunyi jangka pendek di pasaran.

Dengan penyesuaian parameter, ia boleh disesuaikan dengan pelbagai kitaran dan pelbagai jenis.

Analisis risiko

Pertama, strategi ini hanya berdasarkan satu indikator, dan penghakiman yang lebih sederhana mungkin akan menghasilkan lebih banyak isyarat yang salah.

Selain itu, strategi ini adalah sistem untuk mengesan trend dan tidak boleh berfungsi dengan baik dalam pasaran yang stabil dan bergolak.

Tambahan pula, tiada set stop loss, dan terdapat risiko peningkatan kerugian.

Penyelesaiannya adalah menggabungkan indikator lain, mengoptimumkan kombinasi parameter, mengurangkan isyarat salah. Tetapkan hentian hentian, mengawal risiko, dan mengoptimumkan penarikan balik.

Arah pengoptimuman

Berikut adalah beberapa aspek yang boleh digunakan untuk mengoptimumkan strategi:

  1. Menyesuaikan parameter purata bergerak, mengoptimumkan bilangan kitaran. Sebagai contoh, berubah menjadi 30 kitaran atau 50 kitaran dan sebagainya.

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

  3. Menambah gabungan indikator lain. Sebagai contoh, gabungan dengan MACD, dapat menilai kekuatan. Atau gabungan dengan RSI, mengurangkan isyarat yang salah.

  4. Peningkatan mekanisme penangguhan. Tetapkan peratusan tetap atau penangguhan bergerak ATR. Kawalan kerugian tunggal.

  5. Menambah mekanisme penangguhan. Menetapkan peratusan keuntungan sasaran. Memaksimumkan keuntungan

Pengoptimuman ini dapat menstabilkan prestasi strategi dan mengelakkan penarikan balik yang berlebihan.

ringkaskan

Artikel ini menganalisis strategi perdagangan mudah berdasarkan purata bergerak 17 kitaran. Sumber isyarat strategi mudah, mudah difahami dan dilaksanakan, termasuk dalam sistem pengesanan trend yang tipikal. Dengan menafsirkan strategi secara mendalam, analisis kelebihan dan risikonya, dan memberikan pemikiran pengoptimuman pelbagai dimensi.

Kod sumber strategi
/*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)