動的トレンド追跡逆転戦略

作者: リン・ハーンチャオチャン,日付: 2024-01-16 15:35:18
タグ:

img

概要

ダイナミック・トレンド・トラッキング・リバーサル・ストラテジー (Dynamic Trend Tracking Reversal Strategy) は,JDシーケンシャル指標に基づいた短期的定量的な取引戦略である.この戦略は,リアルタイムで価格の高値と低値を追跡することで,現在のトレンド方向と勢力を決定し,エントリーと出路タイミングのための市場逆転点を効率的に把握する.この戦略は,従来のJDシーケンシャル戦略と比較して,以下の改良を行っています.

  1. 価格の上昇と低下を 接近価格の代わりに 傾向を特定するために使います 価格の変化をより早く把握できます
  2. 最大カウンター数は9の代わりに7で,より速い取引信号生成が可能になります.
  3. サポート/レジスタンスラインとストップ・ロースとして5回転するオプションを追加します.

この戦略は,5分と15分チャートなどの短期間の時間枠に適しており,短期間の価格変動と逆転機会を効果的に把握できます.

戦略の論理

ダイナミック・トレンド・トラッキング・リバーサル・ストラテジーのコア・ロジックは,JD・シーケンス・インディケーターに基づいています.現在の期間の高値と低値を前2期間の値と比較することで,このインディケーターは,連続した高値と低値が発生したかどうかを決定し,1から7までのシーケンス・カウントを生成します.カウントが7に蓄積されると,取引シグナルが生成されます.

具体的には,次の変数が戦略で定義されています.

  • sp_up: 現在の高値が2期前の高値を超えると true
  • sp_dn: 現在の低価格が2期前の低価格を下回る場合 true
  • sp_ct: 現在のカウント,最大で7で,sp_upまたはsp_dnが真実であるたびに1増加
  • sp_com: カウントが 7 になる場合 true
  • sp_usr: 7 と sp_up の中値,上向きレジスタンスとして機能する
  • sp_dsr: 7回目と sp_dn の中値で,下向きのサポートとして機能する.

取引信号生成の論理は次のとおりです

  • 長信号: sp_com は true と sp_dn は true で,カウント完了とダウントレンドを示します.
  • 短信号: sp_com は true,sp_up は true,カウント完了と上昇傾向を示しています

ストップ・ロスの論理は

  • ロング SL: 5 (sp_up true) へのカウント逆転またはsp_usr以上の価格横断
  • ショート SL:カウントを5に逆転 (sp_dn true) または価格をsp_dsr以下に切る

トレンドの方向性と強さを決定するためにリアルタイムで高値/低値を比較し,エントリーのためのカウントベースのタイミングとともに,この戦略は短期間の逆転機会を効果的に把握することができます.ストップ・ロスはリスクを制御するために設定されています.

利点分析

伝統的なJDシーケンス戦略と比較して,動的トレンド追跡逆転戦略には以下の利点があります.

  1. 高い/低い比較を使用することは,トレンドを捕捉する際の閉じる価格よりも速く,7カウントは9カウントよりも早く信号を生成します.
  2. ストップ・ロスのメカニズムが強化された. 5回数回転とサポート/レジスタンスストップロスの追加により,よりよいリスク制御が可能です.
  3. 柔軟な設定.ストップ・ロストと部分カウントを表示するオプションが柔軟性を追加します.
  4. 高周波の信号と適切なストップロスは 短期間のフレームに適しています

この戦略の主な利点は,短期的な出来事によって引き起こされる大きな変動を効果的に把握できる迅速な応答である.また,アルゴリズム信号生成とストップ損失機械化は,トレーダーの感情的干渉を軽減し,一貫性を向上させることができる.

リスク分析

ダイナミック・トレンド・トラッキング・リバース・戦略には,いくつかのリスクもあります.

  1. 高周波取引による取引コストの増加.より多くの取引は,より高い佣金料とスリップコストにつながります.
  2. 誤った信号に易い. 変動する市場の高値と低値を比較すると,しばしば不当な取引と損失を引き起こす可能性があります.
  3. 攻撃的なストップ 硬いストップはピークに弱いので,すぐに調整する必要があります.

上記のリスクを軽減するために,戦略は以下の側面で最適化できます.

  1. ポジションのサイズを削減し,取引毎の資本使用を減らす.
  2. 不安定な市場や変動の際に取引を停止し,不効率な取引を避ける.
  3. 追いかける止まりや 逃げ出す止まりを 使って 閉じ込められる可能性を 減らす

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

ダイナミック・トレンド・トラッキング・リバーサル・戦略は,主に以下の方向でさらに最適化できる余地があります.

  1. 複数のタイムフレームの組み合わせ.それに対して取引を避けるために,より長いタイムフレームで主要なトレンド方向を決定します.

  2. 他の指標との組み合わせ. 波動度指標,ボリュームデータなどを組み込み,信号品質を向上させる.

  3. 追加検証のための機械学習. 誤った取引を減らすために,取引信号に対する補助判断としてAI/MLアルゴリズムを使用する.

  4. パラメータ調整.カウント期間,取引セッション,ポジションサイズなど,異なる市場状況に合わせてパラメータを最適化します.

  5. リスク管理メカニズムを拡大し,リスクをさらに制限するために,適応型ストップ,ポジションサイズなど,より洗練されたリスク管理技術を導入する.

  6. バックテストによる戦略評価. パラメータの安定性を測定するためのバックテストのサンプルサイズとタイムフレームを拡大する.

