Sistem Crossover Rata-rata Bergerak


Tanggal Pembuatan: 2024-01-03 16:22:18 Akhirnya memodifikasi: 2024-01-03 16:22:18
menyalin: 1 Jumlah klik: 574
1
fokus pada
1621
Pengikut

Sistem Crossover Rata-rata Bergerak

Ringkasan

Strategi ini adalah strategi trading over-the-counter yang menghasilkan sinyal trading berdasarkan moving average. Sinyal beli dihasilkan ketika moving average cepat melewati moving average lambat dari bawah; dan sinyal jual dihasilkan ketika moving average cepat melewati moving average lambat dari atas ke bawah.

Prinsip Strategi

Strategi ini menggunakan dua rata-rata bergerak, yaitu rata-rata bergerak sederhana 20 hari dan rata-rata bergerak sederhana 30 hari. Sinyal beli dihasilkan ketika rata-rata bergerak 20 hari melewati rata-rata bergerak 30 hari dari bawah; Sinyal jual dihasilkan ketika rata-rata bergerak 20 hari melewati rata-rata bergerak 30 hari dari atas.

Moving average sendiri merupakan indikator tren yang efektif dalam menggambarkan arah tren pasar. Prinsip silang memungkinkan strategi untuk menangkap titik-titik perubahan tren tepat waktu dan membentuk sinyal perdagangan. Dua siklus panjang yang disetel dengan benar pada hari ke-20 dan ke-30 dapat mencerminkan tren pasar, tetapi tidak terlalu sensitif dan menghasilkan sinyal yang salah.

Analisis Keunggulan

Keuntungan dari strategi ini adalah sebagai berikut:

  1. Strategi logis yang sederhana dan jelas, mudah dipahami dan diterapkan, cocok untuk pemula;
  2. Perdagangan dengan posisi terdepan, menghindari posisi terdepan, dapat mengurangi kerugian yang tidak perlu;
  3. Rata-rata bergerak sendiri memiliki efek penyaringan, yang dapat memfilter kebisingan perjalanan dan menghindari sinyal yang salah.
  4. Pengaturan parameter periodik masuk akal, tidak terlalu sensitif dan mempengaruhi stabilitas strategi.

Analisis risiko

Strategi ini memiliki risiko utama sebagai berikut:

  1. Pada saat bergejolak, rata-rata bergerak sering kali berselisih dan dapat menghasilkan lebih banyak stop loss;
  2. Pada saat tren terjadi, rata-rata bergerak tertinggal dan mungkin akan kehilangan sebagian dari keuntungan;
  3. Parameter yang tidak disetel pada saat yang tepat akan mempengaruhi stabilitas strategi.

Tanggapan:

  1. Adaptasi siklus rata-rata bergerak, menggunakan teknik seperti rata-rata bergerak segitiga untuk meluruskan kurva, mengurangi frekuensi persimpangan;
  2. Menggunakan indikator lain untuk menilai tren dan menghindari perdagangan dalam kondisi goncangan;
  3. Optimalkan parameter, cari kombinasi parameter terbaik.

Arah optimasi

Strategi ini dapat dioptimalkan dalam beberapa hal:

  1. Cobalah berbagai jenis rata-rata bergerak, seperti rata-rata bergerak berbobot, rata-rata bergerak segitiga, dan lain-lain.
  2. Menambahkan penilaian indikator teknis lainnya untuk menghindari sinyal perdagangan di pasar yang bergejolak;
  3. Mengidentifikasi tren pasar dengan metode analisis teknis seperti teori gelombang dan teori saluran;
  4. Optimalisasi parameter real-time dari model seperti pembelajaran mesin;
  5. Mengoptimalkan pengelolaan dana dengan menggunakan strategi stop loss dan stop loss yang digabungkan dengan alat kuantitatif.

Meringkaskan

