FXトレードの傾向をデータサイエンスで分析してみた|脱EXCEL プログラミング

MT5 トレード履歴分析 投資・FX
「FXトレードは知識と経験が物を言う」と言われています。しかし、FXトレードのさらなる成果向上のためにいま注目のデータサイエンスの手法が役立てられないでしょうか? MT5の取引データをもとに、トレードスタイルの可視化・分析をMATLABを使ってやってみました。
スポンサーリンク

5月までのトレード実績

長年の鳴かず飛ばずの期間を抜けて、今年3月にようやくプラスに転じたFXトレード実績ですが、4月の停滞期間を抜け、5月に再び成長軌道に乗ってきました。月間利益はFXをはじめて以来、過去最高です。4月の損益がマイナスに転じたのは、Lot数を倍にしたことで、トレードスタイルが若干乱れたことによるものです。5月にはLot数を上げたままの状態で、トレードスタイルが安定し、再び利益を伸ばすことができています。
5月までのFXトレード損益

MT5の取引履歴から、月間の利益と損失を積み上げグラフで作成する方法は、こちらの記事にまとめてあります。参考記事)MT5の取引履歴からトレードの月別傾向を示すグラフを作成する| 脱Excel プログラミング

さて、MT5の取引データをもとに、自分のトレードスタイルを分析することで、さらに成果をあげられるのではないかと考えました。しかし、ダウンロードしたMT5のデータを、毎回Excelで手作業で分析するのは面倒です。

そこで、いま流行りの「データサイエンス」の初歩となりますが、プログラミングツール MATLABをつかってMT5のトレード履歴を分析するプログラムを作成してみました。生成AIが発展した現在、プログラミングの知識が少なくても、この程度のプログラムは比較的かんたんに作成できるようになりました。やりたいタスクを細分化して ChatGPTなどに問い合わせれば、コード生成のヒントをくれるので便利です。以下にご紹介するプログラムは、プログラミングの素人がChatGPTに聞きながら作成したものです。本業のプログラマーであればもっと短い行数で洗練されたコードが書けるかもしれません。冗長なところがあるかもしれませんがご容赦ください。

月間累積Pips分析

FXの世界では、トレード成果を他人と共有するときにPips数を提示することが一般的です。その理由は、損益の金額は掛けているLot数にも左右されるため、金額だけで比較してしまうと、真の意味でトレードの上手・下手が判断できないからです。私の場合も 4月にLot数を倍増しているため、3月以前と 4月以降では単純にトレード成果を比較できません。そこで、改めて月ごとの累積Pips数をグラフ化してみました。

月間累積pips

上のグラフをみると、3月と5月を比較して、月間獲得pips数は 2倍程度にとどまることがわかります。最初に(5月までのトレード実績)で示した月間損益の積み上げ棒グラフにおいて、3月の利益にくらべて5月の利益が4倍近くになっているのは、

(Lot数 2倍) x(月間獲得pips数 2倍)=(月間利益 4倍)

という構図になっていたためであることがわかります。

獲得pips数の分布

さて、総獲得pips数が伸びていることはわかりましたが、個々のトレード内容についてもみておく必要があります。少ないトレードで大きなpipsを稼いでいるのか、細かいpipsの多数の積み重ねで合計pips数が増えているのか、pipsの内訳をみることで自分のトレードスタイルがわかります。

月次の獲得pips数をグラフ化する方法ですが、MATLABでのプログラミングでは大きく3ステップあります。

まずMT5の取引データから、必要なデータを前処理で準備しておきます。列名をColumnNamesという配列であらかじめ定義しておき、Excelから読み込んだテーブルに一括して命名します。5行目末尾の”…” (ドット)は、コマンド文が次の行に続いていることを意味します。”%”でのコメントアウトの部分を除くと実質6行のプログラムです。

MATLABによるデータ前処理

次に、月ごとに集計したいため、年月のデータをTime列から取り出し(文字列の左端から7文字目まで)、各取引での獲得pipsを符号付きで(利益なら”+”、損失なら”-“)算出します。

pipsの計算は、日本円(JPY)が絡む通貨ペアは、終値と始値の差額を100倍すればよいのですが、日本円が絡まない通貨ペアの場合は、終値と始値の差額を10,000倍する必要があります。

MATLABによるデータ前処理

最後に、グラフの作成です。グラフ作成に必要なデータをX軸、Y軸それぞれに指定し、histogram関数でグラフを作成します。月ごとに別々のヒストグラムを作成して保存したいので、for文でループしています。何も引数を指定しないでhistogram関数を使うと、データの内訳によって X軸やY軸のデータ範囲や目盛りの間隔が勝手に調整されてしまいます。データ範囲や目盛りの間隔が、月次グラフごとに異なると比較しにくくなるため、xlim関数ylim関数で、座標軸の開始値と終了値を固定します。ここでは、X軸(1トレードで獲得できたpips値)を-100から100まで、Y軸(各pipsの帯域でのトレード回数)を 0 から 20 と指定しています。

MATLABによる獲得pipsのヒストグラム

作成したグラフは、exportgraphics関数をつかい、月ごとに別のファイル名で保存します。

獲得pips分析:傾向と対策

さて、このプログラムを実行した結果が以下になります。利益がでた3月と5月(5/17まで)のpips分布を比較しています。横軸は1つのLotから獲得したpips、縦軸は獲得回数です。

2024年3月 2024年5月(途中)
獲得Pipsの分布 獲得pipsの分布

これを見ると、1回あたり 10 pips以上獲得できたトレードも増えていますが、それ以上に0 pips〜 10 pipsのトレードの回数が大幅に増えていることがわかります。自分では 10 pips以上稼げていたと思いこんでいましたが、データを調べてみると、10 pips以下の、どちらかというとスキャルピングに近いトレードの積み重ねで pipsを稼いでいたことがわかりました。

ちなみに各pips帯ごとに獲得できた総pips数は、以下のようになります。5月には、1つのLotから50 pips以上の比較的大きなpipsが取れる機会も増え、0 pips〜 25 pips帯での獲得pipsも増えていることがグラフから見て取れます。

2024年3月 2024年5月(途中)
pips帯ごとの総獲得pips数 pips帯ごとの総獲得pips数

このデータを作成するには以下の実質13行のプログラム(赤枠内:コメントアウトを除く)を付け加えました。月ごとに pips帯域ごとの獲得(損失)pips数を合計し、棒グラフで表しています。

FXトレードのpips分布の分析プログラム

今後 トレードでの利益を増やすには、

  • もう少し保有時間を伸ばして、個々のトレードで獲得できるpips数を増やす
  • 勝率の高い10 pips以下のトレードをさらに数多く積み重ねる
  • Lot数をあげて同じpipsでも獲得金額が大きくなるようにする

のいずれかの方法が考えられます。

 

投資・FX
スポンサーリンク