マルチ期間フラクタルブレイクアウト注文ブロック適応型取引戦略

OB SD MA ATR
作成日: 2024-12-27 15:49:16 最終変更日: 2024-12-27 15:49:16
コピー: 4 クリック数: 141
1
フォロー
1166
フォロワー

マルチ期間フラクタルブレイクアウト注文ブロック適応型取引戦略

概要

この戦略は、フラクタル理論と注文ブロック分析に基づいた適応型取引システムです。フラクタルブレイクアウトシグナルと注文ブロック確認と組み合わせて、市場構造における主要なサポートレベルとレジスタンスレベルを特定することで、高確率の取引機会を捉えます。この戦略は、フラクタル指標、動的注文ブロック、価格ブレイクスルー確認システムなどの複数のテクニカル指標を統合し、市場の転換点の正確な位置付けと取引機会の正確な把握を実現します。

戦略原則

この戦略のコアロジックは、3つの主要な柱に基づいています。第1に、フラクタル計算モジュールを使用して市場の高値と安値を継続的に監視し、潜在的なトレンドの転換点を特定します。第2に、注文ブロック分析を通じて、主要な価格レベルでの供給と需要の領域を確立します。最後に、ブレイクアウト確認システムを通じて価格ブレイクスルーの有効性を検証します。価格が上のフラクタルを突破し、有効であることが確認されると、システムは最も近い赤いローソク足エリアに需要エリア注文ブロックを作成し、ロング注文を開きます。価格が下のフラクタルを突破し、有効であることが確認されると、システムは最も近い緑のキャンドルエリアの注文ブロックに供給エリアを作成し、ショート注文を開きます。この戦略には、注文ブロックの色の動的更新機能も含まれており、価格と注文ブロックの相対的な位置関係を直感的に表示するために使用されます。

戦略的優位性

  1. 強力な適応性: この戦略は、市場の状況に応じて注文ブロックの位置とサイズを動的に調整し、さまざまな市場環境に適応できます。
  2. 複数の確認メカニズム: フラクタルブレイクスルー、注文ブロック確認、価格アクション分析を組み合わせて、誤ったシグナルのリスクを軽減します。
  3. リスク管理の改善: 明確な視覚的なフィードバックとステータス チェックリストを通じて、トレーダーが戦略操作のステータスをリアルタイムで監視できるようにします。
  4. 優れた視覚化: フラクタル マーカー、注文ブロック表示、ステータス チェックリストなどの直感的なグラフィカル インターフェイスを提供します。
  5. 柔軟で調整可能なパラメータ: ユーザーは、個人の取引スタイルに応じて、フラクタル期間、ブレークスルー タイプなどの主要なパラメータを調整できます。

戦略リスク

  1. 市場のボラティリティリスク: ボラティリティの高い市場では誤ったブレイクアウト信号が生成され、追加のフィルタリングメカニズムが必要になる場合があります。
  2. スリッページリスク: 流動性が不十分な市場環境では、注文実行価格が理想的なエントリーポイントから逸脱する可能性があります。
  3. トレンド依存性: 横ばい市場では、トレンド市場ほど戦略のパフォーマンスが上がらない場合があります。
  4. パラメータの感度: フラクタル期間の設定が異なると、取引結果が大きく異なる可能性があります。
  5. コンピューティング リソースの消費: 複雑な視覚化機能とリアルタイム計算により、システム負荷が増加する可能性があります。

最適化の方向

  1. ボラティリティ フィルターの導入: ATR またはその他のボラティリティ インジケーターを通じて取引シグナルを最適化します。
  2. トレンド確認メカニズムを追加: 移動平均やその他のトレンド指標と組み合わせて、信号の信頼性を向上させます。
  3. ストップロスメカニズムの改善: 注文ブロック構造に基づいて動的なストップロス戦略を設計します。
  4. 注文ブロック サイズの最適化: 市場のボラティリティに基づいて注文ブロック サイズを動的に調整します。
  5. ボリューム分析の追加: ボリューム データを組み合わせて、ブレークスルーの有効性を検証します。

要約する

これは、テクニカル分析の複数の側面を統合した複雑な取引戦略です。フラクタル理論と注文ブロック分析を中核として、完全な取引システムを構築します。この戦略の利点は、適応性と複数の確認メカニズムにありますが、同時に、市場環境が戦略のパフォーマンスに与える影響にも注意を払う必要があります。推奨される最適化の方向性を通じて、戦略の信頼性と安定性がさらに向上することが期待されます。

