トレードロボットを研究・開発しオープンソースソフトウェアとして公開!

/ トップページ / トレードロボットをJavaで自作しよう!

トレードロボットをJavaで自作しよう!


  1. インフラ(ハードウェア、基本ソフトウェア)の構築
    トレードロボットはいろいろな市場のトレードを並行に行うため、CPUとメモリはなるべくハイスペックにしておいた方がいいのですが、それを低コストで行うとなるとやはりPCを自作してマザーボードとCPUをよりよいものに買い換えていくという流れになってきます。最先端の製品が少し枯れたくらいに大安売りされますのでそこで買うのがおすすめです。
    UPS(無停電電源装置)とVAやWの測定
  2. 開発環境の構築
    1. Javaの開発環境
      JDKとEclipseをインストールして開発環境を整備します。開発環境はすべて無料で手に入ります。
      Java開発環境の構築手順
    2. RobotTraderLibrary
      当サイトで公開しているRobotTraderLibraryを使えば、トレードロボットの生産効率が上がります(詳しくは次項を参照ください)。これも無料で利用可能なパッケージです。また、ソースを公開していますので気に入らないところがあれば自分で直すことができます。
      RobotTraderLibraryをEclipseで使えるようにする
  3. トレードロボットの開発
    1. 市場価格の取得、自動発注機能
      ネット証券会社にアクセスして市場価格の取得や新規発注・決済処理を行う機能です。
      決済処理は実際にポジションを持たないとプログラミングとテストができません。先物の決済処理のテストをする時は寄付きで売りと買い(両建て)の成り行き注文を入れてポジションを建ててテストしています。テストが終わったら次の日の寄付きで成行きで決済します。このやり方であればコストは手数料のみですみます。
      市場価格の取得や発注などをネット証券に対して行う場合、インターネットを介して依頼をする必要がありますが、RobotTraderLibraryにはこれら通信処理を行うクラス群が入っています(jp.robotbrain.htmlパッケージとjp.robotbrain.netパッケージ)。htmlのformの中のhidden項目やリンク先のURLなどは記述が変動しやすいですが(サイトによっては場中に変わるところもあります)、RobotTraderLibraryはこれら変動を極力吸収する作りにしており、トレードロボットをなるべく止めない工夫をしています。詳しい使い方はサンプルプログラムをご覧ください。
      開発メモ
      パニック的な値動きへの対応
      気配値取得や発注のトラブル(ありがちなケース)
      HTTPのレスポンス受信時にIOExceptionの"Connection reset"発生
      ネット証券会社と取引チャネルの選択
      JavaのHttpURLConnectionのdisconnect()メソッドで認識違い(FIN,ACKパケットは流れない)
      証券会社PCサイトでの自動発注(クリック証券に挑戦)
      https通信の内容をモニタして解析する(フリーソフトBurpSuiteでキャプチャ)
      おすすめ書籍
      マスタリングTCP/IP 入門編
      ミニ実験でつかむパケット解析手法 ネットワーク原理の観察からトラブルシューティングまで
      正規表現辞典
    2. 取引シグナルの生成
      取引戦略に基づいて、買い・売り・休みのシグナルを発生させます。この機能に最も多くの時間を費やします。RobotTraderBuilderを使えば売買ルールをGUIで作成することができますので、スクラップ&ビルドを繰り返す取引ルール作成作業を効率よく行うことができます。

      おすすめ書籍
      伝説のトレーダー集団 タートル流投資の魔術
      図解でわかる ランダムウォーク&行動ファイナンス理論のすべて
    3. シュミレーション(バックテスト)
      過去の先物価格データを使って取引をシュミレーションし、作成した取引戦略が有効かどうかを検証します。総損益やプロフィットファクターなどの集計データを表示したり、シグナル発生のタイミングをグラフ表示して取引戦略の発案をサポートします。
      開発メモ
      取引コスト(スリッページと手数料)の過小評価
      取引回数とシュミレーション結果の信頼性について考える
      取引回数とシュミレーション結果の信頼性について考える-2
      おすすめ書籍
      売買システム入門
    4. 最適化
      取引シグナル生成の判定に使われるテクニカル指標やしきい値にパラメータを与えてこれらの最適値を求めます。例えば取引シグナルの生成に移動平均線を使う場合は、移動平均線を求める分足の本数(〜本平均)を変化させたり移動平均線と現在値の乖離率でシグナルを発生させる(〜%乖離したらシグナル発生など)場合はこの乖離率を変化させて最適値を求めます。
      開発メモ
      JavaプログラムのパフォーマンスアップやOutOfMemoryError例外対策
      おすすめ書籍
      考えるコンピュータのアルゴリズム C++&Javaで学ぶ遺伝的/進化的/免疫アルゴリズム
    5. 保守
      トレードロボットの運用を始めるとトラブルでロボットが止まってしまうことがあるかと思います。特にありがちなのは証券会社のWebサイトがリニューアルされてhtmlが別物になってしまい発注処理でエラーが発生してしまうというものです。このような時に異常をすばやくキャッチできること、またエラーの原因を特定できることが大変重要になります。
      • ログ
        異常発生時には同じ失敗を2度繰り返さないためにも、詳細なログをファイルに残すことをおすすめします。
        面倒でも開発の初期段階から例外処理で詳細ログを残すように記述します。特に発注処理でエラーが発生した場合はエラー情報のみではなく、エラーが発生したHTMLの内容もログに残しておきます。
        なお、Linux上でcronを使ってトレードロボットを動かす場合は標準出力した内容がメールで送られてきますのでmailコマンドを使って後から例外の内容を見ることができます。
      • 状態通知
        完全自動のトレードロボットを作ろうとされている方は場中PCの前でトレードできない方がほとんどであると思いますが(私も含めて)、このような運用をしていると状態監視の機能が重要になってきます。私の場合注文状況はWeb(このサイトのトップページ)で見れるようにしていますので、お昼休みなどに携帯からのぞいています。注文が約定されたかどうかは証券会社からの約定通知メールで判断できます。またトレードロボットが止まってしまった場合の異常検出は3つの方法で確認できるようにしています。
        開発メモ
        非専業システムトレーダーにとって重要な異常通知機能

e-Tax確定申告書等作成コーナーで先物取引明細を自動入力するフリーソフトはこちら

Copyright (C) 2008-2011 RobotBrain. All Rights Reserved  jp.robotbrain@gmail.com