<基礎学習>機械学習、DeepLearningを使わずにFXの分析をしてみた

機械学習のライブラリや考え方などの勉強もさながら、「そもそもデータ分析ってどうやるの?どうやって結果を説明すりゃーいーの?」とふと思いまして、データ分析のいろはを勉強しようと以下の本を手に取りました。(厳密にいうと、この本がインストールされたKindleを手に取った)

とても勉強になりました。特に1章。

  • 「データ分析の設計」が必要
    • 問題領域を決める
    • 問題を解決するための評価軸を決める
    • 要因を列挙する

上記プロセスを踏んでいろいろやった結果、なかなか有意義な結果が出たんでブログにしました。
まだ途中ですが・・・

※このブログに書いてあることは投資およびデータ分析の素人が書いたものです。
 投資は自己責任でお願いします。
 

目次

  • 概要
  • データ分析
    • データの前処理
    • 集計
  • 今後
  • 感想
  • 参考サイト

概要

  • 過去10年分の1時間足について、以下テクニカル指標を使って、「次の1時間足で上がるか下がるか」を予想する

データ分析

1.データの前処理

1−1.データのダウンロード、時間足へ加工

ここに貼ってあるリンクから、1分足18年分USDJPYをダウンロードしました。
www.forextester.jp

1分足を60足刻みに加工することで、1時間足のチャートを作成しました。

1−2.各種テクニカル指標の加工

集計しやすくするため、移動平均線ボリンジャーバンド、前日の価格を「当日比」としました。
データ分布はこんな感じ(以下例は移動平均線です)

f:id:kurupical:20180329212446p:plain:w600

また、クロス集計がしやすいように0.25%刻みでデータをまとめました。
データまとめ後はこんな感じ

f:id:kurupical:20180329212548p:plain:w600

2.集計

2−1.優位性のありそうなセグメントの抽出

移動平均線ボリンジャーバンド、前日の価格、すべての組み合わせに対してクロス集計して偏りがあるところを調べます

f:id:kurupical:20180329214504p:plain:w600

上記のエクセルは、25日ボリバンと25日移動平均線のクロス集計です。
これの見方ですが、たとえば緑で塗りつぶされているところの意味は以下の通りです。

  • 25日ボリバンが当日比98.5%
  • 25日移動平均線が当日比99.25%
  • 上2つを満たすデータが7件ある
  • 7件のうち85.7%は、1時間後下がっている

すべての指標の組み合わせでクロス集計を行い、以下を満たすデータを抽出していきます

  • データ量(count)が十分であること ( count > a)
  • 1時間後の値動きがどちらかに偏っていること( abs(0.5-b) < mean)

今回は、a=500、b = 0.07としました。
(セグメントのデータが500件以上あり、値下げ確率が43%以下もしくは57%以上)

抽出の結果は以下のとおりです
f:id:kurupical:20180329215635p:plain:w500
※MA=移動平均線、BB=ボリバン

このデータからわかることは、例えば1行目だと、「MA25=0.995、MA75=0.9975の場合、57.5%の確率で次の1時間足は上がる」ということです。
つまりエントリーのシグナルを出力してることになります!

2−2.セグメントの組み合わせ

上記クロス集計で抽出した条件を満たせばトレード」で、少し勝ちトレードに近づけるかもしれないと思います。
ここでもう少し考えてみました。
ある時間足について「上記クロス集計で抽出した条件をc個以上満たせばトレード」にしたらどうなるのか?を検証しました。

結果
n=81243
c=1 : トレード回数=6963回、正解率=57.4%
c=2 : トレード回数=1415回、正解率=59.6%
c=3 : トレード回数=267回、正解率=63.2%

f:id:kurupical:20180329221730p:plain:w500

Cの数を上げると、正解率は上がりますがトレード回数が少なくなります。
トレード回数が多いほうが分散が下がりリスクが少ないです。
なので、トレード回数と正解率のトレードオフを考える必要があります。

3.今後

  • やってみたいこと

    • パラメータチューニング。a,b,cの値を変えればどうなるかを試す。
    • クロス集計するテクニカル指標を増やす。MACD加重移動平均ストキャスティクスなど・・・
    • up/downではなく、値動きを見てみる
  • 課題

    • 1時間足のだと手数料負けして多分儲からない。バイナリオプションでの運用にならいけるかも?

4.感想

次の派遣先で「データ分析の結果を報告することもお願いする」と言われたので練習がてらやってみましたが、時間がかかるわりにまとめるの下手・・・。これだけ書くのに2時間かかりました。

あとは単純に、データ分析のプログラムの書き方がむずかしい。
データ加工のやり方に四苦八苦してます。numpy、pandasむずいです。。

今は、以下の方針でやってます。

  • やりたいことを書き出してから始める(いきあたりばったりにやらない)
  • 書いたプログラムは消さない(関数に改良を重ねるときはコピペして、pivot_table2とか命名する。)
  • コードの綺麗さは2の次。コピペ上等。
  • 処理速度は大事にする。
  • データ処理するとき、numpy/pandasですでに実装されている関数がないか調べる
    • 意外と何でもある。今回画像で貼ってるエクセルは、pythonで出力したものをほぼそのまま貼ってるだけです。pivot_tableで、セルの結合なんかもやってくれて最強。。

5.参考サイト

以下ブログで最近はじまったシリーズ。マジ神です。
we.love-profit.com