コバのシステムトレード構築日記(IB証券、トレステ、Dukascopy他)

IB証券/DukascopyとのAPI接続ナレッジや、トレステなど

シストレ向けのDatabase設計の肝(Part1: DB選択)

台風のさなか、そろそろと思い久々の投稿。

この三か月ほど若干の体調不良と、コーディングよりもDBの詳細設定を変更しつつチューニングしてました。目的はリアルタイム処理自動売買を滞りなく行うためです。

 

システムの全体構成図みたいなのはちょっとちゃんとした図がない公開しづらいので(汗)、DB周りとしてはオンプレミス環境主体(平たく言えば自宅のトレーディングルーム)として物理サーバが以下の感じです。

・Master / Slaveの 4コア2台(Master 32G / Slave 16GB) DB向け4TB IRデータ向け6TB

Javaベースのアプリケーション稼働サーバ4台(4コア16GB)

・ジョブスケジューラサーバ1台(2コアファンレス8GB)

Gatewayサーバ1台 (4コアファンレス16GB)

クラウドのサーバ1台(固定GlobalIP)

 

「DBサーバ + APサーバ + JSサーバ + Gatewayサーバ + クラウドサーバ」という感じ。今はリアルタイム処理向けに Apache Igniteベースのテスト環境を1台(4コア16GB)で開発中です。拡張用に8台スタンバってます。

お金があれば全部クラウドにしたいけどざっくり希望するスペックが月額200万円とかのオーダーになるとしばらく無理です。OSは CentOS7で、RAIDなどの構成も組んでいません。壊れたら他のサーバで代替という方式。シングルポイントになる Gatewayと ジョブスケジューラは、古いCPUだけどファンレス+SSDで壊れにくい構成にしてます。あとはすべてのサーバが Anacondaのスクリプトで30分もあれば新しいHDD環境に新規構築できるようにしています。イメージバックアップで復旧に何時間もかかるよりましです。

 

IBKR主体のDBでのデータサイズが 8/7時点で 1.5TBほどあります。

1TBを超えると何か問題が起きて構成を ALTER TABLEするだけで最悪週末2日が全部潰れます。そんな毎週末の不幸の積み重ねを徒然と記してみたいと思います。

水曜どうでしょうの新作と同じで何連投するかは謎ですが、とりあえず Part1として、ここまでの前置きと、DB選択について。

 

 

DBは MySQL/MariDB or PostgreSQLの2択が前提です。

MySQL/MariaDBからさらに2択ですが、技術的にはほぼ同じだけど、MariaDBは Mroongaとか Spider Engineとかが魅力です。

選択したときはかなり前のバージョンだったのと、JSON対応やらも必要性も感じないで、単にログ収集のバックエンドで使っていたからという理由で MySQLにしました。その後、CentOSのバンドルDBが MariaDBになったこともあり、流れはそっちだなと身を任せて今は MariaDBです。

バージョンは MariaDB 10.2以上が強く推奨です。MySQLなら5.7以上。テラバイトデータを扱うため大事な機能が10.2から追加されているのが理由。

InnoDB癖とか、金融データのパーティショニングとか、その辺の細かい話を次は続けます。

Dukascopyのセミナー(4/22)

あっという間にひと月以上も放置してしまいました。

書きかけのドラフトもあるけど放置です、が、気を取り直して(汗)

 

土曜日にDukascopyの FXのセミナーに行ってきました。

10年近く前に眼下に早朝博多に向けて出発する500系のぞみを見送ってから仕事を始めていた頃以来の新丸ビルを眺めつつ、隣のビルが会場。 mtre.jp

オレンジ色の服着て小さく後ろ姿が写ってました。

 

APIに関して細かいところが知りたかったので、DukasのYさんに直接教えていただいたのは非常にありがたかったです。IB証券と比べて FXに関してはよさげです。

ヒストリカルデータが Tick足からでAPIでも取得可能(IBは1週間より古いのは30sec足が最短)

・6:00-6:15JSTもデータがある(IBは無い)

・通貨ペアは IBより少ないですが必要十分以上

・サイトを見る限り0.1ピプスのデータっぽい(IBは0.5単位)

IBのデータも問題ないレベルなんですが、取得にすごく時間がかかるのとマーケットデータの取得銘柄数に制限もあるので FXはこちらを主体にしたいなあと思いました。

 