結論

ダイナミック・トレンド・トラッキング・リバーサル・ストラテジー (Dynamic Trend Tracking Reversal Strategy) は,トレンド・タイミングのためのJDシーケンス・インジケーター内の7カウントルールとともに,トレンド方向性と強さを決定するために,価格の高値と低値のリアルタイム比較を通じて短期間の逆転機会を把握する.この戦略は,従来のJD戦略と比較して,高値/低値の代わりに高値/低値,カウント期間を短縮し,追加のストップ・ロストメカニズムなどを使用するような強化を施し,より速い信号生成を可能にします.

この戦略の主要な強みは,短期的な逆転取引に適した迅速な対応にあります.同時に,高い取引頻度や攻撃的なストップなどのリスクは存在します.将来の最適化方向には,パラメータチューニング,リスク制御の強化,マルチタイムフレームの組み合わせなどが含まれます.継続的な最適化と繰り返しを通して,この戦略は短期的な逆転信号を効率的に捕捉するための強力なツールになる可能性があります.


/*backtest
start: 2023-12-16 00:00:00
end: 2024-01-15 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// @NeoButane 7 Dec. 2018
// JD Aggressive Sequential Setup
// Not based off official Tom DeMarke documentation. As such, I have named the indicator JD instead oF TD to reflect this, and as a joke.
//
// Difference vs. TD Sequential: faster trade exits and a unique entry. Made for low timeframes.
// - Highs or lows are compared instead of close.
// - Mirrors only the Setup aspect of TD Sequential (1-9, not to 13)
// - Count maxes out at 7 instead of 9. Also part of the joke if I'm going to be honest here

// v1 - Release - Made as a strategy, 7 count
//    . S/R on 7 count
//   .. Entry on 7 count
//  ... Exit on 5 count or S/R cross

//@version=3
title = "JD Aggressive Sequential Setup"
vers  = " 1.0 [NeoButane]"
total = title + vers
strategy(total, total, 1, 0)

xx        = input(true, "Include S/R Crosses Into Stop Loss")
show_sp   = input(true, "Show Count 1-4")
sp_ct     = 0
inc_sp(x) => nz(x) == 7 ? 1 : nz(x) + 1
sp_up     = high > high[2]
sp_dn     = low < low[2]
sp_col    = sp_up ? green : red
sp_comCol = sp_up ? red : green
sp_ct    := sp_up ? (nz(sp_up[1]) and sp_col == sp_col[1] ? inc_sp(sp_ct[1]) : 1) : sp_dn ? (nz(sp_dn[1]) and sp_col == sp_col[1] ? inc_sp(sp_ct[1]) : 1) : na
sp_com    = sp_ct == 7
sp_sr     = valuewhen(sp_ct == 5, close, 0)
sp_usr    = valuewhen(sp_ct == 7 and sp_up, sma(hlc3, 2), 0)
sp_usr   := sp_usr <= sp_usr[1] * 1.0042 and sp_usr >= sp_usr[1] * 0.9958 ? sp_usr[1] : sp_usr
sp_dsr    = valuewhen(sp_ct == 7 and sp_dn, sma(hlc3, 2), 0)
sp_dsr   := sp_dsr <= sp_dsr[1] * 1.0042 and sp_dsr >= sp_dsr[1] * 0.9958 ? sp_dsr[1] : sp_dsr
locc = location.abovebar
plotchar(show_sp and sp_ct == 1, 'Setup: 1', '1', locc, sp_col, editable=false)
plotchar(show_sp and sp_ct == 2, 'Setup: 2', '2', locc, sp_col, editable=false)
plotchar(show_sp and sp_ct == 3, 'Setup: 3', '3', locc, sp_col, editable=false)
plotchar(show_sp and sp_ct == 4, 'Setup: 4', '4', locc, sp_col, editable=false)
plotshape(sp_ct == 5, 'Setup: 5', shape.xcross, locc, sp_comCol, 0, 0, '5', sp_col)
plotshape(sp_ct == 6, 'Setup: 6', shape.circle, locc, sp_comCol, 0, 0, '6', sp_col)
plotshape(sp_ct == 7, 'Setup: 7', shape.circle, locc, sp_comCol, 0, 0, '7', sp_col)
// plot(sp_sr, "5 Count Support/Resistance", gray, 2, 6)
plot(sp_usr, "7 Count Resistance", maroon, 2, 6)
plot(sp_dsr, "7 Count Support", green, 2, 6)

long  = (sp_com and sp_dn)
short = (sp_com and sp_up)
sl_l  = xx ? crossunder(close, sp_dsr) or (sp_ct == 5 and sp_up) or short : (sp_ct == 5 and sp_up) or short
sl_s  = xx ? crossover(close, sp_usr) or (sp_ct == 5 and sp_dn) or long : (sp_ct == 5 and sp_dn) or long

strategy.entry('L', 1, when = long)
strategy.close('L', when = sl_l)
strategy.entry('S', 0, when = short)
strategy.close('S', when = sl_s)

もっと