フィボナッチリトレースメントレベルに基づく複数の条件付きトレンド追跡定量取引戦略

SL MA TP ATR
作成日: 2024-12-20 15:55:57 最終変更日: 2024-12-20 15:55:57
コピー: 1 クリック数: 420
1
フォロー
1617
フォロワー

フィボナッチリトレースメントレベルに基づく複数の条件付きトレンド追跡定量取引戦略

概要

この戦略は,フィボナッチ逆転レベルに基づくトレンド追跡戦略である.この戦略は,主に,前日取引の最高価格と最低価格を計算する重要なフィボナッチ逆転レベルを利用し,開場価格の位置と時間ウィンドウを組み合わせて,複数の入場条件を設定し,異なる条件に合わせて,相応のストップ・ロスの位置を設定し,その結果,トレンドの把握とリスクの制御を実現する.

戦略原則

戦略は,まず6つの重要なフィボナッチ・リトレイレベルを計算します: 0.23.6%,38.2%,50%,61.8%,および100%. オープニング価格がこれらのレベルに対する位置に応じて,入場条件を3つの状況に分けます: 1) オープニング価格が23.6%-50%の間; 2) オープニング価格が61.8%で,指定された時間ウィンドウで; 3) オープニング価格が23.6%以下で,前日の低点より低い.

戦略的優位性

  1. 市場における強力な指針となるフィボナッチ・リトレイションレベルを, 重要なサポート・レジスタンスレベルとして利用する.
  2. タイムウィンドウと価格位置の複数の条件判断を組み合わせて,戦略の正確性を高めます.
  3. リスク管理の柔軟性を表した,異なる状況に対応したストップ・ポジションの設定.
  4. 戦略の論理は明確で,パラメータは調整可能で,異なる市場状況に応じて最適化することが容易である.

戦略リスク

  1. 市場環境の影響により,フィボナッチ撤回水準の有効性が低下する可能性があります.
  2. 固定時間ウィンドウの設定は,他の時間帯の良い機会を逃す可能性があります.
  3. ストップダメージ位置の設定は,激しい波動時に容易に触れる可能性があります.
  4. 戦略は,市場全体の傾向を考慮せず,横盤または波動的な市場で頻繁に取引することがあります.

戦略最適化の方向性

  1. トレンド判断指標を導入 (平均線システムなど),トレンドが明確になった時に取引を行う.
  2. 波動率指数 (ATRなど) を増加させ,ストップポジションを動的に調整する.
  3. 取引量分析に追加し,価格突破の信頼性を高めます.
  4. タイムウィンドウの設定を最適化して,過去データ分析による最適な取引時間帯を考慮できます.
  5. 収益目標の向上と,より優れた収益結束メカニズムを実現する.

要約する

この戦略は,フィボナッチの逆転レベル,時間ウィンドウ,複数の条件判断を組み合わせて,より完全な取引システムを構築している.戦略の優点は,論理的明瞭性,リスクの制御であるが,依然として市場の状況に応じて最適化および改善が必要である.トレンド判断,ダイナミックなストップ・ロス,取引量分析などの側面の最適化を追加することにより,戦略の安定性と収益性をさらに向上させることができる.

