【FX】oanda APIを使って取引中の情報を取得する

早速、oanda APIを使って、現在取引中の情報を取得します。


※ API Tokenの発行がまだ出来ていない方は、こちらを参考にして、発行してください。


from oandapyV20 import API
from oandapyV20.endpoints import positions


def get_trading_info(account_id: str, access_token: str, trade_mode: str, instrument: str) -> dict:
    api = API(access_token=access_token, environment=trade_mode)
    r = positions.PositionDetails(accountID=account_id, instrument=instrument)
    positions_details = api.request(r)

    long_position = positions_details["position"]["long"]["units"]
    short_position = positions_details["position"]["short"]["units"]

    trading_info = {}

    if long_position == '0' and short_position == '0':
        trading_info['is_trading'] = False
    if long_position != '0':
        trading_info['is_trading'] = True
        trading_info['ordered_type'] = 'buy'
        trading_info['pre_rate'] = float(positions_details["position"]["long"]["averagePrice"])
    if short_position != '0':
        trading_info['is_trading'] = True
        trading_info['ordered_type'] = 'sell'
        trading_info['pre_rate'] = float(positions_details["position"]["short"]["averagePrice"])

    return trading_info


if __name__ == '__main__':
    trading_info = get_trading_info(
        account_id='自分のAccount ID',
        access_token='自分のpersonal access token',
        trade_mode='practice',
        instrument='GBP_JPY'
    )
    print(trading_info)

出力結果は、取引中なら下記のように出力になります。

{'is_trading': True, 'ordered_type': 'sell', 'pre_rate': 108.17}

取引されていないなら、下記のようになります。

{'is_trading': False}

注意点

このAPIを使った際にエラーが起こることがあります。

使用したAccount IDで、指定した通貨ペア(instrument)での取引を過去一度も取引していない場合は、下記のエラーが起こってしまいます。

oandapyV20.exceptions.V20Error: {"lastTransactionID":"213","errorMessage":"No position exists for the specified instrument","errorCode":"NO_SUCH_POSITION"}

解決策としては、 使用しているAccount IDで、一度、指定した通貨ペアで取引をする が良いかと思います。

投稿者:

kmatsuoka

software engineer

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Google フォト

Google アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中