LoginSignup
1
6

More than 3 years have passed since last update.

為替の時系列データをクラスタリングしてみた話

Posted at

本記事内容サマリー

  • 為替のデータをクラスタリングしてみました。
    • k-means, ユークリッド距離 を用いました。
  • 上位足(より長い時間軸の)データを組み合わせると有用そう。
    • 上位足を用いると、ラベル(利食い:1、損切り:−1、保有時間による決済:0)の割合の偏りが良化した。

開発環境

  • Colaboratory
    • scikit-learn

データ準備

2018.01 ~ 2019.04 の USD/JPY を使用し、
5分足での移動平均線のゴールデンクロスのエントリーポイントをサンプルデータとしました。(2482 データ)
* 特徴量:
* エントリーポイント前の約3時間分のデータ(ohlc)
* RSI

ラベリング

ラベル付けは、以下のルールで行いました。

Result Label
Profit 1
Loss -1
保有時間による決済 0

今回は、大体3等分されるように損切りと利食いのラインを設定しました。

クラスタリング

期待した結果

以下のグラフの様に、クラスタ毎に”利食い”/”損切り”/”保有時間による決済”がそれぞれキレイに分かれることを期待しました。

2002_1_hoped.png

これだと、クラスタ2の場合はダマシと判断して、トレードを見送ることができますね。

結果

scikit-learn の TimeSeriesKMeans を用いてクラスタリングし、各クラスタのラベルの割合を図示し、勝率順にソートしました。

2002_2_OHLC_and_RSI.png

いまいち。。
勝率最大のクラスタで、45%、最小のクラスタで、22% でした。
元がほぼ3等分(33%)なので、少しは分けれてはいそうですが、もう少しキレイに分かれて欲しいところです。

上位足を追加

改善を目指し、以下のより長い時間足の情報を特徴量に加えることにしました。
* 30分足でオシレーター系のインジケーター
* 2時間足でトレンドフォロー型のインジケーター

その結果が以下です。
2002_3_with_long_term_indicator.png

勝率最大のクラスタで、63%、最小のクラスタで、14% でした。
上位足の情報を加えることで、大分良化しました。
上位足の情報が有用であることが改めて確認できたので良かったのではないでしょうか。
これくらいの結果であれば、ダマシを回避するのは難しそうですが、ポジションの数量の調整には使えそうだと個人的には思いました。

記事を読んでいただきありがとうございました。

参考

1
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
6