
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.
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.
Kelebihan strategi ini adalah:
Strategi ini mempunyai risiko utama:
Kaedah pencegahan:
Strategi ini boleh dioptimumkan dalam beberapa aspek:
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.
/*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)