シストレ

OANDA シストレ(oandapyV20) の始め方 【関数編2】

投稿日:

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']}


-シストレ
-, , , , ,

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です



関連記事

OANDA シストレ(oandapyV20) の始め方 【BOT編】

OANDA (oandapyV20)で、ゴールデンクロスで買い、デッドクロスで売るBOTを作ってみます。 下記の要素は、プログラム中で指定できるようにします。 単位期間 (年月日等)移動平均を取る期間 …

no image

OANDA シストレ(oandapyV20) の始め方 【関数編3】

OANDAで、シストレ/APIを利用する際にお世話になる関数の紹介です。 OANDA シストレ(oandapyV20) の始め方 記事一覧 導入編関数編1関数編2関数編3 ←本記事Pandas編(作成 …

no image

OANDA シストレ(oandapyV20) の始め方 【導入編】

OANDAを Cloud9 (AWS) + OandapyV20 (Python) 環境で始めるための、クイックスタート記事です。 OANDA シストレ(oandapyV20) の始め方 記事一覧 導 …

no image

OANDA シストレ(oandapyV20) の始め方 【Pandas編】

OANDAで、シストレ/APIを利用する際にお世話になるPandasの紹介です。 OANDA シストレ(oandapyV20) の始め方 記事一覧 導入編関数編1関数編2関数編3Pandas編 ←本記 …

no image

OANDA シストレ(oandapyV20) の始め方 【関数編1】

OANDAで、シストレ/APIを利用する際にお世話になる関数の紹介です。情報は、基本的に公式ドキュメント (英語) から引っ張ってきています。 OANDA シストレ(oandapyV20) の始め方 …

プロフィール

タクマ
−−−−−−−−

東南アジアでシステムインテグレーターとして6年ほど駐在していたり、本を1000冊以上読んだり、趣味でWEBサービスを作ったりしています。

Twitterまとめのまとめ
YouTube Find!
SNS Trends

−−−−−−−−