in this article I’ll invite you to discover the FPI - Fractional Product Inefficiency concept. I call the trading technique derived from this concept The Impeccable Hedge. In the text below, you will find out what is FPI, how do we calculate it and how do we trade it.

For starters, I’d like to ponder a littlebit about the quotes origin and purpose since that relates closely to the inefficiency of mutual quotes’ products that form the FPI foundation.

General contemplation on quotes origin

From the dawn of civilization, people were exchanging goods and services among themselves to satisfy their needs. The principle of exchange is at the very core of any business. Indeed, we are making exchange-related decisions in our everyday lives.

The introduction of money changed nothing on the ubiquity of this exchange principle, since money is just a medium that facilitates the exchange in a smoother way. As we all know (or do we? ), money itself has no value until we assign some value to it externally. In other words, money can only buy you things if your business counterpart believes the money possesses some value. Certainly you wouldn’t expect an unspotted native from the middle of an African forest to trade his 10 pounds of gold for your colored slips of paper (money). First you have to make him believe those slips are of some value (good luck on that quest ).

Let’s now abandon the question of money being an intrinsically worthless medium of exchange and let’s focus on a thesis that is closely related to it: that no value is actually expressible without a comparison to some other value. This may not seem obvious, but until you express a value of object A in comparison to at least one other value, the object A’s value is uknown.

We may call this comparison a quote and it’s expressed:

- either in a form of a product: A = 2 * B
- or a fraction: B = A / 2

- 1 GOOG stock / 1 USD = 420.00
- 1 BMW 750i / 1 EUR = 87,500.00
- 1 hour of your work / 1 USD = 100.00
- 1 EUR / 1 USD = 1.2
- 1 GOOG stock / 1 hour of your work = 4.2
- 1 BMW 750i / 1 GOOG stock = 250

Unfortunately, there is no “firm” value in the world to which other values (and thus, the quotes to them) could possibly be linked. This value uncertainity makes the world a perfect place for traders though

As we know, the Forex quotes are the ratios between the values of the first currency in the Forex symbol (the base or unit currency) and the second currency in the FX symbol (the quote or the price currency). There is no “absolute” value of any of these currencies per se. For instance, the quote

- EUR/USD = 1.2847

FPI – a simple mathematical draft

Let’s make things simpler and let’s picture the Forex quotes as the plain mathematical fractions. Let’s have three Forex symbols, represented by commonplace fractions:

- a / b = 2.5
- b / c = 2
- c / a = 0.2

In this example, there are three fractions (FX symbols):

- a / b
- b / c
- c / a

- a
- b
- c

- a / b = 2.5
- b / c = 2
- c / a = ?

- c / a = 1 / ((a / b) * (b / c))
- c / a = 1 / (2.5 * 2)
- c / a = 1 / 5
- c / a = 0.2

- (a / b) * (b / c) * (c / a) = 1
- 2.5 * 2 * 0.2 = 1

FX symbols: just fractions

Now this is going to be more interesting. Let’s subtitute the variables and fractions for FX currencies and symbols now:

Variables:

- a = EUR
- b = USD
- c = CHF

- a / b = EUR/USD
- b / c = USD/CHF
- c / a = CHF/EUR

- CHF/EUR = 1 / (EUR/CHF)

- True prices as of Dec/29/2005, 17:00 EST
- EUR/USD = 1.1840
- USD/CHF = 1.3145
- EUR/CHF = 1.5565

- 1.1840 (EUR/USD) * 1.3145 (USD/CHF) * (1 / 1.5565) (1 / (EUR/CHF)) = 0.999915194

Complementarity

For sure, as was the case with the fractions above, we can derive the price of whichever of the quotes in ring if we know the other two:

- EUR/USD = 1.1840
- USD/CHF = 1.3145
- EUR/CHF = ?

- EUR/CHF = 1 / (1 / (EUR/USD) / (USD/CHF))
- or better
- EUR/CHF = EUR/USD * USD/CHF
- EUR/CHF = 1.1840 * 1.3145
- EUR/CHF = 1.5564

For a recap, the first ‘1’ in the equation

- EUR/CHF = 1 / (1 / (EUR/USD) / (USD/CHF))

Remember, this rule applies to any number of fractions (quotes). If we had a set of 20 Forex quotes and every individual currency would be present exactly twice in that set (thus, they would form a ring), we would be able to devise the value of whichever of these 20 quotes based on the values of the rest of the quotes.

The fractional product almost never equals 1

Now you are probably asking what is so amazing about being able to tell the overall product of the Forex quotes (fractions) in ring is one?

Frankly, the amazing thing about this is that:

- the product almost never is exactly 1.

As you can see, the product oscillates around the ideal value of 1, but it rarely equals 1 sharp. This fact alone disproves the Efficient Market Hypothesis which maintains that the market prices are efficient and it's not possible to take advantage of market inefficiency on a regular basis.

Certainly, one of the factors contributing to the fact that the product is not exactly 1 constantly is that we are not using a mean value between Bid and Ask, but instead only a Bid price here. But that would account only for an absolute shift from the ideally effective product of 1, not for the wild oscillation we can see on the screenshot.