Moving average crossover adalah strategi pelacakan tren yang sederhana dan efektif, prinsipnya jelas, mudah dipahami, sangat cocok untuk pemula. Strategi ini terutama bergantung pada pergerakan rata-rata untuk membentuk sinyal perdagangan, dan mendapatkan keuntungan melalui perdagangan yang berlanjut.

Kode Sumber Strategi
/*backtest
start: 2023-12-03 00:00:00
end: 2024-01-02 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/
// © gliese581d

//@version=4
strategy(title="Moving Averages Testing", overlay=true, precision=2, calc_on_every_tick=false, max_bars_back=5000, pyramiding=2,  
 default_qty_type=strategy.percent_of_equity, default_qty_value=50, commission_type=strategy.commission.percent, initial_capital=10000)


//SETTINGS

longs_on = input(title="Long Trades enabled", defval=true)
shorts_on = input(title="Short Trades enabled", defval=true)

long_cond = input(title="Buy/Long Crossover Condition", defval="price x MA1", options=["price x MA1", "price x MA2", "MA1 x MA2"])
short_cond = input(title="Sell/Short Crossunder Condition", defval="price x MA2", options=["price x MA1", "price x MA2", "MA1 x MA2"])

ma1_type = input(title="Moving Average 1 Type", defval="SMA", options=["SMA", "EMA"])
ma1_len = input(defval=20, title="Moving Average 1 Len", type=input.integer, minval=1, maxval=1000, step=1)
ma2_type = input(title="Moving Average 2 Type", defval="SMA", options=["SMA", "EMA"])
ma2_len = input(defval=30, title="Moving Average 2 Len", type=input.integer, minval=1, maxval=1000, step=1)


//MOVING AVERAGES

ma_1 = ma1_type == "EMA" ? ema(close, ma1_len) : sma(close, ma1_len)
ma_2 = ma2_type == "EMA" ? ema(close, ma2_len) : sma(close, ma2_len)


//STRATEGY

//trade entries
long_entry = long_cond == "price x MA1" ? crossover(close, ma_1) : long_cond == "price x MA2" ? crossover(close, ma_2) : long_cond == "MA1 x MA2" ? crossover(ma_1, ma_2) : false
short_entry = short_cond == "price x MA1" ? crossunder(close, ma_1) : short_cond == "price x MA2" ? crossunder(close, ma_2) : short_cond == "MA1 x MA2" ? crossunder(ma_1, ma_2) : false

start_month = input(defval=4, title="Strategy Start Month", type=input.integer, minval=1, maxval=12, step=1)
start_year = input(defval=2018, title="Strategy Start Year", type=input.integer, minval=2000, maxval=2025, step=1)
end_month = input(defval=12, title="Strategy End Month", type=input.integer, minval=1, maxval=12, step=1)
end_year = input(defval=2020, title="Strategy End Year", type=input.integer, minval=2000, maxval=2025, step=1)

in_time =true

strategy.entry("Long", strategy.long, when=longs_on and in_time and long_entry)
strategy.close("Long", when=longs_on and not shorts_on and short_entry)

strategy.entry("Short", strategy.short, when=shorts_on and in_time and short_entry)
strategy.close("Short", when=shorts_on and not longs_on and long_entry)


//PLOTTING

//color background
last_entry_was_long = nz(barssince(long_entry)[1], 5000) < nz(barssince(short_entry)[1], 5000)
bgcol = (longs_on and last_entry_was_long) ? color.green : (shorts_on and not last_entry_was_long) ? color.red : na
bgcolor(color=bgcol, transp=90)

plot((long_cond == "price x MA1" or long_cond == "MA1 x MA2") or (short_cond == "price x MA1" or short_cond == "MA1 x MA2") ? ma_1 : na, color=color.blue)
plot((long_cond == "price x MA2" or long_cond == "MA1 x MA2") or (short_cond == "price x MA2" or short_cond == "MA1 x MA2") ? ma_2 : na, color=color.black)
plotshape(long_entry, style=shape.triangleup, location=location.belowbar, color=color.green)
plotshape(short_entry, style=shape.triangledown, location=location.abovebar, color=color.red)