Monday, January 30, 2012

Martingale Strategy

Fear constitutes the strongest emotion facing any forex trader. Fear of losing, in particular, keeps many in bed with one eye on the monitor while the other rests. Martingale strategies theoretically remove that problem by ensuring that a strategy always comes out on top.

The idea is to bet more after a loss, usually twice the amount of a previous bet. Let's do an example where the value of winning and losing is identical. We either win $10 or we lose $10.

The first bet puts $10 at risk. We start out on a run of bad luck, resulting in a $10 loss. Now we double the risk. We either get paid $20 or will lose another $20. We lost again. So far we are down $30. We double the risk again, so now we're either going to make $40 or lose another $40.

So far the strategy doesn't seem that bad. 3 losses in a row only occurs 12.5% of the time (0.5 * 0.5 * 0.5). This is as bad as it gets the majority of the time. But, for the sake of the example, let's continue.

We lose again. Now we're down $70. Double the risk to either make or lose $80.
Another loss. The floating loss grows to $150. The risk grows to $160.

You're no doubt noticing that the risk numbers are getting a little more uncomfortable. For the sake of making it clear how quickly they can get out of hand, I created a small table below.

Consecutive lossesFloating loss

However, if tenth trade rescues the account, you earn back everything that you lost, plus the $10 that you originally attempted to earn. Although you sweat bullets during a cold streak, the strategy comes out on top the vast majority of the time.

Here is where the problems start to roll in. I did not say all of the time. In the real world, you do not have an infinite supply of money. If you have a $5,000 trading account and risk $10 on the first trade, then you can only withstand a maximum of 10 consecutive losses; you don't have enough money to make it to the 11th loss.

Measuring the payout of a Martingale strategy

Consider a game of coin flips where heads means that you win and tails means that you lose. The odds are 1:1, 50%, that you will win or lose on any given flip. Although the probability of winning remains constant at 50%, the actual distribution of those wins and losses will come in the form of hot and cold streaks. Tossing the coin ten times does not always result in 5 winners and 5 losers.

Throwing a coin 10 times will result in 10 consecutive wins 0.09% (0.510)of the time. Conversely, 0.09% of the time also results in 10 consecutive losses. So, the coin flips results in behavior that looks anything like a random outcome 0.18% of the time. The scenario that keeps us up at night - fear in forex trading never goes away - is that that unlucky streak of 10 winners will actually come to pass. 0.09% of the time occurs once in every 1,111 trials.

The next question to consider is the number of wins required to make this worthwhile. Everyone's goal post is different, but it's safe to assume that doubling the account balance makes anyone a happy camper. Earning $10 for a total of $5,000 means that you must have a total of 500 winning Martingale sets. Each set is the group of trades required to earn that $10. Sometimes, the first trade wins and that finishes the set. Sometimes it takes 7 trades. Sometimes (gulp), it takes 20.

500 winning sets requires 1,000 total trades. We get this number by dividing the winning sets, 500, by the probability of winning, 0.5. If the closeness of that number to the scary threshold of 1,111 jumps out at you, it should.

Remember that the evil 10th consecutive losing trade could possibly occur at any point at or after 10 total trades. It could occur after 100 trades or, very rarely, after 10,000 trades. On the whole, it will occur 0.09% of the time, although it will randomly cluster. No method exists to predict where.

Think of the issue graphically. Our hurdle of 1,000 trades to double the account constitutes the danger zone, or the bad space. The safety zone is only the total trades at risk, 1,111, minus the benchmark of 1,000, which is a safety zone of 111.

A graphic of the area of danger and safety within a Martingale strategy

As the sea of red danger zone relative to the green safety zone makes clear, the odds of coming out on top are not exactly in your favor. Specifically, you face a 90% chance of blowing up against a meager 10% chance of doubling your money.

Look for more fertile strategy strategy ideas and money management techniques. I like the simplicity behind Martingale, but that's about it. A simple mathematical analysis tells you that it's not going to end well the vast majority of the time. If you wish to continue a Martingale trading strategy, it only gets worse from this point forward.

Other Martingale problems

The odds are not really 50%. We assumed that the price either goes up or down. We forgot to consider the spread. Pairs like the EURUSD show a typical spread of 1.0-1.5 pips at most reasonably priced brokerages. That, unfortunately, affects the probabilities. The price must move an additional 1.5 pips to reach the exit point.

A Martingale system trading a 10 pip interval now must earn 11.5 pips to cover the 10 pips it risks. The wins will only occur 46.51% of the time instead of the theoretical 50%.

