
Strategi ini adalah sistem perdagangan kuantitatif berdasarkan sinyal persilangan rata-rata pergerakan sederhana (SMA) multi-periode. Ia terutama berdagang dengan mengidentifikasi peluang kemunduran jangka pendek dalam tren naik jangka panjang. Strategi ini menggunakan indikator SMA dengan lima periode: 5 hari, 10 hari, 20 hari, 60 hari, dan 120 hari untuk menilai tren pasar dan peluang perdagangan melalui hubungan posisi dan sinyal persilangan rata-rata pergerakan.
Logika inti dari strategi ini mencakup bagian-bagian utama berikut:
Strategi ini menggunakan rata-rata pergerakan SMA multiperiode untuk membangun sistem perdagangan yang berfokus pada penangkapan peluang kemunduran dalam tren naik jangka panjang. Desain strateginya ringkas dan praktis, dengan pemahaman dan penerapan yang baik. Dengan memperkenalkan langkah-langkah pengoptimalan seperti penyaringan volatilitas dan konfirmasi volume, ketahanan dan keandalan strategi diharapkan dapat lebih ditingkatkan.
/*backtest
start: 2019-12-23 08:00:00
end: 2025-01-04 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=6
strategy("Long-Term Growing Stock Strategy", overlay=true)
// Date Range
// STEP 1. Create inputs that configure the backtest's date range
useDateFilter = input.bool(true, title="Filter Date Range of Backtest",group="Backtest Time Period")
backtestStartDate = input(timestamp("1 Jan 2014"),title="Start Date", group="Backtest Time Period",tooltip="This start date is in the time zone of the exchange " + "where the chart's instrument trades. It doesn't use the time " +"zone of the chart or of your computer.")
backtestEndDate = input(timestamp("31 Dec 2024"), title="End Date", group="Backtest Time Period")
// STEP 2. See if current bar falls inside the date range
inTradeWindow = true
// Calculate EMAs
// ema20 = ta.ema(close, ema20_length)
// ema60 = ta.ema(close, ema60_length)
// ema120 = ta.ema(close, ema120_length)
sma5 = ta.sma(close, 5)
sma10 = ta.sma(close, 10)
sma20 = ta.sma(close, 20)
sma60 = ta.sma(close, 60)
sma120 = ta.sma(close, 120)
// Long-term growth condition: EMA 20 > EMA 60 > EMA 120
longTermGrowth = sma20 > sma60
// and ema60 > ema120
// Entry condition: Stock closes below EMA 20 and then rises back above EMA 10
// entryCondition = ta.crossover(close, ema20) or (close[1] < ema20[1] and close > ema20)
entryCondition = sma5[1] <= sma20[1] and sma5 > sma20
// ta.crossover(sma5, sma20)
// Exit condition: EMA 20 drops below EMA 60
// exitCondition = ema5 < ema60 or (year == 2024 and month == 12 and dayofmonth == 30)
exitCondition = ta.crossover(sma20, sma5)
// Execute trades
if entryCondition and inTradeWindow
strategy.entry("Long Entry", strategy.long)
if exitCondition and inTradeWindow
strategy.close("Long Entry")
// plotchar(true, char="sma5: " + str.tostring(sma5))
// plotchar(true, char="sma5: " + sma20)
// label.new(x=bar_index, y=high + 10, text="SMA 5: " + str.tostring(sma5), color=color.blue, style=label.style_label_down, textcolor=color.white, size=size.small)
// label.new(x=bar_index, y=low, text="SMA 20: " + str.tostring(sma20), color=color.red, style=label.style_label_down, textcolor=color.white, size=size.small)
// x = time + (time - time[1]) * offset_x
// var label lab = na
// label.delete(lab)
// lab := label.new(x=x, y=0, text=txt, xloc=xloc.bar_time, yloc=yloc.belowbar, color=color.red, textcolor=color.black, size=size.normal, style=label.style_label_up)
// label.set_x(lab, x)
// Plot EMAs for visualization
// plot(ema20, color=color.red, title="EMA 20")
// plot(ema60, color=color.green, title="EMA 60")
// plot(ema120, color=color.blue, title="EMA 120")