OANDA APIを使って為替レートを取得するプログラムを作ってみた!

 ※ 本記事は広告・プロモーションを含みます。
OANDA API


こんにちは!ソフトウェア開発の仕事をしながら趣味でFXを楽しんでる、たっきん(Twitter)です!

FXをやり始めて約1年になるのですが、ふと思うことがあるわけなんですよ。

それは、「平日に仕事やってたらFXする時間なくね?」ってことです!

なので基本的に僕のFXのトレードスタイルは中長期狙いのスイングトレードとなっているのですが、正直なところデイトレードスキャルピングもやりたいってのが本音です。

しかし、仕事をしながらではデイトレードスキャルピングは到底不可能だ・・・w

そもそもチャートすら見る時間もないのでチャートリーディングすらまともにできないwww

せめて僕の代わりにチャートリーディングを代行してくれて、絶好の売買タイミングを知らせてくれるようなものがあればなぁ~と思って少し調べてみると思わぬ朗報が!

FX会社によってはトレード関連のAPIを公開しているところがあって、このAPIを使って為替レートを取得したり、売買したりすることができるみたいなんです。

要は自分の組んだプログラムにチャートリーディングや自動売買を行わせることができるということです。

なのでそのプログラムを24時間常時稼働させておけば、僕に代わって24時間休まずチャートリーディングや売買を行ってくれるってことなんですよね?

APIを公開している会社はそんなに多くないみたいなんですが、OANDA社が公開しているAPIが比較的使いやすいみたいなので少し調べてみました。

OANDA API とは?

OANDA APIとは、FX取引の大手オンラインブローカーであるOANDA社が提供しているAPIとなります。

公式ホームページによると、このAPIを使うことで以下のことができるみたいです。

<相場情報関連>
・90種類以上の通貨ペアのリアルタイム為替レートの取得
・24時間為替相場の状況をリアルタイムに監視
・過去10年以上前の過去レートの取得

<トレーディング関連>
・OANDA社トレーディングAPIを利用した注文の発注
・アカウント情報、残高、注文、約定などの情報の取得

ー「OANDA社API 公式マニュアル」より抜粋


これだけの機能が備わっていれば、チャートリーディング売買自動化プログラムを作ることができそうですね!

物は試しって言いますし、このAPIを使ってみてその使用感をこのブログを通して発信していこうと思っています。

OANDA APIを使うには?

OANDAで口座または、デモ口座を開設し、アクセストークンを取得することでAPIが使用可能になります。

いきなり口座を開設するのはちょっと・・・って考えてる人はお試しでデモ口座を開設してみるのがよいでしょう。

僕もまずはデモ口座から初めてみようと思います。

また、OANDA APIについて色々調べていると、古いバージョンのv1と、新しいバージョンのv20があることがわかりました。

普通に考えたら新しいバージョンのv20を使うところなのですが、2018年12月現在ではOANDA JAPANが提供するデモ口座ではバージョンv20が使用不可らしい。

ただし、本国のサイトからデモ口座を開設すればバージョンv20が使用可能になります。

旧バージョンv1を使うメリットは正直ないと思われますので、もしデモ口座を開設しようと考えてましたら本国のサイトから開設しましょう!

2020年2月現在、OANDA JAPANの口座でもバージョンのv20が 使用可能となってます。

以下の記事で OANDA JAPAN のデモ口座開設手順を載せていますので、海外本家ではなくOANDA JAPANが運営するデモ口座を使用したい方は参考にしてみてください。

ただし、使い勝手としては海外本家もJAPAN版も大差はないです。

OANDA デモ口座を開設する

まずは本国の公式サイトにアクセスする。

公式:https://www.oanda.com/


デモ口座の場合は「OPEN A DEMO ACCOUNT」をクリック。

アカウント情報の入力画面になるので任意に入力していく。

注意するのはCountryPhoneの入力。

Countryを日本にすると、OANDA JAPANのページに飛ばされ、バージョンv20で口座が開設できなくなってしまう。

なのでここは以下のように入力する。

  • Country:United States
  • Phone:①日本選択
        ②頭の0を除いた携帯番号

入力が終わったら最後に「Sigh Up」をクリックする。

Sign Upが完了すると以下のような画面が表示される。

ここで「LAUNCH OANDA WEB」をクリック。

すると以下のようなデモ口座画面が表示されます。

これでデモ口座の開設は完了です。

アカウントナンバーとアクセストークンの確認

OANDAのAPIを使うには、アカウントナンバーアクセストークンが必要となります。

まずはアカウントナンバーを確認しましょう。

アカウントナンバーの確認

