
Strategi ini ialah sistem perdagangan penjejakan arah aliran berdasarkan purata bergerak eksponen (EMA) 5 hari Ia menganalisis hubungan kedudukan antara harga dan EMA dan menggabungkan pelarasan dinamik bagi sasaran henti rugi dan keuntungan untuk memahami arah aliran pasaran. Strategi ini menggunakan kaedah pengurusan kedudukan peratusan dan mengambil kira faktor kos transaksi, menjadikannya sangat praktikal dan fleksibel.
Logik teras strategi adalah untuk menentukan masa kemasukan berdasarkan interaksi antara harga dan EMA 5 hari. Khususnya, apabila harga tertinggi bagi tempoh semasa adalah lebih rendah daripada EMA dan penembusan berlaku dalam tempoh semasa, sistem akan mengeluarkan isyarat panjang. Pada masa yang sama, strategi juga termasuk syarat tambahan pilihan yang memerlukan harga penutupan lebih tinggi daripada tempoh sebelumnya untuk meningkatkan kebolehpercayaan isyarat. Untuk kawalan risiko, strategi menyediakan dua kaedah henti rugi: henti rugi dinamik berdasarkan paras terendah sebelumnya dan henti rugi berdasarkan mata tetap. Sasaran keuntungan ditetapkan secara dinamik berdasarkan nisbah pulangan risiko, memastikan potensi keuntungan transaksi.
Ini ialah strategi mengikut arah aliran yang direka dengan baik dan logik yang boleh menangkap arah aliran pasaran dengan berkesan melalui gabungan penunjuk EMA dan gelagat harga. Strategi ini mempunyai mekanisme yang agak lengkap untuk kawalan risiko dan pengurusan pulangan, dan menyediakan pelbagai arah untuk pengoptimuman, dengan nilai praktikal yang kukuh dan ruang untuk penambahbaikan. Selepas itu, kestabilan dan keuntungan strategi boleh dipertingkatkan lagi dengan menambah analisis pelbagai tempoh, melaraskan mekanisme henti rugi, dsb.
/*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