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

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

自動売買開始\(^o^)/

令和元年 5/1からDukascopyで為替の自動売買開始しました。

正確にはその前日の欧州市場に向けて 4/30 18:00頃。

Tick + 10秒足 + 1分足で限りなくリアルに近いバックテストの結果と大きく乖離して負けが込み、2日で停止しました。orz

 

GWはそのおかげでメンタルつらかったこともあり、頭をカラにする意味でデバッグはせず、裏で回している日本株中間データ生成のメンテだけ面倒を見て放置してました。

 

んで原因特定。再始動です。たぶん間違いないと思う。

1週間ほど、レバレッジ10倍で様子を見て、追いかけバックテストと差異が無ければフルレバ且つ証拠金も増やしてドル円本格稼働に入ります。

次の段階は自作のこのフレームワークリファクタリングと改善しつつ対象為替ペアを、ユーロ円・ポンド円・オージー円 etcと増やしてい行くのと、新しいストラテジーの開発とパラメータ変更による最適化、Dukascopy以外の接続先として SAXOBankとその新商品追加などやりたいことはいっぱいあります。

IBKRは日本法人の担当者が救いの無いほどクソなので推奨しません。

規模を大きくして、直接東証株価をリアルで受信できる段階になれば日本株の自動売買にも間口を広げてぶいぶい言わすのが目標ですw

 

 

美味く利益が出てくれば、コアなところは書きませんがどういったアプローチやスキルが必要になるかという点でちょいちょ書いていくかもしれません。

飽きっぽいので(汗)

久々のブログに書いてます。

IBKRから口座閉鎖を食らい、今月いっぱいでデータ配信終了、来月で閉鎖と言われましたw

笑うしか無いよね。

ずーっと不具合報告ばかりしていて鬱積していたから、けんか腰で担当者に悪口書いたら返信無くなって最後通牒でしたw

維持のためだけに1万ドル超時価総額相当の日本円を塩漬けにしていたのも微妙にもったいなかったし、このまま IBKRからのデータ取得続けても、梅雨時まで全データ揃うのに時間がかかるし、元データのメンテが成されてなくて修正とチェックプログラムの作成も精度を上げないと行けなかったのにやる気が起きずで、良い潮時だという認識です。

この2年間、毎週土曜日は自宅待機でIBGatewayの接続とプログラムの再開をメンテするのがかなり苦痛だったので、正直安堵感のほうが大きい。

 

現在は、Dukascopyに繋いで FXの自作自動売買ストラテジークラスを微調整しながら、Tick + Barsデータを使ったほぼ完璧なバックテストを繰り返している段階です。こちらのApacheIgnite使った運用が始まったら、それに至るまでのナレッジなども再開しつつ、Alpacaとかカブドットコム証券(法人つくらなあかんw)のAPIを目指したいと思います。

Dukascopyでもごく希に不調というか原因不明な不完全な状態が起きるけど、解決しなくても腹が立たないしむしろ良いサポートに感謝してるのに比較して、IBKRはかなりつらかったからすっきりだ。

 

あとトレステのEL。

トレステネタをほぼ何も書いていないのに来た方に申し訳ないのでタイトルからも外しました。IBKRで1分足までは揃ったテラサイズのデータがあるので、トレステとマージして動くようなスキームで利用したいなあとは思います。

 

すっかり放置してた

微妙にまだ体調不良続いてるんですが、えらい長く放置してました。

ぼちぼち再開したいです。

Dukascopyから Tick/Barsの過去データ貯めこみ始めて、バックテストの記録向けにもディスクが足りなくなることが予想されたので、8TB追加してます。

IBKR接続で変な現象やら障害っぽいことが立て続けに起きて、未だ解決しなかったり、Dukascopyは思いのほかIBKRより高速で安定していることもあり、一気に方針を変えたりと激変しました。いまは Dukascopyメインで作りこんでます。Apache Igniteでのリアルタイム動作の稼働テストもしつつです。

エントリーと決済条件を判定する Javaオブジェクトを今後も無尽蔵に拡張できるように Interfaceと Entity設計をやっていて、終わればバックテストとリアルタイムでの検証をして自動売買までたどり着けそうです。寝てる間にお金稼いでくれる Ver1.0までいけば、このブログもちゃんと再開予定。

 

シストレ向けの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も対象にしていますが、まだプログラム開発が未着手です。