Now whatever is the reason for the value of the product to not being the “correct” value of 1, this obvious inefficiency can be capitalized on. The value of the product oscillates moderately during the quiet market times, but the amplitude widens considerably during the times when the market is fast-moving:

It seems the market is not able to react fast enough on the changes in all FX symbols’ quotes at once so that a minor inefficiencies like this occur. We may picture this concept simply as if EUR/USD quote was updated fast at one brokerage and slowly at some other brokerage. Evidently, when there are two different quotes for the same value / value ratio (EUR/USD), perfect arbitrage opportunities arise. That's exactly what's happening here: the ratios are simply not updated fast enough, so the trader can take advantage of this inefficiency.

And what’s astonishing, with FPI this inefficiency is present permanently! It means that at almost any time (except at the time when the product is exactly 1, which is a rare case), the market is inefficient in terms of mutual quotes between the FX symbols in ring! It seems like nobody had noticed this almost constant inefficiency yet, or at least I was not able to find any traces about any such idea on the internet.

The Impeccable Hedge

I guess you have already figured out that if we open a position in the direction of the ring, i.e.:

- Buy EUR/USD
- Buy USD/CHF
- SellShort EUR/CHF

- Buy EUR/USD
- SellShort EUR/USD

Some brokers even allow for opening the same symbol positions in the opposite directions on the same account. The trouble is, there’s no difference between EUR/USD quote and EUR/USD quote on the same account (not surprisingly, eh? ), so you gain nothing by opening the opposite direction positions with the same symbol (well, if you are arbitraging between two different brokers, the quote may be different). Actually, you lose the spread twice during such “futile hedge” operation.

On the other hand, if you open the Impeccable Hedge position, you are getting the best of both worlds:

- your overall market position is flat as with the “futile hedge”. So you can turn off your computer, go on a vacation and sleep well.
- as with the futile hedge, there are no stops nor profit targets, so your Impeccable Hedge position remains open until you close it and this fact does not have any impact on your account margin
- you make money if you open the Impeccable Hedge position when the product is at one, say the lower extreme ( < 1 ) and close it when the product is at the opposite extreme ( > 1 ):

In fact, only the absolute difference between the opening FPI level and the closing FPI level matters. Open/close levels don't have to be below/above 1. The amount of profit made by opening and closing the Impeccable Hedge position is very small. Yet – it is sure :) ). Virtually, you can’t lose money by trading the Impeccable Hedge if you follow the above rules.

FPI relies on your broker not being a bandit

As we said above, the fractional product inefficiency is rather microscopic , so the success of using FPI in a real trading environment is much dependent on a fast and literally razor-sharp execution and low spread, because the FPI operates with market orders “at the moment” – we need to catch the inefficiency precisely when it happens. If your broker often plays games with your market orders, forget about FPI.

From the technical point of view, the Impeccable Hedge position opening and closing would be much easier if the broker supported a “composite hedge order”: for instance, the FPI trading system would post the order to open three positions at once (buy EUR/USD, buy USD/CHF, sellShort EUR/CHF), but the positions would not be buffered into the market one after another – instead the whole Impeccable Hedge ring (all the three positions) would either be placed or no position would be placed at all.

As of the time of this writing, I don’t know of any FX broker who would support this type of orders (please feel free to suggest such a broker). But anyway, if you are dealing thru a good broker (not that there are more than a few), you shouldn’t experience any troubles regarding market order execution.

FPI Control Panel for NeoTicker in C#.NET

I’ve written an application in C#.NET that hooks up to the NeoTicker trading platform chart and controls the FPI indicator externally. The FPI Control Panel application/indicator takes the symbols on the chart as the input, sifts them thru to get only valid FX symbols and sifts these symbols once more to get a list of unique FX symbols on chart. It means you can have EUR/USD, EUR/USD and MSFT on the chart and the FPI Control Panel will know there’s only one valid unique FX symbol (EUR/USD).

The FPI Control Panel uses my NeoEventsClass object class that generates events for the rest of the application. Event-driven programming is a modern and resources-efficient way of coding. NeoTicker doesn’t provide events in its NTIndicatorObjects library yet, so I decided to write my own events library based on NeoTicker objects and will use it until the events architecture will be available in Neo.

My entire code for FPI and all the supporting DLL libraries (including NeoEventsClass) is available for free here, so you are encouraged to use it and build upon it. You can download the projects source files at the bottom of this article. The FPI_source.zip archive also contains a set of precompiled DLLs and an indicator IDL file ready to be copied into the NeoTicker/indicator folder and run.

I have implemented only several NeoTicker events for the FPI Control Panel, but based on my events library, you can easily add literally hundreds of other useful events. If you do, please tell me and I’ll include them together with your name in the NeoEventsClass so that this effort will be sort of centralized.

The FPI Control Panel connected to the NeoTicker chart looks like this:

It displays:

- the list of all symbols on the chart
- the list of unique FX symbols on the chart
- the detailed information about every unique currency on the chart (the FXCurrencies object that provides the information about all valid FX currencies in the world, their names (Canadian Dollar), alphanumeric codes (CAD) and ISO codes (124) is a part of my FX libraries available for free download below)
- the list of FPI Rings available for this set of unique FX symbols. The list is calculated automatically upon clicking the “Calculate FPI Rings” button:

