読者です 読者をやめる 読者になる 読者になる

FXボーグ | テクニカル実験室

テクニカル分析を使った自動売買プログラムの開発に挑戦!

スポンサーリンク

Streaming OANDA + ØMQ で OHLCを生成する。

こちらの記事「Streaming OANDA with python and ZeroMQ」を参考に、OandaのTickデーターを取得する部分をPUB/SUB化してみました。

概要

OANDA APIのストリーミングではレート情報と口座イベントの2つのストリームを受けることが出来ます。ただしエンドポイントが別々になっているので、トレード・プログラムは両方のデーターを同時に扱わなくてはなりません。

通常は非同期で実装することになりますが、上の記事のようにØMQを使えばストリームをまとめて受けることが可能になります。また、それぞれのコードを分離することができるので、メンテナンス性も高くなります。

 

ØMQとは

各種メッセージング・パターンに対応したプロセス間通信用ライブラリーです。メッセージング・パターンの種類には次のようなものがあります。

「 REQ/REP、PUB/SUB、PUSH/PULL、XREQ/XREP、PAIR」

今回はPUB/SUBパターンを使用します。発行者(パブリッシャー)と購読者(サブスクライバー)を略してPUB/SUBと言います。PUBはデータを送信し続けます。SUBはデーターを受信し続けます。

 f:id:fxborg:20160623010818p:plain

図のようにデーターの流れはPUBからSUBへの一方通行になります。上の例ではSUBが3つありますが、PUBを複数もつことも出来ます。今回はPUBを3つ使います。

 

各プログラム

  1. oandastream.py ・・・ Oandaのストリームを送信し続けるクラス。
  2. stream.py・・・・ PUB側メッセンジャー
  3. client.py・・・・ SUB側クライアント
  4. candles.py・・・・OHLCを生成するクラス
  5. settincs.py・・・・OANDAのアカウント情報設定ファイル

 プログラムは https://github.com/fxborg/oanda からどうぞ。

※zmq と requests を使用しているので「pip install 」でインストールしてください。

 

 動かし方

「settings.py」に OANDA APIのアカウント情報を設定してください。

ACCOUNT_ID= 'YOUR ACCOUNT ID'
ACCESS_TOKEN = 'YOUR ACCESS TOKEN'

続いてプログラムを立ち上げます。

> python stream.py events  & ⏎

> python stream.py prices  & ⏎

> python stream.py clocks  & ⏎ 

 「口座イベント」「レート」「クロック」の各情報のパブリッシャーを起動します。

クロックはただの時刻を送信しています。

終了するには「fg」 コマンドでフォアグランドに戻してから、「Ctrl+C」キーを押すと停止します。

つづいて、サブスクライバーを起動します。

> python client.py  ⏎

これで準備完了です。しばらく待っていると10秒足のOHLCとティック数が表示されます。

f:id:fxborg:20160623021239p:plain

最後に

今回はOANDA APIとØMQ を使用して簡単なプログラムを作ってみました。
Oanda APIでもキャンドル情報の取得が可能ですが、リアルタイム時はTick情報を使いたいと考えています。あとは休日や取引外の判定が必要ですね。