matsuokaのブログ

お金まわりの開発・データ分析をして生きていく

早速、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で、一度、指定した通貨ペアで取引をする が良いかと思います。

コメントする

今週は、英のEU離脱を左右する総選挙がありました。

開票前に市場は、ある程度の予測をして、GBP/JPYは上昇トレンドになっていました。システムもそのトレンドに乗って、買い注文をしていたため、週末に、良い決済ができていました。

今週は、決済がこの一回で、注文はありませんでした。

今週の損益

決済日時 注文タイプ 損益額
2019/12/13 7:45 買い 990,900円

取引中の注文

現在、取引中の注文はありません。

現在、チューニングして採用したパラメータは、かなり保守的のようで、大きな価格変動が起きないと、注文・決済をしないようです。 なので、来週も注文・決済は少ないかもしれません。

MT4スプレッド

コメントする

11/11(月)~11/6(土)の取引履歴をまとめておきます。

今週は、1勝3負でした。損失が大きく膨らんだ一週間でした。 先週に含み益を持っていた注文も11日に大きな損益が確定して、その後も負けて、週の終わりに小さな勝ちありました。

大きく負ける取引が多くなっているので、損切りのpipsの範囲を縮めることも検討しています。

今週の損益

決済日時 注文タイプ 損益額
2019/11/11 21:15 売り -132,150円
2019/11/13 21:30 買い -84,000円
2019/11/15 23:15 売り -88,350円
2019/11/15 23:45 買い 9,600円

取引中の注文

現在は、買い注文を 2019/11/16 1:15 に出しています。

ただ、含み損なので、来週、上昇トレンドになることを祈って、気長に待つことにします。

MT4スプレッド
コメントする

11/4(月)~11/9(土)の取引履歴をまとめておきます。

期間中、一時的に含み益が7万円を超える時もありましたが、そのタイミングで自動決済が行えず、結果として損失が出てしまいました。

今週の損益

決済日時 注文タイプ 損益額
2019/11/7 11:30 買い -46,500円
2019/11/9 1:30 買い -34,050円

現在取引中の注文があります。含み損が、9750円あります。

来週には期待して、遠目で観察しておきます。

コメントする