この戦略は,市場動向を把握するために価格とEMAの関係を分析する5日指数移動平均 (EMA) をベースとしたトレンドフォローする取引システムである.この戦略は,ストップ損失と利益目標のダイナミックな調整を組み込み,パーセントベースのポジション管理を使用し,取引コストを考慮し,非常に実用的で柔軟である.
基本論理は,価格と5日間のEMAとの間の相互作用に基づいてエントリーポイントを決定する.特に,前の期間の高値がEMAを下回り,現在の期間の突破が示された場合,ロングシグナルが生成される.戦略には,シグナル信頼性を高めるため,閉値が前の期間の高値である必要があるオプションの追加条件も含まれている.リスク管理のために,戦略は2種類のストップロスの方法を提示する:以前の低値に基づくダイナミックストップロスと固定ポイントストップロス.利益目標は,取引利益の可能性を保証するためにリスク・報酬比に基づいてダイナミックに設定される.
この戦略は,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