Pythonで「REST API」から売買注文を発注する方法を解説
Pythonを使ってREST API(以下、API)から売買注文を出す方法について解説します。
API経由でさまざまな種類の売買注文を出すことが可能です。
本記事では代表的な注文方法として以下の6つについて説明します。
- 1.成り行き注文
- 2.指値注文
- 3.逆指値注文
- 4.利食い注文
- 5.損切り注文
- 6.トレーリングストップ
また、発注を変更・キャンセルする方法についてもあわせて解説します。
事前準備
PythonでAPIを利用するためには、次の2点が必要です。
- 1.APIトークンの発行
- 2.oandapyV20のインストール
詳細についてはこちらの記事で解説しておりますのでご参照ください。
Pythonで「REST API」を使用するまでの4つの手順について解説発注方法
基本的な流れ
APIで売買注文を出すためには、oandapyV20.endpoints.orders.OrderCreateを使います。
from oandapyV20.endpoints import orders
from oandapyV20 import API
account_id = "アカウントIDを設定してください"
access_token = "APIトークンを設定してください"
# API用のクラスを定義
client = API(access_token=access_token, environment="practice")
# 売買注文の内容を設定
data = {}
# 売買注文
r = orders.OrderCreate(accountID=account_id, data=data)
client.request(r)
environmnent ではlive (本番口座) あるいは practice (デモ口座) を指定できます。
dataには注文内容を設定します。
ここで、注文のタイプ(成り行き、指値、トレーリングストップなど)、通貨、単位などを指定することができます。
成り行き注文
成り行き注文を行うためにはtypeをMARKETと指定します。
次のコードでは、ドル円を100通貨ロングで成り行き注文を出しています。
from oandapyV20.endpoints import orders
from oandapyV20 import API
account_id = "アカウントIDを設定してください"
access_token = "APIトークンを設定してください"
# API用のクラスを定義
client = API(access_token=access_token, environment="practice")
# 売買注文の内容を設定
data = {
"order": {
"units": "100",
"instrument": "USD_JPY",
"timeInForce": "FOK",
"type": "MARKET",
"positionFill": "DEFAULT"
}
}
# 売買注文
r = orders.OrderCreate(accountID=account_id, data=data)
client.request(r)
設定で重要になるのが、dataのunits、 instruments、 typeです。
unitsではエントリーする単位を設定します。
100だと100通貨ロングです。
unitsをマイナスにするとショートになります。
-200だと200通貨ショートとなります。
instrumentsでは通貨ペアを指定します。
ここではドル円(USD_JPY)を指定しました。
返り値にはorderCreateTransactionとorderFillTransactionの2つのデータが含まれています。
orderFillTransactionにあるid番号133が、保有ポジションのid(チケット番号)と一致していることが確認できます。
指値注文・逆指値注文
指値注文の時はtypeをLIMIT、逆指値注文の時はSTOPと指定します。
次のコードでは、ドル円を145円で200通貨ショートで指値注文を入れています。
from oandapyV20.endpoints import orders
from oandapyV20 import API
account_id = "アカウントIDを設定してください"
access_token = "APIトークンを設定してください"
# API用のクラスを定義
client = API(access_token=access_token, environment="practice")
# 売買注文の内容を設定
data = {
"order": {
"price": "145.00",
"timeInForce": "GTC",
"instrument": "USD_JPY",
"units": "-200",
"type": "LIMIT",
"positionFill": "DEFAULT"
}
}
# 売買注文
r = orders.OrderCreate(accountID=account_id, data=data)
client.request(r)
指し値注文・逆指値注文の場合は、dataにprice(金額)を指定する必要があります。
timeInForceはGTCかGTDを指定します。
GTCはGood till Cancelの略でキャンセルされるまで有効になります。
GTDはGood till Dateの略で指定した日まで注文が有効になります。
GTDの場合は追加でgtdTimeを指定する必要があります。
返り値は、orderCreateTransactionのみになります。
注文中のポジションに発注内容が反映されていることが確認できます。
利食い注文・損切り注文
利食い注文(type: TAKE_PROFIT)および損切り注文(type: STOP_LOSS)は、すでに保有しているポジションに対して注文を出します。
下記のコードでは、保有中のポジションに利食い注文を入れています。
from oandapyV20.endpoints import orders
from oandapyV20 import API
account_id = "アカウントIDを設定してください"
access_token = "APIトークンを設定してください"
# API用のクラスを定義
client = API(access_token=access_token, environment="practice")
# 売買注文の内容を設定
data = {
"order": {
"timeInForce": "GTC",
"price": "144",
"type": "TAKE_PROFIT",
"tradeID": "139"
}
}
# 売買注文
r = orders.OrderCreate(accountID=account_id, data=data)
client.request(r)
返り値にはorderCreateTransactionが含まれます。
利食い注文・損切り注文を出す際には、tradeIDで保有中のポジションを指定する必要があります。
priceで価格を指定します。
timeInForceはデフォルトではGTCで、GTDを選択することもできます。
GTDの場合はgtdTimeの指定が必要になります。
tradeIDは保有ポジションから確認できます。
チケット番号(139)がtradeIDです。
注文後、リミットオーダーに指定した144円に設定されていることが確認できます。
トレーリングストップ
トレーリングストップ(type: TRAILING_STOP_LOSS)も保有中のポジションに対して注文を出します。
次のコードでは、保有中のドル円のロングポジションに50pipsのトレーリングストップを設定しています。
from oandapyV20.endpoints import orders
from oandapyV20 import API
account_id = "アカウントIDを設定してください"
access_token = "APIトークンを設定してください"
# API用のクラスを定義
client = API(access_token=access_token, environment="practice")
# 売買注文の内容を設定
data = {
"order": {
"timeInForce": "GTC",
"tradeID": "145",
"distance": "0.5",
"type": "TRAILING_STOP_LOSS",
}
}
# 売買注文
r = orders.OrderCreate(accountID=account_id, data=data)
client.request(r)
tradeIDで保有しているポジションを指定し、distanceで損切りポイントを指定します。
通貨ペアがドル円(USD_JPY)でdistanceを0.5とすると0.5円(50pips)が損切りポイントとなります。
保有ポジションから、トレールストップが更新されていることが確認できます。
発注を変更・キャンセルする方法
注文中のポジションは、APIを介して変更・キャンセルすることも可能です。
発注内容を変更する
発注内容を変更するためには、oandapyV20.endpoints.orders.OrderReplaceを利用します。
保有ポジションのorderIDを指定して、その注文内容を上書きします。
次のコードでは、orderID: 147に対して、注文内容を書き換えています。
from oandapyV20.endpoints import orders
from oandapyV20 import API
account_id = "アカウントIDを設定してください"
access_token = "APIトークンを設定してください"
# API用のクラスを定義
client = API(access_token=access_token, environment="practice")
# 売買注文の内容を設定
data = {
"order": {
"price": "140.00",
"timeInForce": "GTC",
"instrument": "USD_JPY",
"units": "200",
"type": "LIMIT",
"positionFill": "DEFAULT"
}
}
# 売買注文
r = orders.OrderCancel(accountID=account_id, orderID="147", data=data)
client.request(r)
orderID: 147は、もともとドル円で145円ショートの指値注文でした。
orderReplace後は注文の内容通り、140円のロング指値に変更されていることが確認できます。
この時、チケット番号(orderID)も更新されます。
発注をキャンセルする
発注をキャンセルするためには、oandapyV20.endpoints.orders.OrderCancelを利用します。
OrderCancelでaccountIDとorderIDを指定すると発注をキャンセルできます。
次にコードでは、orderID: 155をキャンセルしています。
from oandapyV20.endpoints import orders
from oandapyV20 import API
account_id = "アカウントIDを設定してください"
access_token = "APIトークンを設定してください"
# API用のクラスを定義
client = API(access_token=access_token, environment="practice")
# 売買注文
r = orders.OrderCancel(accountID=account_id, orderID="155")
client.request(r)
これで注文中のポシションからチケット番号155がキャンセルされます。
その他の注文方法や設定について
本記事でご紹介した内容は、APIが有する機能の一部です。
その他の注文方法もありますし、設定内容をさらに細かく指定することもできます。
詳細については公式ドキュメント(英語)をご参照ください。
本記事の執筆者:TAT
本記事の執筆者:TAT | 経歴 |
---|---|
2016年大学院卒業後、外資系IT企業に入社。 その後は金融情報→不動産テック→アドテク企業で、Pythonを用いたプロセスオートメーション、ダッシュボード開発、データ分析、AI開発などの業務に従事。 プログラミングや株式投資に関する情報を発信する「気ままなブログ」を運営中。 |
「REST API」をさらに学びたい方へオススメのコンテンツ
OANDA証券では、「REST API」に関する記事を豊富に提供しています。
「REST API」を利用するための手順、プログラミング言語の一つPythonを使い「REST API」を使用するまでの手順など、初心者の方向けコンテンツも豊富にあるので、APIを使った取引を始めてみたい方はぜひ参考にしてください。
ただしAPIを利用した取引は、OANDA証券の口座開設+いくつかの条件があります。
事前に確認を行い、ぜひOANDA証券の口座を開設し「REST API」を使った取引をご検討ください。
本ホームページに掲載されている事項は、投資判断の参考となる情報の提供を目的としたものであり、投資の勧誘を目的としたものではありません。投資方針、投資タイミング等は、ご自身の責任において判断してください。本サービスの情報に基づいて行った取引のいかなる損失についても、当社は一切の責を負いかねますのでご了承ください。また、当社は、当該情報の正確性および完全性を保証または約束するものでなく、今後、予告なしに内容を変更または廃止する場合があります。なお、当該情報の欠落・誤謬等につきましてもその責を負いかねますのでご了承ください。