ADX トレンド ブレイクアウト モメンタム トレーディング戦略

ADX DMI MA ATR
作成日: 2024-11-28 15:44:59 最終変更日: 2024-11-28 15:44:59
コピー: 0 クリック数: 583
1
フォロー
1617
フォロワー

ADX トレンド ブレイクアウト モメンタム トレーディング戦略

概要

これは,平均トレンド指数 ((ADX) と価格突破に基づく量化取引戦略である. この戦略は,主にADX指数値を監視することによって,市場トレンドの強さを判断し,価格突破信号と組み合わせて,市場の動きを捉えるための戦略である. この戦略は,特定の取引時間内に動作するように設定され,ストップ損失と1日の取引回数制限によってリスク管理が行われます.

戦略原則

戦略の中核となるロジックには、次の重要な要素が含まれます。

  1. ADX指数モニタリング:ADX指数を使用して,市場トレンドの強さを評価します.ADX値が17.5を下回ると,市場は新しいトレンドが形成されつつあることを示します.
  2. 価格の突破判断:戦略は過去34サイクルで最も高い閉店価格を追跡し,現在の価格がこのレジスタンス値を突破すると取引シグナルをトリガーします.
  3. 取引時間管理:戦略は,低流動性の時間のリスクを避けるために,指定された取引時間 ((0730-1430) の内でのみ動作する.
  4. リスク管理の仕組み:
    • 単一取引の損失を制限するために固定ドルストップを設定する
    • 1回の取引で最大3回の取引を制限します.
    • 取引期間の終わりに,すべての持株を自動的にクリアする.

戦略的優位性

  1. トレンドキャプチャ能力:ADX指標と価格突破を組み合わせて,市場トレンドの初期段階を効果的に識別できます.
  2. リスク管理の改善: 固定ストップ,取引回数制限,自動クローズアップなどの多層のリスク管理策を含む.
  3. 自動化レベル: 戦略の論理が明確で,人工の介入なしに完全に自動化された取引を実現する.
  4. 適応性:異なる市場状況に応じて,停止額,還元周期などパラメータを調整できます.

戦略リスク

  1. 偽ブレークアウトのリスク: 変動する市場では,偽ブレークアウトが起こり,連続したストップが起こる可能性があります.
  2. パラメータ依存性: 策略効果はADX値と回帰周期の設定に大きく依存する.
  3. 時間の制限:特定の時間帯での取引のみで,他の時間帯での機会を逃す可能性があります.
  4. ストップレスト設定: 固定ドルストップは,異なる変動率の環境で柔軟性がない可能性があります.

戦略最適化の方向性

  1. ダイナミックストップ: 固定ドルストップをATRベースのダイナミックストップに変更し,異なる市場の変動状況に適応することを推奨する.
  2. 市場環境フィルター:波動率フィルターを追加し,波動率が高い環境で取引を調整または一時停止する.
  3. 入場最適化: 取引量確認の増やし,突破信号の信頼性を向上させることが考えられる.
  4. 動的パラメータ調整:ADXの値と回帰周期を実現する自適化調整機構.

要約する

これは,構造的で,論理的に明確なトレンド追跡戦略である.ADX指標と価格突破を組み合わせて,有効なリスク管理の枠組みの下で市場トレンドの機会を捉える.いくつかの最適化の余地があるが,戦略の基本的枠組みは堅牢で,量化取引システムの基本構成要素として適しています.

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

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © HuntGatherTrade
// ========================
// NQ 30 minute, ES 30 minute

//@version=5
strategy("ADX Breakout", overlay=false, initial_capital=25000, default_qty_value=1)

// ===============================
// Input parameters
// ===============================
stopLoss = input(1000.0, title="Stop Loss ($)", group="Exits")
session = input("0730-1430:1234567", group="Trade Session")
highestLB = input(34, title="Highest lookback window", group="Indicator values")

// ===============================
// Trade Session Handling
// ===============================
t = time(timeframe.period, session)

// Reset numTrades at the start of each session
var int numTrades = 0
is_new_session = ta.change(time("D")) != 0
if is_new_session
    numTrades := 0

// ===============================
// Entry Conditions
// ===============================
[plusDI, minusDI, adxValue] = ta.dmi(50, 14)
entryCondition = (close >= ta.highest(close, highestLB)[1]) and (adxValue < 17.5) and (strategy.position_size == 0) and (numTrades < 3) and not na(t)

// ===============================
// 7. Execute Entry
// ===============================
var float stopPricePlot = na

if entryCondition
    entryPrice = close + syminfo.mintick
    strategy.entry("Long Entry", strategy.long, stop=entryPrice)
    //stopPrice = strategy.position_avg_price - (stopLoss / syminfo.pointvalue)
    //strategy.exit("Stop Loss", "Long Entry", stop=stopPrice)
    numTrades += 1

if (strategy.position_size > 0) and (strategy.position_size[1] == 0)
    stopPoints = stopLoss / syminfo.pointvalue
    stopPrice = strategy.position_avg_price - stopPoints
    stopPrice := math.round(stopPrice / syminfo.mintick) * syminfo.mintick
    strategy.exit("Stop Loss", from_entry="Long Entry", stop=stopPrice)


if ta.change(strategy.opentrades) == 1
    float entryPrice = strategy.opentrades.entry_price(0)
    stopPricePlot := entryPrice - (stopLoss / syminfo.pointvalue)

if ta.change(strategy.closedtrades) == 1
    stopPricePlot   := na

plot(stopPricePlot, "Stop-loss level", color.red, 1, plot.style_linebr)

// ===============================
// Exit at End of Session
// ===============================
if na(t) and strategy.position_size != 0
    strategy.close_all(comment="End of Day Exit")