Pythonを使い「REST API」でトランザクションデータを取得する方法について解説
Pythonを使ってREST API(以下、API)で過去のトランザクションデータを取得する方法について解説します。
特定の期間やトランザクションの種類で絞ってデータを取得することが可能です。
事前準備
PythonでAPIを利用するためには、次の2点が必要です。
- 1.APIトークンの発行
- 2.oandapyV20のインストール
詳細についてはこちらの記事で解説しておりますのでご参照ください。
>Pythonで「REST API」を使用するまでの4つの手順について解説
トランザクションデータを取得する
APIでトランザクションデータを取得するためには、oandapyV20.endpoints.transactionsを利用します。
本記事では次の5つの使用方法について解説します。
- 1.TransactionList
- 2.TransactionDetails
- 3.TransactionIDRange
- 4.TransactionsSinceID
- 5.TransactionsStream
TransactionList
oandapyV20.endpoints.transactions.TransactionListでは、指定した期間や注文タイプのトランザクション数を取得できます。
期間の指定
次のコードでは、2022年9月のトランザクション数を取得しています。
from oandapyV20.endpoints import transactions
from oandapyV20 import API
account_id = "アカウントIDを設定してください"
access_token = "APIトークンを設定してください"
# API用のクラスを定義
client = API(access_token=access_token, environment="practice")
data = {
"from": "2022-09-01",
"to": "2022-09-30",
}
r = transactions.TransactionList(accountID=account_id, params=data)
client.request(r)
返り値はJson形式です。
fromとtoには期間のデータがあります。
countが該当するトランザクションの個数で、68個あることがわかります。
ここではトランザクションの種類を指定していないので、全てのトランザクションデータが対象になります。
pagesにあるURLをみると、idrangeが89?156であることが確認できます。
このIDを使って詳細なトランザクション情報を取得することができます。
取引の種類の指定
先ほどのコードではトランザクションの種類を指定していなかったため、全トランザクションデータが対象となっていました。
次のコードではトランザクションの種類をORDER FILLに設定しています。
期間は先ほどと同様に2022年9月とします。
from oandapyV20.endpoints import transactions
from oandapyV20 import API
account_id = "アカウントIDを設定してください"
access_token = "APIトークンを設定してください"
# API用のクラスを定義
client = API(access_token=access_token, environment="practice")
data = {
"type": "ORDER_FILL",
"from": "2022-09-01",
"to": "2022-09-30",
}
r = transactions.TransactionList(accountID=account_id, params=data)
client.request(r)
ORDER Fillは注文が実際に執行されたものになります。
種類を限定したので、countが22になりました。
トランザクションの種類一覧
typeで指定できる値の一覧についてはこちらの「TransactionType」よりご確認いただけます。
このように、TransactionListでは、指定した期間やトランザクションの種類におけるトランザクション数を取得することができます。
TransactionDetails
oandapyV20.endpoints.transactions.TransactionDetailsでは、特定のトランザクションデータの詳細情報を取得することができます。
この際、transactionIDの指定が必須になります。
from oandapyV20.endpoints import transactions
from oandapyV20 import API
account_id = "アカウントIDを設定してください"
access_token = "APIトークンを設定してください"
# API用のクラスを定義
client = API(access_token=access_token, environment="practice")
r = transactions.TransactionDetails(accountID=account_id, transactionID=149)
client.request(r)
上記のコードでは、transactionIDを149に指定しました。
該当するトランザクションデータの詳細情報が取得できています。
TransactionIDRange
oandapyV20.endpoints.transactions.TransactionIDRangeでは、IDを指定して複数のトランザクションデータを一括取得することができます。
次のコードではtransactionIDが90?149で、トランザクションの種類がORDER FILLのものをまとめて取得しています。
from oandapyV20.endpoints import transactions
from oandapyV20 import API
account_id = "アカウントIDを設定してください"
access_token = "APIトークンを設定してください"
# API用のクラスを定義
client = API(access_token=access_token, environment="practice")
data = {
"type": "ORDER_FILL",
"from": 90,
"to": 149,
}
r = transactions.TransactionIDRange(accountID=account_id, params=data)
client.request(r)
ここで表示している結果は一部のみです。
transactionIDが90から始まり、147までのトランザクションデータが一括で取得できています。
TransactionsSinceID
oandapyV20.endpoints.transactions.TransactionSinceIDでは、指定したID以降のトランザクションデータを一括取得することができます。
次のコードでは、transactionIDが100以降のトランザクションデータを取得しています。
from oandapyV20.endpoints import transactions
from oandapyV20 import API
account_id = "アカウントIDを設定してください"
access_token = "APIトークンを設定してください"
# API用のクラスを定義
client = API(access_token=access_token, environment="practice")
data = {
"id": 100
}
r = transactions.TransactionsSinceID(accountID=account_id, params=data)
client.request(r)
表示しているのは結果の一部のみです。
transactionIDが100以降のデータが取得できています。
TransactionsStream
oandapyV20.endpoints.transactions.TransactionStreamでは、最新のトランザクション情報をリアルタイムで取得することができます。
from oandapyV20.endpoints import transactions
from oandapyV20 import API
account_id = "アカウントIDを設定してください"
access_token = "APIトークンを設定してください"
# API用のクラスを定義
client = API(access_token=access_token, environment="practice")
r = transactions.TransactionsStream(accountID=account_id)
client.request(r)
返り値はgenerator形式です。
これをforループで表示すると常に最新のトランザクション情報が自動的に表示されます。
for i in client.request(r):
print(i)
5秒おきに最新のトランザクション情報が表示され、何かしらの変化が発生すると自動的に表示されます。
上記の結果では、発注データが表示され、その後はlastTransactionIDが更新されていることが確認できます。
トランザクション履歴取得の流れ
ここまでで、APIを使ったトランザクションデータの取得方法について解説しました。
取得したいトランザクションIDが既知の場合は、TransactionDetailsで取得することができます。
トランザクションIDが不明の場合は、次のようなプロセスが必要になります。
- 1. TransactionListで任意の期間、トランザクションの種類からIDの範囲を特定する
- 2. TransactionIDRangeやTransactionSinceIDでトランザクション一覧を取得する
- 3. トランザクション一覧から該当データを特定して抽出する
トランザクションIDが不明の場合は、まずはTransactionListでIDの候補を取得します。
そこからTransactionIDRangeやTransactionSinceIDで候補一覧のトランザクション情報を取得して、該当データを特定します。
定期的にトランザクションを収集する場合には、毎取得時にlastTransactionIDを保存しておき、次にデータを取得する際にはそのIDを使ってTransactionSinceIDを利用するとスムーズにデータを収集することができます。
本記事の執筆者:TAT
本記事の執筆者:TAT | 経歴 |
---|---|
2016年大学院卒業後、外資系IT企業に入社。 その後は金融情報→不動産テック→アドテク企業で、Pythonを用いたプロセスオートメーション、ダッシュボード開発、データ分析、AI開発などの業務に従事。 プログラミングや株式投資に関する情報を発信する「気ままなブログ」を運営中。 |
「REST API」をさらに学びたい方へオススメのコンテンツ
OANDA証券では、「REST API」に関する記事を豊富に提供しています。
「REST API」を利用するための手順、プログラミング言語の一つPythonを使い「REST API」を使用するまでの手順など、初心者の方向けコンテンツも豊富にあるので、APIを使った取引を始めてみたい方はぜひ参考にしてください。
ただしAPIを利用した取引は、OANDA証券の口座開設+いくつかの条件があります。
事前に確認を行い、ぜひOANDA証券の口座を開設し「REST API」を使った取引をご検討ください。
本ホームページに掲載されている事項は、投資判断の参考となる情報の提供を目的としたものであり、投資の勧誘を目的としたものではありません。投資方針、投資タイミング等は、ご自身の責任において判断してください。本サービスの情報に基づいて行った取引のいかなる損失についても、当社は一切の責を負いかねますのでご了承ください。また、当社は、当該情報の正確性および完全性を保証または約束するものでなく、今後、予告なしに内容を変更または廃止する場合があります。なお、当該情報の欠落・誤謬等につきましてもその責を負いかねますのでご了承ください。