この取引戦略は,ダイレクショナル・ムーブメント・インデックス (DMI) とストカスティック・オシレーター (Stochastic Oscillator) を組み合わせて取引信号を生成する.DI+,DI-ライン,平均ダイレクショナル・インデックス (ADX) でのDMIは,トレンドの強さと方向性を測定する.DI+がDI-,ADXが25以上,ストカスティック%Kが20以下 (oversold) のとき,戦略はロング (buy) になります.DI-がDI+以上,ADXが25以上,ストカスティック%Kが80を超えるとショート (sell) になります.最近の最高値と最低値をベースにしたダイナミックストップ・ロストレベルはリスク制御を強化します.
戦略は次の主要な要素に基づいています.
トレンド識別のためのDMIDMI の DI+,DI,ADX 線は市場のトレンド方向と強さを決定する.DI 以上のDI+ は上昇傾向を示し,DI 以上のDI+ は下落傾向を示します.ADX の値が高くなった場合,より強いトレンドを示します.
過剰購入/過剰売却のストカスティックストキャスティックの%K線は,最近の最高値と最低値に対する現在の接近を示しています.20未満の値は過売れ,80を超える値は過買いを示します.
信号論理:DMIとストカスティックを組み合わせると,DI+>DI- ((上昇傾向),ADX>25 (トレンド強度) とストカスティック%K <20 (過売り) のとき,戦略はロングになります.DI->DI+ (下落傾向),ADX>25と%K>80 (過買い) のときショートになります.
ダイナミックストップ損失: 入場後最近の最高値と最低値がダイナミックストップ・ロストレベルとして使用され,適応型リスク管理が可能になります.
この戦略の主な利点は以下の通りです.
DMI (トレンド) とストカスティック (過剰購入/過剰販売) の二重確認を用いたより高い信頼性
最近の価格変動に基づいた革新的なダイナミックストップロスは,よりよいリスク管理を可能にします.
パラメータが少ないことで 最適化と実装が容易になります
金融市場 (株式,外為,暗号通貨など) と時間枠の間で幅広い適応性があります.
パインスクリプトは取引プラットフォームに直接適用できます.便利です.
考慮すべきいくつかのリスク:
ADXが低くなると 市場が動いているときに 誤った信号が出る可能性があります
ストカスティックは遅れている指標です. 市場がシグナル時に逆転したかもしれません. リードインジケーターと組み合わせてください.
ダイナミックストップは,大きなトレンド変動を完全に避けることはできません.合理的なストップ距離が不可欠です.
パラメータの調整が不十分である場合,性能に悪影響を及ぼします.最適な長さを設定する必要があります.
ブラック・スワン・イベントは 異常な損失を防ぐために 戦略の停止が必要です
戦略の強化の方法:
移動平均値やMACDなどのインディケーターを追加することで信号の信頼性が向上します
バックテストによるパラメータ最適化は,最適な設定を発見するのに役立ちます.
機器と時間枠に基づいてパラメータをカスタマイズします.より速い機器は短い長さを使用できます.
詳細なログアウトプットを getInfo ((() を使用して分析と精製を容易にする.
グラフ上の信号ポイントとストップ・ロスの線をグラフ化して 追加的な洞察を得ます
迅速な介入を可能にする間に合う通知を受け取るためのカスタムアラートを開発します.
この戦略は,トレンド指向とトレードエントリのためのオーバーバイト/オーバーセールレベルを特定するために,DMIとストカスティックオシレーターの強みを組み合わせます.革新的なダイナミックストップロスのメカニズムは,よりスマートなリスク制御も可能にします.信頼性の高い信号,広範な適用性,使いやすさ,カスタマイゼーションにより,これは効率的なアルゴリズム取引戦略です.さらなる最適化は優れたパフォーマンスにつながります.
/*backtest start: 2022-12-19 00:00:00 end: 2023-12-25 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("DMI with Stochastic and Dynamic Stop-Loss", shorttitle="DMI_Stoch_SL", overlay=true) length = input(14, title="DMI Length") adxThreshold = input(25, title="ADX Threshold") stochKLength = input(14, title="Stochastic %K Length") stochDLength = input(3, title="Stochastic %D Length") [diPlus, diMinus, adx] = ta.dmi(length, length) stochKLine = ta.stoch(close, high, low, stochKLength) var float lowestClose = na var float highestClose = na lowestClose := na(lowestClose) ? close : math.min(lowestClose, close) highestClose := na(highestClose) ? close : math.max(highestClose, close) longCondition = (diPlus > diMinus) and (adx > adxThreshold) and (stochKLine < 20) shortCondition = (diMinus > diPlus) and (adx > adxThreshold) and (stochKLine > 80) if longCondition strategy.entry("Buy", strategy.long) strategy.exit("Exit Buy", "Buy", stop=lowestClose) if shortCondition strategy.entry("Sell", strategy.short) strategy.exit("Exit Sell", "Sell", stop=highestClose)