アカウント画面より、「Manage Funds」をクリックする。

すると以下のような画面が表示される。

v20 Account Numberの ところに表示されているのがアカウントナンバーになるので控えておきましょう!

アクセストークンの確認

アクセストークンを確認していきましょう!

アカウント画面より、「API」をクリックする。

すると以下のような画面が開くので「Generate」をクリックし、アクセストークンを生成する。

無事生成されると以下の箇所にアクセストークンが表示されるので控えておく。

為替レートを取得するプログラムを書いてみる

さっそくお試しレベルで為替レート値を取得するプログラムをPython書いてみる。

ちょっと調べてみたところ、先駆者の方がOANDA API v20を扱いやすくしたPythonのラッパークラスを作成されていたため、惜しげもなく使わせてもらうことにした。

先駆者の方には感謝しかない。

このラッパークラスはpipでインストールが可能です。

$ pip install oandapyV20

ちなみに、ソースコードはこちらで閲覧できます。

リアルタイムで為替レート値を取得する。

まずはリアルタイム為替レートを取得するコードをお試しレベルで書いてみました。

作成したPythonファイルは以下の3つです。

  • pricing_stream.py ⇒ リアルタイム為替レート取得
  • oanda_common.py ⇒ 共通モジュール
  • your_account.py ⇒ 自身の口座情報

●pricing_stream.py

# ==============================================================================
# brief        OANDA Pricing Stream
#              リアルタイムで為替レート値を取得する。
#
# author       たっきん
#
# 事前準備 :
#     oandapyV20のインストール (pip install oandapyV20)
# ==============================================================================

import json
from oandapyV20 import API
from oandapyV20.endpoints.pricing import PricingStream
from oandapyV20.exceptions import V20Error
from fx import oanda_common as oc
from fx import your_account as ya


api = API(access_token=ya.access_token, environment=oc.OANDA_ENV.PRACTICE)

params = {"instruments": "USD_JPY"}
ps = PricingStream(ya.account_number, params)

try:
    for rsp in api.request(ps):
        print("■リストの取得")
        print(json.dumps(rsp, indent=2))

        print("■bidsのみ抽出:")
        if "bids" in rsp.keys():
            print(rsp["bids"][0]["price"])


except V20Error as e:
    print("Error: {}".format(e))


●oanda_common.py

# ==============================================================================
# brief        python OANDA 共通モジュール
#
# author       たっきん
# ==============================================================================


class OANDA_ENV(object):
    """ OANDA_ENV - OANDA環境の定義クラス。"""

    PRACTICE = "practice"   # デモ口座
    LIVE = "live"   # 本講座


class OANDA_GRN(object):
    """ OANDA_GRN - ローソク足の時間足定義クラス。"""

    S5 = "S5"  # 5 seconds
    S10 = "S10"  # 10 seconds
    S15 = "S15"  # 15 seconds
    S30 = "S30"  # 30 seconds
    M1 = "M1"  # 1 minute
    M2 = "M2"  # 2 minutes
    M3 = "M3"  # 3 minutes
    M4 = "M4"  # 4 minutes
    M5 = "M5"  # 5 minutes
    M10 = "M10"  # 10 minutes
    M15 = "M15"  # 15 minutes
    M30 = "M30"  # 30 minutes
    H1 = "H1"  # 1 hour
    H2 = "H2"  # 2 hours
    H3 = "H3"  # 3 hours
    H4 = "H4"  # 4 hours
    H6 = "H6"  # 6 hours
    H8 = "H8"  # 8 hours
    H12 = "H12"  # 12 hours
    D = "D"  # 1 Day
    W = "W"  # 1 Week
    M = "M"  # 1 Month


●your_account.py

※本ファイルに自身で取得した「アカウントナンバー」「アクセストークン」を記述してください。

# ==============================================================================
# brief        OANDA口座情報
#
# author       たっきん
# ==============================================================================

# 注意 : 自身で取得した「口座番号」と「アクセス・トークン」に置き換えてください。
account_number = "***-***-*******-***"
access_token = "********************************"

pricing_stream.pyを実行すると以下のような結果となります。

<実行結果>

■リストの取得
{
  "type": "PRICE",
  "time": "2018-12-08T00:57:05.924973626Z",
  "bids": [
    {
      "price": "112.654",
      "liquidity": 10000000
    }
  ],
  "asks": [
    {
      "price": "112.754",
      "liquidity": 10000000
    }
  ],
  "closeoutBid": "112.639",
  "closeoutAsk": "112.769",
  "status": "non-tradeable",
  "tradeable": false,
  "instrument": "USD_JPY"
}
■bidsのみ抽出:
112.654


