
双メカニズムダイナミックトレンド追跡戦略は,2つの異なる取引戦略の信号を組み合わせたトレンド追跡戦略である.この戦略は,まず123反転戦略を使用して価格の反転点を判断し,その後,トレンドを消す合成価格 ((D_DSP) インデックスと組み合わせて価格のトレンド方向を判断し,最後に2つの信号を統合して取引指示を生成する.
この戦略は,主に中短期トレンドを追跡し,ダブルメカニズムによってダイナミックなストップ・ロスを設定し,利益を効果的にロックし,損失の拡大を防ぐことができる.同時に,トレンド指標と逆転指標の二重確認を組み合わせて,ノイズ取引を減らすことができる.
123反転策は,ウルフ・ジェンセンによる”私はどのように先物市場で3倍に資金を稼ぐか”の183ページに由来する. この策は,価格が2つの連続したBAR反転形態が価格反転シグナルを形成するかどうかを判断する.
具体的論理は,閉盘価格が前日の閉盘価格より低く,ゆっくりとしたK線が50より低ければ買入シグナルが生成され,閉盘価格が前日の閉盘価格より高く,速くなるK線が50より高ければ売り出さシグナルが生成される.
消向傾向合成価格指数 ((D_DSP) は,価格傾向の方向を判断するために使用される指標で,実際の価格周期の変化に一致する.D_DSPの計算方法は,価格の1/4周期指数移動平均を減算して1/2周期指数移動平均である.
D_DSPが正の場合は,価格が上昇傾向にあることを示し,D_DSPが負の場合は,価格が下降傾向にあることを示します.
この戦略は,123反転戦略とD_DSP指数の2つの判断機構を組み合わせて,両方の信号が同向である場合 (例えば,双多数または双空) は,トレード指令を生成し,信号が一致しない場合は,清算する.
この二重確認メカニズムは,ノイズ取引を効率的にフィルターし,トレンド収益をロックします.
双メカニズムダイナミックトレンド追跡戦略の最大の利点は,2つのレベルのストップポイントを設定することにある. まず,時間の次元では,素早くランダムな指標の差値が時間の位違いのストップを形成する.次に,価格の次元では,反転戦略自体は一定のストップ機能を含んでいる.
この2層のストップは,利益を最大限にロックし,単一のストップ戦略のデッドフォークの損失を防ぐことができます.さらに,二重確認メカニズムは,非主流の方向性価格変化によって引き起こされる誤った信号を効果的にフィルターすることができます.
この戦略の最大のリスクは,パラメータを過度に固定することにある.例えば,周期長さを不適切に設定すると,主流のトレンドを逃し,利益の機会を逃すか,損失を増やす可能性がある.二重確認を過度に固定すると,タイムリーなストップも逃す可能性がある.
さらに,逆転策とトレンド策の組み合わせでは,両者の判断が一致しない場合での清算操作は,後続トレンドが1つの主流方向に進む機会を逃す可能性があります.
この戦略は以下の点で最適化できます.
周期パラメータ最適化。より多くの反測データからパラメータの最適値を計算し,より適切な周期パラメータを設定。
ストップを突破したり,ストップを追跡したり,より動的な,より合理的なストップポイントを設定する.
判断規則の最適化. 二重確認判断の敏感性を調整し,過度に激進的な清算を逃す好機を防ぐ.
フィルターを追加する. 価格の振動フィルターを設定し,トレンドの終期の平均線差の振動誤判信号を回避する.
双メカニズムダイナミックトレンド追跡戦略は,急速でランダムな指標の双重停止と反転とトレンド判断の双重確認により,効果的なトレンド追跡とリスク制御を実現する.この戦略は,価格動向の時間要因だけでなく,価格自体の方向性も考慮し,立体的な意思決定の根拠を形成する.
判断規則とパラメータ設定を継続的に最適化することで,この戦略はよりよい効果を得ることが期待されている.しかし,取引戦略の最適化は,大量の歴史的データテストのサポートを必要とし,株式選択戦略とストップ・ストープ戦略も継続的に改善する必要がある.
/*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 )