口座を開くとサポート担当者が付くのですが、その方とも直接お話しすることができたので有意義でした。かわいらしい女性でした。こういう時、オッサンだとテンション下がります。

 

ようやく IB証券のデータ取得がテンプレート化されてきて追加するのも楽になってきたので、GW終わるころまでにはもろもろ揃えてシストレに到達したいと思います。

3/11投資戦略フェア

雇用統計発表後の逆指し値が刺さって、円高による損失は回避出来ましてそこそこいい感じでドル円ロングを利確出来ました。期末に向けての円換金とFOMC後のリバウンドや欧州選挙1発目もあるので来週はボラが大きくなりそうなので、ポジションは薄めで行きたいと思います。

そして寝不足のまま、土曜日は朝から投資戦略フェア in 東京ドームシティに行ってきました。

 

InteractiveBrokersのブースが閑散としてました(汗)。

ちょろっといろいろ教えて貰いました。詳細はメッセージセンターでというオチでしたが(汗)。

マネックスさんのブースはミニセミナーみたいなのをやっていたこともあり、時間帯によっては大盛況。

 

受講した中では 「ヒルトンの市場心理のクセを読む225先物デイトレード」と、「未来のシステムトレード」が印象的でした。

アノマリーが日々真似され上書きされ新しいモノを作っていかないと、テクニカルでは厳しいという話はよく聞きますが、前者のN225TOPIXアノマリーデイトレの話は真似するには少し敷居が高そうなので興味深いモノがありました。もっとリアルタイム性と、解析データの幅を広げれば、他の商品ペアでも使えそうな直感がしました。

 

後者は、SAXO BANKでも APIトレーディングが可能だと言うことと、ブルーオーシャンが見えてわくわくする個人でのシストレ領域の話です。Python3シストレ著者の森谷さんという方はかなりの切れ者だという印象ですが、いろいろ悩みというか歯がゆさを積み重ねてきている感じもしました。IB、Dukascopy、マネックス・トレステをメインに考えていましたが、SAXO BANKも加えたいところです。手が回りません・・・orz

 

昨年に続き、2回目でしたが人の多さにちょっとウンザリです。来年もあるとしたら待ち時間を会場内に居なくて済むような動き方と、椅子がしょぼくて堅いので携帯座布団必須ですw。こういうとき肉座布団の大きい女性は羨ましく思います(汗)。

 

トレステ ELの試行錯誤を次の作業として考えていましたが、いろいろとアノマリーのネタが貯まってきたので整理作業に入りたいと思います。

IB証券:API接続検証、その7「履歴データ取得前の留意点」追加

イエレンさんが比較的以前よりも積極的な発言を出しても思ったよりドル高にならず、逆にドル安になった昨晩。

はい、損切りしました。難しいですなあ相場は。

 

今週末の IB Gatewayのメンテナンスが終わり、履歴取得プログラムを再スタート。

最近は土曜日はこの作業のために外出できません・・・

今日は東証株価履歴が 11:00 AM JSTに停止、為替などの IDEALPROの履歴は12:00 AM JSTに停止、とこれらは前週と同じでしたが、再開時刻が 15:45 JSTと少し遅くなったようです。このあたりの傾向を見極めたら、スケジューラーから自動で処理出来るようにして、外に遊びに行けるようにしたいと思います。来週3/11は投資EXPO2017に朝から出かけるので。

 

今日から為替と東証株価に加えて、金と銀のUK Metal価格も履歴取得を開始しました。こちらは古いモノでも2010年10月ごろからしか無いようで、為替価格履歴とマッチングさせる時間軸が短くなってしまいます。まぁ仕方ないです。

さらに3月から、OSEのプライスデータ取得月額チャージも始めたので、日経225など主要な指数データの履歴取得プログラムを早く作らなければなりません。

 

前回記載した IB証券からの履歴データ取得での留意点に関して追記があります。

