資源の読み込みに... 荷物...

双重MACD価格アクションブレイク トレイリング戦略

作者: リン・ハーンチャオチャン開催日:2024年11月25日 11:15:50
タグ:マックドATR

img

概要

この取引戦略は,二重MACD指標と価格アクション分析を組み合わせるものです.この戦略は,15分間のタイムフレームでMACDヒストグラムの色の変化を通じて市場動向を特定し,5分間のタイムフレームで強いキャンドルパターンを探し,1分間のタイムフレームでブレイクアウト信号を確認します.ATRベースのダイナミックストップ・ロストとトライリング・テイク・プロフィートメカニズムを使用して,利益を最大化しながらリスクを効果的に管理します.

戦略の原則

この戦略は,異なるパラメータを持つ2つのMACD指標 (34/144/9と100/200/50) を利用し,市場のトレンドを確認する.両方のMACDヒストグラムが同じ色のトレンドを示すとき,システムは5分チャートで強いキャンドルパターンを探し,その特徴は,その影よりも1.5倍大きい体である.強いキャンドルが特定されると,システムは1分チャートでブレイクをモニターする.価格が上昇傾向の高値以上または下落傾向の低値以下に突破するとポジションが開かれる.ストップはATRに基づいて設定され,動的テイク・プロフィートには1.5xATRの複数値が使用される.

戦略 の 利点

  1. 複数のタイムフレーム分析: 信号の信頼性を向上させるために15分,5分,1分のタイムフレームを組み合わせます
  2. トレンド確認: 誤った信号を減らすために二重MACDクロスバリダーションを使用する
  3. 価格行動分析: 強いキャンドルパターンを介して主要な価格レベルを特定する
  4. ダイナミックリスク管理: ATRに基づく適応型ストップ・ロースとトラッキング・テイク・プロフィート・メカニズム
  5. シグナルフィルタリング: 厳格な入場条件が偽取引を減少させる
  6. 高度な自動化: 完全に自動化された取引は,人間の介入を減らす

戦略リスク

  1. トレンド逆転リスク: 変動が激しい市場では偽のブレイクが起こり得る
  2. スリップリスク: 1分間の高周波取引では,スリップリスクが発生する可能性があります.
  3. 過剰取引リスク: 頻繁に信号が発信されすぎると,過剰取引が起こる可能性があります.
  4. 市場環境による依存: 異なる市場での業績が低下する可能性があります 緩和措置
  • トレンドフィルターを追加する
  • 最低変動値を設定する
  • 取引頻度制限を適用する
  • 市場環境の認識を導入する

オプティマイゼーションの方向性

  1. MACD パラメータの最適化:市場の特徴に基づいて MACD パラメータを調整する
  2. ストップ・ロスの最適化: 波動性に基づくダイナミック・ストップを追加することを検討する
  3. 取引時間フィルター: 取引ウィンドウの制限を追加
  4. ポジション管理:スケールアップされたエントリーと出口メカニズムを実施する
  5. 市場環境のフィルタリング: 傾向強度指標を追加
  6. 引き上げ管理: 株式曲線に基づくリスク管理を導入する

概要

これは技術分析とリスク管理を組み合わせた包括的な戦略システムである.多時間枠分析と厳格なシグナルフィルタリングを通じて取引品質を確保し,ダイナミックストップとトラッキング利益を通じてリスクを効果的に管理する.戦略は強い適応性を示しているが,市場の状況に基づいて継続的な最適化を必要とする.ライブ取引では,特定の市場の特徴に基づいて調整とともに,徹底的なバックテストとパラメータ最適化が推奨される.


/*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

関連性

もっと