モメンタムオシレーターに基づく取引戦略
概要
本戦略は、モメンタムテクニックを利用した日足ベースのレンジ相場取引戦略であり、ATRによるストップロスを使用します。本戦略はStablyのKory Hoang氏によって作成されました。
戦略はモメンタム指標を利用してトレンド方向を識別し、ATR指標を組み合わせてストップロスラインを設定することで、安値で買い高値で売るレンジ相場取引を実現します。
戦略の原理
コードではまずバックテストの時間範囲を設定しています。
次に指標部分では、以下の指標を計算しています:
- atr(): ATR指標を計算し、ストップロスを設定します。
- max_/min_: 前のローソク足の高値/安値を記録します。
- is_uptrend: 上昇トレンドかどうかを判断します。
- vstop: ストップロスラインです。
トレンド判断の主なロジックは以下の通りです:
終値が前回の下落時のストップロスラインvstopより高い場合、上昇トレンドと判断します。終値が前回の上昇時のストップロスラインvstopより低い場合、下降トレンドと判断します。
トレンドが転換した時点で、ストップロスラインの位置を調整します。
具体的には、上昇トレンド時にはストップロスラインを前のローソク足の高値からATRを引いた値に設定します。下降トレンド時にはストップロスラインを前のローソク足の安値にATRを加えた値に設定します。
これにより、トレンドフォロー型のストップロスを実現できます。
取引ルールとしては、ストップロスラインをブレイクした時点でエントリー(買いまたは売り)を行います。
優位性分析
本戦略には以下の優位性があります:
- モメンタムテクニックを使用してトレンド方向を判断し、転換点をタイムリーに捉えることで、偽のブレイクアウトを回避できます。
- ATRによるストップロスが高値/安値を追跡するため、リスクを適切にコントロールできます。
- 戦略ロジックがシンプルかつ明確で、理解・実装が容易です。
- トレンド間で安値買い・高値売りのレンジ相場取引を実現できます。
リスク分析
本戦略には以下のリスクも存在します:
- ATRの数値選択が不適切だと、ストップロスが緩すぎたり、きつすぎたりする可能性があります。
- レンジ相場では激しい値動きが発生し、連続でストップロスに引っかかる可能性があります。
- 取引回数が多くなる可能性があり、手数料コストが高くなります。
以下の点から最適化が考えられます:
- 異なるATRパラメータをテストし、最適なパラメータ組み合わせを見つける。
- ATRにボラティリティ指標を組み合わせて、ストップロスラインを最適化する。
- トレンドフィルターを追加し、レンジ相場での無駄なエントリーを避ける。
最適化の方向性
本戦略は以下の方向性で最適化できます:
-
異なるATRパラメータをテストし、最適なパラメータ組み合わせを見つける。複数のパラメータをバックテストし、リスク・リターン比を評価する。
-
ATRにボラティリティ指標を組み合わせて、ストップロスラインを最適化する。ボラティリティ指標を導入し、変動が大きい時にはストップロスの幅を適度に緩める。
-
トレンドフィルターを追加し、レンジ相場での無駄なエントリーを避ける。トレンド判断指標を追加し、トレンドが明確な時のみエントリーする。
-
ポジション管理メカニズムを追加する。資金使用率や連続ストップロス回数などに応じてポジションサイズを調整する。
-
夜間のギャップリスク管理を追加する。取引終了前に強制的にポジションをクローズし、翌営業日の価格飛びを回避する。
まとめ
本戦略は、基本的な日中レンジ相場取引戦略として、全体の考え方は明確で、モメンタムテクニックを使用してトレンドを判断し、ATR指標を用いてスリッページ追跡型のストップロスを実現することで、リスクを効果的にコントロールできます。
最適化の余地は大きく、今後はトレンド判断、ストップロス方法、ポジション管理など複数の観点から改良を加えることで、より実戦取引に適した戦略にすることができます。総じて、本戦略は定量取引のための優れた基本フレームワークを提供しています。
/*backtest
start: 2023-01-29 00:00:00
end: 2024-02-04 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=2
strategy("BTC Swinger", overlay=true, commission_value = 0.25, default_qty_type=strategy.percent_of_equity, default_qty_value = 100)
/////////////////////////////////////////////////////////////- 1

