8. The fxcmpy_order Class¶
This section introduces the fxcmpy_order class which is created by
different operations.
In [1]:
import fxcmpy
import pandas as pd
import datetime as dt
con = fxcmpy.fxcmpy(config_file='fxcm.cfg')
The methods fxcmpy.create_entry_order(),
fxcmpy.create_market_sell_order(),
fxcmpy.create_market_buy_order() and fxcmpy.open_trade() return
an instance of the fxcmpy_order class. Existing orders are stored in
the attribute orders, canceled or executed orders are stored in the
attribute old_orders, both as instance of the fxcmpy_order
class.
8.1. Order Ids¶
In [2]:
order = con.create_entry_order(symbol='USD/JPY', is_buy=True,
amount=300, limit=112,
is_in_pips = False,
time_in_force='GTC', rate=110,
stop=None, trailing_step=None)
The ids of existing orders are returned by con.get_order_ids():
In [3]:
order_ids = con.get_order_ids()
print(order_ids)
[404809369]
The last order id:
In [4]:
order_id = order_ids[-1]
fxcmpy.orders is a dict object with the order ids as keys
and the order object as value.
In [5]:
con.orders
Out[5]:
{404809369: <fxcmpy.fxcmpy_order.fxcmpy_order at 0x7ff2d5a52240>}
8.2. Order Objects¶
To get an existing order object, one can use con.get_order().
In [6]:
order = con.get_order(order_id)
In [7]:
print(order)
accountId: 2815291
accountName: 02815291
amountK: 300
buy: 110
currency: USD/JPY
currencyPoint: 27.2726
isBuy: True
isELSOrder: False
isEntryOrder: True
isLimitOrder: True
isNetQuantity: False
isStopOrder: False
limit: 112
limitPegBaseType: -1
limitRate: 112
ocoBulkId: 0
orderId: 404809369
range: 0
sell: 0
status: Waiting
stop: 0
stopMove: 0
stopPegBaseType: -1
stopRate: 0
time: 2018-06-07 13:52:30.579000
timeInForce: GTC
type: LE
8.3. Get and Set¶
The fxcmpy_order class has get methods for all attributes, for
example:
In [8]:
order.get_amount()
Out[8]:
300
In [9]:
order.get_isBuy()
Out[9]:
True
In [10]:
order.get_sell()
Out[10]:
0
Moreover, the class has set methods for the following attributes:
amount:set_amount()limit:set_limit_rate()range:set_range()rate:set_rate()stop:set_stop_rate()trailing_step:set_trailing_step()
In [11]:
order.set_amount(600)
In [13]:
order.set_stop_rate(108, is_in_pips=False)
In [14]:
con.get_orders().T
Out[14]:
| 0 | |
|---|---|
| accountId | 2815291 |
| accountName | 02815291 |
| amountK | 600 |
| buy | 110 |
| currency | USD/JPY |
| currencyPoint | 54.5303 |
| expireDate | |
| isBuy | True |
| isELSOrder | False |
| isEntryOrder | True |
| isLimitOrder | True |
| isNetQuantity | False |
| isStopOrder | False |
| limit | 0 |
| limitPegBaseType | -1 |
| limitRate | 112 |
| ocoBulkId | 0 |
| orderId | 404809369 |
| range | 0 |
| ratePrecision | 3 |
| sell | 0 |
| status | 1 |
| stop | 108 |
| stopMove | 0 |
| stopPegBaseType | -1 |
| stopRate | 108 |
| t | 3 |
| time | 06072018135425810 |
| timeInForce | GTC |
| tradeId | 178168067 |
| type | LE |
8.4. Status and Deletion¶
A fxcmpy_order object has its own delete method.
In [15]:
order.get_status()
Out[15]:
'Waiting'
In [16]:
order.delete()
In [17]:
order.get_status()
Out[17]:
'Canceled'
8.5. Canceled Orders¶
The canceled order can still be found in the old_orders
attribute.
In [18]:
con.old_orders
Out[18]:
{404809369: <fxcmpy.fxcmpy_order.fxcmpy_order at 0x7ff2d5a52240>,
404809502: <fxcmpy.fxcmpy_order.fxcmpy_order at 0x7ff2d5a52ac8>}
In [19]:
con.close()