Sumber daya yang dimuat... Pemuatan...

Strategi Trading Sistem Rata-rata Bergerak

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

img

Gambaran umum

Artikel ini membahas strategi perdagangan berdasarkan rata-rata bergerak sederhana. Strategi ini membandingkan harga penutupan dengan rata-rata bergerak 17 periode, pergi panjang ketika harga penutupan melintasi di atas rata-rata bergerak dan pergi pendek ketika melintasi di bawah.

Logika Strategi

Perhitungan Rata-rata Bergerak

Strategi menggunakan parameter berikut untuk menghitung rata-rata bergerak:

  • Sumber MA: Default ke rata-rata OHLC (OHLC4)
  • Tipe MA: Default to Simple Moving Average (SMA)
  • MA Length: Default ke 17

Berdasarkan parameter-parameter ini, fungsi getMAType() dipanggil untuk menghitung SMA 17 periode harga penutupan.

Generasi Sinyal Trading

Kemudian bandingkan hubungan antara harga penutupan dan rata-rata bergerak:

  • Tutup > Rata-rata Gerak: Sinyal panjang
  • Tutup < Rata-rata Gerak: Sinyal Pendek

Ketika harga penutupan melintasi di atas rata-rata bergerak dari bawah, sinyal panjang dihasilkan.

Eksekusi Perdagangan

Selama periode backtest, buka posisi panjang ketika sinyal panjang muncul dan buka posisi pendek ketika sinyal pendek muncul.

Analisis Keuntungan

Keuntungan terbesar dari strategi ini adalah bahwa logika sangat sederhana dan jelas. Dengan hanya satu indikator, ia menilai pembalikan tren berdasarkan perubahan arah indikator. Strategi ini mudah dipahami dan diterapkan, cocok untuk pemula untuk belajar.

Selain itu, rata-rata bergerak termasuk indikator yang mengikuti tren, yang dapat secara efektif melacak perubahan tren dan menghindari gangguan dari kebisingan pasar jangka pendek.

Dengan menyesuaikan parameter, dapat beradaptasi dengan siklus dan produk yang berbeda.

Analisis Risiko

Pertama, strategi ini hanya didasarkan pada satu indikator, sehingga kriteria penilaian relatif tunggal, yang dapat menghasilkan lebih banyak sinyal palsu.

Juga, sebagai sistem yang mengikuti tren, tidak bekerja dengan baik di pasar yang terikat rentang dan samping.

Selain itu, tanpa stop loss atau take profit, ada risiko ekspansi kerugian.

Solusinya adalah menggabungkan indikator lain, mengoptimalkan kombinasi parameter untuk mengurangi sinyal palsu. Tambahkan stop loss dan mengambil keuntungan untuk mengendalikan risiko dan mengoptimalkan drawdowns.

Arahan Optimasi

Berikut adalah beberapa ide untuk mengoptimalkan strategi:

  1. Mengatur parameter rata-rata bergerak, mengoptimalkan jumlah periode, misalnya perubahan ke periode 30 atau 50.

  2. Cobalah berbagai jenis moving average, seperti EMA, VIDYA dll. Mereka memiliki sensitivitas yang berbeda terhadap perubahan harga.

  3. Tambahkan indikator lain dalam kombinasi, misalnya MACD untuk menilai kekuatan; RSI untuk mengurangi sinyal palsu.

  4. Tambahkan mekanisme stop loss. Atur persentase tetap atau stop loss trailing berbasis ATR untuk mengontrol jumlah kerugian perdagangan tunggal.

  5. Tambahkan mekanisme mengambil keuntungan. Tetapkan persentase keuntungan target untuk memaksimalkan keuntungan.

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

Ringkasan

Artikel ini menganalisis strategi perdagangan sederhana berdasarkan rata-rata bergerak 17 periode. Strategi ini memiliki sumber sinyal sederhana, mudah dipahami dan diimplementasikan, yang termasuk dalam sistem trend berikut yang khas. Melalui interpretasi mendalam strategi, pro dan kontra-nya dianalisis, dan beberapa dimensi ide-ide pengoptimalan diusulkan. Diyakini bahwa melalui pengoptimalan dan pengayaan berkelanjutan, strategi ini dapat secara bertahap berkembang dan mencapai pengembalian yang stabil dalam perdagangan langsung juga.


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