この取引戦略は,二重MACD指標と価格アクション分析を組み合わせるものです.この戦略は,15分間のタイムフレームでMACDヒストグラムの色の変化を通じて市場動向を特定し,5分間のタイムフレームで強いキャンドルパターンを探し,1分間のタイムフレームでブレイクアウト信号を確認します.ATRベースのダイナミックストップ・ロストとトライリング・テイク・プロフィートメカニズムを使用して,利益を最大化しながらリスクを効果的に管理します.
この戦略は,異なるパラメータを持つ2つのMACD指標 (34/144/9と100/200/50) を利用し,市場のトレンドを確認する.両方のMACDヒストグラムが同じ色のトレンドを示すとき,システムは5分チャートで強いキャンドルパターンを探し,その特徴は,その影よりも1.5倍大きい体である.強いキャンドルが特定されると,システムは1分チャートでブレイクをモニターする.価格が上昇傾向の高値以上または下落傾向の低値以下に突破するとポジションが開かれる.ストップはATRに基づいて設定され,動的テイク・プロフィートには1.5xATRの複数値が使用される.
これは技術分析とリスク管理を組み合わせた包括的な戦略システムである.多時間枠分析と厳格なシグナルフィルタリングを通じて取引品質を確保し,ダイナミックストップとトラッキング利益を通じてリスクを効果的に管理する.戦略は強い適応性を示しているが,市場の状況に基づいて継続的な最適化を必要とする.ライブ取引では,特定の市場の特徴に基づいて調整とともに,徹底的なバックテストとパラメータ最適化が推奨される.
/*backtest start: 2024-01-01 00:00:00 end: 2024-11-24 00:00:00 period: 1h basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // @version=5 strategy("Price Action + Double MACD Strategy with ATR Trailing", overlay=true) // Inputs for MACD fastLength1 = input.int(34, title="First MACD Fast Length") slowLength1 = input.int(144, title="First MACD Slow Length") signalLength1 = input.int(9, title="First MACD Signal Length") fastLength2 = input.int(100, title="Second MACD Fast Length") slowLength2 = input.int(200, title="Second MACD Slow Length") signalLength2 = input.int(50, title="Second MACD Signal Length") // Input for ATR Trailing atrMultiplier = input.float(1.5, title="ATR Multiplier for Trailing") // Inputs for Stop Loss atrStopMultiplier = input.float(1.0, title="ATR Multiplier for Stop Loss") // MACD Calculations [macdLine1, signalLine1, macdHist1] = ta.macd(close, fastLength1, slowLength1, signalLength1) [macdLine2, signalLine2, macdHist2] = ta.macd(close, fastLength2, slowLength2, signalLength2) // Get 15M MACD histogram colors macdHist1Color = request.security(syminfo.tickerid, "15", (macdHist1 >= 0 ? (macdHist1[1] < macdHist1 ? #26A69A : #B2DFDB) : (macdHist1[1] < macdHist1 ? #FFCDD2 : #FF5252))) macdHist2Color = request.security(syminfo.tickerid, "15", (macdHist2 >= 0 ? (macdHist2[1] < macdHist2 ? #26A69A : #B2DFDB) : (macdHist2[1] < macdHist2 ? #FFCDD2 : #FF5252))) // Check MACD color conditions isMacdUptrend = macdHist1Color == #26A69A and macdHist2Color == #26A69A isMacdDowntrend = macdHist1Color == #FF5252 and macdHist2Color == #FF5252 // Function to detect strong 5M candles isStrongCandle(open, close, high, low) => body = math.abs(close - open) tail = math.abs(high - low) - body body > tail * 1.5 // Ensure body is larger than the tail // Variables to track state var float fiveMinuteHigh = na var float fiveMinuteLow = na var bool tradeExecuted = false var bool breakoutDetected = false var float entryPrice = na var float stopLossPrice = na var float longTakeProfit = na var float shortTakeProfit = na // Check for new 15M candle and reset flags if ta.change(time("15")) tradeExecuted := false // Reset trade execution flag breakoutDetected := false // Reset breakout detection if isStrongCandle(open[1], close[1], high[1], low[1]) fiveMinuteHigh := high[1] fiveMinuteLow := low[1] else fiveMinuteHigh := na fiveMinuteLow := na // Get 1-minute close prices close1m = request.security(syminfo.tickerid, "5", close) // Ensure valid breakout direction and avoid double breakouts if not na(fiveMinuteHigh) and not breakoutDetected for i = 1 to 3 if close1m[i] > fiveMinuteHigh and not tradeExecuted // 1M breakout check with close breakoutDetected := true if isMacdUptrend // Open Long trade entryPrice := close stopLossPrice := close - (atrStopMultiplier * ta.atr(14)) // ATR-based stop loss longTakeProfit := close + (atrMultiplier * ta.atr(14)) // Initialize take profit strategy.entry("Long", strategy.long) tradeExecuted := true break // Exit the loop after detecting a breakout else if close1m[i] < fiveMinuteLow and not tradeExecuted // 1M breakout check with close breakoutDetected := true if isMacdDowntrend // Open Short trade entryPrice := close stopLossPrice := close + (atrStopMultiplier * ta.atr(14)) // ATR-based stop loss shortTakeProfit := close - (atrMultiplier * ta.atr(14)) // Initialize take profit strategy.entry("Short", strategy.short) tradeExecuted := true break // Exit the loop after detecting a breakout // Update trailing take-profit dynamically if tradeExecuted and strategy.position_size > 0 // Long trade longTakeProfit := math.max(longTakeProfit, close + (atrMultiplier * ta.atr(14))) strategy.exit("Long TP/SL", "Long", stop=stopLossPrice, limit=longTakeProfit) else if tradeExecuted and strategy.position_size < 0 // Short trade shortTakeProfit := math.min(shortTakeProfit, close - (atrMultiplier * ta.atr(14))) strategy.exit("Short TP/SL", "Short", stop=stopLossPrice, limit=shortTakeProfit) // Reset trade state when position is closed if strategy.position_size == 0 tradeExecuted := false entryPrice := na longTakeProfit := na shortTakeProfit := na