Moving the size of the pip interval does help bring the probability closer to 50%. A 25 pip interval achieves 48.54% accuracy, while a 50 pip interval yields 49.46% accuracy. Going further and further up the ladder gets closer and close to 50%. It never quite gets there, though.

The other assumption that we made is that markets are akin to tossing a coin. Well, that's definitely not the case. Although markets exhibit a high degree of randomness, they do show periods of time where they are distinctly non random. They are, in fact, fractal. Mandelbrot enjoyed stumping on the fractal nature of markets at every opportunity. The assumptions that we made with the coin tossing analogy do not always apply. I strongly recommend reading The (Mis)behavior of Markets if you're interested in a layman friendly explanation of the topic.

Thursday, January 26, 2012

Robust Expert Advisors

When you want to program an Expert Advisor, it is important to consider how you are likely to use the file. The most common mistake that I see new MQL programmers make is that they rely too heavily on memory. Events like a power failure, a hard drive crash or weak internet connection can wreak havoc when trading with an Expert Advisor. The EA should ideally be able to pick up and run whenever you are able to restore conditions to normal.

Memory issues

Problems sometimes result from something mundane like changing the settings. I learned that the hard way when a client came to our Dallas office for two weeks to order a very complex EA. Everything worked perfectly in the backtester. The overnight tests, however, never lasted for more than a few hours before something went haywire. I instructed the client not to change the settings; just turn it on and leave it alone. For whatever reason, the importance of those instruction never sank in. It took me ages to realize that his definition of "leaving it alone" didn't quite mesh with mine. The little tweaks that he made during trading messed with the settings that I stored in memory.

I can instruct a client to use software in a certain manner. More often than not, they deviate from the instructions to some degree. It's human nature. I learned from those challenges, like any professional should. Our programming templates changed in structure to minimize the need for special instructions.

Global variables

Global variables are a common tool to avoid the issue of relying on memory. When an EA is removed from the chart, the global variables that it created are accessible for you, the EA or any other EA to read from anywhere inside of MetaTrader.

Although the use global variables sounds sophisticated, it's actually a very simplistic approach. MetaTrader maintains a hidden text file in its installation directory with the variable name, the value that it is storing and the time it was last modified. Whenever more than 6 weeks elapsed since the last time MQL used the global variable, MetaTrader automatically deletes it.

A Martingale system might opt to use a global variable to track a simple statistic. Martingales are wild with their approach to risk, so a trader could realistically want to know at a glance the maximum level traded. Global variables make a trivial task out of that need. If the next level to trade is greater than the global variable, then the MQL code should update the global variable.

The only item to remember is that the global variables expire after six weeks. The EA might need to refresh the information by resetting the global value to its current value. Doing so would keep the variable fresh from MetaTrader's perspective.

A screen shot of global variables in MetaTrader 4

Read information instead of storing it

I prefer to rely on MQL's OrderSelect() command to recreate whatever information I need. Although it is more complex, the advantage is that the EA can function any time, any place, exactly as designed. If the hard drive crashes, it's not a problem from a recovery perspective. You are still in trouble during the down time, though. You can load the same EA on your MT4 account and have it immediately reconstruct the information.

Taking the above Martingale scenario, we could reconstruct the number of levels traded by comparing the open and close times of trades. If trade #1 has a close time of 2011 Dec. 5 00:00 and trade #2 also has a close time of 2011 Dec. 5 00:00, it tells us that they are part of the same trade group. So far, we have 2 levels traded. If trade #5 closed at 2011 Dec. 5 00:00 but no trades did thereafter, then we know that we traded 5 levels total. The EA can then loop through all possible combinations and pick out the highest number from that.

The approach of reading from the order history is a bit of overkill for this simple example, but it comes in handy when you need to calculate more complicated information dynamically and with a minimal risk of error.

How Backtests Simulate Ticks

One common issue that comes up with backtestingis that it often does not match what happened in the real market. This isn't really a deficiency, at least from the perspective of your charting provider. It relates more to the data provided. Inaccurate historical backtests come up in any charting package, including NinjaTrader and MetaTrader.

Consider a typical bar. It has a high, low, open and close. That's only 4 data points. If you're looking at something like an H1 bar, there could be several thousand ticks - maybe tens of thousands of ticks - that comprise that entire bar. And you're trying to encapsulate it by only referencing 4 points.

MetaTrader brokers in particular do not want to provide tick data. The sheer volume of information would put a lot of strain on the servers. The brokers are the ones paying MetaQuotes for MT4. Their concerns go ahead of you as the trader. Thus, no tick data is available unless you go to a ton of extra effort.

