
Strategi perdagangan silang emas tiga garis rata adalah strategi analisis teknikal tipikal. Strategi ini menggunakan tiga purata bergerak dengan panjang masa yang berbeza untuk menangkap trend pada masa yang sama dan melakukan perdagangan berisiko rendah. Ia menghasilkan isyarat beli apabila rata-rata bergerak jangka pendek melintasi rata-rata bergerak jangka menengah dan rata-rata bergerak jangka menengah lebih tinggi daripada rata-rata bergerak jangka panjang. Ia menghasilkan isyarat jual apabila rata-rata bergerak jangka pendek melintasi rata-rata bergerak jangka menengah dan rata-rata bergerak jangka menengah lebih rendah daripada rata-rata bergerak jangka panjang.
Triple line GOLDEN CROSS strategi bergantung kepada tiga purata bergerak untuk menentukan arah trend. Purata bergerak jangka pendek dapat merespons perubahan harga dengan sensitively; purata bergerak jangka menengah memberikan penilaian trend yang lebih jelas; purata bergerak jangka panjang menapis bunyi pasaran dan menentukan arah trend jangka panjang.
Apabila purata bergerak jangka pendek melintasi purata bergerak jangka menengah, menunjukkan harga mula menembusi ke atas; pada masa ini jika purata bergerak jangka menengah lebih tinggi daripada purata bergerak jangka panjang, menunjukkan bahawa ia kini berada dalam momentum yang tinggi, jadi pada masa ini menghasilkan isyarat beli.
Sebaliknya, apabila purata bergerak jangka pendek di bawah purata bergerak jangka menengah, menunjukkan harga mula menembusi ke bawah; pada masa ini jika purata bergerak jangka menengah lebih rendah daripada purata bergerak jangka panjang, menunjukkan bahawa ia kini berada dalam trend menurun, jadi pada masa ini menghasilkan isyarat menjual.
Strategi ini juga menetapkan had stop loss. Selepas berdagang, harga stop loss dan stop loss akan dikira berdasarkan nisbah stop loss dan stop loss yang ditetapkan. Jika harga menyentuh had stop loss atau stop loss, ia akan keluar dari kedudukan.
Penyelesaian: Sesuai menyesuaikan parameter purata bergerak untuk mengelakkan isyarat yang salah
Penyelesaian: Sesuaikan nisbah stop loss yang betul, tidak terlalu besar dan tidak terlalu kecil
Penyelesaian: Uji pelbagai parameter untuk mencari kombinasi optimum
Strategi silang emas trivial boleh dioptimumkan dalam beberapa aspek:
Anda boleh menguji kombinasi purata bergerak dengan panjang yang berbeza atau jenis yang berbeza untuk mendapatkan hasil dagangan yang terbaik
Indikator lain seperti KDJ, MACD dan lain-lain boleh dimasukkan ke dalam strategi, untuk mengesahkan pelbagai faktor, menapis isyarat yang salah
Boleh memendekkan kitaran purata bergerak untuk varieti bergelombang tinggi; memanjangkan kitaran purata bergerak untuk varieti bergelombang rendah
Menggunakan algoritma untuk bergerak secara automatik melalui ruang parameter untuk mencari parameter yang optimum dengan cepat
Triple line GOLDEN CROSS adalah strategi trend-tracking yang lebih mudah dan praktikal secara keseluruhan. Ia menggunakan tiga purata bergerak untuk menangkap arah trend, menetapkan risiko kawalan henti-henti, dan dapat memperoleh keuntungan yang stabil.
/*backtest
start: 2024-01-08 00:00:00
end: 2024-01-15 00:00:00
period: 5m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=3
strategy("Kozlod - 3 MA strategy with SL/PT", shorttitle="kozlod_3ma", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 5)
//
// author: Kozlod
// date: 2018-03-25
//
////////////
// INPUTS //
////////////
ma_type = input(title = "MA Type", defval = "SMA", options = ['SMA', 'EMA', 'WMA', 'VWMA', 'HMA', 'SMMA', 'DEMA'])
short_ma_len = input(title = "Short MA Length", defval = 5, minval = 1)
short_ma_src = input(title = "Short MA Source", defval = close)
medium_ma_len = input(title = "Medium MA Length", defval = 20, minval = 2)
medium_ma_src = input(title = "Medium MA Source", defval = close)
long_ma_len = input(title = "Long MA Length", defval = 100, minval = 3)
long_ma_src = input(title = "Long MA Source", defval = close)
sl_lev_perc = input(title = "SL Level % (0 - Off)", type = float, defval = 0, minval = 0, step = 0.01)
pt_lev_perc = input(title = "PT Level % (0 - Off)", type = float, defval = 0, minval = 0, step = 0.01)
// Set initial values to 0
short_ma = 0.0
long_ma = 0.0
medium_ma = 0.0
// Simple Moving Average (SMA)
if ma_type == 'SMA'
short_ma := sma(short_ma_src, short_ma_len)
medium_ma := sma(medium_ma_src, medium_ma_len)
long_ma := sma(long_ma_src, long_ma_len)
// Exponential Moving Average (EMA)
if ma_type == 'EMA'
short_ma := ema(short_ma_src, short_ma_len)
medium_ma := ema(medium_ma_src, medium_ma_len)
long_ma := ema(long_ma_src, long_ma_len)
// Weighted Moving Average (WMA)
if ma_type == 'WMA'
short_ma := wma(short_ma_src, short_ma_len)
medium_ma := wma(medium_ma_src, medium_ma_len)
long_ma := wma(long_ma_src, long_ma_len)
// Hull Moving Average (HMA)
if ma_type == 'HMA'
short_ma := wma(2*wma(short_ma_src, short_ma_len / 2) - wma(short_ma_src, short_ma_len), round(sqrt(short_ma_len)))
medium_ma := wma(2*wma(medium_ma_src, medium_ma_len / 2) - wma(medium_ma_src, medium_ma_len), round(sqrt(medium_ma_len)))
long_ma := wma(2*wma(long_ma_src, long_ma_len / 2) - wma(long_ma_src, long_ma_len), round(sqrt(long_ma_len)))
// Volume-weighted Moving Average (VWMA)
if ma_type == 'VWMA'
short_ma := vwma(short_ma_src, short_ma_len)
medium_ma := vwma(medium_ma_src, medium_ma_len)
long_ma := vwma(long_ma_src, long_ma_len)
// Smoothed Moving Average (SMMA)
if ma_type == 'SMMA'
short_ma := na(short_ma[1]) ? sma(short_ma_src, short_ma_len) : (short_ma[1] * (short_ma_len - 1) + short_ma_src) / short_ma_len
medium_ma := na(medium_ma[1]) ? sma(medium_ma_src, medium_ma_len) : (medium_ma[1] * (medium_ma_len - 1) + medium_ma_src) / medium_ma_len
long_ma := na(long_ma[1]) ? sma(long_ma_src, long_ma_len) : (long_ma[1] * (long_ma_len - 1) + long_ma_src) / long_ma_len
// Double Exponential Moving Average (DEMA)
if ma_type == 'DEMA'
e1_short = ema(short_ma_src , short_ma_len)
e1_medium = ema(medium_ma_src, medium_ma_len)
e1_long = ema(long_ma_src, long_ma_len)
short_ma := 2 * e1_short - ema(e1_short, short_ma_len)
medium_ma := 2 * e1_medium - ema(e1_medium, medium_ma_len)
long_ma := 2 * e1_long - ema(e1_long, long_ma_len)
/////////////
// SIGNALS //
/////////////
long_signal = crossover( short_ma, medium_ma) and medium_ma > long_ma
short_signal = crossunder(short_ma, medium_ma) and medium_ma < long_ma
// Calculate PT/SL levels
// Initial values
last_signal = 0
prev_tr_price = 0.0
pt_level = 0.0
sl_level = 0.0
// Calculate previous trade price
prev_tr_price := (long_signal[1] and nz(last_signal[2]) != 1) or (short_signal[1] and nz(last_signal[2]) != -1) ? open : nz(last_signal[1]) != 0 ? prev_tr_price[1] : na
// Calculate SL/PT levels
pt_level := nz(last_signal[1]) == 1 ? prev_tr_price * (1 + pt_lev_perc / 100) : nz(last_signal[1]) == -1 ? prev_tr_price * (1 - pt_lev_perc / 100) : na
sl_level := nz(last_signal[1]) == 1 ? prev_tr_price * (1 - sl_lev_perc / 100) : nz(last_signal[1]) == -1 ? prev_tr_price * (1 + sl_lev_perc / 100) : na
// Calculate if price hit sl/pt
long_hit_pt = pt_lev_perc > 0 and nz(last_signal[1]) == 1 and close >= pt_level
long_hit_sl = sl_lev_perc > 0 and nz(last_signal[1]) == 1 and close <= sl_level
short_hit_pt = pt_lev_perc > 0 and nz(last_signal[1]) == -1 and close <= pt_level
short_hit_sl = sl_lev_perc > 0 and nz(last_signal[1]) == -1 and close >= sl_level
// What is last active trade?
last_signal := long_signal ? 1 : short_signal ? -1 : long_hit_pt or long_hit_sl or short_hit_pt or short_hit_sl ? 0 : nz(last_signal[1])
//////////////
// PLOTTING //
//////////////
// Plot MAs
plot(short_ma, color = red, linewidth = 2)
plot(medium_ma, color = green, linewidth = 2)
plot(long_ma, color = yellow, linewidth = 2)
// Plot Levels
plotshape(prev_tr_price, style = shape.cross, color = gray, location = location.absolute, size = size.small)
plotshape(sl_lev_perc > 0 ? sl_level : na, style = shape.cross, color = red, location = location.absolute, size = size.small)
plotshape(pt_lev_perc > 0 ? pt_level : na, style = shape.cross, color = green, location = location.absolute, size = size.small)
//////////////
// STRATEGY //
//////////////
strategy.entry("long", true, when = long_signal)
strategy.entry("short", false, when = short_signal)
strategy.close("long", when = long_hit_pt or long_hit_sl)
strategy.close("short", when = short_hit_pt or short_hit_sl)