Strategi ini adalah sistem perdagangan trend-mengikuti berdasarkan purata bergerak eksponen 5 hari (EMA), yang menganalisis hubungan antara harga dan EMA untuk menangkap trend pasaran. Strategi ini menggabungkan penyesuaian dinamik sasaran stop-loss dan keuntungan, menggunakan pengurusan kedudukan berasaskan peratusan, dan mempertimbangkan kos transaksi, menjadikannya sangat praktikal dan fleksibel.
Logik terasnya adalah berdasarkan interaksi antara harga dan EMA 5 hari untuk menentukan titik kemasukan. Khususnya, isyarat panjang dihasilkan apabila tahap tertinggi tempoh sebelumnya berada di bawah EMA dan tempoh semasa menunjukkan terobosan. Strategi ini juga merangkumi syarat tambahan pilihan yang memerlukan harga penutupan lebih tinggi daripada tempoh sebelumnya untuk meningkatkan kebolehpercayaan isyarat. Untuk kawalan risiko, strategi ini menawarkan dua jenis kaedah stop-loss: stop-loss dinamik berdasarkan paras terendah sebelumnya dan stop-loss titik tetap. Sasaran keuntungan ditetapkan secara dinamik berdasarkan nisbah potensi risiko-balasan untuk memastikan keuntungan perdagangan.
Ini adalah strategi trend-mengikuti yang direka dengan baik dengan logik yang jelas, dengan berkesan menangkap trend pasaran melalui gabungan penunjuk EMA dan tindakan harga. Strategi ini mempunyai mekanisme komprehensif untuk kawalan risiko dan pengurusan keuntungan sambil menawarkan pelbagai arah pengoptimuman, menunjukkan nilai praktikal yang kuat dan ruang untuk penambahbaikan. Penambahbaikan masa depan boleh memberi tumpuan kepada penambahan analisis pelbagai jangka masa dan menyesuaikan mekanisme hentian kerugian untuk meningkatkan lagi kestabilan dan keuntungan 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