移動平均傾向追跡戦略

作者: リン・ハーンチャオチャン,日付: 2024-02-20 14:36:11
タグ:

img

概要

この戦略は,株価のトレンド方向を決定するために+DIと-DIのクロスオーバーをモニターし,トレンド追跡を達成するために,トレンドの強さを識別するためにADX指標を使用して,DMI指標に基づいて構築されています. +DIが -DIを超えると,ロング;ストップ損失価格が起動されたとき,または -DIが +DIを下回ると,ポジションを閉じる.

戦略原則

この戦略は,DMI指標の2つの構成要素を使用する: +DIと -DI. +DIは上昇勢いを測定する. -DIの上向きクロスオーバーは上昇勢力の強化を示す. -DIは下向きクロスオーバーを測定する. -DIの下向きクロスオーバーは下向きの勢力の強化を示す.

+DIが -DIを横切ると,上昇傾向が現れ,戦略は長引く.ポジションに入ると,後続線形ストップロスは最高価格の一定パーセントを追跡する.価格が引き下がるにつれて,ストップロスの価格はそれに応じて下がり,以前の利益の一部を一定程度ロックする.

ADXは,トレンドの強さを識別するために使用することができます. ADXが高くなるほど,トレンドはより顕著です. したがって,戦略は,ADXをエントリーのための補助指標として採用し,ADXが特定の範囲内にある場合にのみポジションに入ります.

要するに,この戦略は,移動平均トレンド追跡を実現するために,価格動向の転換点を捕捉します.

利点分析

この戦略の主な利点は3つの側面に反映されています.

  1. 価格動向の方向性を決定するためにDMI指標を使用することは正確で信頼性があります.DMIは,単純な移動平均値やその他の指標よりも傾向逆転を判断する上でより正確です.

  2. ADX指標を用いてトレンドの強さを特定することで,不安定な市場での取引が頻繁に避けられ,戦略がより堅牢になります.

  3. 線形トレーリングストップメカニズムは,ストップ・ロスのポジションを動的に調整し,トレンドが逆転すると早く退場し,リスクを効果的に制御するために部分的な利益をロックすることができます.

  4. 戦略ルールはシンプルで明瞭で,理解し実行しやすく,アルゴリズム取引に適しています.

リスク分析

この戦略の主なリスクは,

  1. DMIインジケーターが特定の特殊市場で失敗する可能性があります. DMIはすべての市場に適用されません.トレンドが顕著でない場合,誤った信号を生成することができます.

  2. ストップ・ロスのレベルを下回る前に価格が格差するリスク. 緩衝空間を残すことで,そのようなリスクは軽減できます.

  3. ADX パラメータの設定が不適切であるリスク. ADX パラメータは戦略のタイミング結果に直接影響する. 設定が高くすぎたり低くすぎたりするとパフォーマンスは影響を受ける.

  4. 線形トレーリングストップ方法により急上昇傾向で簡単に停止される.トレーリングストップパラメータは,特定の状況に基づいて調整することができます.

パラメータ調整,厳格なストップ損失,プログラムアーキテクチャの最適化などによってリスクはさらに軽減できます.

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

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

  1. 戦略の安定性を向上させるため,MACD,KDJなどの他の指標を使用します.

  2. カーブ・トライリング・ストップ,タイム・ベース・トライリング・ストップなど,さまざまなストップ・ロスの方法をテストする.

  3. ポジションサイズメカニズムを追加し,トレンド方向が確認された後に徐々にポジションを構築し,収益性を向上させる.

  4. 高周波因子,機械学習などを組み込み,より高い知性のためにDMIとADXパラメータを動的に最適化します.

  5. リスク予算等を用いたプログラム化リスク管理モジュールを追加し,最大引き上げを厳密に管理する.

戦略の効率性,安定性,安全性を効果的に高めるために様々な手段を組み合わせることができます.

概要

この戦略の全体的な論理は明確で理解しやすい.価格傾向の方向性を決定するためにDMI指標と ADX指標をトレンド強さの補助指標として使用し,線形トレーリングストップはリスクを効果的に制御する.この戦略は比較的安定しているが,依然として特定のリスクに対して注意を払う必要がある.継続的な最適化とテストを通じて,戦略の堅牢性と効率性を漸進的に改善することができる.この戦略は,トレンド平均追跡戦略の優れた代表者になる可能性があると考えられている.


/*backtest
start: 2023-02-13 00:00:00
end: 2024-02-19 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
//@version=5
//1.0 - 240202 @caddjax

strategy(title = "+DI Crossover", overlay=false)

//DMI + ADX Chart w/ overlay
// © jrregencia

lensig = input.int(14, title="ADX Smoothing", minval=1, maxval=50)
len = input.int(6, minval=1, title="DI Length")
up = ta.change(high)
down = -ta.change(low)
plusDM = na(up) ? na : (up > down and up > 0 ? up : 0)
minusDM = na(down) ? na : (down > up and down > 0 ? down : 0)
trur = ta.rma(ta.tr, len)
plus = fixnan(100 * ta.rma(plusDM, len) / trur)
minus = fixnan(100 * ta.rma(minusDM, len) / trur)
sum = plus + minus
adx = 100 * ta.rma(math.abs(plus - minus) / (sum == 0 ? 1 : sum), lensig)
adxmax = input.int(50, title="ADX Max Buying Area", minval=1, maxval=100)
adxmin = input.int(0, title="ADX Min Buying Area", minval=0, maxval=99)



//DI cross alert
DIPcross = ta.crossover(plus, minus) ? plus : na
plotshape(DIPcross, style = shape.cross , color=color.white, location=location.absolute)

plot(adx, color=color.rgb(255, 238, 0, 23), title="ADX", linewidth=2)
p1 = plot(plus, color=color.rgb(16, 137, 0, 31), title="+DI", linewidth=1)
p2 = plot(minus, color=color.rgb(143, 82, 255, 25), title="-DI", linewidth=1)
adxmaxl = hline(adxmax, title="ADX MaxLine", color=color.silver, linestyle=hline.style_solid)
adxminl = hline(adxmin, title="ADX MinLine", color=color.silver, linestyle=hline.style_solid)
fill(p1, p2, title="Cloud Fill", color = plus > minus ? color.teal : color.red, transp=50)
fill(adxmaxl, adxminl, title="ADX Fill", color=color.silver, transp=90)

// Configure trail stop level with input options (optional)
longTrailPerc = input.float(3, title="Trail Long Loss (%)",
     minval=0.0, step=0.1) * 0.01
// Determine trail stop loss prices
longStopPrice = 0.0

// Determine entry condition
enterLong = ta.crossover(plus, minus) ? plus : na

longStopPrice := if strategy.position_size > 0
    stopValue = high[1] * (1 - longTrailPerc)
    math.max(stopValue, longStopPrice[1])
else
    0
// Submit entry orders
if enterLong
    strategy.entry("EL", strategy.long)    
// Submit exit orders for trail stop loss price
if strategy.position_size > 0
    strategy.exit("XL TRL STP", stop=longStopPrice)    

もっと