テクニカル(単純移動平均:SMA)分析アプリついに完成しました! たっきん(Twitter)です!
シストレ開発ブログ久々の更新です。
今回の内容はついに完成したテクニカル分析アプリの紹介になります。
テクニカル分析といってもその種類は様々で単純移動平均(SMA)、一目均衡表、ボリンジャーバンド、RSI、MACD、ストキャスティクスなどがありますが、今回は単純移動平均(SMA)に着目してアプリケーション開発を進めていました。
結論から言いますと、単純移動平均(SMA)であらゆるパラメータを変化させてバックテストを実施した結果、特定のパラメータ時に良好なパフォーマンスが得られたことから単純移動平均(SMA)でのシステムトレードは有効であると考えています。
正直この良好なパフォーマンスとなる特定のパラメータを見つけるのにかなりの時間と労力がかかりました。
バックテストも約2ヵ月もの間1日24時間パソコンをフル稼働させ続けてましたからね・・・
でもその苦労の甲斐もあってようやく良好なパラメータを見つけることができました。
さっそくそのパラメータを実装して本番口座で運用を開始していこうと思います。
テクニカル(単純移動平均:SMA)分析アプリ紹介
今回作成したテクニカル分析の単純移動平均(SMA)アプリケーションの設計内容とバックテスト結果を紹介していきます。
アーキテクチャ設計
SMAアプリを作成するにあたり、アーキテクチャ設計を下図のように更新しました。
前回からの主な変更点は、
- サブパッケージ「technical」を作成し、その中に「SMAノード」を作成
- 「historical_candles」ノードにトピック「latest_candle」を追加
- サービス「candles_data」を非同期(async)化
になります。
ちなみに、サブパッケージ「technical」を作成した理由ですが、今後テクニカル分析アプリのノードを複数個作成していくつもりなので、それらのノードを一括りで管理するためです。
SMAノードの状態遷移設計
今回追加したSMAノードは状態遷移で設計しています。
下記に今回作成したSMAノードの状態遷移図を載せておきます。
「システム正常」状態内ではさらに2つのサブ状態があり、並列動作でOHLCデータ更新とトレード実施の2つの処理を走らせています。
僕のノウハウになるのでトレードロジックの詳細までは公開することはできませんが、動作のイメージとしては、OHLCデータ更新処理でローソク足の最新の値を取得してSMAを算出し、トレード実施処理にてトレード条件を満たしているか否かを判定します。
バックテスト結果
自分で考えたシステムトレード・ロジックで運用した場合、本当に利益が出せるのか不安になりますよね?
そこでシステムトレード・ロジックの有効性を検証するために過去のデータを用いて、一定期間にどの程度のパフォーマンスが得られるかをシミュレーションすることをバックテストと言います。
今回バックテストをするにあたり、SMA移動平均線の期間、決済時の指値、逆指値などの各種パラメータを少しづつ変化させ、総当たり気味にパフォーマンスを算出しました。
ちなみに、過去のデータはドル円過去約10年分(2010年~2021年現在)の1分足データを使いました。
この総当たりのバックテストを実行するだけで約2ヵ月間もかかりましたw
かなりの時間を費やしましたがその代わりに下記のような利益ヒートマップを作成することができました。
表示されている利益ヒートマップはあくまでも全体の1部分になります。
全体はデカすぎて表示しきれませんw
さて、利益ヒートマップが作成できたらあとはパフォーマンスが良さそうなポイントをピックアップするだけですね!
今回はパフォーマンスが良好であった4ポイントに絞り、運用していくことに決めました。
具体的な4ポイントのトレード条件については公開できませんが、シミュレーション結果の損益変動グラフは下記のようになりました。
4ポイント(タイプA~D)とも綺麗なリニアな線とはなりませんでしたが右肩上がりのグラフになっているため、アベレージで見れば良好な結果であると言えると思います。
ただし、短期間で見れば利益が伸びないどころか一時的にマイナスになる箇所もあるため、実際にシストレで運用するとなると数年単位でのトライになりそうですね。
さいごに
テクニカル分析のアプリケーションとして単純移動平均線(SMA)でのシステムトレード・ロジックを設計し、総当たりでのバックテストを行い過去10年分のデータからパフォーマンスのよかった4ポイントを絞り込むことができました。
ただし、この結果はあくまでも過去10年間でのパフォーマンスのため、今後のトレードで同等のパフォーマンスとなることを保障しているわけではありません。
何はともあれ時間はかかりましたが、なんとかシステムトレードを運用開始できる状態にまで漕ぎつけることができました。
あとはプログラムを実行して完全放置しながら運用実績を見守っていくだけですね。
また今後の予定になりますが、次もSMA以外のテクニカル指標を使ったシステムトレードを追加していこうと思います。
今回のSMAシストレを作成するにあたり、バックテスト環境等がそのまま流用できそうであるため、短期間での開発ができそうだからです。
時間に余裕ができたらシステムトレードの運用結果報告ブログを書いていきたいと思っていますが、まずはアプリケーションの数を増やすことを優先しようと思います。
前回のブログ更新からかなり期間が空いてしまいましたが、今後は1,2か月に1回のペースくらいでシストレ開発ブログを更新していきたいと思ていますので、もしよければフォローよろしくお願いします!
それではまた!
コメント