
이 전략은 5일 지수 이동 평균(EMA)을 기반으로 한 추세 추적 거래 시스템입니다. 가격과 EMA 간의 위치 관계를 분석하고 손절매와 이익 목표의 동적 조정을 결합하여 시장 추세를 파악합니다. 이 전략은 백분율 포지션 관리 방법을 채택하고 거래 비용 요소를 고려하여 매우 실용적이고 유연합니다.
이 전략의 핵심 논리는 가격과 5일 EMA 간의 상호 작용을 기반으로 진입 시점을 결정하는 것입니다. 구체적으로, 현재 기간의 최고 가격이 EMA보다 낮고 현재 기간에 돌파가 발생하는 경우, 시스템은 롱 신호를 발행합니다. 동시에 이 전략에는 신호의 신뢰성을 높이기 위해 종가가 이전 기간보다 높아야 한다는 선택적 추가 조건이 포함되어 있습니다. 위험 관리를 위해 이 전략은 두 가지 손절매 방법을 제공합니다. 이전 최저가를 기반으로 하는 동적 손절매와 고정 지점을 기반으로 하는 손절매입니다. 수익 목표는 위험-수익 비율에 따라 동적으로 설정되어 거래의 수익 잠재력을 보장합니다.
이는 EMA 지표와 가격 행동을 결합하여 시장 동향을 효과적으로 포착할 수 있는 잘 설계되고 논리적인 추세 추종 전략입니다. 이 전략은 위험 통제 및 수익 관리를 위한 비교적 완전한 메커니즘을 갖추고 있으며, 강력한 실질적 가치와 개선의 여지를 갖추고 최적화를 위한 여러 방향을 제공합니다. 이후 다기간 분석을 추가하고, 손절매 메커니즘을 조정하는 등의 조치를 통해 전략의 안정성과 수익성을 더욱 개선할 수 있습니다.
/*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