That leaves the backtester guessing what should have happened at all of the points in between. Strategies that trade intrabar or EAs that place the stop and take profit so closely together that they might get hit on the same bar are particularly vulnerable to bad assumptions.


You placed an order to buy a forex pair at 100, which is also the open. You set the take profit at 105 and the stop loss at 97. The low of the bar is 96, the high of the bar is 110 and the close is 102. Is there any way to know whether the stop loss or take profit hit first?

No, you cannot tell. The price might have fell from 100 down to 96, climbed up to 110 and then fallen to 102. Alternatively, it may have climbed from 100 to 110, then fallen to 96, then climbed back to 102. More than likely, the price followed a complex path that vaguely resembles one of those paths.

MetaTrader and NinjaTrader have no way of knowing which answer is correct. They do their best to work around the gap in knowledge. NinjaTrader simply assumes the worst case scenario, which is probably the best policy to avoid false positives. If a stop or take profit both hit within a bar, then NinjaTrader assumes that the stop loss was hit first. There are no exceptions. The slightly good news is that if your NinjaTrader backtest looks abysmal and faces this issue, it may not be as bad as you first thought.

MetaTrader approaches the backtest assumptions differently. It tries to build the path of the bar by inferring from the relationship between the high and low and the open and close. If the bar closes up, I believe that MetaTrader assumes that the low comes first, then retraces up to the high of the bar before settling back down to the close. I don't have a theory on the algorithm that powers what happens in between; it's usually not relevant. If your stops and take profits are so close that the up/down bar assumption cannot sort it out, then no amount of backtesting will provide an accurate answer until you finally import tick data.

The spread at the time of entry, and thus the cost of trading, are also unknown. This can heavily distort the results. MetaTrader makes assumptions about the spread. Although it generally reflects the average spread, it's a safe bet that it does not reflect the actual spread at the time you traded. Whether or not the assumed spread works out in your favor over hundreds of trades varies from Expert Advisor to Expert Advisor.

NinjaTrader can work around the tick assumptions, but you must anticipate it within the strategy's programming. I plan to write a future blog post that will explain how to force NinjaTrader to use tick data for both the bid and ask to generate accurate backtests in NinjaTrader.

Wednesday, January 25, 2012

Iran's Ahmadinejad ups rates to stem money crisis (Reuters) - Iran increased bank interest rates on Wednesday and indicated it would further restrict sales of foreign currency, hoping to halt a spiraling currency crisis after new Western sanctions accelerated a dash for dollars by Iranians worried about their economic future.
"The economy minister has announced that (Iranian President Mahmoud) Ahmadinejad has agreed with the approval of the Money and Credit Council to increase interest rates on bank deposits to up to 21 percent," the official IRNA news agency reported.

Thursday, January 19, 2012

EES VPS for Forex Traders

Elite E Services offers Virtual Private Server for Forex traders, close to our EES FX Trading Environment (in the same data center) as well as a CNS bundling package for premium accounts.

To learn more, visit:

See bundling info at CNS:

EES also offers dedicated servers for professional traders at

Wednesday, January 18, 2012

Local currencies: 'In the U.S. we don't trust'

NEW YORK (CNNMoney) -- It may seem like Monopoly money to outsiders, but a growing number of communities across the U.S. are using homegrown local currencies to stimulate their economies and protect themselves from the nation's broader economic woes.
While there were only about 20 active community currencies in the United States in 2009, there has been a recent resurgence, with at least a dozen communities developing their own currencies in the past couple of years, estimates Loren Gatch, a professor of political science at the University of Central Oklahoma who researches these alternative currencies. In addition, currencies that have been around for years have seen a spike in interest, with membership doubling in some cases.

Friday, January 13, 2012

EES Article FX Trader Mag

See Elite E Services recent article in FX Trader Mag - registration is free and you can download online.

"Expert Advisors and Retail Forex"

Also EES recently was published in Stocks & Commodities magazine (January, 2012) "A Practical Guide to Forex Arbitrage"  see an excerpt here:

Tuesday, January 10, 2012

MetaTrader is more popular than NinjaTrader

For all my gripes about MetaTrader, I must admit that they do the most important stuff very well. It's very easy to download and install. Clicking on the desktop icon results in MT4 loading near instantaneously. When you log into the platform, charts immediately appear. The buttons at the top of the screen are obvious to anyone with trading experience. In short, it's about as idiot proof as software gets.

Fumbling through NinjaTrader

