52週間の高値と安値のポジション拡張分析システムと組み合わせたマルチレベルダイナミックMACDトレンド追跡定量戦略

MACD MA EMA SMA RSI
作成日: 2024-12-27 14:27:51 最終変更日: 2024-12-27 14:27:51
コピー: 0 クリック数: 427
1
フォロー
1617
フォロワー

52週間の高値と安値のポジション拡張分析システムと組み合わせたマルチレベルダイナミックMACDトレンド追跡定量戦略

概要

この戦略は,MACDの多層の時間枠の交差信号と52週高低の動的支柱圧力のレベルを組み合わせた定量取引システムである.この戦略は,周回線と日線の2つの時間周期のMACD指標の交差によって取引信号を確認し,52週高低の形成の動的支柱圧力の線を活用して,市場動向を判断するのに補助して,より堅牢な取引決定を実現する.この戦略は,ダイナミックな止損機構を採用し,収益を保証しながらも,リスクを効果的に制御する.

戦略原則

戦略は主に以下のコアロジックに基づいています.

  1. 入場信号は周回線MACD金叉と日線MACD金叉によって共同確認され,両方の時間周期のMACD指標に多信号が現れるように要求する.
  2. 出場信号は日線MACDデッドフォークによって誘発され,日線MACD指標でデッドフォーク信号が表示されると平仓出場となる.
  3. ダイナミックストップダメージは,出場シグナルを触発した日の最低価格の位置に設定されます.
  4. 52週間の高低線は,ユーザが選択した計算基準 ((最高最低価格または閉盘価格) に基づいて動的に生成され,右に拡張して重要な参照位を形成する.
  5. 戦略は5%のポジション管理を採用し,単一の取引コストは1通貨単位である.

戦略的優位性

  1. 多重時間枠確認:周線と日線の両面のMACD信号共鳴によって偽突破をフィルターし,取引の正確性を向上させる.
  2. 動的サポートプレッシャー:52週間の高低線は,トレンドの強さを判断するのに役立つ重要な市場の心理的な価格参照を提供します.
  3. リスクコントロールの完善:ダイナミックなストップ・メカニズムを採用し,市場の波動に合わせてストップ・ポジションをタイムリーに調整し,利益を保護する目的を達成する.
  4. 高可視化: 取引者が理解し操作できるように,明確なグラフィカルインターフェースで重要な価格とシグナルを表示します.
  5. システム化された取引: 厳格な入場・出場規則により,感情的な干渉は避けられ,取引の客観性が向上する.

戦略リスク

  1. 振動市場には適用されない:横盤振動市場では,MACDの頻繁な交差が過剰な偽信号を引き起こす可能性がある.
  2. 遅滞のリスク:MACD指数はそれ自体には遅滞があるため,入学の最適なタイミングを逃す可能性があります.
  3. 資金管理リスク: 固定比率のポジションは,特定の市場環境で柔軟性がない可能性があります.
  4. 市場ギャップのリスク:大空飛ぶ場合,実際のストップ・プローズは予想よりもはるかに低い可能性があります.
  5. パラメータ最適化のリスク: パラメータを過度に最適化すると,過適合の問題が発生する可能性があります.

戦略最適化の方向性

  1. 量価格関係分析の導入:既存のMACD信号に基づいて取引量確認を増やすことを検討する.
  2. ポジション管理の最適化:市場変動の動向に応じて,より柔軟なポジション管理機構を設計する.
  3. 損失の改善: 移動的損失またはATRベースの動的損失の追加を検討できます.
  4. 市場環境のフィルタリングを増やす:トレンドの強さの指標を導入し,強いトレンドの市場でのポジションを開く.
  5. 信号フィルタリングの仕組みを開発:より厳格な信号確認条件を設計し,偽信号を減らす.

要約する

この戦略は,MACDの多時間枠交差信号と52週間の高低動的支柱圧力線を組み合わせて,完全なトレンド追跡取引システムを構築している.この戦略の優点は,信号確認の信頼性とリスク管理の整体性にあるが,依然として揺れ市場と後退のリスクに対応する注意が必要である.この戦略は,継続的な最適化と改善により,トレンド市場で安定した収益を期待している.

ストラテジーソースコード
/*backtest
start: 2019-12-23 08:00:00
end: 2024-12-25 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("MACD Bitcoin strategy con 52W High/Low (linee estese)", overlay=true)

// === MACD SETTINGS ===
fastLength = 12
slowLength = 26
signalSmoothing = 9

// Funzione per ottenere i valori MACD
getMACD(source, timeframe) =>
    [macdLine, signalLine, _] = ta.macd(source, fastLength, slowLength, signalSmoothing)
    [macdLine, signalLine]

// Valori MACD Settimanali
[macdWeekly, signalWeekly] = request.security(syminfo.tickerid, "W", getMACD(close, "W"), lookahead=barmerge.lookahead_on)

// Valori MACD Giornalieri
[macdDaily, signalDaily] = getMACD(close, "D")

// Variabile per lo stop loss
var float lowOfSignalCandle = na

// Condizione per l'ingresso
longConditionWeekly = ta.crossover(macdWeekly, signalWeekly)
exitConditionDaily = ta.crossunder(macdDaily, signalDaily)

// Imposta Stop Loss sulla candela giornaliera
if (exitConditionDaily)
    lowOfSignalCandle := low

// Condizione di ingresso nel trade
enterTradeCondition = macdWeekly > signalWeekly and ta.crossover(macdDaily, signalDaily)

if (enterTradeCondition)
    strategy.entry("MACD Long", strategy.long)

if (not na(lowOfSignalCandle))
    strategy.exit("Stop Loss", "MACD Long", stop=lowOfSignalCandle)

if (strategy.position_size == 0)
    lowOfSignalCandle := na

// // === 52 WEEK HIGH/LOW SETTINGS ===
// // Input per selezionare tra Highs/Lows o Close
// high_low_close = input.string(defval="Highs/Lows", title="Base 52 week values on candle:", options=["Highs/Lows", "Close"])

// // Calcolo dei valori delle 52 settimane
// weekly_hh = request.security(syminfo.tickerid, "W", ta.highest(high, 52), lookahead=barmerge.lookahead_on)
// weekly_ll = request.security(syminfo.tickerid, "W", ta.lowest(low, 52), lookahead=barmerge.lookahead_on)
// weekly_hc = request.security(syminfo.tickerid, "W", ta.highest(close, 52), lookahead=barmerge.lookahead_on)
// weekly_lc = request.security(syminfo.tickerid, "W", ta.lowest(close, 52), lookahead=barmerge.lookahead_on)

// // Selezione dei valori in base all'input
// high_plot = high_low_close == "Highs/Lows" ? weekly_hh : weekly_hc
// low_plot = high_low_close == "Highs/Lows" ? weekly_ll : weekly_lc

// // === LINEE ORIZZONTALI ESTESE FINO AL PREZZO ATTUALE ===
// var line highLine = na
// var line lowLine = na

// // Linea Orizzontale per il 52W High
// if (na(highLine))
//     highLine := line.new(bar_index, high_plot, bar_index + 1, high_plot, color=color.green, width=2, style=line.style_dashed, extend=extend.right)
// else
//     line.set_y1(highLine, high_plot)
//     line.set_y2(highLine, high_plot)

// // Linea Orizzontale per il 52W Low
// if (na(lowLine))
//     lowLine := line.new(bar_index, low_plot, bar_index + 1, low_plot, color=color.red, width=2, style=line.style_dashed, extend=extend.right)
// else
//     line.set_y1(lowLine, low_plot)
//     line.set_y2(lowLine, low_plot)

// // Etichette per le linee orizzontali
// var label highLabel = na
// var label lowLabel = na

// if (na(highLabel))
//     highLabel := label.new(bar_index, high_plot, "52W High", color=color.green, textcolor=color.white, style=label.style_label_down, size=size.small)
// else
//     label.set_y(highLabel, high_plot)
//     label.set_x(highLabel, bar_index)

// if (na(lowLabel))
//     lowLabel := label.new(bar_index, low_plot, "52W Low", color=color.red, textcolor=color.white, style=label.style_label_up, size=size.small)
// else
//     label.set_y(lowLabel, low_plot)
//     label.set_x(lowLabel, bar_index)

// // Tracciamento delle Linee Estese
// plot(high_plot, title="52W High", color=color.green, style=plot.style_linebr)
// plot(low_plot, title="52W Low", color=color.red, style=plot.style_linebr)