こんにちわlisです!
OANDAというFXの取引所が、Pythonで操作できることを知りました。
オラわくわくすっぞ!ってなったので、遊んでみることにしました。
今回は、基本的な注文のやり方についてです!
アカウントを取得する
アカウントはOANDA JAPANのページから作れます。
今回はデモ口座を作って試していきます。
新規口座開設ボタン……を押しても何やら説明が出るだけだったので、「ログインボタン」を押します。
「講座をご選択ください:」のところを「デモ口座」に変えます。
上部に開設ボタンが出てきました。
「デモ口座開設」を選択。
必要項目やチェックを一通り入力します。
入力を終えたら「デモ口座ID (fxTradePracticeID)を発行する」を押します。
入力したメールにアドレスに、ログイン情報が送られます。
これでアカウント作成できました!
アカウントIDを取得する
さっそく作成したアカウントでログインします。
アカウント画面に来ます。
「口座情報」という欄に「Account ID」があります。
これをメモです!
どこかにコピペするなり、必要なときにコピーしにきましょう。
APIアクセストークンを取得する
アカウント画面の右下の方にある、API欄。
ここの「APIアクセス管理」を押します。
「発行するボタン」を押してアクセストークンを発行してもらいます。
出てきました!
コレをコピーです!
アクセストークンは、このタイミングしか見れないので注意してください!
トークンが分からなくなったりなど、諸般の事情で再取得したい場合は、「再発行」することとなります。
import
今回必要なモジュールです。
from oandapyV20 import API import oandapyV20.endpoints.orders as orders import oandapyV20.endpoints.positions as positions from oandapyV20.exceptions import V20Error
必要情報を定義
今回はテストなので、アカウント情報やアクセストークンを直書きしています。
account_id = 'XXX-XXX-XXXXXXXX-XXX' access_token = '英数字の羅列' api = API(access_token=access_token, environment='practice')
リクエスト処理
APIにリクエストする処理です。
def request(api: API, request_data: dict) -> dict: # APIリクエスト try: result = api.request(request_data) return result except V20Error as exception: print('[ERROR] {}'.format(exception)) return None
apiはグローバル的な感じで宣言しちゃってるので引数でなくてもいい気がしますが、一応引数にしています。
成行で注文
成行で注文します。
def order_market(account_id: str, units: int) -> dict: # 成行 data = { "order": { "type": "MARKET", "positionFill": "DEFAULT", "instrument": "EUR_USD", "units": units } } r = orders.OrderCreate(account_id, data=data) result = request(api, r) return result
指定された数(units)だけ注文するだけです。
今回はサンプルなので、EUR_USDで固定しています。
利確
利確はロング/ショートの利確するポジション数を指定して、その数分売るだけみたいです。
なので「このとき注文したコレを利確~」みたいな考え方はしなくていいみたいです。
def order_close(account_id, short_units: int = 0, long_units: int = 0) -> dict data = {} if bool(short_units): data['shortUnits'] = str(short_units) if bool(long_units): data['longUnits'] = str(long_units) if len(data) <= 0: return r = positions.PositionClose(accountID=account_id, instrument='EUR_USD', data=data) result = request(api, r) return result order_close(account_id)
汎用的にするために、ショート/ロングの数を両方指定するようにしました。
指定なしの場合、何もしません。
成行がEUR_USD固定なので、こちらもEUR_USD固定にしてあります。
結果の表示
結果は辞書型(JSON)で来るので、表示するときは
import json print(json.dumps(result, indent=2))
のようにすると、キレイに整形された状態で見ることができます。
json.dumps()便利!
参考
コチラを参考にしました。ありがとうございました!
あとがき
Python3でOANDAのFXトレードで遊んでみるでした!
昔少しだけFXを試したことがあって、そのときMT4というのを試そうとしたのですが……
そのときは学習コストに気力が追いつかずやめてしまいました。
今回はPythonだしあの時よりも頑張れそうな気がします(笑)
また何か試したら記事にしていこうと思いますー!