All of the things that MetaTrader does well, NinjaTrader does very poorly. The first time that I downloaded the 42 MB installation file, NinjaTrader said that I couldn't use it because I didn't have the .NET 3.5 framework installed. That makes sense to me as a programmer. To people that do not program for a living (i.e., the people reading this blog), that error message is next to worthless. NinjaTrader ought to handle this type of issue automatically.

Once I installed the program, I tried to open a chart. Nothing happened. I messed with it for about 5 minutes until I finally gave up and decided that the program wasn't worth the effort.

I decided to try again a few months later, at which point I realized that NinjaTrader did not include a datafeed. So then I had to go through their list of 50+ vendors to figure out where I might find a decent forex feed to try using their platform. The feed that I happened to have, Interactive Brokers, required that I download a special version of their software. Naturally, I did not figure this out until I got endless error messages and had to contact NinjaTrader suppport. An hour and several handfuls of hair later, I finally was able to do what MetaTrader allows me to do in seconds - look at a forex chart.

My Windows XP machine with 2 GB RAM, which is pretty typical of your average software user, takes about 20 seconds to load NinjaTrader. I have the nasty habit of closing and opening applications repeatedly. It gets on my nerves when I close NinjaTrader because it takes so long to get it back up again. I would consider leaving the application open, but I usually have 5-6 windows open within their platform. The taskbar always looks so cluttered. Call me crazy, but I find it very difficult to work on the computer with so many window tabs showing at the same time. It feels like there is too much going on visually.

Whenever you have a question about MetaTrader, you simply pick up the phone and call any MetaTrader broker. They answer your question immediately. NinjaTrader, in spite of its excellent online support, largely takes the help yourself approach. You can figure out most problems eventually, but it requires digging through forums and reading a few articles before you stumble upon the one with the answer. That type of self-help approach requires patience. Most people, especially us Americans that expect answers on the spot, are not blessed with that particular virtue.

Products and Add Ons

MetaTrader is like Google Android and NinjaTrader is like Apple. MetaQuotes takes the Android style, hands-off approach. Anything that does not interfere with the MetaTrader itself is allowed. "Allow" isn't even the right word. MetaTrader is entirely removed from the process. The result is there are thousands of products available for sale that work exclusiely in MetaTrader. It's an accidental ecosystem for trading products that relates directly to the approach so prevalent in social media and mobile phones.

NinjaTrader takes the Apple, big brother approach; all products are screened and vetted. This does come with some advantages. You're a lot less likely to buy a total piece of garbage for NinjaTrader than you are for MetaTrader. That said, the centralized also stifles the products on offer. Maybe it's just because I'm Texan and resent anything that feels like authority making choices for me, but I think you see a lot more life and innovation when the people selling a related a product don't have to ask permission to do so.

What does Ninjatrader do, anyway?

You need to take a week's worth of online training to really get a sense for how to use the product. NinjaTrader, for some odd reason, does not offer YouTube videos or any friendly beginners guides to get up and running. They require that you attend online webinars, which are always scheduled in the middle of the work day, in order to thoroughly learn each of the product's main features.

When you open the software, it's not at all apparent what exactly it's supposed to do. Is it an automated trading platform? Is it a charting platform? Is it a tool for active traders? NinjaTrader does all of the above, but my opinion is that the software itself does a terrible job making this clear. Little things like a first-time walk after downloading through would help traders get over the steep learning curve and give the product a chance.

I actually love NinjaTrader, but it nearly takes a graduate degree to figure out how to use it. That's the only reason that I'm so hesistant to recommend it to my MetaTrader programming clients. Once you figure out how to use the tools, they are incredibly powerful. The built in trading analytics eliminate the need for MetaTrader related sites like MyFXBook and MT4Stats for viewing and studying my daily performance. Comparing MetaTrader and NinjaTrader in the backtester is not even worth doing: NinjaTrader is infinitely superior. It's too bad that NinjaTrader gets in its own way.

The features that NinjaTrader offers should make it way more popular than MetaTrader. I just don't see that happening any time soon with how long it takes to learn the software.

Forex Correlation

Correlation strategies appeal to forex traders because removes the stress associated with picking market direction. When two correlated pairs diverge from one another, the idea is to simply buy one pair and sell the other.

What are correlated currency pairs?

Correlation offers a mathematical probability of two "time series" moving in the same direction. Applying the idea to forex, it means that we need to pick two currency pairs. EURUSD and USDCHF are two popular choices due to their extremely high correlation, so we'll use those.

