
Strategi ini adalah sistem perdagangan pelacakan tren yang didasarkan pada bull market support band. Ini terutama menggunakan sinyal silang dari 20 minggu SMA dan 21 minggu EMA untuk menentukan arah tren pasar dan kemudian membuat keputusan perdagangan. Strategi ini mengirimkan lebih banyak sinyal saat dua garis lurus berlawanan ke atas, dan posisi kosong saat berlawanan ke bawah, untuk mendapatkan keuntungan dengan menangkap peluang tren jangka menengah dan panjang.
Logika inti dari strategi ini adalah untuk menilai tren pasar dengan memantau hubungan posisi relatif antara dua garis rata-rata, yaitu 20 minggu SMA dan 21 minggu EMA. Ketika garis rata-rata jangka pendek (20 minggu SMA) dari bawah menembus garis rata-rata jangka panjang (21 minggu EMA), menunjukkan bahwa pasar mungkin membentuk tren naik, sistem akan membuka posisi lebih banyak pada saat itu; Ketika garis rata-rata jangka pendek dari atas jatuh, menunjukkan bahwa tren naik mungkin berakhir, sistem akan keluar dari posisi kosong pada saat itu.
Strategi perdagangan bull market support band adalah sistem pelacakan tren yang didasarkan pada teori analisis teknis klasik. Strategi ini menangkap peluang tren jangka menengah dan panjang melalui persilangan rata-rata di tingkat garis lingkaran, dengan karakteristik logika yang jelas dan risiko yang dapat dikendalikan. Namun, strategi ini tidak berkinerja baik di pasar yang bergoyang, dan ada beberapa keterlambatan. Dengan menambahkan indikator tambahan, mengoptimalkan mekanisme stop loss, dan memperbaiki manajemen dana, strategi ini memiliki ruang pengoptimalan yang lebih besar.
/*backtest
start: 2019-12-23 08:00:00
end: 2024-12-25 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This source code is subject to the terms of the Mozilla Public License 2.0
// © zkdev
//@version=6
strategy(title='Demo GPT - Bull Market Support Band',
overlay=true,
default_qty_type=strategy.percent_of_equity,
default_qty_value=100,
commission_type=strategy.commission.percent,
commission_value=0.1,
slippage=3)
// -------------------------------------------------------------------------
// Compile-time timestamp constants for default date range
// (2018-01-01 00:00:00 UTC -> 1514764800000
// 2069-12-31 23:59:59 UTC -> 3155759999000)
// -------------------------------------------------------------------------
const int defaultFromDate = 1514764800000
const int defaultToDate = 3155759999000
// -------------------------------------------------------------------------
// Inputs: date range
// -------------------------------------------------------------------------
fromDate = input(title='Start Date', defval=defaultFromDate)
toDate = input(title='End Date', defval=defaultToDate)
// -------------------------------------------------------------------------
// Indicator settings & calculations
// -------------------------------------------------------------------------
smaLength = 20
emaLength = 21
source = close
sma = ta.sma(source, smaLength)
ema = ta.ema(source, emaLength)
// -------------------------------------------------------------------------
// Fetch weekly SMA & EMA
// -------------------------------------------------------------------------
outSma = request.security(syminfo.tickerid, 'W', sma, gaps=barmerge.gaps_on, lookahead=barmerge.lookahead_off)
outEma = request.security(syminfo.tickerid, 'W', ema, gaps=barmerge.gaps_on, lookahead=barmerge.lookahead_off)
// -------------------------------------------------------------------------
// Plot visuals (20w SMA, 21w EMA, fill in between)
// -------------------------------------------------------------------------
smaPlot = plot(outSma, color=color.new(color.red, 0), title='20w SMA')
emaPlot = plot(outEma, color=color.new(color.green, 0), title='21w EMA')
fill(smaPlot, emaPlot, color=color.new(color.orange, 75), fillgaps=true)
// -------------------------------------------------------------------------
// We evaluate crossover/crossunder on *every bar* and store the result
// -------------------------------------------------------------------------
crossUp = ta.crossover(outSma, outEma)
crossDown = ta.crossunder(outSma, outEma)
// -------------------------------------------------------------------------
// Trade logic: only operate within chosen date range
// Buy when outSma crosses above outEma; Sell (close) when outSma crosses below outEma
// -------------------------------------------------------------------------
inDateRange = true
if inDateRange
// If we have a crossUp event on this bar, buy (go Long)
if crossUp
strategy.entry('Long', strategy.long)
// If we have a crossDown event on this bar, sell (close Long)
if crossDown
strategy.close('Long')