
Strategi ini adalah sistem perdagangan pelacakan tren yang didasarkan pada rata-rata pergerakan eksponensial (EMA) 5 hari. Sistem ini menganalisis hubungan posisi antara harga dan EMA dan menggabungkan penyesuaian dinamis dari target stop loss dan profit untuk memahami tren pasar. Strategi ini mengadopsi metode manajemen posisi persentase dan mempertimbangkan faktor biaya transaksi, menjadikannya sangat praktis dan fleksibel.
Logika inti dari strategi ini adalah menentukan waktu masuk berdasarkan interaksi antara harga dan EMA 5 hari. Secara khusus, ketika harga tertinggi periode saat ini lebih rendah dari EMA dan terjadi terobosan dalam periode saat ini, sistem akan mengeluarkan sinyal panjang. Pada saat yang sama, strategi tersebut juga menyertakan kondisi tambahan opsional yang mengharuskan harga penutupan lebih tinggi daripada periode sebelumnya untuk meningkatkan keandalan sinyal. Untuk pengendalian risiko, strategi ini menyediakan dua metode stop-loss: stop-loss dinamis berdasarkan titik terendah sebelumnya, dan stop-loss berdasarkan titik tetap. Target laba ditetapkan secara dinamis berdasarkan rasio risiko-imbal hasil, untuk memastikan potensi laba dari transaksi.
Ini adalah strategi mengikuti tren yang dirancang dengan baik dan logis yang dapat secara efektif menangkap tren pasar melalui kombinasi indikator EMA dan perilaku harga. Strategi tersebut memiliki mekanisme yang relatif lengkap untuk pengendalian risiko dan manajemen pengembalian, dan menyediakan berbagai arah untuk pengoptimalan, dengan nilai praktis yang kuat dan ruang untuk perbaikan. Selanjutnya, stabilitas dan profitabilitas strategi dapat lebih ditingkatkan dengan menambahkan analisis multi-periode, menyesuaikan mekanisme stop-loss, dll.
/*backtest
start: 2024-12-29 00:00:00
end: 2025-01-05 00:00:00
period: 30m
basePeriod: 30m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Demo GPT - PowerOfStocks 5EMA", overlay=true)
// Inputs
enableSL = input.bool(false, title="Enable Extra SL")
usl = input.int(defval=5, title="SL Distance in Points", minval=1, maxval=100)
riskRewardRatio = input.int(defval=3, title="Risk to Reward Ratio", minval=3, maxval=25)
showSell = input.bool(true, title="Show Sell Signals")
showBuy = input.bool(true, title="Show Buy Signals")
buySellExtraCond = input.bool(false, title="Buy/Sell with Extra Condition")
startDate = input(timestamp("2018-01-01 00:00"), title="Start Date")
endDate = input(timestamp("2069-12-31 23:59"), title="End Date")
// EMA Calculation
ema5 = ta.ema(close, 5)
// Plot EMA
plot(ema5, "EMA 5", color=color.new(#882626, 0), linewidth=2)
// Variables for Buy
var bool longTriggered = na
var float longStopLoss = na
var float longTarget = na
// Variables for Sell (used for signal visualization but no actual short trades)
var bool shortTriggered = na
var float shortStopLoss = na
var float shortTarget = na
// Long Entry Logic
if true
if (showBuy)
longCondition = high[1] < ema5[1] and high[1] < high and (not buySellExtraCond or close > close[1])
if (longCondition and not longTriggered)
entryPrice = high[1]
stopLoss = enableSL ? low[1] - usl * syminfo.mintick : low[1]
target = enableSL ? entryPrice + (entryPrice - stopLoss) * riskRewardRatio : high[1] + (high[1] - low[1]) * riskRewardRatio
// Execute Buy Order
strategy.entry("Buy", strategy.long, stop=entryPrice)
longTriggered := true
longStopLoss := stopLoss
longTarget := target
label.new(bar_index, entryPrice, text="Buy@ " + str.tostring(entryPrice), style=label.style_label_up, color=color.green, textcolor=color.white)
// Short Signal Logic (Visual Only)
if (true)
if (showSell)
shortCondition = low[1] > ema5[1] and low[1] > low and (not buySellExtraCond or close < close[1])
if (shortCondition and not shortTriggered)
entryPrice = low[1]
stopLoss = enableSL ? high[1] + usl * syminfo.mintick : high[1]
target = enableSL ? entryPrice - (stopLoss - entryPrice) * riskRewardRatio : low[1] - (high[1] - low[1]) * riskRewardRatio
// Visual Signals Only
label.new(bar_index, entryPrice, text="Sell@ " + str.tostring(entryPrice), style=label.style_label_down, color=color.red, textcolor=color.white)
shortTriggered := true
shortStopLoss := stopLoss
shortTarget := target
// Exit Logic for Buy
if longTriggered
// Stop-loss Hit
if low <= longStopLoss
strategy.close("Buy", comment="SL Hit")
longTriggered := false
// Target Hit
if high >= longTarget
strategy.close("Buy", comment="Target Hit")
longTriggered := false
// Exit Logic for Short (Signals Only)
if shortTriggered
// Stop-loss Hit
if high >= shortStopLoss
shortTriggered := false
// Target Hit
if low <= shortTarget
shortTriggered := false