ストラテジーソースコード
/*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("Supply and Demand - Order Block Strategy", format=format.price, precision=0, overlay=true)

// Input options for customization
changeColor = input(false, title="Change Box Colors?")
breakType = input.string("Wick+Body", title="Fractal Break Type:", options=["Wick+Body", "Body"])
n = input.int(title="Periods", defval=2, minval=1, tooltip="Number of periods for fractal lookback")

if n <= 0
    runtime.error("Periods input must be greater than zero.")

transGreenClr = input.color(color.new(color.green, 80), title="Bg:", inline="a_1")
greenClr = input.color(color.new(color.green, 0), title="Border:", inline="a_1")

transRedClr = input.color(color.new(color.red, 80), title="Bg:", inline="b_1")
redClr = input.color(color.new(color.red, 0), title="Border:", inline="b_1")

// --- Fractal Calculation ---
upFractal = high[n] == ta.highest(high, 2 * n + 1)
downFractal = low[n] == ta.lowest(low, 2 * n + 1)
// --- End Fractal Calculation ---

var float topValue = na
var float bottomValue = na
var int lastRedIndex = na
var float lastRedLow = na
var float lastRedHigh = na
var int lastGreenIndex = na
var float lastGreenLow = na
var float lastGreenHigh = na
var line topLine = na
var line bottomLine = na
var box demandBox = na
var box supplyBox = na
var topBreakBlock = false
var bottomBreakBlock = false
var isLongBreak = false
var isShortBreak = false
topBreakCheckSource = breakType == "Wick+Body" ? high : close
bottomBreakCheckSource = breakType == "Wick+Body" ? low : close

// Last Red Check
if close < open
    lastRedIndex := bar_index
    lastRedLow := low
    lastRedHigh := high

// Last Green Check
if close > open
    lastGreenIndex := bar_index
    lastGreenLow := low
    lastGreenHigh := high

// Top break
if ta.crossover(topBreakCheckSource, topValue) and not topBreakBlock
    topBreakBlock := true
    isLongBreak := true
    // line.set_x2(topLine, bar_index)
    // demandBox := box.new(lastRedIndex - 1, lastRedHigh, lastRedIndex + 1, lastRedLow, bgcolor=transGreenClr, border_color=greenClr)
    if strategy.position_size <= 0
        strategy.entry("Long", strategy.long)

// Bottom break
if ta.crossunder(bottomBreakCheckSource, bottomValue) and not bottomBreakBlock
    bottomBreakBlock := true
    isShortBreak := true
    // line.set_x2(bottomLine, bar_index)
    // supplyBox := box.new(lastGreenIndex - 1, lastGreenHigh, lastGreenIndex + 1, lastGreenLow, bgcolor=transRedClr, border_color=redClr)
    if strategy.position_size >= 0
        strategy.entry("Short", strategy.short)

// New up fractal
if upFractal
    topBreakBlock := false
    isLongBreak := false
    topValue := high[n]
    // topLine := line.new(bar_index[n], topValue, bar_index, topValue, color=color.teal, style=line.style_dotted, width=2)
    // if not isLongBreak[1]
    //     line.delete(topLine[1])

// New down fractal
if downFractal
    bottomBreakBlock := false
    isShortBreak := false
    bottomValue := low[n]
    // bottomLine := line.new(bar_index[n], bottomValue, bar_index, bottomValue, color=color.maroon, style=line.style_dotted, width=2)
    // if not isShortBreak[1]
    //     line.delete(bottomLine[1])

// Box state update
// activeBoxes = box.all
// if array.size(activeBoxes) > 0 and changeColor
//     for i = 0 to array.size(activeBoxes) - 1
//         boxId = array.get(activeBoxes, i)
//         bVal = box.get_bottom(boxId)
//         tVal = box.get_top(boxId)
//         if close < bVal
//             box.set_bgcolor(boxId, transRedClr)
//             box.set_border_color(boxId, redClr)
//         if close > tVal
//             box.set_bgcolor(boxId, transGreenClr)
//             box.set_border_color(boxId, greenClr)

//PLOTS
plotshape(downFractal ,style=shape.triangleup, location=location.belowbar, offset=-n, color=color.new(color.gray,80), size = size.tiny)
plotshape(upFractal, style=shape.triangledown,   location=location.abovebar, offset=-n, color=color.new(color.gray,80), size = size.tiny)

// --- Checklist Table ---
// var table checklistTable = table.new(position.bottom_right, 2, 8, bgcolor=color.new(color.gray, 80), border_width=1)

// if barstate.islast
//     table.cell(checklistTable, 0, 0, "Condition", text_color=color.white, text_size=size.small, bgcolor=color.teal)
//     table.cell(checklistTable, 1, 0, "Status", text_color=color.white, text_size=size.small, bgcolor=color.teal)

//     table.cell(checklistTable, 0, 1, "Up Fractal", text_size=size.small)
//     table.cell(checklistTable, 1, 1, upFractal ? "✅" : "❌", text_color=upFractal ? color.green : color.red, text_size=size.small)

//     table.cell(checklistTable, 0, 2, "Down Fractal", text_size=size.small)
//     table.cell(checklistTable, 1, 2, downFractal ? "✅" : "❌", text_color=downFractal ? color.green : color.red, text_size=size.small)

//     table.cell(checklistTable, 0, 3, "Top Break", text_size=size.small)
//     table.cell(checklistTable, 1, 3, isLongBreak ? "✅" : "❌", text_color=isLongBreak ? color.green : color.red, text_size=size.small)

//     table.cell(checklistTable, 0, 4, "Bottom Break", text_size=size.small)
//     table.cell(checklistTable, 1, 4, isShortBreak ? "✅" : "❌", text_color=isShortBreak ? color.green : color.red, text_size=size.small)

//     table.cell(checklistTable, 0, 5, "Last Red Candle", text_size=size.small)
//     table.cell(checklistTable, 1, 5, close < open ? "✅" : "❌", text_color=close < open ? color.green : color.red, text_size=size.small)

//     table.cell(checklistTable, 0, 6, "Last Green Candle", text_size=size.small)
//     table.cell(checklistTable, 1, 6, close > open ? "✅" : "❌", text_color=close > open ? color.green : color.red, text_size=size.small)

//     table.cell(checklistTable, 0, 7, "Box Color Change Active", text_size=size.small)
//     table.cell(checklistTable, 1, 7, changeColor ? "✅" : "❌", text_color=changeColor ? color.green : color.red, text_size=size.small)