Synthetic Pairs by Malcolm Morley

Synthetic Pairs by Malcolm Morley

Synthetic pairs are pairs that you calculate yourself from the underlying data of their components. For example NZD/JPY can be calculated from NZD/USD and USD/JPY. Normally you would be interested in calculating synthetic prices to arrive a price for a pair not offered by your market maker, but on occasions it can be useful to calculate the price of a pair yourself, where you also have underlying information. For example OANDA quotes EUR/AUD, but it is nearly always cheaper to trade the underlying (AUD/USD, EUR/USD – often by some 3-4 pips). You need to first do the calculations to see if it is worthwhile.

Synthetic pairs are pairs that you calculate yourself from the underlying data of their components. For example NZD/JPY can be calculated from NZD/USD and USD/JPY. Normally you would be interested in calculating synthetic prices to arrive a price for a pair not offered by your market maker, but on occasions it can be useful to calculate the price of a pair yourself, where you also have underlying information. For example OANDA quotes EUR/AUD, but it is nearly always cheaper to trade the underlying (AUD/USD, EUR/USD – often by some 3-4 pips). You need to first do the calculations to see if it is worthwhile.

The following is a small extract of Java code, that shows the concept for calculating synthetic pairs

// ——— Calculate derived (synthetic)——————

// default calculation of derived – (all non USD based pairs)
// i.e. AUD/NZD, EUR/AUD, EUR/GBP

crossDerivedBid = (pair1Bid/pair2Ask);
crossDerivedAsk = (pair1Ask/pair2Bid);

// If 1st pair non USD based, and 2nd pair USD based
if( (crossPair.equals(“GBP/CHF”))
|| (crossPair.equals(“EUR/CHF”))
|| (crossPair.equals(“AUD/JPY”))
|| (crossPair.equals(“EUR/JPY”))
|| (crossPair.equals(“GBP/JPY”))

) {
crossDerivedBid = (pair1Bid/(1/pair2Bid));
crossDerivedAsk = (pair1Ask/(1/pair2Ask));
}

// BOTH USD BASED
if( (crossPair.equals(“CHF/JPY”)) )

{
crossDerivedBid = (pair2Bid/pair1Ask);
crossDerivedAsk = (pair2Ask/pair1Bid);
}

bidDiff = crossPairBid – crossDerivedBid;
askDiff = crossDerivedAsk – crossPairAsk;
totDiff = bidDiff + askDiff;

// ——— End derived calculation —————————–

The parameters passed to this extract are

1) The cross: ie AUD/NZD
2) The first USD pair: ie AUD/USD
3) The second USD pair: ie NZD/USD

The code then works out what the derived calculation is, so it can either be compared to the quoted cross rate, or simply it supplies the synthetic price of a pair not offered – say NZD/JPY.

Once you understand the basic methodology, you can use the same technique to calculate any synthetic price, by combining the two underlying pairs.

What it all basically boils down to is put the underlying pairs in the same terms, and then cross divide.

I have lived and breathed trading ever since trading fx professionally in London, Toronto and Philadelphia in the early 70’s (yes I know that shows my age!). While my professional career subsequently took me from the trading desk to designing treasury systems for some of the world’s leading financial institutions, my desire was to always trade for myself. As a consequence, following 5 years with a major international stock-broker

... More