OANDAで、シストレ/APIを利用する際にお世話になる関数の紹介です。情報は、基本的に公式ドキュメント (英語) から引っ張ってきています。
もくじ
OANDA シストレ(oandapyV20) の始め方 記事一覧
もくじ
- 注文の実行
- 執行待ちの注文を取得
- 執行待ちの注文をキャンセル
- 現在のポジション
注文の実行
OrderCreateクラスから取れます。unitsでマイナスを指定すると売り、プラスを指定すると買いです。typeでMARKETを指定すると、成り行きです。指値の場合はLIMITを指定します。その際は、priceのパラメータも指定要です。公式ページも参照してください。
from pprint import pprint data = { "order": { "instrument": "USD_JPY", "units": "-100", "type": "MARKET", # "LIMIT"だと指値 # "price": "105.0", # "LIMIT"だと指定要 } } import oandapyV20.endpoints.orders as orders r = orders.OrderCreate(accountID, data=data) api.request(r) pprint(r.response)
{'lastTransactionID': '6653', 'orderCreateTransaction': {'accountID': '001-009-2460000-001', 'batchID': '6652', 'id': '6652', 'instrument': 'USD_JPY', 'positionFill': 'DEFAULT', 'reason': 'CLIENT_ORDER', 'requestID': '114812868641070000', 'time': '2020-10-26T13:00:27.120643713Z', 'timeInForce': 'FOK', 'type': 'MARKET_ORDER', 'units': '-100', 'userID': 2469993}, 'orderFillTransaction': {'accountBalance': '200002.3808', 'accountID': '001-009-2460000-001', 'batchID': '6652', 'commission': '0.0000', 'financing': '0.0000', 'fullPrice': {'asks': [{'liquidity': '3000000', 'price': '105.006'}], 'bids': [{'liquidity': '3000000', 'price': '104.998'}], 'closeoutAsk': '105.008', 'closeoutBid': '104.995', 'timestamp': '2020-10-26T13:00:24.734516248Z'}, 'fullVWAP': '104.998', 'gainQuoteHomeConversionFactor': '1', 'guaranteedExecutionFee': '0.0000', 'halfSpreadCost': '0.4000', 'id': '6653', 'instrument': 'USD_JPY', 'lossQuoteHomeConversionFactor': '1', 'orderID': '6652', 'pl': '4.3000', 'price': '104.998', 'reason': 'MARKET_ORDER', 'requestedUnits': '-100', 'time': '2020-10-26T13:00:27.120643713Z', 'tradesClosed': [{'financing': '0.0000', 'guaranteedExecutionFee': '0.0000', 'halfSpreadCost': '0.4000', 'price': '104.998', 'realizedPL': '4.3000', 'tradeID': '6646', 'units': '-100'}], 'type': 'ORDER_FILL', 'units': '-100', 'userID': 2469993}, 'relatedTransactionIDs': ['6652', '6653']}
執行待ちの注文を取得
OrderListクラスから取れます。別途、返り値の中のidを利用して、注文のキャンセル等を行うことができます。
from pprint import pprint import oandapyV20.endpoints.orders as orders r = orders.OrderList(accountID) api.request(r) pprint(r.response)
{'lastTransactionID': '6654', 'orders': [{'createTime': '2020-10-26T13:02:19.586364212Z', 'id': '6654', 'instrument': 'USD_JPY', 'partialFill': 'DEFAULT_FILL', 'positionFill': 'DEFAULT', 'price': '110.000', 'state': 'PENDING', 'timeInForce': 'GTC', 'triggerCondition': 'DEFAULT', 'type': 'LIMIT', 'units': '-100'}]}
執行待ちの注文をキャンセル
OrderCancelクラスから取れます。キャンセル対象の注文のidを取得しておく必要があります。
from pprint import pprint import oandapyV20.endpoints.orders as orders r = orders.OrderCancel(accountID= accountID, orderID=6654) api.request(r) pprint(r.response)
{'lastTransactionID': '6655', 'orderCancelTransaction': {'accountID': '001-009-2460000-001', 'batchID': '6655', 'id': '6655', 'orderID': '6654', 'reason': 'CLIENT_REQUEST', 'requestID': '114812869363150000', 'time': '2020-10-26T13:03:20.271869334Z', 'type': 'ORDER_CANCEL', 'userID': 2469993}, 'relatedTransactionIDs': ['6655']}
現在のポジション
OpenPositionsクラスから取れます。
from pprint import pprint import oandapyV20.endpoints.positions as positions r = positions.OpenPositions(accountID=accountID) api.request(r) pprint(r.response)
{'lastTransactionID': '6650', 'positions': [{'commission': '0.0000', 'dividendAdjustment': '0', 'financing': '2367.5370', 'guaranteedExecutionFees': '0.0000', 'instrument': 'USD_JPY', 'long': {'averagePrice': '104.958', 'dividendAdjustment': '0', 'financing': '2716.9346', 'guaranteedExecutionFees': '0.0000', 'pl': '-55988.8820', 'resettablePL': '-55988.8820', 'tradeIDs': ['6646', '6648'], 'units': '200', 'unrealizedPL': '12.4000'}, 'marginUsed': '840.1920', 'pl': '-83360.0000', 'resettablePL': '-83360.0000', 'short': {'dividendAdjustment': '0', 'financing': '-349.3976', 'guaranteedExecutionFees': '0.0000', 'pl': '-27371.1180', 'resettablePL': '-27371.1180', 'units': '0', 'unrealizedPL': '0.0000'}, 'unrealizedPL': '12.4000'}]}
ポジションの解消
PositionCloseクラスからできます
from pprint import pprint import oandapyV20.endpoints.positions as positions instrument = "USD_JPY" data = { "longUnits": "ALL" } r = positions.PositionClose(accountID=accountID, instrument=instrument, data=data) api.request(r) pprint(r.response)
{'lastTransactionID': '6657', 'longOrderCreateTransaction': {'accountID': '001-009-2460000-001', 'batchID': '6656', 'id': '6656', 'instrument': 'USD_JPY', 'longPositionCloseout': {'instrument': 'USD_JPY', 'units': 'ALL'}, 'positionFill': 'REDUCE_ONLY', 'reason': 'POSITION_CLOSEOUT', 'requestID': '42755293476090000', 'time': '2020-10-26T14:15:27.255843850Z', 'timeInForce': 'FOK', 'type': 'MARKET_ORDER', 'units': '-100', 'userID': 2460000}, 'longOrderFillTransaction': {'accountBalance': '200003.7808', 'accountID': '001-009-2460000-001', 'batchID': '6656', 'commission': '0.0000', 'financing': '0.0000', 'fullPrice': {'asks': [{'liquidity': '3000000', 'price': '104.983'}], 'bids': [{'liquidity': '3000000', 'price': '104.975'}], 'closeoutAsk': '104.985', 'closeoutBid': '104.973', 'timestamp': '2020-10-26T14:15:22.760308824Z'}, 'fullVWAP': '104.975', 'gainQuoteHomeConversionFactor': '1', 'guaranteedExecutionFee': '0.0000', 'halfSpreadCost': '0.4000', 'id': '6657', 'instrument': 'USD_JPY', 'lossQuoteHomeConversionFactor': '1', 'orderID': '6656', 'pl': '1.4000', 'price': '104.975', 'reason': 'MARKET_ORDER_POSITION_CLOSEOUT', 'requestedUnits': '-100', 'time': '2020-10-26T14:15:27.255843850Z', 'tradesClosed': [{'financing': '0.0000', 'guaranteedExecutionFee': '0.0000', 'halfSpreadCost': '0.4000', 'price': '104.975', 'realizedPL': '1.4000', 'tradeID': '6648', 'units': '-100'}], 'type': 'ORDER_FILL', 'units': '-100', 'userID': 2460000}, 'relatedTransactionIDs': ['6656', '6657']}
[…] 関数編2 ←本記事 […]
[…] 関数編2 […]
[…] 関数編2 […]