Then if you click on one of the FPI Rings displayed in the listbox, the FPI value of that particular FPI Ring is displayed on the chart in NeoTicker as the FPI indicator (see above)

- not reversed: EUR/USD, we multiply by EUR/USD value
- reversed: (EUR/USD), we multiply by 1 / (EUR/USD) value

Currency pairs matrix

I devised a simple and fast algorithm for calculating all the possible combinations of FPI rings given the particular set of unique FX symbols on chart. It uses a matrix of unique currencies on the chart. To better understand how this combinatorial matrix works, let’s show that on an example.

Let’s have 23 unique FX symbols on chart:

- AUD/JPY, AUD/USD, CAD/JPY, CHF/JPY, EUR/AUD, EUR/CAD, EUR/CHF, EUR/GBP, EUR/JPY, EUR/SEK, EUR/USD, GBP/CHF, GBP/JPY, GBP/USD, NZD/JPY, NZD/USD, USD/CAD, USD/CHF, USD/DKK, USD/JPY, USD/MXN, USD/NOK, USD/SEK (for a screenshot, see above)

- AUD, CAD, CHF, DKK, EUR, GBP, JPY, MXN, NOK, NZD, SEK, USD:

In a nutshell, we can picture this matrix by putting a “1” (or “true” in the actual C# code) in every row/column intersection for every valid FX symbol. As we said at the beginning of this article, the quotes are always two-way, so for the EUR/USD pair we put a “1” at the intersection of EUR and USD as well as at the intersection of USD and EUR in the matrix:

By the same token, we fill up the rest of the valid FX symbols intersections for all above 23 FX symbols that feature 12 above unique currencies:

Notice the matrix is symmetric. It represents the currency intersections of all available FX symbols.

FPI Rings combinations

Now how do we come up with a set of valid rings with the help of the matrix?

I’m using a brute-force testing algorithm that goes thru all possible combinations of FX symbols. The total number of possible combinations we are testing is:

- 2 ^ n

Now how do we assess the currently tested combination of FX symbols is a valid FPI ring? That’s simple. First of all, let’s recap what we’ve learned earlier in this article:

- A ring of fractions is formed if we’ve got a set of fractions where every individual variable is present exactly twice.

Now we will check whether our chosen combination of FX symbols complies with the above rule. In the currency matrix, we do that simply by checking that in every row the total number of “used in ring” currency pairs (FX symbols) is either 0 or exactly 2. Actually, we can check these sums in columns as well. That doesn’t really matter because – as you remember – the matrix is symmetric.

Zero occurences of the currency in a matrix row means this currency is not present in any FX symbol in the ring we are testing for validity as is the case for JPY, for example:

Two occurences mean the currency is present exactly twice which complies with the ring creation requirements, as is the case for EUR here:

Any other sum (i.e., not zero and not 2) means the whole tested ring is invalid. For example a matrix for EUR/USD, USD/CHF, EUR/CHF, USD/MXN FX symbols features this invalid row for USD:

If any row is found to be invalid during the testing, it’s unnecessary to test the following rows. We may skip this entire combination test and continue on to the next combination test because we know that all rows must be valid.

To declare the currently tested FPI ring as valid:

- all rows must comply with the above rule (exactly zero or 2 pairs used in a ring)
- the number of pairs used in ring must be higher than zero
- the tested combination must not contain more than one valid FPI ring

At the end of each ring combination test that yields a valid FPI ring we also need to determine in which direction the particular set of FX symbols will be used in the ring. Since the matrix is symmetric, it tells us nothing about the direction (buy or sell) of the FX symbols used in the ring. It only provides us with a set of currency pairs used in ring. As stated above, the FX symbols used in the opposite direction are shown in parenthesis in the FPI rings list on the FPI Control Panel:

In this case, GBP/JPY symbol is used in the opposite direction in the ring.

FPI: same time prices only

In the FPI Control Panel, you have to tell the program on which prices to base the FPI calculation. You have two choices:

- open price
- close price

Why there’s no high or low price to choose from? Simply because we never know when high or low occurred during the bar. Open and close prices are time-precise – we always can tell that the open or close prices across the various FX symbols on chart did occur at the very same time. This is also the reason why it’s not possible to apply FPI to a tick chart. It’s only possible to calculate the FPI from prices that occurred at the same time.

There’s money waiting to be made with FPI

The FPI might be used:

- directly for trading the FPI extremes (explained above), or
- to predict the behavior of one of the FX symbols in ring

Conclusion

As exaplained, the Impeccable Hedge takes advantage of the mutual inefficiencies of FX quotes. We can use the FPI indicator to display the current state of the mutual inefficiency. The Impeccable Hedge trade makes very small amount of profit, but this profit is sure. The success of this concept depends very much on the quality of your broker’s execution.

Thanks for your interest in FPI. I’m looking forward to your questions and comments!

Have a very nice day all,

Michal Kreslik

note: if you can't see the attached source files archive below this text, please log on