これはトレンドフォローする戦略で,複数の技術指標を組み合わせ,主に指数移動平均 (EMA) クロスオーバー,スーパートレンド指標,相対強度指数 (RSI) を使用して取引機会を特定する.この戦略は,指標を有機的に統合し,トレンドフォローにモメンタムフィルタリングを追加し,動的なストップ・ロストとテイク・プロフィートポジショニングのためにATRを使用することで完全な取引システムを達成する.
戦略は,取引信号を決定するために三重フィルタリングメカニズムを使用します.
この戦略には,ATRベースのダイナミックストップ・ロスト・テイク・プロフィート・システムがあり,市場変動に基づいてリスク管理パラメータを自動的に調整する.また,低流動性の期間を避けるため,タイムフィルターによって取引を特定の期間に制限する.
この戦略は,複数の技術指標とフィルタリング条件を組み合わせて,比較的完全な取引システムを構築する.その主な利点は,複数の確認メカニズムとダイナミックなリスク管理にありますが,パラメータ最適化と取引コストに注意を払わなければならない.継続的な最適化と改善を通じて,戦略は異なる市場環境で安定したパフォーマンスを維持する可能性があります.
/*backtest start: 2024-11-19 00:00:00 end: 2024-12-18 08:00:00 period: 1h basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy(title="Supertrend + EMA Crossover with RSI Filter", shorttitle="ST_EMA_RSI", overlay=true) // Input parameters for EMA fastEMA = input.int(3, title="Fast EMA Period", minval=1) slowEMA = input.int(6, title="Slow EMA Period", minval=1) atrLength = input.int(3, title="ATR Length", minval=1) // Using a fixed multiplier for Supertrend calculation stMultiplier = 1 // Stop loss and take profit multipliers stopLossATR = input.float(2.5, title="Stop Loss ATR Multiplier", minval=0.1, step=0.1) takeProfitATR = input.float(4, title="Take Profit ATR Multiplier", minval=0.1, step=0.1) // RSI inputs rsiLength = input.int(10, title="RSI Length", minval=1) rsiOverbought = input.float(65, title="RSI Overbought Level", minval=50.0, maxval=100.0) rsiOversold = input.float(30.0, title="RSI Oversold Level", minval=0.0, maxval=50.0) // Declare the RSI plot toggle input as a global variable bool rsiPlotEnabled = input.bool(true, title="Show RSI in separate panel") // Time filter inputs i_startTime = input(title="Start Filter", defval=timestamp("01 Jan 2023 13:30 +0000"), group="Time Filter", tooltip="Start date & time to begin searching for setups") i_endTime = input(title="End Filter", defval=timestamp("28 Apr 2099 19:30 +0000"), group="Time Filter", tooltip="End date & time to stop searching for setups") // Date/time filtering logic inDateRange = true // Calculate EMAs fastEMALine = ta.ema(close, fastEMA) slowEMALine = ta.ema(close, slowEMA) // Calculate ATR atr = ta.atr(atrLength) // Calculate Supertrend using fixed multiplier up = high - (stMultiplier * atr) dn = low + (stMultiplier * atr) var float trendUp = na var float trendDown = na var int trend = na trendUp := na(trendUp[1]) ? up : (close[1] > trendUp[1] ? math.min(up, trendUp[1]) : up) trendDown := na(trendDown[1]) ? dn : (close[1] < trendDown[1] ? math.max(dn, trendDown[1]) : dn) trend := close > nz(trendUp[1]) ? 1 : close < nz(trendDown[1]) ? -1 : nz(trend[1], 1) supertrend = trend == 1 ? trendUp : trendDown // Calculate RSI myRSI = ta.rsi(close, rsiLength) // Entry conditions with RSI filter longEntryCondition = ta.crossover(fastEMALine, slowEMALine) and (trend == 1) and (myRSI < rsiOverbought) shortEntryCondition = ta.crossunder(fastEMALine, slowEMALine) and (trend == -1) and (myRSI > rsiOversold) // Strategy entries if inDateRange and longEntryCondition and strategy.position_size <= 0 strategy.entry("Long", strategy.long) if inDateRange and shortEntryCondition and strategy.position_size >= 0 strategy.entry("Short", strategy.short) // Stops and targets if strategy.position_size > 0 longStopLoss = strategy.position_avg_price - stopLossATR * atr longTakeProfit = strategy.position_avg_price + takeProfitATR * atr strategy.exit("Long SL/TP", "Long", stop=longStopLoss, limit=longTakeProfit) if strategy.position_size < 0 shortStopLoss = strategy.position_avg_price + stopLossATR * atr shortTakeProfit = strategy.position_avg_price - takeProfitATR * atr strategy.exit("Short SL/TP", "Short", stop=shortStopLoss, limit=shortTakeProfit) // Plot EMAs and Supertrend plot(fastEMALine, title="Fast EMA", color=color.new(color.blue, 0)) plot(slowEMALine, title="Slow EMA", color=color.new(color.red, 0)) plot(trend == 1 ? supertrend : na, title="Supertrend Up", color=color.green, style=plot.style_linebr) plot(trend == -1 ? supertrend : na, title="Supertrend Down", color=color.red, style=plot.style_linebr) // Plot RSI and hlines plot(rsiPlotEnabled ? myRSI : na, title="RSI", color=color.new(color.purple, 0)) hline(rsiOverbought, "Overbought", color=color.red, linestyle=hline.style_dotted) hline(rsiOversold, "Oversold", color=color.green, linestyle=hline.style_dotted) // Plot entry signals plotshape(longEntryCondition, title="Long Entry Signal", style=shape.triangleup, location=location.belowbar, size=size.tiny, color=color.new(color.green, 0)) plotshape(shortEntryCondition, title="Short Entry Signal", style=shape.triangledown, location=location.abovebar, size=size.tiny, color=color.new(color.red, 0))