To date, we've been experimenting with the OANDA Rest API in order to see how it compared to the API provided by Interactive Brokers. We've also seen how to add in a basic portfolio replication element as the first step towards a proper event-driven backtesting system. I've also had some helpful comments on both previous articles (#1 and #2), which suggests that many of you are keen on changing and extending the code yourselves.
To date, we've been experimenting with the OANDA Rest API in order to see how it compared to the API provided by Interactive Brokers. We've also seen how to add in a basic portfolio replication element as the first step towards a proper event-driven backtesting system. I've also had some helpful comments on both previous articles (#1 and #2), which suggests that many of you are keen on changing and extending the code yourselves.
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!

An extremely important requested feature for QSForex has been the ability to backtest over multiple days. Previously the system only supported backtesting via a single file. This was not a scalable solution as such a file must be read into memory and subsequently into a Pandas DataFrame. While the tick data files produced are not huge (roughly 3.5Mb each), they do add up quickly if we consider multiple pairs over periods of months or more.


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.
The majority of the volume in currency trading is confined to only 18 currency pairs compared to the thousands of stocks that are available in the global equity markets. Although there are other traded pairs outside of the 18, the eight currencies most often traded are the U.S. dollar (USD), Canadian dollar (CAD), euro (EUR), British pound (GBP), Swiss franc (CHF), New Zealand dollar (NZD), Australian dollar (AUD) and the Japanese yen (JPY). Although nobody would say that currency trading is easy, having far fewer trading options makes trade and portfolio management an easier task.
Trading on margin can be a profitable Forex strategy, but it is important to understand all the possible risks. You should make sure you know how your margin account operates, and be sure to read the margin agreement between you and your selected broker. If there is anything you are unclear about in your agreement, ask questions and make sure everything is clear.
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.

Retail or beginning traders often trade currency in micro lots, because one pip in a micro lot represents only a 10-cent move in the price. This makes losses easier to manage if a trade doesn't produce the intended results. In a mini lot, one pip equals $1 and that same one pip in a standard lot equals $10. Some currencies move as much as 100 pips or more in a single trading session making the potential losses to the small investor much more manageable by trading in micro or mini lots.
Unit Tests for Position/Portfolio - While I've not mentioned it directly in diary entries #1 and #2, I've actually been writing some unit tests for the Portfolio and Position objects. Since these are so crucial to the calculations of the strategy, one must be extremely confident that they perform as expected. An additional benefit of such tests is that they allow the underlying calculation to be modified, such that if all tests still pass, we can be confident that the overall system will continue to behave as expected.

is regulated by Kanto Local Finance Bureau (Registration No.187) and is a member of Japan Securities Dealers Association and The Financial Futures Association of Japan. Registered Office: Kasumigaseki Building 25F, 2-5 Kasumigaseki 3-chome, Chiyoda-ku, Tokyo, 100-6025 Japan. TEL for Customer Service: +81 (0)3-4588-9700 (On business days from 8:30-17:30 JST)
Is a member of the Investment Industry Regulatory Organization of Canada (IIROC) and Member - Canadian Investor Protection Fund. Know Your Advisor: View the IIROC AdvisorReport. Trading of securities and derivatives may involve a high degree of risk and investors should be prepared for the risk of losing their entire investment and losing further amounts. Interactive Brokers Canada Inc. is an execution-only dealer and does not provide investment advice or recommendations regarding the purchase or sale of any securities or derivatives.

Is a member of the Investment Industry Regulatory Organization of Canada (IIROC) and Member - Canadian Investor Protection Fund. Know Your Advisor: View the IIROC AdvisorReport. Trading of securities and derivatives may involve a high degree of risk and investors should be prepared for the risk of losing their entire investment and losing further amounts. Interactive Brokers Canada Inc. is an execution-only dealer and does not provide investment advice or recommendations regarding the purchase or sale of any securities or derivatives.

The market then wants to trigger one of your pending orders but you may not have enough Forex free margin in your account. That pending order will either not be triggered or will be cancelled automatically. This can cause some traders to think that their broker failed to carry out their orders. Of course in this instance, this just isn't true. It's simply because the trader didn't have enough free margin in their trading account.

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.


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.
Forex trading, also known as foreign exchange trading or currency trading, is where an investor tries to make money by buying and selling currencies on the foreign exchange market. Most investors will follow trends and use strategies to optimise their return. This is a very basic definition that does not reflect the full complexity of Forex trading; our free workshops are ideal for people who are unfamiliar with the concept and want to quickly achieve an in-depth insight into how this all works.
Let’s cover this with an example. If you have $1,000 in your trading account and use a leverage of 1:100 you could theoretically open a position size of $100,000. However, by doing so, your entire trading account would be allocated as the required margin for the trade, and even a single price tick against you would lead to a margin call. There would be no free margin to withstand any negative price fluctuation.
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!
Trading on a margin can have varying consequences. It can influence your trading experience both positively and negatively, with both profits and losses potentially being seriously augmented. Your broker takes your margin deposit and then pools it with someone else's margin Forex deposits. Brokers do this in order to be able to place trades within the whole interbank network.
Risk warning: Trading Forex (foreign exchange) or CFDs (contracts for difference) on margin carries a high level of risk and may not be suitable for all investors. There is a possibility that you may sustain a loss equal to or greater than your entire investment. Therefore, you should not invest or risk money that you cannot afford to lose. Before using Admiral Markets UK Ltd, Admiral Markets Cyprus Ltd or Admiral Markets PTY Ltd services, please acknowledge all of the risks associated with trading.
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.
Whether you have assets in a securities account or in a futures account, your assets are protected by U.S. federal regulations governing how brokers must protect your property and funds. In the securities account, your assets are protected by SEC and SIPC rules. In the futures account, your assets are protected by CFTC rules requiring segregation of customer funds. You are also protected by our strong financial position and our conservative risk management philosophy. See our Strength & Security page.

Simply download the latest version from the Software page and after installation follow the initial wizard or click on the help/start trial menu. Please note that the software periodically communicates with the license servers to validate your trial. After the trial period you can use the software in read only mode which means you cannot modify your TradingDiary Pro database anymore.


Retail or beginning traders often trade currency in micro lots, because one pip in a micro lot represents only a 10-cent move in the price. This makes losses easier to manage if a trade doesn't produce the intended results. In a mini lot, one pip equals $1 and that same one pip in a standard lot equals $10. Some currencies move as much as 100 pips or more in a single trading session making the potential losses to the small investor much more manageable by trading in micro or mini lots.
Margins are a hotly debated topic. Some traders argue that too much margin is very dangerous, however it all depends on trading style and the amount of trading experience one has. If you are going to trade on a margin account, it is important that you know what your broker's policies are on margin accounts, and that you fully understand and are comfortable with the risks involved. Be careful to avoid a Forex margin call.
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.
×