{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Market Orders "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"This section covers **market orders**, the most simple yet equally important order type."
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import fxcmpy\n",
"import pandas as pd\n",
"import datetime as dt\n",
"con = fxcmpy.fxcmpy(config_file='fxcm.cfg')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Placing Orders"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Before one gets started, a check of the **open positions** might be helpful."
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
"
\n",
" \n",
" \n",
" \n",
"
\n",
"
"
],
"text/plain": [
"Empty DataFrame\n",
"Columns: []\n",
"Index: []"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"con.get_open_positions().T"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Currently, there are no open positions. **To place orders**, one can use the methods `con.create_market_sell_order()` or `con.create_market_buy_order()`, respectively."
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"order = con.create_market_sell_order('EUR/USD', 100)"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"order = con.create_market_buy_order('USD/JPY', 200)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The new **open positions table** might then look as follows. Two new positions have been created."
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" 0 | \n",
" 1 | \n",
"
\n",
" \n",
" \n",
" \n",
" accountId | \n",
" 2815291 | \n",
" 2815291 | \n",
"
\n",
" \n",
" accountName | \n",
" 02815291 | \n",
" 02815291 | \n",
"
\n",
" \n",
" amountK | \n",
" 100 | \n",
" 200 | \n",
"
\n",
" \n",
" close | \n",
" 1.17701 | \n",
" 110.152 | \n",
"
\n",
" \n",
" com | \n",
" 0 | \n",
" 0 | \n",
"
\n",
" \n",
" currency | \n",
" EUR/USD | \n",
" USD/JPY | \n",
"
\n",
" \n",
" currencyPoint | \n",
" 10 | \n",
" 18.155 | \n",
"
\n",
" \n",
" grossPL | \n",
" -4 | \n",
" -39.9448 | \n",
"
\n",
" \n",
" isBuy | \n",
" False | \n",
" True | \n",
"
\n",
" \n",
" isDisabled | \n",
" False | \n",
" False | \n",
"
\n",
" \n",
" limit | \n",
" 0 | \n",
" 0 | \n",
"
\n",
" \n",
" open | \n",
" 1.17697 | \n",
" 110.174 | \n",
"
\n",
" \n",
" ratePrecision | \n",
" 5 | \n",
" 3 | \n",
"
\n",
" \n",
" roll | \n",
" 0 | \n",
" 0 | \n",
"
\n",
" \n",
" stop | \n",
" 0 | \n",
" 0 | \n",
"
\n",
" \n",
" stopMove | \n",
" 0 | \n",
" 0 | \n",
"
\n",
" \n",
" t | \n",
" 1 | \n",
" 1 | \n",
"
\n",
" \n",
" time | \n",
" 06062018104125 | \n",
" 06062018104127 | \n",
"
\n",
" \n",
" tradeId | \n",
" 178067111 | \n",
" 178067131 | \n",
"
\n",
" \n",
" usedMargin | \n",
" 1300 | \n",
" 2000 | \n",
"
\n",
" \n",
" valueDate | \n",
" | \n",
" | \n",
"
\n",
" \n",
" visiblePL | \n",
" -0.4 | \n",
" -2.2 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" 0 1\n",
"accountId 2815291 2815291\n",
"accountName 02815291 02815291\n",
"amountK 100 200\n",
"close 1.17701 110.152\n",
"com 0 0\n",
"currency EUR/USD USD/JPY\n",
"currencyPoint 10 18.155\n",
"grossPL -4 -39.9448\n",
"isBuy False True\n",
"isDisabled False False\n",
"limit 0 0\n",
"open 1.17697 110.174\n",
"ratePrecision 5 3\n",
"roll 0 0\n",
"stop 0 0\n",
"stopMove 0 0\n",
"t 1 1\n",
"time 06062018104125 06062018104127\n",
"tradeId 178067111 178067131\n",
"usedMargin 1300 2000\n",
"valueDate \n",
"visiblePL -0.4 -2.2"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"con.get_open_positions().T"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## General Market Orders"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`fxcmpy` allows to place more complex orders, this can be done with the method `con.open_trade()`. A detailed description of the meaning of the parameters is found in the FXCM API Documentation. "
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"order = con.open_trade(symbol='USD/JPY', is_buy=True,\n",
" rate=105, is_in_pips=False,\n",
" amount='1000', time_in_force='GTC', \n",
" order_type='AtMarket', limit=120)"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" 0 | \n",
" 1 | \n",
" 2 | \n",
"
\n",
" \n",
" \n",
" \n",
" accountId | \n",
" 2815291 | \n",
" 2815291 | \n",
" 2815291 | \n",
"
\n",
" \n",
" accountName | \n",
" 02815291 | \n",
" 02815291 | \n",
" 02815291 | \n",
"
\n",
" \n",
" amountK | \n",
" 100 | \n",
" 200 | \n",
" 1000 | \n",
"
\n",
" \n",
" close | \n",
" 1.17711 | \n",
" 110.152 | \n",
" 110.152 | \n",
"
\n",
" \n",
" com | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
"
\n",
" \n",
" currency | \n",
" EUR/USD | \n",
" USD/JPY | \n",
" USD/JPY | \n",
"
\n",
" \n",
" currencyPoint | \n",
" 10 | \n",
" 18.1551 | \n",
" 90.7754 | \n",
"
\n",
" \n",
" grossPL | \n",
" -14 | \n",
" -39.9448 | \n",
" -190.646 | \n",
"
\n",
" \n",
" isBuy | \n",
" False | \n",
" True | \n",
" True | \n",
"
\n",
" \n",
" isDisabled | \n",
" False | \n",
" False | \n",
" False | \n",
"
\n",
" \n",
" limit | \n",
" 0 | \n",
" 0 | \n",
" 120 | \n",
"
\n",
" \n",
" open | \n",
" 1.17697 | \n",
" 110.174 | \n",
" 110.173 | \n",
"
\n",
" \n",
" ratePrecision | \n",
" 5 | \n",
" 3 | \n",
" 3 | \n",
"
\n",
" \n",
" roll | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
"
\n",
" \n",
" stop | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
"
\n",
" \n",
" stopMove | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
"
\n",
" \n",
" t | \n",
" 1 | \n",
" 1 | \n",
" 1 | \n",
"
\n",
" \n",
" time | \n",
" 06062018104125 | \n",
" 06062018104127 | \n",
" 06062018104147 | \n",
"
\n",
" \n",
" tradeId | \n",
" 178067111 | \n",
" 178067131 | \n",
" 178067210 | \n",
"
\n",
" \n",
" usedMargin | \n",
" 1300 | \n",
" 2000 | \n",
" 10000 | \n",
"
\n",
" \n",
" valueDate | \n",
" | \n",
" | \n",
" | \n",
"
\n",
" \n",
" visiblePL | \n",
" -1.4 | \n",
" -2.2 | \n",
" -2.1 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" 0 1 2\n",
"accountId 2815291 2815291 2815291\n",
"accountName 02815291 02815291 02815291\n",
"amountK 100 200 1000\n",
"close 1.17711 110.152 110.152\n",
"com 0 0 0\n",
"currency EUR/USD USD/JPY USD/JPY\n",
"currencyPoint 10 18.1551 90.7754\n",
"grossPL -14 -39.9448 -190.646\n",
"isBuy False True True\n",
"isDisabled False False False\n",
"limit 0 0 120\n",
"open 1.17697 110.174 110.173\n",
"ratePrecision 5 3 3\n",
"roll 0 0 0\n",
"stop 0 0 0\n",
"stopMove 0 0 0\n",
"t 1 1 1\n",
"time 06062018104125 06062018104127 06062018104147\n",
"tradeId 178067111 178067131 178067210\n",
"usedMargin 1300 2000 10000\n",
"valueDate \n",
"visiblePL -1.4 -2.2 -2.1"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"con.get_open_positions().T"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Trade Ids"
]
},
{
"cell_type": "markdown",
"metadata": {
"collapsed": true
},
"source": [
"Every position has the attribute `tradeId`, here it is the column named `tradeId` of the `DataFrame` object returned by `con.get_open_positions()`."
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0 178067111\n",
"1 178067131\n",
"2 178067210\n",
"Name: tradeId, dtype: object"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"con.get_open_positions()['tradeId']"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`fxcmpy` provides methods to get the trade `tradeIds` directly."
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[178067111, 178067131, 178067210]"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"con.get_open_trade_ids()"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[178066615,\n",
" 178066381,\n",
" 178064934,\n",
" 178064922,\n",
" 167729381,\n",
" 144240844,\n",
" 97729921,\n",
" 97601524,\n",
" 97599708]"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"con.get_closed_trade_ids()"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[97599708,\n",
" 97601524,\n",
" 97729921,\n",
" 144240844,\n",
" 167729381,\n",
" 178064922,\n",
" 178064934,\n",
" 178066381,\n",
" 178066615,\n",
" 178067111,\n",
" 178067131,\n",
" 178067210]"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"con.get_all_trade_ids()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Editing Market Orders"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"To modify a trade, you need the `tradeId` value."
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"tradeId = con.get_open_trade_ids()[-1]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"To **change the trade's stop or limit rate**, one can use the `change_trade_stop_limit()` method."
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"con.change_trade_stop_limit(tradeId, is_in_pips=False,\n",
" is_stop=False, rate=115)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"As seen below, the limit rate of the last trade has changed to 115. "
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" 0 | \n",
" 1 | \n",
" 2 | \n",
"
\n",
" \n",
" \n",
" \n",
" accountId | \n",
" 2815291 | \n",
" 2815291 | \n",
" 2815291 | \n",
"
\n",
" \n",
" accountName | \n",
" 02815291 | \n",
" 02815291 | \n",
" 02815291 | \n",
"
\n",
" \n",
" amountK | \n",
" 100 | \n",
" 200 | \n",
" 1000 | \n",
"
\n",
" \n",
" close | \n",
" 1.17708 | \n",
" 110.144 | \n",
" 110.144 | \n",
"
\n",
" \n",
" com | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
"
\n",
" \n",
" currency | \n",
" EUR/USD | \n",
" USD/JPY | \n",
" USD/JPY | \n",
"
\n",
" \n",
" currencyPoint | \n",
" 10 | \n",
" 18.1564 | \n",
" 90.782 | \n",
"
\n",
" \n",
" grossPL | \n",
" -11 | \n",
" -54.4741 | \n",
" -263.292 | \n",
"
\n",
" \n",
" isBuy | \n",
" False | \n",
" True | \n",
" True | \n",
"
\n",
" \n",
" isDisabled | \n",
" False | \n",
" False | \n",
" False | \n",
"
\n",
" \n",
" limit | \n",
" 0 | \n",
" 0 | \n",
" 115 | \n",
"
\n",
" \n",
" open | \n",
" 1.17697 | \n",
" 110.174 | \n",
" 110.173 | \n",
"
\n",
" \n",
" ratePrecision | \n",
" 5 | \n",
" 3 | \n",
" 3 | \n",
"
\n",
" \n",
" roll | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
"
\n",
" \n",
" stop | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
"
\n",
" \n",
" stopMove | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
"
\n",
" \n",
" t | \n",
" 1 | \n",
" 1 | \n",
" 1 | \n",
"
\n",
" \n",
" time | \n",
" 06062018104125 | \n",
" 06062018104127 | \n",
" 06062018104147 | \n",
"
\n",
" \n",
" tradeId | \n",
" 178067111 | \n",
" 178067131 | \n",
" 178067210 | \n",
"
\n",
" \n",
" usedMargin | \n",
" 1300 | \n",
" 2000 | \n",
" 10000 | \n",
"
\n",
" \n",
" valueDate | \n",
" | \n",
" | \n",
" | \n",
"
\n",
" \n",
" visiblePL | \n",
" -1.1 | \n",
" -3 | \n",
" -2.9 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" 0 1 2\n",
"accountId 2815291 2815291 2815291\n",
"accountName 02815291 02815291 02815291\n",
"amountK 100 200 1000\n",
"close 1.17708 110.144 110.144\n",
"com 0 0 0\n",
"currency EUR/USD USD/JPY USD/JPY\n",
"currencyPoint 10 18.1564 90.782\n",
"grossPL -11 -54.4741 -263.292\n",
"isBuy False True True\n",
"isDisabled False False False\n",
"limit 0 0 115\n",
"open 1.17697 110.174 110.173\n",
"ratePrecision 5 3 3\n",
"roll 0 0 0\n",
"stop 0 0 0\n",
"stopMove 0 0 0\n",
"t 1 1 1\n",
"time 06062018104125 06062018104127 06062018104147\n",
"tradeId 178067111 178067131 178067210\n",
"usedMargin 1300 2000 10000\n",
"valueDate \n",
"visiblePL -1.1 -3 -2.9"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"con.get_open_positions().T"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Closing Positions"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Positions can be closed individually via the `tradeId` ..."
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"con.close_trade(trade_id=tradeId, amount=1000)"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" 0 | \n",
" 1 | \n",
"
\n",
" \n",
" \n",
" \n",
" accountId | \n",
" 2815291 | \n",
" 2815291 | \n",
"
\n",
" \n",
" accountName | \n",
" 02815291 | \n",
" 02815291 | \n",
"
\n",
" \n",
" amountK | \n",
" 100 | \n",
" 200 | \n",
"
\n",
" \n",
" close | \n",
" 1.17718 | \n",
" 110.145 | \n",
"
\n",
" \n",
" com | \n",
" 0 | \n",
" 0 | \n",
"
\n",
" \n",
" currency | \n",
" EUR/USD | \n",
" USD/JPY | \n",
"
\n",
" \n",
" currencyPoint | \n",
" 10 | \n",
" 18.1562 | \n",
"
\n",
" \n",
" grossPL | \n",
" -21 | \n",
" -52.6579 | \n",
"
\n",
" \n",
" isBuy | \n",
" False | \n",
" True | \n",
"
\n",
" \n",
" isDisabled | \n",
" False | \n",
" False | \n",
"
\n",
" \n",
" limit | \n",
" 0 | \n",
" 0 | \n",
"
\n",
" \n",
" open | \n",
" 1.17697 | \n",
" 110.174 | \n",
"
\n",
" \n",
" ratePrecision | \n",
" 5 | \n",
" 3 | \n",
"
\n",
" \n",
" roll | \n",
" 0 | \n",
" 0 | \n",
"
\n",
" \n",
" stop | \n",
" 0 | \n",
" 0 | \n",
"
\n",
" \n",
" stopMove | \n",
" 0 | \n",
" 0 | \n",
"
\n",
" \n",
" t | \n",
" 1 | \n",
" 1 | \n",
"
\n",
" \n",
" time | \n",
" 06062018104125 | \n",
" 06062018104127 | \n",
"
\n",
" \n",
" tradeId | \n",
" 178067111 | \n",
" 178067131 | \n",
"
\n",
" \n",
" usedMargin | \n",
" 1300 | \n",
" 2000 | \n",
"
\n",
" \n",
" valueDate | \n",
" | \n",
" | \n",
"
\n",
" \n",
" visiblePL | \n",
" -2.1 | \n",
" -2.9 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" 0 1\n",
"accountId 2815291 2815291\n",
"accountName 02815291 02815291\n",
"amountK 100 200\n",
"close 1.17718 110.145\n",
"com 0 0\n",
"currency EUR/USD USD/JPY\n",
"currencyPoint 10 18.1562\n",
"grossPL -21 -52.6579\n",
"isBuy False True\n",
"isDisabled False False\n",
"limit 0 0\n",
"open 1.17697 110.174\n",
"ratePrecision 5 3\n",
"roll 0 0\n",
"stop 0 0\n",
"stopMove 0 0\n",
"t 1 1\n",
"time 06062018104125 06062018104127\n",
"tradeId 178067111 178067131\n",
"usedMargin 1300 2000\n",
"valueDate \n",
"visiblePL -2.1 -2.9"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"con.get_open_positions().T"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"... or for all positions in an instrument ... "
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"con.close_all_for_symbol('EUR/USD')"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" 0 | \n",
"
\n",
" \n",
" \n",
" \n",
" accountId | \n",
" 2815291 | \n",
"
\n",
" \n",
" accountName | \n",
" 02815291 | \n",
"
\n",
" \n",
" amountK | \n",
" 200 | \n",
"
\n",
" \n",
" close | \n",
" 110.146 | \n",
"
\n",
" \n",
" com | \n",
" 0 | \n",
"
\n",
" \n",
" currency | \n",
" USD/JPY | \n",
"
\n",
" \n",
" currencyPoint | \n",
" 18.156 | \n",
"
\n",
" \n",
" grossPL | \n",
" -50.8416 | \n",
"
\n",
" \n",
" isBuy | \n",
" True | \n",
"
\n",
" \n",
" isDisabled | \n",
" False | \n",
"
\n",
" \n",
" limit | \n",
" 0 | \n",
"
\n",
" \n",
" open | \n",
" 110.174 | \n",
"
\n",
" \n",
" ratePrecision | \n",
" 3 | \n",
"
\n",
" \n",
" roll | \n",
" 0 | \n",
"
\n",
" \n",
" stop | \n",
" 0 | \n",
"
\n",
" \n",
" stopMove | \n",
" 0 | \n",
"
\n",
" \n",
" t | \n",
" 1 | \n",
"
\n",
" \n",
" time | \n",
" 06062018104127 | \n",
"
\n",
" \n",
" tradeId | \n",
" 178067131 | \n",
"
\n",
" \n",
" usedMargin | \n",
" 2000 | \n",
"
\n",
" \n",
" valueDate | \n",
" | \n",
"
\n",
" \n",
" visiblePL | \n",
" -2.8 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" 0\n",
"accountId 2815291\n",
"accountName 02815291\n",
"amountK 200\n",
"close 110.146\n",
"com 0\n",
"currency USD/JPY\n",
"currencyPoint 18.156\n",
"grossPL -50.8416\n",
"isBuy True\n",
"isDisabled False\n",
"limit 0\n",
"open 110.174\n",
"ratePrecision 3\n",
"roll 0\n",
"stop 0\n",
"stopMove 0\n",
"t 1\n",
"time 06062018104127\n",
"tradeId 178067131\n",
"usedMargin 2000\n",
"valueDate \n",
"visiblePL -2.8"
]
},
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"con.get_open_positions().T"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"... or simply for all positions over all instruments."
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"con.close_all()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"After this method call, there are naturally no open positions left."
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
"
\n",
" \n",
" \n",
" \n",
"
\n",
"
"
],
"text/plain": [
"Empty DataFrame\n",
"Columns: []\n",
"Index: []"
]
},
"execution_count": 20,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"con.get_open_positions()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The **closed positions** are found in the table returned by `con.get_closed_postions()`."
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" 0 | \n",
" 1 | \n",
" 2 | \n",
" 3 | \n",
" 4 | \n",
" 5 | \n",
" 6 | \n",
" 7 | \n",
" 8 | \n",
" 9 | \n",
" 10 | \n",
" 11 | \n",
"
\n",
" \n",
" \n",
" \n",
" accountName | \n",
" 02815291 | \n",
" 02815291 | \n",
" 02815291 | \n",
" 02815291 | \n",
" 02815291 | \n",
" 02815291 | \n",
" 02815291 | \n",
" 02815291 | \n",
" 02815291 | \n",
" 02815291 | \n",
" 02815291 | \n",
" 02815291 | \n",
"
\n",
" \n",
" amountK | \n",
" 100 | \n",
" 1000 | \n",
" 200 | \n",
" 100 | \n",
" 100 | \n",
" 300 | \n",
" 300 | \n",
" 300 | \n",
" 300 | \n",
" 1000 | \n",
" 100 | \n",
" 200 | \n",
"
\n",
" \n",
" close | \n",
" 1.17675 | \n",
" 110.141 | \n",
" 110.142 | \n",
" 1.17663 | \n",
" 1.17663 | \n",
" 1.34273 | \n",
" 1.34273 | \n",
" 1.34273 | \n",
" 1.34273 | \n",
" 110.14 | \n",
" 1.17726 | \n",
" 110.151 | \n",
"
\n",
" \n",
" closeTime | \n",
" 06062018103855 | \n",
" 06062018103633 | \n",
" 06062018103648 | \n",
" 06062018103638 | \n",
" 06062018103638 | \n",
" 06062018101450 | \n",
" 06062018101450 | \n",
" 06062018101450 | \n",
" 06062018101450 | \n",
" 06062018104240 | \n",
" 06062018104247 | \n",
" 06062018104258 | \n",
"
\n",
" \n",
" com | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
"
\n",
" \n",
" currency | \n",
" EUR/USD | \n",
" USD/JPY | \n",
" USD/JPY | \n",
" EUR/USD | \n",
" EUR/USD | \n",
" GBP/USD | \n",
" GBP/USD | \n",
" GBP/USD | \n",
" GBP/USD | \n",
" USD/JPY | \n",
" EUR/USD | \n",
" USD/JPY | \n",
"
\n",
" \n",
" currencyPoint | \n",
" 10 | \n",
" 90.7725 | \n",
" 18.1545 | \n",
" 10 | \n",
" 10 | \n",
" 30 | \n",
" 30 | \n",
" 30 | \n",
" 30 | \n",
" 90.7725 | \n",
" 10 | \n",
" 18.1545 | \n",
"
\n",
" \n",
" grossPL | \n",
" -22 | \n",
" -245.14 | \n",
" -23.61 | \n",
" -30 | \n",
" 5493 | \n",
" -5181 | \n",
" -5181 | \n",
" -5181 | \n",
" -5181 | \n",
" -299.62 | \n",
" -29 | \n",
" -41.76 | \n",
"
\n",
" \n",
" isBuy | \n",
" False | \n",
" True | \n",
" True | \n",
" False | \n",
" False | \n",
" True | \n",
" True | \n",
" True | \n",
" True | \n",
" True | \n",
" False | \n",
" True | \n",
"
\n",
" \n",
" open | \n",
" 1.17653 | \n",
" 110.168 | \n",
" 110.155 | \n",
" 1.17633 | \n",
" 1.23156 | \n",
" 1.36 | \n",
" 1.36 | \n",
" 1.36 | \n",
" 1.36 | \n",
" 110.173 | \n",
" 1.17697 | \n",
" 110.174 | \n",
"
\n",
" \n",
" openTime | \n",
" 06062018103758 | \n",
" 06062018103549 | \n",
" 06062018102959 | \n",
" 06062018102957 | \n",
" 04092018133045 | \n",
" 05012018145207 | \n",
" 05012018145207 | \n",
" 05012018145207 | \n",
" 05012018145207 | \n",
" 06062018104147 | \n",
" 06062018104125 | \n",
" 06062018104127 | \n",
"
\n",
" \n",
" ratePrecision | \n",
" 5 | \n",
" 3 | \n",
" 3 | \n",
" 5 | \n",
" 5 | \n",
" 5 | \n",
" 5 | \n",
" 5 | \n",
" 5 | \n",
" 3 | \n",
" 5 | \n",
" 3 | \n",
"
\n",
" \n",
" roll | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 286.36 | \n",
" -821.85 | \n",
" -821.85 | \n",
" -821.85 | \n",
" -821.85 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
"
\n",
" \n",
" t | \n",
" 2 | \n",
" 2 | \n",
" 2 | \n",
" 2 | \n",
" 2 | \n",
" 2 | \n",
" 2 | \n",
" 2 | \n",
" 2 | \n",
" 2 | \n",
" 2 | \n",
" 2 | \n",
"
\n",
" \n",
" tradeId | \n",
" 178066615 | \n",
" 178066381 | \n",
" 178064934 | \n",
" 178064922 | \n",
" 167729381 | \n",
" 144240844 | \n",
" 97729921 | \n",
" 97601524 | \n",
" 97599708 | \n",
" 178067210 | \n",
" 178067111 | \n",
" 178067131 | \n",
"
\n",
" \n",
" valueDate | \n",
" | \n",
" | \n",
" | \n",
" | \n",
" | \n",
" | \n",
" | \n",
" | \n",
" | \n",
" | \n",
" | \n",
" | \n",
"
\n",
" \n",
" visiblePL | \n",
" -2.2 | \n",
" -2.7 | \n",
" -1.3 | \n",
" -3 | \n",
" 549.3 | \n",
" -172.7 | \n",
" -172.7 | \n",
" -172.7 | \n",
" -172.7 | \n",
" -3.3 | \n",
" -2.9 | \n",
" -2.3 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" 0 1 2 3 \\\n",
"accountName 02815291 02815291 02815291 02815291 \n",
"amountK 100 1000 200 100 \n",
"close 1.17675 110.141 110.142 1.17663 \n",
"closeTime 06062018103855 06062018103633 06062018103648 06062018103638 \n",
"com 0 0 0 0 \n",
"currency EUR/USD USD/JPY USD/JPY EUR/USD \n",
"currencyPoint 10 90.7725 18.1545 10 \n",
"grossPL -22 -245.14 -23.61 -30 \n",
"isBuy False True True False \n",
"open 1.17653 110.168 110.155 1.17633 \n",
"openTime 06062018103758 06062018103549 06062018102959 06062018102957 \n",
"ratePrecision 5 3 3 5 \n",
"roll 0 0 0 0 \n",
"t 2 2 2 2 \n",
"tradeId 178066615 178066381 178064934 178064922 \n",
"valueDate \n",
"visiblePL -2.2 -2.7 -1.3 -3 \n",
"\n",
" 4 5 6 7 \\\n",
"accountName 02815291 02815291 02815291 02815291 \n",
"amountK 100 300 300 300 \n",
"close 1.17663 1.34273 1.34273 1.34273 \n",
"closeTime 06062018103638 06062018101450 06062018101450 06062018101450 \n",
"com 0 0 0 0 \n",
"currency EUR/USD GBP/USD GBP/USD GBP/USD \n",
"currencyPoint 10 30 30 30 \n",
"grossPL 5493 -5181 -5181 -5181 \n",
"isBuy False True True True \n",
"open 1.23156 1.36 1.36 1.36 \n",
"openTime 04092018133045 05012018145207 05012018145207 05012018145207 \n",
"ratePrecision 5 5 5 5 \n",
"roll 286.36 -821.85 -821.85 -821.85 \n",
"t 2 2 2 2 \n",
"tradeId 167729381 144240844 97729921 97601524 \n",
"valueDate \n",
"visiblePL 549.3 -172.7 -172.7 -172.7 \n",
"\n",
" 8 9 10 11 \n",
"accountName 02815291 02815291 02815291 02815291 \n",
"amountK 300 1000 100 200 \n",
"close 1.34273 110.14 1.17726 110.151 \n",
"closeTime 06062018101450 06062018104240 06062018104247 06062018104258 \n",
"com 0 0 0 0 \n",
"currency GBP/USD USD/JPY EUR/USD USD/JPY \n",
"currencyPoint 30 90.7725 10 18.1545 \n",
"grossPL -5181 -299.62 -29 -41.76 \n",
"isBuy True True False True \n",
"open 1.36 110.173 1.17697 110.174 \n",
"openTime 05012018145207 06062018104147 06062018104125 06062018104127 \n",
"ratePrecision 5 3 5 3 \n",
"roll -821.85 0 0 0 \n",
"t 2 2 2 2 \n",
"tradeId 97599708 178067210 178067111 178067131 \n",
"valueDate \n",
"visiblePL -172.7 -3.3 -2.9 -2.3 "
]
},
"execution_count": 21,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"con.get_closed_positions().T"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## The `fxcmpy_open_position` Class"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"For convenience, `fxcmpy` provides a class called `fxcmpy_open_positions`. All open positions are stored in the attribute `fxcmpy.open_pos`, a dictionary with the position's `tradeId` as key and the `fxcmpy_open_position` instance as value. Since there are no open positions left, the `dict` object is empty."
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"{}"
]
},
"execution_count": 22,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"con.open_pos"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Therefore, create an order ..."
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"order = con.create_market_sell_order('EUR/USD', 100)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"... to see the `fxcmpy_open_position` objects in the `dict` object."
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"{178067413: }"
]
},
"execution_count": 24,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"con.open_pos"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"To get a single `fxcmpy_open_position` object, one can use `con.get_open_position()`."
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"tradeId = con.get_open_trade_ids()[0]"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"pos = con.get_open_position(tradeId)"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
""
]
},
"execution_count": 27,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"pos"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"accountId: 2815291\n",
"accountName: 02815291\n",
"amountK: 100\n",
"close: 1.17731\n",
"com: 0\n",
"currency: EUR/USD\n",
"currencyPoint: 10\n",
"grossPL: -26\n",
"isBuy: False\n",
"isDisabled: False\n",
"limit: 0\n",
"open: 1.17705\n",
"roll: 0\n",
"stop: 0\n",
"stopMove: 0\n",
"time: 2018-06-06 10:43:12\n",
"tradeId: 178067413\n",
"usedMargin: 1300\n",
"valueDate: \n",
"visiblePL: -2.6\n",
"\n"
]
}
],
"source": [
"print(pos)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The `fxcmpy_open_position` object has `get` methods for all of its attributes, for example:"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"100"
]
},
"execution_count": 29,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"pos.get_amount()"
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'EUR/USD'"
]
},
"execution_count": 30,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"pos.get_currency()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**Close the position** with the `pos.close()` method."
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"pos.close()"
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
"
\n",
" \n",
" \n",
" \n",
"
\n",
"
"
],
"text/plain": [
"Empty DataFrame\n",
"Columns: []\n",
"Index: []"
]
},
"execution_count": 32,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"con.get_open_positions()"
]
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"con.close()"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.6.4"
}
},
"nbformat": 4,
"nbformat_minor": 2
}