Strategi ini adalah sistem perdagangan trend-mengikuti berdasarkan 5-hari Eksponensial Moving Average (EMA), yang menganalisis hubungan antara harga dan EMA untuk menangkap tren pasar. Strategi ini menggabungkan penyesuaian dinamis dari target stop-loss dan keuntungan, menggunakan manajemen posisi berbasis persentase, dan mempertimbangkan biaya transaksi, membuatnya sangat praktis dan fleksibel.
Logika inti didasarkan pada interaksi antara harga dan EMA 5 hari untuk menentukan titik masuk. Secara khusus, sinyal panjang dihasilkan ketika periode sebelumnya yang tinggi berada di bawah EMA dan periode saat ini menunjukkan terobosan. Strategi ini juga mencakup kondisi tambahan opsional yang mengharuskan harga penutupan lebih tinggi dari periode sebelumnya untuk meningkatkan keandalan sinyal. Untuk pengendalian risiko, strategi ini menawarkan dua jenis metode stop-loss: stop-loss dinamis berdasarkan titik terendah sebelumnya dan stop-loss titik tetap. Target keuntungan ditetapkan secara dinamis berdasarkan rasio risiko-manfaat potensial untuk memastikan keuntungan perdagangan.
Ini adalah strategi trend-mengikuti yang dirancang dengan baik dengan logika yang jelas, secara efektif menangkap tren pasar melalui kombinasi indikator EMA dan tindakan harga. Strategi ini memiliki mekanisme komprehensif untuk pengendalian risiko dan manajemen keuntungan sambil menawarkan beberapa arah optimasi, menunjukkan nilai praktis yang kuat dan ruang untuk perbaikan. Peningkatan di masa depan dapat berfokus pada menambahkan analisis multi-frame waktu dan menyesuaikan mekanisme stop-loss untuk lebih meningkatkan stabilitas dan profitabilitas strategi.
/*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