6:履歴取得は当日と直近数日分(おそらく1週間)の取得が一番速い

 東証株価だけで確認していますが、前場引け後・後場引け後などのタイミングを考慮して当日分の履歴データ取得を呼び出すと、ほぼ瞬時にレスポンスが返ってきます。過去5営業日分ぐらいまでは同じ傾向です。試しに三日間ほど、IBGatewayにソケットを4本開いて証券コード1301から9997までの全銘柄当日30秒足~1時間足まで9種類のデータを呼び出すと7時間程度で完了しました。ソケットの数の増加に対して速度の低下があまり無いようなので、週明けにはソケット数をもっと増やして後場開始までに前場の全履歴を取得出来るように調整してみます。

 これから、IB証券の過去データを取得することをトライする方は、まず最初に1日分の履歴データを取得するプログラムを走らせるのを優先すべきです。1週間過ぎると時間が倍以上かかります。

 まだ東証過去データ取得が今年の分すら終わりません(汗)。30秒足から各足を生成しようかと考えましたが VWAPの値がずれそうなので諦めて地味に全部取得中です。為替の方は6通貨だけ2006年から2014年まで取得完了です。来週末までにはほぼ現在までに追いつきそうです。

 

また、試験的に作成したIBの注文プログラムが正常に動作しました。マネックスのトレステにも銘柄スクリーニングしてデータを展開するのを短期目標の一つにしています。複数銘柄マーケットデータを同時に確認する能力が高いトレステにデータをインポートさせるというイメージです。ごくまれに起こるかもしれない接続障害への備えとして、 IB証券とマネックスの両方が使えるよう用意していく考えです。CFDや為替はDukascopyも対象にしていますが、まだプログラム開発が未着手です。

IB証券:API接続検証、その6「履歴データ取得前の留意点」

Forex6通貨ペア、東証上場約3,900銘柄の 30sec/1min/2min/3min/5min/10min/20min/30min/1h/4h/1day/1weekの12種足を取得開始して2週間ほど経過しました。(4時間足は東証株価には不要だろうと除外)

いくつか経験からの留意点があるので書き留めておきます。

 

1:Exchange毎にレスポンスのキャップがある模様

 92通貨ペア全てだと年単位で時間がかかりそうだとは以前書きましたが、IB証券側のサーバレスポンスが遅いので覚悟が必要です。

 接続時に contractオブジェクトを生成してプロパティ値として Exchageを指定しますが、そのExchange毎に処理能力がアカウント毎に決まっているようなレスポンスを感じます。IBGatewayにソケットを開いて Forexの Exchange=IDEALPROを指定して例えばUSDJPY履歴データの取得を始めると打てば響く程度のレスポンスでドンドンデータが取れます。しかし新しくソケットを開いて EURUSD、EURJPY、GBPJPYと通貨を増やして並行処理させると増やした通貨ペアに比例するレスポンスの低下が起きます。厳密にははかっていませんが、サーバー側の付加を考えると致し方ないとは思います。これは Exchange=TSEJでも同じです。

 したがって、取得したい銘柄や通貨ペアなどに優先的に指定出来るようなプログラムのパラメータが必要かと思います。もしくは Exchangeが異なるデータ取得プログラムを複数早く揃えるのがよろしいかと思います。まだ IDEALPROと TSEJ用しか作っていないです。パターンは同じなのであとは課金とやる気の問題。

 東証約3,900銘柄の数年分の履歴取得に計算したくないほど膨大な時間がかかりそうなので、IB証券さんにはなんとかして欲しいなあとは思います。

 

2:Symbol(銘柄/通貨ペア)毎にレスポンスに微少な差がある。

 現在、6通貨 USDJPY, EURUSD, EURJPY, GBPJPY, GBPUSD, AUDJPYの履歴を取得中ですが、人気?の通貨単位が入ったペアは若干のレスポンスの遅さがあります。ざっくり5%~8%ぐらいと推測。上記6通貨ペアを1年分12種足取得するプログラムを同時に走らせると、EURUSDが一番遅く、次いでUSDJPY, EURJPY, GBPUSD, GBPJPYと続いて一番速いのが AUDJPYという傾向があります。サーバーの負荷が低そうな、不人気そうな通貨ほど速くデータが取得出来る可能性はあるかもしれません。数パーセントの誤差が履歴取得プログラムの制御に影響しそうであれば考慮しても良いかもしれません。

 あと2週間ほどで6通貨の履歴取得は終わりそうなので、その後のマイナー通貨ペアのダウンロードに取りかかればもう少し正確な傾向が判るかもしれません。

 

