はじめに
4月からFXやCFDで最適なストラテジーを検証する、という一風変わった依頼を受けることになりました。
一般に、FXや短期の株取引はゼロ和ゲームと言われていますが、本当のところはどうなのか調べたことはなかったので、検証する良い機会だと思い、MQL4でストラテジー毎の成績を調べてみた次第です。
なお、AI は未使用です。
ストラテジーの構築
この稿での「ストラテジー」とは
まずは用語の定義から。
この稿における「ストラテジー」とは、以下の一覧の操作をルール化したものを言います。
- あるルールに従って買い、または売りポジションを持つ。
- 損切りルールを満たしたら、持っているポジションを全て解消する。
- 一定のルールを満たしたら、持っているポジションを全て解消する。
3番目のルールは損切りになることもありますし、利確になることもあります。
ATR(Average True Range)と掛け金
TR = min(高値-安値, 前日終値-安値, 高値-前日安値)
と定義します。TRの20周期指数平滑移動平均を ATR として定義します。
1回の掛け金は ATR の逆数に比例するように決定します。すなわち、値幅がある場合は小さく、値幅が小さい場合は大きくベットします。VIX 指数の逆数と正の相関があるように賭けていることになります。
勝率とプロフィット・ロス
勝率、およびプロフィット・ロスを次式で導入します。
win_lose = 勝ちトレード回数 / 総トレード数
profit_loss = 勝ちトレードの利益 - 負けトレードの損失
win_lose が大きくても profit_loss が負の場合がありえます。なるべく profit_loss が大きくなるストラテジーを探ることが課題となります。
新高値ブレーク・新安値ブレーク
過去何周期かの高値を突き抜けた場合を新高値ブレーク、逆に何周期かの安値を突き抜けた場合を新安値ブレークと呼びます。
標準ストラテジー
お疲れ様でした。ようやく「標準ストラテジー」定義することができます。FX, CFD で巷間で囁かれているストラテジーは以下のようなものです。
- Xb周期新高値ブレークならば買いポジションを持つ。Xs周期新安値ブレークならば売りポジションを持つ。
- 順張り方向に Na * ATR 動いたら買い増しする。数量は当初のポジションと同じ。
- Nl * ATR 逆方向に動いたら全ポジションを損切りする。
- Yb周期新安値ブレークなら買いポジション解消。Ys周期新高値ブレークならば売りポジション解消。
デッドクロス
一般に買いよりも売りの方が足が速いことから、買いは新高値で行い、売りはデッドクロスで行う方法が考えられます。
4つのストラテジー
今回検証するにあたり、4つのストラテジーを用意しました。
ストラテジー名 | 内容 |
---|---|
標準ストラテジー | 上記説明の通り |
売りポジションデッドクロス | 売りポジションの決定のみデッドクロスを採用 |
全てデッドクロス | 全ての売りでデッドクロスを採用 |
Xs2周期新安値ブレーク | Xs2(<Xs)新安値ブレークで売り |
バックテスト
2021/4/1 から 2021/4/28 までの15分足で検証を行いました。
MT4は最小チックで検証しますが、計算量が膨大になってしまうため、1時間ごとに各ストラテジーが与えるプロフィット・ロスを算出しました。ストラテジーの計算期間は過去90周期としました。
各ストラテジー計算において、当初はポジションを持っていないと仮定します。本当はこの仮定は正しくないのですが、修正しようとするとかなりプログラムが煩雑化するので諦めました。結果は第1近似にはなると思います。
初期費用は 1000 万円とし、1時間ごとに最適と思えるストラテジーを選択し、資金がどれだけ減るか(増えるか)観察します。
なお、ADX および +DI, -DI 両方が 25 以下の時はトレードしない、という機能を実装しています。
通貨ペア | 結果 |
---|---|
USDJPY | もっとも儲かった通貨ペア。標準シナリオの圧勝。 |
EURJPY | ドローダウン3割を記録し、もっとも成績が悪い通貨ペア。デッドクロスが有効。 |
GBPJPY | 可もなく不可もなしと言う感じ。標準シナリオ優勢。 |
EURUSD | USDJPYに続いて2番目に儲かった通貨ペア。標準シナリオ優勢。 |
本当は原油 CFD や金 CFD でもやってみたかったのですが、楽天 FX さんは5月からサービス提供開始と言うことなので、開始されたら検証項目に追加してみようと思います。
おわりに
結果を見ると伝統的な標準ストラテジーが意外に健闘していることが分かります。
EUCJPY だけはストラテジーが全て裏目に出てボロボロになります。
相場は一般に以下の様相に分かれると考えられています。
- 取引及び方向性がほとんど振れない「なぎ」の時期
- 参加者が多く、方向性がない「カオス」の時期
- 何らかのニュースが出て一方向に動く「トレンド」の時期
MQL4 には外部プログラムとの連携機能があるようなので(@amenbo さんの AI「scikit-learn」によるFXテクニカル分析をやってみた 参照)、各様相を AI に学習させてトレンド時期だけトレードするようにすると面白いのではないかと思います。