とりあえずは為替レート値の取得ができたみたいですね。

指定された日時のローソク足情報を取得する。

次は指定された過去日時のローソク足情報(高値、安値、始値、終値)を取得するコードを書いてみました。

例として2015年9月15日の1時間ローソク足情報を24コ取得します。

●instruments_candles.py

# ==============================================================================
# brief        OANDA Instruments Candles
#              指定された日時のローソク足情報を取得する。
#
# author       たっきん
#
# 事前準備 :
#     oandapyV20のインストール (pip install oandapyV20)
# ==============================================================================

import datetime
import json
from oandapyV20 import API
from fx import oanda_common as oc
from fx import your_account as ya
import oandapyV20.endpoints.instruments as instruments
import pandas as pd


api = API(access_token=ya.access_token, environment=oc.OANDA_ENV.PRACTICE)

fmt = '%Y-%m-%dT%H:%M:00.000000Z'
# 2015年9月15日のローソク足情報を取得
_from = datetime.datetime(year=2015, month=9, day=15,
                          hour=12, minute=0, second=0).strftime(fmt)

params = {
    "alignmentTimezone": "Japan",
    'from': _from,
    "count": 24,  # 取得数24
    "granularity": oc.OANDA_GRN.H1  # 1時間足
}

# APIへ過去データをリクエスト
ic = instruments.InstrumentsCandles(instrument="USD_JPY", params=params)
api.request(ic)

# リストへ入れ替える
data = []
for raw in ic.response['candles']:
    data.append([raw['time'], raw['volume'], raw['mid']['o'],
                 raw['mid']['h'], raw['mid']['l'], raw['mid']['c']])

# リストからデータフレームへ変換
df = pd.DataFrame(data)
df.columns = ['time', 'volume', 'open', 'high', 'low', 'close']
df = df.set_index('time')

# date型を整形する
df.index = pd.to_datetime(df.index)
print(df.tail(25))

# レスポンス生データ表示
# print(json.dumps(ic.response, indent=2))


「oanda_common.py」と「your_account.py」と同じ階層で実行してください。

実行結果は以下のようになります。

<実行結果>

                     volume     open     high      low    close
time                                                          
2015-09-15 12:00:00    2189  119.624  119.848  119.568  119.832
2015-09-15 13:00:00    2072  119.833  119.990  119.773  119.882
2015-09-15 14:00:00    1894  119.884  120.181  119.852  120.151
2015-09-15 15:00:00    1651  120.154  120.330  120.144  120.306
2015-09-15 16:00:00    1259  120.306  120.444  120.304  120.362
2015-09-15 17:00:00     823  120.362  120.493  120.335  120.459
2015-09-15 18:00:00     759  120.459  120.484  120.392  120.462
2015-09-15 19:00:00     482  120.462  120.471  120.403  120.404
2015-09-15 20:00:00     551  120.401  120.443  120.388  120.422
2015-09-15 21:00:00    1590  120.434  120.458  120.384  120.416
2015-09-15 22:00:00    1010  120.415  120.434  120.355  120.364
2015-09-15 23:00:00     451  120.368  120.470  120.362  120.424
2015-09-16 00:00:00    1395  120.420  120.432  120.254  120.374
2015-09-16 01:00:00    1253  120.370  120.410  120.238  120.311
2015-09-16 02:00:00     914  120.315  120.334  120.224  120.232
2015-09-16 03:00:00     883  120.229  120.245  120.156  120.210
2015-09-16 04:00:00     726  120.206  120.260  120.182  120.200
2015-09-16 05:00:00    1258  120.200  120.218  120.109  120.120
2015-09-16 06:00:00    1255  120.120  120.381  120.120  120.306
2015-09-16 07:00:00    1706  120.306  120.426  120.240  120.252
2015-09-16 08:00:00    1352  120.250  120.394  120.250  120.344
2015-09-16 09:00:00    1548  120.347  120.482  120.316  120.376
2015-09-16 10:00:00    1023  120.372  120.584  120.352  120.552
2015-09-16 11:00:00     860  120.550  120.620  120.522  120.592

まとめ

OANDA社が提供しているAPIを使うことによって、プログラム上で手軽にリアルタイム為替レート過去のローソク足情報を取得することができました。

今回はお試しということで簡素なソースコードしか書きませんでしたが、プログラム次第ではリアルタイムでのチャートリーディング全自動売買とかできそうな感じですね(^^)

次は取得したローソク足情報を使ってチャート図とか作成してみたいと思ってます。

また何かわかったらブログ更新していきます。

スポンサーリンク

コメント

タイトルとURLをコピーしました