Strategi Perdagangan Sistem Rata-rata Bergerak


Tanggal Pembuatan: 2024-01-05 15:36:00 Akhirnya memodifikasi: 2024-01-05 15:36:00
menyalin: 1 Jumlah klik: 683
1
fokus pada
1617
Pengikut

Strategi Perdagangan Sistem Rata-rata Bergerak

Ringkasan

Artikel ini membahas tentang strategi trading yang didasarkan pada moving average sederhana. Strategi ini menggunakan moving average dengan panjang 17 untuk membandingkan dengan harga close out, melakukan over saat harga close out melewati moving average, dan melakukan over saat crossing.

Prinsip Strategi

Penghitungan rata-rata bergerak

Strategi ini menggunakan parameter berikut untuk menghitung moving average:

  • MA sumber: default rata-rata OHLC ((OHCL4))
  • Jenis MA: default Simple Moving Average (SMA)
  • Panjang MA: 17 secara default

Berdasarkan parameter ini, fungsi getMAType (() akan dihubungi untuk menghitung harga penutupan SMA selama 17 siklus.

Sinyal perdagangan dihasilkan

Kemudian bandingkan hubungan harga close out dengan moving average:

  • Harga penutupan > Rata-rata bergerak: sinyal posisi panjang
  • Harga penutupan < Moving Average: sinyal kosong

Ketika harga penutupan melewati moving average dari bawah, menghasilkan sinyal melakukan lebih banyak; ketika melewati dari atas ke bawah, menghasilkan sinyal melakukan lebih sedikit.

Eksekusi transaksi

Dalam periode pengamatan ulang, jika terjadi sinyal melakukan lebih banyak, maka akan dibuka lebih banyak posisi, dan jika terjadi sinyal melakukan lebih sedikit maka akan dibuka posisi kosong.

Analisis Keunggulan

Keuntungan terbesar dari strategi ini adalah bahwa ide sangat sederhana dan jelas. Hanya satu indikator untuk menilai perubahan tren dengan pergeseran arahnya. Strategi ini mudah dimengerti, mudah diterapkan, dan cocok untuk pemula.

Selain itu, Moving Average adalah indikator jenis trend tracker yang dapat secara efektif melacak perubahan tren dan menghindari gangguan dari kebisingan jangka pendek di pasar.

Dengan penyesuaian parameter, dapat disesuaikan dengan siklus yang berbeda dan varietas yang berbeda.

Analisis risiko

Pertama, strategi ini hanya didasarkan pada satu indikator, dan penghakiman yang lebih sederhana dapat menghasilkan lebih banyak sinyal yang salah.

Dan, strategi ini adalah sistem pelacakan tren yang tidak dapat bekerja dengan baik di pasar yang stabil dan bergejolak.

Selain itu, tidak ada stop loss yang ditetapkan, ada risiko peningkatan kerugian.

Solusinya adalah menggabungkan indikator lainnya, mengoptimalkan kombinasi parameter, mengurangi sinyal yang salah. Atur stop loss, kendalikan risiko, dan optimalkan penarikan.

Arah optimasi

Beberapa aspek yang dapat digunakan sebagai ide untuk mengoptimalkan strategi:

  1. Menyesuaikan parameter moving average, mengoptimalkan jumlah siklus. Misalnya, mengubahnya menjadi 30 siklus atau 50 siklus dan sebagainya.

  2. Cobalah berbagai jenis moving average, seperti EMA, VIDA, dan lain-lain. Mereka memiliki sensitivitas yang berbeda terhadap perubahan harga.

  3. Menambahkan kombinasi dengan indikator lain. Misalnya, dengan MACD, Anda dapat menilai kekuatan. Atau dengan RSI, Anda dapat mengurangi sinyal yang salah.

  4. Meningkatkan mekanisme stop loss. Menetapkan stop loss bergerak dengan persentase tetap atau nilai ATR. Mengontrol kerugian tunggal.

  5. Menambahkan mekanisme penangguhan. Menetapkan target persentase keuntungan. Memaksimalkan keuntungan.

Optimisasi ini dapat membuat kinerja strategi lebih stabil dan menghindari penarikan yang berlebihan.

Meringkaskan

Artikel ini menganalisis strategi perdagangan sederhana berdasarkan rata-rata bergerak 17 periode. Sumber sinyal strategi sederhana, mudah dipahami dan diimplementasikan, termasuk dalam sistem pelacakan tren yang khas. Dengan penafsiran mendalam tentang strategi, analisis keunggulan dan risikonya, dan ide optimasi multi-dimensi diberikan.

Kode 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)