We also offer an IRA Margin account, which allows you to immediately trade on your proceeds of sales rather than waiting for your sale to settle. You can trade assets in multiple currencies and trade limited option spread combinations. IRA margin accounts have certain restrictions compared to regular margin accounts and borrowing is never allowed in an IRA account. Futures trading in an IRA margin account is subject to substantially higher margin requirements than in a non-IRA margin account. Margin rates in an IRA margin account may meet or exceed three times the overnight futures margin requirement imposed in a non-IRA margin account1.

All currency trading is done in pairs. Unlike the stock market, where you can buy or sell a single stock, you have to buy one currency and sell another currency in the forex market. Next, nearly all currencies are priced out to the fourth decimal point. A pip or percentage in point is the smallest increment of trade. One pip typically equals 1/100 of 1 percent.


Interactive Brokers ®, IBSM, InteractiveBrokers.com ®, Interactive Analytics ®, IB Options AnalyticsSM, IB SmartRoutingSM, PortfolioAnalyst ®, IB Trader WorkstationSM and One World, One AccountSM are service marks and/or trademarks of Interactive Brokers LLC. Supporting documentation for any claims and statistical information will be provided upon request. Any trading symbols displayed are for illustrative purposes only and are not intended to portray recommendations.

Local Portfolio Handling - In my opinion carrying out a backtest that inflates strategy performance due to unrealistic assumptions is annoying at best and extremely unprofitable at worst! Introducing a local portfolio object that replicates the OANDA calculations means that we can check our internal calculations while carrying out practice trading, which gives us greater confidence when we later use this same portfolio object for backtesting on historical data.

In particular I would like to make the system a lot faster, since it will allow parameter searches to be carried out in a reasonable time. While Python is a great tool, it's one drawback is that it is relatively slow when compared to C/C++. Hence I will be carrying out a lot of profiling to try and improve the execution speed of both the backtest and the performance calculations.


GUI Control and Reporting - Right now the system is completely console/command line based. At the very least we will need some basic charting to display backtest results. A more sophisticated system will incorporate summary statistics of trades, strategy-level performance metrics as well as overall portfolio performance. This GUI could be implemented using a cross-platform windowing system such as Qt or Tkinter. It could also be presented using a web-based front-end, utilising a web-framework such as Django.
A Portfolio Margin account can provide lower margin requirements than a Margin account. However, for a portfolio with concentrated risk, the requirements under Portfolio Margin may be greater than those under Margin, as the true economic risk behind the portfolio may not be adequately accounted for under the static Reg T calculations used for Margin accounts. Customers can compare their current Reg T margin requirements for their portfolio with those current projected under Portfolio Margin rules by clicking the Try PM button from the Account Window in Trader Workstation (demo or customer account).

Once an investor has started buying a stock on margin, the NYSE and FINRA require that a minimum amount of equity be maintained in the investor's margin account. These rules require investors to have at least 25% of the total market value of the securities they own in their margin account. This is called the maintenance margin. For market participants identified as pattern day traders, the maintenance margin requirement is a minimum of $25,000 (or 25% of the total market value of the securities, whichever is higher).

For those of you who are new to source version control you will probably want to read up on how git (and version control in general) works with the fantastic free ebook Pro Git. It is worth spending some time learning about source control as it will save you a huge amount of future headache if you spend a lot of time programming and updating projects!

We also apply a concentrated margining requirement to Margin accounts. An account's two largest positions and their underlying derivatives will be re-valued using the worst case scenario within a +/- 30% scanning range. The remaining positions will be re-valued based upon a move of +/-5%. If the concentrated margining requirement exceeds that of the standard rules based margin required, then the newly calculated concentrated margin requirement will be applied to the account.


The script is currently hardcoded to generate forex data for the entire month of January 2014. It uses the Python calendar library in order to ascertain business days (although I haven't excluded holidays yet) and then generates a set of files of the form BBBQQQ_YYYYMMDD.csv, where BBBQQQ will be the specified currency pair (e.g. GBPUSD) and YYYYMMDD is the specified date (e.g. 20140112).
Foreign exchange (forex) or FX trading involves trading the prices of global currencies, and at City Index it is possible to trade on the prices of a huge range of global currencies. Currency trading allows you to speculate on the movement of one currency against another, and is traded in pairs, for example the Euro against the US Dollar (EUR/USD).

Note also that when we begin storing our trades in a relational database (as described above in the roadmap) we will need to make sure we once again use the correct data-type. PostgreSQL and MySQL support a decimal representation. It is vital that we utilise these data-types when we create our database schema, otherwise we will run into rounding errors that are extremely difficult to diagnose!
GUI Control and Reporting - Right now the system is completely console/command line based. At the very least we will need some basic charting to display backtest results. A more sophisticated system will incorporate summary statistics of trades, strategy-level performance metrics as well as overall portfolio performance. This GUI could be implemented using a cross-platform windowing system such as Qt or Tkinter. It could also be presented using a web-based front-end, utilising a web-framework such as Django.
Note also that when we begin storing our trades in a relational database (as described above in the roadmap) we will need to make sure we once again use the correct data-type. PostgreSQL and MySQL support a decimal representation. It is vital that we utilise these data-types when we create our database schema, otherwise we will run into rounding errors that are extremely difficult to diagnose!
Equity – Your equity is simply the total amount of funds you have in your trading account. Your equity will change and float each time you open a new trading position, in such a way that all your unrealised profits and losses will be added to or deducted from your total equity. For example, if your trading account size is $1,000 and your open positions are $50 in profit, your equity will amount to $1,050.
This article will address several questions pertaining to Margin within Forex trading, such as: What is Margin? What is free margin in Forex?' and What is Margin level in Forex? Every broker has differing margin requirements and offers different things to traders, so it's good to understand how this works first, before you choose a broker and begin trading with a margin.

Monitoring and High Availability - Since we are considering a high-frequency intraday system, we must put comprehensive monitoring and high availability redundancy in place. This means reporting on CPU usage, disk usage, network I/O, latency and checking that any periodic scripts are set to keep running. In addition we need a backup and restore strategy. Ask yourself what backup plans you would have in place if you had large open positions, in a volatile market, and your server suddenly died. Believe me, it happens!
There is one unpleasant fact for you to take into consideration about the margin call Forex. You might not even receive the margin call before your positions are liquidated. If the money in your account falls under the margin requirements, your broker will close some or all positions, as we have specified earlier in this article. This can actually help prevent your account from falling into a negative balance.
In particular I've made the interface for beginning a new backtest a lot simpler by encapsulating a lot of the "boilerplate" code into a new Backtest class. I've also modified the system to be fully workable with multiple currency pairs. In this article I'll describe the new interface and show the usual Moving Average Crossover example on both GBP/USD and EUR/USD.
×