ストラテジーソースコード
/*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=6
strategy("Fibonacci Retracement Strategy", overlay=true)

// Get the high and low of the previous day
previousHigh = request.security(syminfo.tickerid, "D", high[1])
previousLow = request.security(syminfo.tickerid, "D", low[1])

// Fibonacci levels for the previous day (from high to low)
fib0 = previousHigh
fib236 = previousHigh - (previousHigh - previousLow) * 0.236
fib382 = previousHigh - (previousHigh - previousLow) * 0.382
fib50 = previousHigh - (previousHigh - previousLow) * 0.5
fib618 = previousHigh - (previousHigh - previousLow) * 0.618
fib1 = previousHigh - (previousHigh - previousLow) * 1

// Current open price (for the current day)
openPrice = open

// Time for 9:15 AM check
timeStart = timestamp(year, month, dayofmonth, 9, 15)
timeClose = timestamp(year, month, dayofmonth, 9, 30) // Time window to allow for opening range

// Entry Conditions
buyCondition1 = openPrice >= fib236 and openPrice <= fib50
buyCondition2 = openPrice == fib618 and time >= timeStart and time <= timeClose
buyCondition3 = openPrice < fib236 and openPrice < previousLow

// Stop Loss based on conditions
stopLoss1 = fib618
stopLoss2 = fib618 - (fib618 - fib1) / 2
stopLoss3 = fib382

// Plot Fibonacci levels with calculated values
plot(fib0, color=color.green, linewidth=1, title="Fib 0")
plot(fib236, color=color.red, linewidth=1, title="Fib 0.236")
plot(fib382, color=color.blue, linewidth=1, title="Fib 0.382")
plot(fib50, color=color.yellow, linewidth=1, title="Fib 0.5")
plot(fib618, color=color.purple, linewidth=1, title="Fib 0.618")
plot(fib1, color=color.orange, linewidth=1, title="Fib 1")

// Plot labels for Fibonacci levels with actual values
label.new(x=bar_index, y=fib0, text="Fib 0: " + str.tostring(fib0), style=label.style_label_right, color=color.green, textcolor=color.white, size=size.small, yloc=yloc.abovebar)
label.new(x=bar_index, y=fib236, text="Fib 0.236: " + str.tostring(fib236), style=label.style_label_right, color=color.red, textcolor=color.white, size=size.small, yloc=yloc.abovebar)
label.new(x=bar_index, y=fib382, text="Fib 0.382: " + str.tostring(fib382), style=label.style_label_right, color=color.blue, textcolor=color.white, size=size.small, yloc=yloc.abovebar)
label.new(x=bar_index, y=fib50, text="Fib 0.5: " + str.tostring(fib50), style=label.style_label_right, color=color.yellow, textcolor=color.white, size=size.small, yloc=yloc.abovebar)
label.new(x=bar_index, y=fib618, text="Fib 0.618: " + str.tostring(fib618), style=label.style_label_right, color=color.purple, textcolor=color.white, size=size.small, yloc=yloc.abovebar)
label.new(x=bar_index, y=fib1, text="Fib 1: " + str.tostring(fib1), style=label.style_label_right, color=color.orange, textcolor=color.white, size=size.small, yloc=yloc.abovebar)

// Entry conditions and strategy execution
if (buyCondition1)
    strategy.entry("Buy", strategy.long, stop=stopLoss1)
    label.new(bar_index, low, "BUY", color=color.green, textcolor=color.white, style=label.style_label_up, size=size.small)

if (buyCondition2)
    strategy.entry("Buy", strategy.long, stop=stopLoss2)
    label.new(bar_index, low, "BUY", color=color.green, textcolor=color.white, style=label.style_label_up, size=size.small)

if (buyCondition3)
    strategy.entry("Buy", strategy.long, stop=stopLoss3)
    label.new(bar_index, low, "BUY", color=color.green, textcolor=color.white, style=label.style_label_up, size=size.small)

// Show exit signals and labels
if (buyCondition1)
    strategy.exit("Exit", from_entry="Buy", stop=stopLoss1)
    label.new(bar_index, high, "EXIT", color=color.red, textcolor=color.white, style=label.style_label_down, size=size.small)

if (buyCondition2)
    strategy.exit("Exit", from_entry="Buy", stop=stopLoss2)
    label.new(bar_index, high, "EXIT", color=color.red, textcolor=color.white, style=label.style_label_down, size=size.small)

if (buyCondition3)
    strategy.exit("Exit", from_entry="Buy", stop=stopLoss3)
    label.new(bar_index, high, "EXIT", color=color.red, textcolor=color.white, style=label.style_label_down, size=size.small)