モメンタム方向性ダイバージェンス戦略


作成日: 2023-12-27 15:37:31 最終変更日: 2023-12-27 15:37:31
コピー: 0 クリック数: 724
1
フォロー
1623
フォロワー

モメンタム方向性ダイバージェンス戦略

概要

モメンタム・ディレクション・ダイバージェンスの戦略は,ウィリアム・ブラウが彼の著書『モメンタム・ディレクション・アンド・ディバージェンス』で記述した技術の一つである.この戦略は,モメンタム・ディレクション・アンド・ディバージェンスの3つの重要な側面に焦点を当てている.ブラウ氏は電気エンジニアであり,後にトレーダーになった.彼は価格とモメンタムの関係について深く研究した.

この戦略は,動力の方向散射指数 ((Ergotic CSI) とその平滑線を,騒音フィルタリングのために描画した.

戦略原則

コードの冒頭には,自己適応動向指数 (((ADX)) の関数fADXが定義され,その関数はレンの平滑周期を表す.この関数は,実範囲 (((TR)) の選択移動平均 (((RMA)) を分母として計算し,多頭運動量と空頭運動量RMAを分数として計算し,再分数で得られた比率を表し,多頭と空頭の相対強さを表した.最後に,多頭強度と空頭強さを組み合わせた公式でADXの値が得られる.

次に,戦略パラメータの定義です. rはATRの平滑パラメータ,LengthはADXの長さ,BigPointValueは大ポイント値,SmthLenはCSIの平滑長さ,SellZoneとBuyZoneは適格なセールとバイの領域です.

重要な論理はCSIの計算である.まず,実際の波動幅であるATRとADXを計算する.それから,大ポイント値,ATRとADXの考慮を含む罰則係数Kを計算する.ATR,ADXと閉店価格の情報を組み合わせた標準化残差nResを計算する.最後に,CSIの値を計算し,それを平らにするSMAを求めることである.

CSIのSMA値によって取引方向を判断する.BuyZoneより高いなら多めにし,SellZoneより低いなら空っぽにする.CSI曲線とそのSMAを描き,異なる取引区間を色でマークする.

優位分析

この戦略は,動力の指標ATRとトレンド指標ADXの優位性を組み合わせ,市場の変動性もトレンドの程度も考慮し,ATRとADXのみの使用の制限を回避します.罰則係数Kの設計は,これらの指標と大ポイント値の関係を巧妙に融合します.

標準化残差nResは,動力の傾向だけでなく,価格の絶対レベルにも注目する価格情報への利用を加え,一般的な振動器とは異なり,戦略のパフォーマンスを強化する.

スムーズな処理と区画判断は,戦略的決定に明確な取引信号を提供し,実物操作に有利である.

リスク分析

この策略は,ATRとADXの周期長,大点値の設定,CSI平滑パラメータなどのパラメータ設定に敏感である.この策略のパフォーマンスは,多数の反測によって適切なパラメータの組み合わせを決定する必要があります.

CSIは新しいオシレータとして提案され,その有効性はより多くの異なる市場で検証される必要がある.この指標がうまく機能しない場合,戦略の収益性に影響を与える.

策略自体には止損機構はありません.CSI信号に従って直接多空を行うため,一定程度のリスクがあり,止損と組み合わせて使用する必要があります.

最適化の方向

異なる市場でのパラメータの組み合わせをテストして,より一般的な組み合わせを見つけることができます.

市場状況に応じてADXのパラメータを調整するダイナミックなADX周期長さのメカニズムを導入することができる.

他のオシレータ指標と組み合わせて買い買いするタイミングを決定し,戦略をより安定させる.例えば,底部散乱,頂部偏離などの効果.

ストップ・ローズ・戦略は,全体的な戦略をさらに完ぺきにする.

要約する

動向分散戦略は,複数の指標の優位性を統合し,価格,動力,傾向の複数の次元を利用してCSI指標を設計し,取引を行う.この戦略のパラメータ設定は柔軟で,パフォーマンスの高いもので,さらなるテストと最適化の価値があり,取引を量化するための有益なツールになる.

ストラテジーソースコード
/*backtest
start: 2022-12-20 00:00:00
end: 2023-12-26 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 20/06/2018
// This is one of the techniques described by William Blau in his book 
// "Momentum, Direction and Divergence" (1995). If you like to learn more, 
// we advise you to read this book. His book focuses on three key aspects 
// of trading: momentum, direction and divergence. Blau, who was an electrical 
// engineer before becoming a trader, thoroughly examines the relationship between 
// price and momentum in step-by-step examples. From this grounding, he then looks 
// at the deficiencies in other oscillators and introduces some innovative techniques, 
// including a fresh twist on Stochastics. On directional issues, he analyzes the 
// intricacies of ADX and offers a unique approach to help define trending and 
// non-trending periods.
// This indicator plots Ergotic CSI and smoothed Ergotic CSI to filter out noise. 
//
// You can change long to short in the Input Settings
// WARNING:
// - For purpose educate only
// - This script to change bars colors.
////////////////////////////////////////////////////////////
fADX(Len) =>
    up = change(high)
    down = -change(low)
    trur = rma(tr, Len)
    plus = fixnan(100 * rma(up > down and up > 0 ? up : 0, Len) / trur)
    minus = fixnan(100 * rma(down > up and down > 0 ? down : 0, Len) / trur)
    sum = plus + minus 
    100 * rma(abs(plus - minus) / (sum == 0 ? 1 : sum), Len)

strategy(title="Ergodic CSI Backtest")
r = input(32, minval=1)
Length = input(1, minval=1)
BigPointValue = input(1.0, minval=0.00001)
SmthLen = input(5, minval=1)
SellZone = input(0.004, minval=0.00001)
BuyZone = input(0.024, minval=0.001)
reverse = input(false, title="Trade reverse")
hline(BuyZone, color=green, linestyle=line)
hline(SellZone, color=red, linestyle=line)
source = close
K = 100 * (BigPointValue / sqrt(r) / (150 + 5))
xTrueRange = atr(1) 
xADX = fADX(Length)
xADXR = (xADX + xADX[1]) * 0.5
nRes = iff(Length + xTrueRange > 0, K * xADXR * xTrueRange / Length,0)
xCSI = iff(close > 0,  nRes / close, 0)
xSMA_CSI = sma(xCSI, SmthLen)
pos = iff(xSMA_CSI > BuyZone, 1,
       iff(xSMA_CSI <= SellZone, -1, nz(pos[1], 0))) 
possig = iff(reverse and pos == 1, -1,
          iff(reverse and pos == -1, 1, pos))	   
if (possig == 1) 
    strategy.entry("Long", strategy.long)
if (possig == -1)
    strategy.entry("Short", strategy.short)	   	    
barcolor(possig == -1 ? red: possig == 1 ? green : blue ) 
plot(xCSI, color=green, title="Ergodic CSI")
plot(xSMA_CSI, color=red, title="SigLin")