Sistem Crossover Purata Bergerak


Tarikh penciptaan: 2024-01-03 16:22:18 Akhirnya diubah suai: 2024-01-03 16:22:18
Salin: 1 Bilangan klik: 574
1
fokus pada
1621
Pengikut

Sistem Crossover Purata Bergerak

Gambaran keseluruhan

Strategi ini adalah strategi dagangan lebihan kosong, berdasarkan purata bergerak yang membentuk isyarat perdagangan. Isyarat beli dihasilkan apabila purata bergerak cepat melintasi purata bergerak perlahan dari bawah; isyarat jual dihasilkan apabila purata bergerak cepat melintasi purata bergerak perlahan dari atas ke bawah.

Prinsip Strategi

Strategi ini menggunakan dua purata bergerak, iaitu purata bergerak mudah 20 hari dan purata bergerak mudah 30 hari. Apabila purata bergerak 20 hari melintasi purata bergerak 30 hari dari bawah, ia menghasilkan isyarat beli; apabila purata bergerak 20 hari melintasi purata bergerak 30 hari dari atas ke bawah, ia menghasilkan isyarat jual.

Rata-rata bergerak itu sendiri sebagai satu petunjuk trend, yang dapat menggambarkan arah trend pasaran secara berkesan. Prinsip persilangan membolehkan strategi ini dapat menangkap titik perubahan trend tepat pada masanya, membentuk isyarat perdagangan. Dua tempoh panjang yang ditetapkan dengan betul pada hari ke-20 dan ke-30 dapat mencerminkan trend pasaran, tetapi tidak terlalu sensitif dan menghasilkan isyarat yang salah.

Analisis kelebihan

Kelebihan strategi ini adalah:

  1. Logik strategi mudah difahami, mudah difahami dan mudah dilaksanakan, sesuai untuk pelajar pemula;
  2. Berdagang dengan kadar terbalik, mengelakkan berdagang dengan kadar terbalik, dan mengurangkan kerugian yang tidak perlu.
  3. Rata-rata bergerak itu sendiri mempunyai kesan penapis yang boleh menghapuskan bunyi bising dan mengelakkan isyarat yang salah;
  4. Tetapan parameter kitaran adalah munasabah, tidak terlalu sensitif dan menjejaskan kestabilan strategi.

Analisis risiko

Strategi ini mempunyai risiko utama:

  1. Dalam keadaan yang tidak menentu, rata-rata bergerak sering bercampur, yang boleh menyebabkan lebih banyak stop loss;
  2. Dalam keadaan trend, purata bergerak akan tertinggal dan mungkin terlepas sebahagian daripada keuntungan;
  3. Parameter yang ditetapkan tidak tepat pada masanya akan menjejaskan kestabilan strategi.

Kaedah pencegahan:

  1. Pengesuaian kitaran purata bergerak, menggunakan teknik seperti purata bergerak segitiga untuk meratakan keluk, mengurangkan frekuensi persilangan;
  2. Membantu menentukan trend dengan indikator lain dan mengelakkan dagangan dalam keadaan yang tidak menentu;
  3. Optimumkan parameter, cari kombinasi parameter terbaik.

Arah pengoptimuman

Strategi ini boleh dioptimumkan dalam beberapa aspek:

  1. Cuba pelbagai jenis purata bergerak, seperti purata bergerak bertimbangan, purata bergerak trigonometri, dan lain-lain.
  2. Menambah penilaian terhadap petunjuk teknikal lain untuk mengelakkan isyarat dagangan dalam pasaran yang bergolak;
  3. Kaedah analisis teknikal seperti teori gelombang, teori saluran dan lain-lain untuk menilai trend;
  4. Menggunakan parameter pengoptimuman model masa nyata seperti pembelajaran mesin;
  5. Menggabungkan alat kuantitatif, menggunakan strategi stop loss untuk mengoptimumkan pengurusan wang.

ringkaskan

Sistem silang purata bergerak adalah strategi penjejakan trend yang mudah dan berkesan, asasnya jelas, mudah difahami, sangat sesuai untuk pelajar pemula. Strategi ini bergantung terutamanya pada purata bergerak untuk membentuk isyarat perdagangan, dan mendapat keuntungan melalui perdagangan yang bergerak.

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