ついに窓埋めトレードの本番口座運用を開始します!たっきん(Twitter)です!
長い月日をかけて製作してきた自作システムトレード(自動売買システム)ですが、ついにオアンダ(OANDA)本番口座で運用を開始する準備が整いました。
OANDAの運用カテゴリはREST APIとMT4の2種類があるのですが、もちろんREST APIを選びました。
ただし、REST APIでの利用条件には「必要な口座残高 25万円以上」という厳しい条件があるため、運用を開始するにはそれなりの初期費用が必要になってきます。
ぴったり25万円だと初回トレードで負けた時に25万円を下回り、以降トレード不可になってしまう可能性があるため、少し余裕をみて今回は30万円を口座に投入しました。
なので、初期投資額30万円での運用開始となります。
自作のシステムトレードが本運用でどこまで通用するか、これからが楽しみです。
現状シストレのアプリケーションは「窓埋め」しかないため、最高で週1回しかトレードしません。
早いとこアプリケーションのバリエーションをもっと増やさねばですねw
そこで、本番口座運用の準備を進めながら、影でひっそりと第2のアプリケーション開発に取り組んでいました。
次のアプリケーションは「仲値&ゴトー日」トレードになります。
「仲値&ゴトー日」については以前に検証したことがあり、ある条件時には一定の傾向があることは確認できています。
「仲値&ゴトー日」もトレードタイミングを間違えなければ、それなりの勝率が得られるんじゃないかと思っています。
さて、OANDA本番口座運用環境も無事構築できたことですし今回は、
- オアンダ(OANDA)本番口座運用の注意点
- 「仲値&ゴトー日」アプリ開発の進捗
の2点についての記事を書いていきます。
オアンダ(OANDA)本番口座運用の注意点
OANDA APIの実行環境をデモ口座から本番口座に変更してREST APIを叩いた際に以下のエラーが吐かれました。
- Caused by SSLError(SSLError(1, ‘[SSL: DH_KEY_TOO_SMALL] dh key too small (_ssl.c:1123)’))
「SSLのDH鍵長が短すぎですよ!」と怒られているようです。
OANDAのREST APIサーバーとはhttpsプロトコルで通信をしているのですが、DH鍵長が短くて通信ができていないようです。
しかもOSがUbuntu 20.04のときに本番口座環境でREST APIを叩いた時だけエラーが出るようでした。
このエラーが発生する原因について色々調べてみたところ、無事解消することができたのでその備忘録を残していきます。
[原因]
- 本番口座とデモ口座のSSLサーバーで利用可能な暗号アルゴリズムが異なる。
- 適用される暗号アルゴリズムと優先順位の問題
まず原因1についてですが、以下のサービスを利用することでSSLサーバー証明書の設定状況や安全性などを確認することができます。
利用可能な暗号アルゴリズムもここで確認できるようです。
実際にエラーが出た本番口座の利用可能な暗号アルゴリズムを確認してみましょう!
<OANDA 本番口座>
解析結果が完了したらCipher Suitesの項目を確認してみましょう!
ここで注目したいのは以下の箇所です。
TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 (0x9f) DH 1024 bits FS WEAK 256
TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 (0x9e) DH 1024 bits FS WEAK 128
TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 (0x6b) DH 1024 bits FS WEAK 256
TLS_DHE_RSA_WITH_AES_256_CBC_SHA (0x39) DH 1024 bits FS WEAK 256
TLS_DHE_RSA_WITH_AES_128_CBC_SHA256 (0x67) DH 1024 bits FS WEAK 128
TLS_DHE_RSA_WITH_AES_128_CBC_SHA (0x33) DH 1024 bits FS WEAK 128
TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA (0x16) DH 1024 bits FS WEAK 112
「TLS_DHE_・・・」の項目全てに「DH 1024 bits」の記載があるのがわかりますね。
DHEというのはDH鍵交換方式の暗号アルゴリズムのことで、このとき交換する鍵の長さが1024ビットであることを表しています。
DH鍵交換方式の鍵長ですが、2010年くらいまでは1024ビットが広く使われていたらしいですが、現在はより安全性の高い2048ビットが主流となっているようです。
一応デモ口座のほうも確認してみましたが、「TLS_DHE_・・・」の項目が出てこなかったため、デモ口座のSSLサーバーはDH鍵交換方式の暗号アルゴリズムを使用していないようです。
<OANDA デモ口座>
よって、本番口座を使う場合はDH鍵交換方式以外を使用すればよさそうですね。
ここで、ようやく原因2の適用される暗号アルゴリズムと優先順位が絡んできます。
まず、使用される暗号アルゴリズムが決定されるしくみですが、以下の流れで決定するようです。
- クライアントがサーバーにSSL通信をリクエストするときに、サーバーへ利用可能な暗号アルゴリズムの一覧を送付する。
- サーバーは、その中から使用するアルゴリズムを選択、決定する。
- サーバーは、SSLサーバー証明書と利用暗号アルゴリズムをクライアントに送付する。
- クライアントはサーバーから受信した情報に従って、アルゴリズムを適用する。
ここでの「2.サーバーは、その中から使用するアルゴリズムを選択、決定する。」ですが、選択の優先順位はSSL Server Testで表示されたCipher Suites一覧の一番上が最優先となるようです。
実際にSSL Server Testの結果を確認すると、本番口座では最上位に鍵長1024ビットのDH鍵交換方式が並んでいるため、サーバーへ利用可能な暗号アルゴリズムの一覧を送付する際に、DH鍵交換方式の暗号アルゴリズムが含まれていた時点で、DH鍵交換方式の暗号アルゴリズムが選択されてしまいます。
なので、クライアント側で利用可能な暗号アルゴリズムの一覧を送付する際に、DH鍵交換方式が含まれない設定すれば、問題が解決できそうですね。
では次に、クライアント側(ubuntu 20.04)でサーバーへ送信される暗号アルゴリズムの設定を確認してみましょう!
利用可能な暗号アルゴリズムの一覧は以下の箇所で定義されているようです。
・requests.packages.urllib3.util.ssl_.DEFAULT_CIPHERS
実際にDEFAULT_CIPHERSの中身を確認したところ、以下のように定義されていました。
ECDHE+AESGCM,
ECDHE+CHACHA20,
DHE+AESGCM,
DHE+CHACHA20,
ECDH+AESGCM,
DH+AESGCM,
ECDH+AES,
DH+AES,
RSA+AESGCM,
RSA+AES,
!aNULL,
!eNULL,
!MD5,
!DSS,
ubuntu 20.04ではデフォルトでDH鍵が含まれているようです。
よってDH鍵交換方式の暗号アルゴリズムが選択されないようにするには、DEFAULT_CIPHERSの設定をいじりDHを利用不可にします。
requests.packages.urllib3.util.ssl_.DEFAULT_CIPHERS += "HIGH:!DH"
“!”を付与することで利用不可となります。
詳細はubuntu manualsに記載されています。
上記設定後、再度本番口座環境で動かしてみたところ、エラーがでなくなりOANDAサーバーと無事通信できるようになりました。
これで問題解決です!
「仲値&ゴトー日」アプリ開発の進捗
窓埋めトレードアプリも大枠では製作は完了しましたので、第2の自動売買アプリケーションとして、「仲値&ゴトー日」トレードを追加しようと思います。
早速、シストレ・テーキテクチャ図を更新して、「仲値&ゴトー日」アプリを追加しました。
<シストレ・アーキテクチャ ver.1.1.0>
追加のROSノードはtrade_aplパッケージ内のTTMになります。
仲値を英語でTelegraphic Transfer Middle Rateといい、頭文字を取ってTTMと表現しています。
TTMの解析結果もグラフやヒートマップを使ってグラフィカルに解析できるようにしたいので、ttm_monitorというROSの通信サービスを追加し、gui_monitorノードが解析結果を受け取れるように設計しました。
gui_monitorノードは起動することでGUIが立ち上がります。
レイアウトは検討中ですが、ざっくりと日付毎に解析結果のリスト表示と仲値の時間(9:55)前後のチャートを表示できるように作ってみました。
このレイアウトは開発中のものであるため、最終的には変更する場合もあります。
実際に動作する様子のアニメーションも用意してみました。
こんな感じで動作します。
さいごに
OANDAの本番口座環境で自作の自動売買シストレを動かしてみようとしたところエラーが発生しましたが、無事解決することができたので、これで本当に運用開始することができそうです。
OANDA REST API の利用条件は「必要な口座残高 25万円以上」であるため、初期投資額30万円で運用を開始します。
現在の自動売買アプリは「窓埋め」の1種類しかないので、実際にトレードする機会は毎週月曜のみになります。
まだまだアプリケーションの数が少なく、トレードする機会も少ないため早くアプリケーションのラインナップを増やして運用効率を上げていこうと思います。
さっそく第2のアプリケーションとして、現在「仲値&ゴトー日」アプリを絶賛製作中です。
目標としては年内に「仲値&ゴトー日」アプリの製作を終え、年始くらいから「仲値&ゴトー日」も追加して自動売買運用していこうと思います。
また進捗があったらこのブログで報告していきたいと思います。
それではまた!
※自作シストレのソースコードはGitHubで公開しています。
コメント