이 전략은 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