Now we ask a simple question: "If the EURUSD rises, what is the probability of that the USDCHF will also rise"? Our calculations will pump out a simple a number between -1 and +1. +1 means that that if Currency A rose in value, then it is 100% certain that Currency B rose in value. -1 means that if Currency A increased in value, then it is 100% certain that Currency B decreased in value. A value of 0 means that the movement of Currency A exercises no effect at all on Currency B.

Traders generally consider a correlation significant whenever the number is greater than 70%. EURUSD and USDCHF are so popular because they hold the strongest correlation among the major currency pairs. When market volatility was very low a few years ago, it was around -93%. Today, the correlation tends to hang around -80%. The European debt problems and Swiss National Bank's intervention have a lot to do with the decrease in this number. Their trading relationships are far less stable.

Risks of correlation strategies

Let's move back into familiar territory with my favorite example, the moving average. If you take the average over the past 20 bars, you know from experience that the average will differ if you study a 50 period versus a 200 period average. If you look at the average on a 5 minute chart versus an hourly chart, the number will vary yet again.

The take-away here is that the correlations work the same way. The correlation between EURUSD and USDCHF might even be positive if you look at a short enough time scale. As you back away in time, you will notice that the further out you go, the more steady the correlation numbers look. If the weekly correlation of the EURUSD and USDCHF is -80%, you would expect the numbers to get more wild and erratic as you scale all the way down to a tick chart.

The same problem with the moving average also appears. Studying the correlation over 50 periods provides a responsive number, but it is also far less consistent than the 200 period correlation. What a short period gains in responsiveness, it loses in stability.

You should also consider whether the correlation that you're studying makes fundamental sense. Just because the temperature change in Mongolia predicted the direction of USDJPY for the past week does not make it a good idea to use in the future. The same goes with pair trading.

EURUSD and USDCHF should be highly correlated for two reasons. They both contain the same currency in the pair (USD), which half weights them with the same instrument. Additionally, the EUR and CHF both have strong trading relationships with the US. You would expect both the Euro Zone and Switzerland to share a need for buying and selling US dollars. They need them for buying oil, importing and exporting to the US, etc. Anyone with a cursory understanding of macroeconomics could explain why this relationship makes sense.

Correlation traders typically settle on pairs that share a common currency. The EURUSD and USDCHF trade both share the US dollar. When you buy EURUSD and buy USDCHF, you are really:
Buying EUR and selling USD
Buying USD and selling CHF

Notice that the USD cancels itself out. What you are really doing is buying EUR and selling CHF. This is commonly known as the EURCHF pair. Assuming that the spread is not outrageous, it makes more sense to simply buy or sell EURCHF directly rather than going through the convoluted process of managing two open trades.

If you decide to pursue the two pair approach in a MetaTrader expert advisor, you must consider the need to balance the trade sizes against each other. Using standard lots as the example, 100,000 EUR is 137,500 USD. 100,000 USD is 90,900 CHF. If you buy one standard lot of EURUSD, you are buying $137,500 of it. When you buy a standard lot of USDCHF, you are only buying $100,000.

$137,500 obviously does not equal $100,000. Unless you intentionally decided to trade different sizes, you may want to consider equalizing them.

Solve for x:
€100,000 / $137,500 = x * (₣90,900/$100,000)
x = €100,000 / ₣90,00 * $100,000 / $137,500 = 0.803
You would need your EURUSD trade to be 80% of the size of the USDCHF trade.

What correlation is not

Correlation only provides insight into the probability of direction. It says absolutely nothing about the strength of a particular move. A few months ago the USDCHF climbed 1,000 points in value within a single day. The EURUSD only moved a few hundred pips. The USDCHF moved dramatically further than the EURUSD both in terms of pips, but more importantly, as a percentage of price.

Consider if you were short EURUSD that day and short USDCHF. You lost a ton of money. On the flip side, if you were long EURUSD and long USDCHF, then you got lucky and earned the move. Regardless of what happened, correlation told you nothing about the outcome when they move in the same direction. For that reason, I prefer looking at a less intuitive method called cointegration.


Conintegration turns the problem on its head. Rather than asking whether or not two pairs move in the same direction, it asks how likely are they to remain a certain distance apart. Naturally, that distance tends to vary with time. What you want the cointegration formula to tell you is how likely two pairs are to come back to a standard distance. If you see two pairs spread unusually far apart and the numbers tell you that they usually come back together, then it makes sense to consider a pair trade.

Ernest Chan has a friendly introduction to cointegration that I highly recommend. A much uglier, math intensive introduction to the subject, albeit one that is also far more thorough, is in the book Pairs Trading by Ganapathy Vidyamurthy.