ほぼ全てのソースコードを公開します! たっきん(Twitter)です!
僕が自作している自防売買システム(システムトレード)ですが、今まではアプリケーション・パッケージ部分を非公開としてきました。
しかし、アプリケーションなしでは実際に動かすことができないため、一部のソースコードは公開されていても結局使ってみることができない状態となっていました。
なので今回、お試し用のサンプル・アプリケーションとして、ボリンジャーバンドをつかったシステムトレードを作成して、アプリケーション・パッケージを含むほぼ全てのソースコードをGitHubで公開することにしました!
アーキテクチャは下図のようになります。

また、アプリケーション公開の際に、GutHubのREADMEファイルも充実させて、シストレを稼働させるまでの手順も記載しました。
基本的にはREADMEファイルに記載されている通りの手順を踏むと、自分の環境でサンプル・アプリケーションを動かせるようになるはずです。
実際に動かすことができれば、システム全体の振る舞いを把握することができますし、何よりサンプル・アプリケーションを自分で修正すれば、世界に1つだけのオリジナル・トレードアルゴリズムで実際にトレードすることも可能になると思います。
そうすれば、あなたもシステム・トレーダーになることも夢ではなくなりますね!

サンプル・アプリケーションの概要
お試し用サンプルアプリケーションのボリンジャーバンド・シストレですが、ソースコードは下記となります。
ボリンジャーバンドを使ったトレード方法は大きく分けて順張り型と逆張り型の2種類がありますが、今回僕が用意したサンプルは「順張り型」になります。
具体的に説明すると、下記の条件でEntry、Exitします。
- +STDに到達 → ロングEntry
- 利確条件:「Entryレート + 利確幅」へ到達
- 損切条件:SMAへ到達
- -STDに到達 → ショートEntry
- 利確条件:「Entryレート - 利確幅」へ到達
- 損切条件:SMAへ到達


上図の下段に「状態」と書かれていますが、これはチャートに沿った時系列での状態遷移を表しています。
状態遷移図(ステートマシン図)は下図のようになります。

パラメータ
今回作成したボリンジャーバンドのサンプルアプリケーションでは下記3つのパラメータで稼働するように作りました。
項目 | ① | ② | ③ |
---|---|---|---|
通貨ペア | usdjpy | eurusd | eurusd |
時間足 | m1 | h1 | h1 |
注文数 | 0 | 0 | 0 |
SMA値 | 20 | 25 | 75 |
STD値 | 2.0 | 2.5 | 3.0 |
利確幅(pips) | 50 | 200 | 300 |
上記6項目についてはROSパラメータとして定義しているので、直接ソースコードに変更を加えることなく、数値を変更できるようにしています。
ROSパラメータを定義しているのは下記のYAMLファイルです。
usdjpy/m1/app_bb:
ros__parameters:
instrument: "usdjpy"
granularity: "m1"
units: 0
sma_span_list: [20]
std_coef_list: [2.0]
take_profit_pips_list: [50]
eurusd/h1/app_bb:
ros__parameters:
instrument: "eurusd"
granularity: "h1"
units: 0
sma_span_list: [25, 75]
std_coef_list: [2.5, 3.0]
take_profit_pips_list: [200, 300]
ROS Param名と各パラメータ項目の関係性は下表の通りです。
ROS Param名 | 項目 |
---|---|
instrument | 通貨ペア |
granularity | 時間足 |
units | 注文数 |
sma_span_list | SMA値のリスト |
std_coef_list | STD値のリスト |
take_profit_pips_list | 利確幅(pips)のリスト |
app_bb.pyでは上記ROSパラメータを読み込むと、SMA値、STD値、利確幅(pips)のリストの要素数に応じてTradeItemインスタンスを生成します。
簡易的なクラス図で説明すると下図の通りです。

シーケンス図
シストレ全体のROSノードとメッセージ間の繋がり及び、処理の流れを表現すると下図のようなシーケンス図となります。
下図のシーケンス図はあくまでもROSノードとメッセージしか表現しておらず、各クラスやメソッドまでは記述していません。
本来は各クラスやメソッドまで表現すべきと思いましたが、そこまで記述すると図が複雑になり、逆に理解しずらくなると思いましたので省略しました。

参考までに、シストレ稼働中のROSノードグラフは下記のようになります。

さいごに
今回、僕が開発した完全自作シストレを「NaMaKe Trader」としてリリースしました。
今まではアプリケーション・パッケージ部分を非公開としていたので実際に動かすことができなかった人がほとんどだと思います。
また、稼働させるまでの手順もわからない人が多かったと思いますので、GitHubのREADMEファイルに作動させるまでの手順を記載し、手順通りに進めれば誰でも稼働させることができるようにしました。
詳細な設計資料等は不足している感は否めませんが、一旦はお試しレベルで稼働させて全体的な動きを確認できるくらいにまではなったんじゃないのかなぁと思います。
これからも設計資料等は順次作成してGitHubで公開していこうと思っていますので、少々お待ちください。
また、使い方がわからないなどあったら、このブログかツイッターの方にメッセージいただければと思います。
さぁ、この「NaMaKe Trader」を使ってあなたも「怠けトレーダー」になりましょう!(笑)
コメント