
Strategi perdagangan silang emas tiga rata-rata adalah strategi analisis teknis yang khas. Strategi ini menggunakan tiga rata-rata bergerak dengan panjang waktu yang berbeda untuk menangkap tren dan melakukan perdagangan berisiko rendah. Ini menghasilkan sinyal beli ketika rata-rata bergerak jangka pendek melewati rata-rata bergerak jangka menengah dan rata-rata bergerak jangka menengah lebih tinggi dari rata-rata bergerak jangka panjang. Ini menghasilkan sinyal jual ketika rata-rata bergerak jangka pendek melewati rata-rata bergerak jangka menengah dan rata-rata bergerak jangka menengah lebih rendah dari rata-rata bergerak jangka panjang.
Triple line GOLDEN CROSS Strategi ini mengandalkan tiga moving average untuk menentukan arah tren. Moving average jangka pendek dapat merespon sensitively terhadap perubahan harga; Moving average jangka menengah memberikan penilaian tren yang lebih jelas; Moving average jangka panjang memfilter kebisingan pasar untuk menentukan arah tren jangka panjang.
Ketika rata-rata bergerak jangka pendek melintasi rata-rata bergerak jangka menengah, berarti harga mulai menerobos ke atas; pada saat ini jika rata-rata bergerak jangka menengah lebih tinggi dari rata-rata bergerak jangka panjang, berarti saat ini sedang dalam tren bullish, jadi pada saat ini menghasilkan sinyal beli.
Sebaliknya, ketika rata-rata bergerak jangka pendek di bawah rata-rata bergerak jangka menengah, harga mulai menembus ke bawah; pada saat ini jika rata-rata bergerak jangka menengah lebih rendah dari rata-rata bergerak jangka panjang, itu berarti saat ini sedang dalam tren turun, jadi pada saat ini ada sinyal jual.
Strategi ini juga menetapkan batas stop loss. Setelah transaksi, stop loss dan harga stop loss akan dihitung berdasarkan rasio stop loss yang ditetapkan. Jika harga menyentuh batas stop loss atau stop loss, maka posisi ditutup.
Solusi: Sesuaikan parameter rata-rata bergerak dengan benar untuk menghindari sinyal yang salah
Solusi: Sesuaikan Stop Loss Stop Stop Ratio, tidak terlalu besar dan tidak terlalu kecil
Solusi: Uji berbagai parameter untuk menemukan kombinasi optimal
Strategi Trivalent Gold Cross dapat dioptimalkan dari beberapa aspek berikut:
Kombinasi moving average dengan panjang yang berbeda atau jenis yang berbeda dapat diuji untuk hasil trading yang optimal
Indikator lain seperti KDJ, MACD, dan lain-lain dapat dimasukkan ke dalam strategi untuk melakukan verifikasi multi-faktor, memfilter sinyal yang salah
Periode rata-rata bergerak dapat dipersingkat untuk varietas berfluktuasi tinggi; siklus rata-rata bergerak dapat diperpanjang untuk varietas berfluktuasi rendah
Menggunakan algoritma untuk secara otomatis menjelajahi ruang parameter dan dengan cepat menemukan parameter yang optimal
Triple Gold Cross Strategi adalah strategi pelacakan tren yang lebih sederhana dan praktis secara keseluruhan. Ini menggunakan tiga rata-rata bergerak untuk menangkap arah tren sekaligus, mengatur risiko pengendalian stop loss, dan mendapatkan 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)