3:東証上場廃止銘柄の履歴データ

 過去に上場廃止になった銘柄のデータは query not foundで取得出来ません。あとはそのタイミングで何時からなのですが、2017/2/6に上場廃止になった日本デジタル研究所の場合では、最終取引日2/3 Friの24:00 JST頃にデータが取得出来なくなりました。MBOなどで上場廃止になり将来復活の可能性がある銘柄などはデータを持っておきたいところなので、早めに対応することが必要かと思います。

 

4:サーバの保守メンテナンス

 土曜日15:00頃 JST~翌週土曜日12:00 JST頃までは、IBGatewayが IB証券に基本的に接続出来るようです。上記期間中でもネット回線の状態によるのかもしれませんが希にセッションが切れて再接続を IBGatewayが試行しているようです。また、Exchange毎にメンテナンスがあるのか停止することも希にあります。東証の TSEJは土曜日の早朝に10分ほど止まっていたこともありましたが、同時刻帯に IDEALPROの Forexデータは取得出来ていたことからの推測です。

 プログラム側で履歴データ取得のレスポンス待ちを組み込んでその時間を長めにとるなどの対策を組み込みつつ、土曜日の12:00~15:00 JST頃は停止することを前提にプログラムの制御を考慮した方が良いかと思います。

 

5: IB Gateway接続時には Trader Workstationにログイン出来ない

 Trader Workstationにログインすると排他制御なので、IB Gatewayのセッションが切れてデータ取得が Abortします。私のプログラムは精緻なリスタート機能は無いので面倒くさいことになります。不便なのですが、全てシステム売買にするか UIから行うかの2択なのかと思います。

 バックテスト環境構築優先でデータ取得しかしていませんが、余力がもったいないので暴落時に発注出来るようプログラム発注もそのうち試す予定です。3Q決算を出してきて値が下がった押し目買い候補がいくつかありますので。

IB証券:API接続検証、その5「ほぼ基本構造の完成とバグ取り終了」

不具合と効率性のチューニングで手間取りましたが、

為替(Forex)

東証(TSEJ)

の2種の IB証券のExchange指定から、

日本株と為替通貨ペアの詳細履歴を取得するプログラムが完成して、稼働開始しました。

ざくっと見積もると為替だけでサイズは 1TBぐらいになりそうです(汗)。

取得には2年ぐらいかかりそうです(滝汗)。

現実的では無いので、主要通貨だけの20ペア分ぐらいで良いかなと言う気もしてます。

東証株価の方はさっき出来たばかりなので、どれぐらいの期間とサイズになるか不明です。基本的に同じクラス構造の中で対応したので、さらに3つめの金融商品への対応も楽そうです。おそらくプライス情報が無料の中から UK Metalの Silve/Goldか、European BATS/Chi-X Equitiesか、OSE-Jの購読のActivationして各種指数あたりをざっくり確認中。

疲れたので途中経過のみ。

プログラミングのはまりどころや重要なポイントは次の週末ぐらいにはまとめます。たぶん。

トレステ:忘れてた諸々。

すっかり忘れてましたが、昨年の11月?、日本橋での杉原杏璃さんと、個人投資家3名の方と冷やし中華芸人を招いたプレス向けに一般参加してました。

 

実物で見るとえらい細くてびっくりしたのが杉原杏璃さん。

お腹いっぱいメシ食って好きなだけ酒飲むような生活しているオッサン女子には無理な体型だろうなあと想像。

それ以外は特に印象には残らず。マニアックな質問をしたかったけどなんか雰囲気が違ってて早々に退散しました。

 

 

あとは、メールで募集が来てた 「Easy Languageホームスタディコース」が届きました、年末に。PDFでも良いけど、最近は紙の本の見やすさにまた戻ってきてます。

5年ぐらい前に、断捨離で3,000冊ぐらいの本を裁断して全てPDF化しましたが、若干後悔しています。本って本棚での位置とラベルと厚みも調べ物をする際に大事な情報だということに気がついた次第です。

今から本をスキャンしようとしている人がもしいたら、考え直すことをお勧めします。

 

電子ファイルで事足りるのは資料性の無いどうでもいいものになります。

漫画でもたとえばゴルゴ13だと、あのダイヤを狙撃してかち割るダイヤカットダイヤって何巻だっけと思って本棚だとすぐに見つけて読めますが、電子ファイルだとそうはいかないです。

いずれ、ゴルゴとこち亀は全巻買い直しだなと思っています。