二重メカニズムによる動的傾向追跡戦略

作者: リン・ハーンチャオチャン,日付: 2024-01-31 11:13:44
タグ:

img

概要

デュアルメカニズム・ダイナミック・トレンド・トラッキング戦略は,トレンドを追跡するために2つの異なるトレード戦略からの信号を組み合わせます.まず,価格逆転点を特定するために123リバース戦略を使用し,その後,価格トレンド方向を決定するためにデトレンデッド・シンセティック・プライス (D_DSP) インデックスを使用し,最後に両方の信号を組み合わせて取引信号を生成します.

この戦略は主に中期トレンド追跡に使用される.ダブルメカニズムを通じてダイナミックストップ・ロストポイントを設定することで,利益を効果的にロックし,損失を拡大するのを防ぐことができる.一方,ダブル確認のためのトレンドと逆転指標を組み合わせることで騒々しい取引を減らすのに役立ちます.

戦略の論理

123 逆転戦略

123 リバース戦略は,ウルフ・ジェンセンの著書"How I Tripped My Money in the Futures Market"の183ページから由来する.これは2つの連続したリバースバーを使用して価格逆転パターンを特定する.

具体的には,閉じる価格が2日連続で前回の閉じる価格より高く,9日間のスローストカスティックオシレーターが50を下回ると,閉じる価格が2日連続で前回の閉じる価格より低く,高速ストカスティックオシレーターが50を超えると,売り信号を生成する.

減額された合成価格指数

デトレンド合成価格 (D_DSP) インデックスは価格傾向の方向を示し,実際の価格データの支配的なサイクルと相性がある.D_DSPは,価格の四半期サイクルEMAから半サイクル指数的な移動平均 (EMA) を引いて計算される.

D_DSPが正である場合,上昇傾向を示します.負の場合,下落傾向を示します.

双重メカニズム

この戦略は123 リバース戦略とD_DSPインデックス信号を組み合わせます. 両方の信号が一致した場合 (ロングまたはショートの両方),トレードが生成されます. 信号が一致しない場合は,ポジションが閉鎖されます.

この二重確認は 騒音を排除し 傾向の利益を遮断します

利点

この戦略の最大の利点は,ストップロスの2つのレベルが実装されている.第一に,速いストキャスティックスと遅いストキャスティックスがタイムスケーパーストップロスを形成する.第二に,逆転戦略自体にはストップロスの機能が含まれています.

2つのストップ損失は利益ロックを最大化し,単一のストップ損失戦略からクロスオーバー損失を防止する.また,二重確認は,主流ではない価格変動からの間違った信号を避ける.

リスク

最大のリスクは,パラメータの設定が柔軟でないことから生じる.例えば,間違ったサイクル長さは,主流のトレンドを逃し,利益を失ったり,損失を増やしたりする可能性があります.過度に頑固な二重確認は,タイムリーストップ損失を逃すこともあります.

また,逆転戦略とトレンド戦略を組み合わせると,シグナルが一致しないときのクリアリングポジションは,トレンドが1つの主流方向に続くときの機会を逃す可能性があります.

最適化

この戦略は,いくつかの方法で最適化することができます:

  1. サイクルパラメータを最適化し,最適な値を見つけるため,バックテストデータを使用します.

  2. ストップ・ロスのストラテジーを追加して,よりダイナミックで合理的なストップ・ロスを設定します.

  3. 二重確認のルールを調整して ポジションの過度のクリアを防ぐ

  4. 波動性フィルターのようなフィルターを追加して 遅い段階のトレンド波動性による判断を誤らないようにします

結論

双メカニズム動的トレンドトラッキング戦略は,高速および遅いストキャスティックのダブルストップ損失と逆転およびトレンドシグナルのダブル確認を通じて効果的なトレンドトラッキングとリスク管理を実施する. 価格アクションの時間次元と方向性自体の両方を考慮し,多次元的な決定基盤を形成する.

規則とパラメータの継続的な最適化は良い結果をもたらすと期待される.しかし戦略の最適化は膨大な量の歴史的データを必要とする.株式選択フィルターとストップ損失メカニズムも継続的な精製を必要としている.戦略をさらに検証するために,一定の期間間のリアルタイム追跡が推奨される.


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

//@version=4
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 18/11/2019
// This is combo strategies for get a cumulative signal. 
//
// First strategy
// This System was created from the Book "How I Tripled My Money In The 
// Futures Market" by Ulf Jensen, Page 183. This is reverse type of strategies.
// The strategy buys at market, if close price is higher than the previous close 
// during 2 days and the meaning of 9-days Stochastic Slow Oscillator is lower than 50. 
// The strategy sells at market, if close price is lower than the previous close price 
// during 2 days and the meaning of 9-days Stochastic Fast Oscillator is higher than 50.
//
// Second strategy
// Detrended Synthetic Price is a function that is in phase with the 
// dominant cycle of real price data. This DSP is computed by subtracting 
// a half-cycle exponential moving average (EMA) from the quarter cycle 
// exponential moving average.
// See "MESA and Trading Market Cycles" by John Ehlers pages 64 - 70. 
//
// WARNING:
// - For purpose educate only
// - This script to change bars colors.
////////////////////////////////////////////////////////////
Reversal123(Length, KSmoothing, DLength, Level) =>
    vFast = sma(stoch(close, high, low, Length), KSmoothing) 
    vSlow = sma(vFast, DLength)
    pos = 0.0
    pos := iff(close[2] < close[1] and close > close[1] and vFast < vSlow and vFast > Level, 1,
	         iff(close[2] > close[1] and close < close[1] and vFast > vSlow and vFast < Level, -1, nz(pos[1], 0))) 
	pos

D_DSP(Length) =>
    pos = 0.0
    xHL2 = hl2
    xEMA1 = ema(xHL2, Length)
    xEMA2 = ema(xHL2, 2 * Length)
    xEMA1_EMA2 = xEMA1 - xEMA2
    pos := iff(xEMA1_EMA2 > 0, 1,
             iff(xEMA1_EMA2 < 0, -1, nz(pos[1], 0))) 
    pos

strategy(title="Combo Backtest 123 Reversal & D_DSP (Detrended Synthetic Price)", shorttitle="Combo", overlay = true)
Length = input(14, minval=1)
KSmoothing = input(1, minval=1)
DLength = input(3, minval=1)
Level = input(50, minval=1)
//-------------------------
LengthDSP = input(14, minval=1)
reverse = input(false, title="Trade reverse")
posReversal123 = Reversal123(Length, KSmoothing, DLength, Level)
posD_DSP = D_DSP(LengthDSP)
pos = iff(posReversal123 == 1 and posD_DSP == 1 , 1,
	   iff(posReversal123 == -1 and posD_DSP == -1, -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)	 
if (possig == 0) 
    strategy.close_all()
barcolor(possig == -1 ? #b50404: possig == 1 ? #079605 : #0536b3 )

もっと