- Flink update_bars debouncing - update_bars subscription idempotency bugfix - Price decimal correction bugfix of previous commit - Add GLM-5.1 model tag alongside renamed GLM-5 - Use short Anthropic model IDs (sonnet/haiku/opus) instead of full version strings - Allow @tags anywhere in message content, not just at start - Return hasOtherContent flag instead of trimmed rest string - Only trigger greeting stream when tag has no other content - Update workspace knowledge base references to platform/workspace and platform/shapes - Hierarchical knowledge base catalog - 151 Trading Strategies knowledge base articles - Shapes knowledge base article - MutateShapes tool instead of workspace patch
53 lines
2.9 KiB
Markdown
53 lines
2.9 KiB
Markdown
---
|
||
description: "FX triangular arbitrage that exploits momentary mispricing across three currency pairs by executing a circular chain of exchanges to lock in a riskless profit."
|
||
tags: [fx, arbitrage, triangular, market-microstructure]
|
||
---
|
||
|
||
# FX Triangular Arbitrage
|
||
|
||
**Section**: 8.5 | **Asset Class**: FX | **Type**: Arbitrage
|
||
|
||
## Overview
|
||
Triangular arbitrage involves three currencies (A, B, C) and three currency pairs. If the cross-rate implied by trading A→B→C→A differs from the direct rate, a riskless profit exists. Such mispricings are extremely short-lived and require fast market data feeds and execution systems.
|
||
|
||
## Construction / Mechanics
|
||
Given three currencies A, B, C and their bid/ask prices, there are two chains:
|
||
1. A → B → C → A
|
||
2. A → C → B → A (equivalent to swapping B and C in chain 1)
|
||
|
||
Focus on chain 1. The relevant rates are:
|
||
- Bid(A→B): rate at which A is exchanged into B
|
||
- Bid(B→C): rate at which B is exchanged into C
|
||
- Ask(C→A): rate at which C is exchanged back into A (cost = 1/Ask(C→A))
|
||
|
||
Note: Bid(B→A) = 1/Ask(B→A) and Ask(A→B) = 1/Bid(A→B).
|
||
|
||
The overall round-trip exchange rate for chain 1 is:
|
||
|
||
```
|
||
R(A→B→C→A) = Bid(A→B) × Bid(B→C) × (1 / Ask(C→A)) (453)
|
||
```
|
||
|
||
**Profit condition:** If R(A→B→C→A) > 1, the trader profits by executing all three legs simultaneously. Starting with 1 unit of A, the trader ends with R > 1 units of A.
|
||
|
||
## Return Profile
|
||
The P&L per unit of A is R - 1 when R > 1. Profits are typically very small per trade (fractions of a pip) but can be accumulated at high frequency. The strategy is notionally riskless if all three legs are executed simultaneously; execution lag introduces market risk.
|
||
|
||
## Key Parameters / Signals
|
||
| Parameter | Description |
|
||
|-----------|-------------|
|
||
| R(A→B→C→A) | Round-trip rate; > 1 signals a profitable arbitrage |
|
||
| Bid(A→B), Bid(B→C) | Bid rates for the two intermediate legs |
|
||
| Ask(C→A) | Ask rate for the closing leg |
|
||
| Execution speed | Critical: mispricings disappear in milliseconds |
|
||
|
||
## Variations
|
||
- **Multi-currency arbitrage**: extend to more than 3 currency pairs (N-currency chains); computational complexity increases but can uncover deeper mispricings.
|
||
- **Chain 2** (A→C→B→A): identical logic with B and C swapped; both chains should be monitored simultaneously.
|
||
|
||
## Notes
|
||
- Opportunities are ephemeral; the strategy is effectively a latency arbitrage and is dominated by high-frequency traders with co-located infrastructure.
|
||
- Bid-ask spreads are the primary cost; even small spreads can eliminate the theoretical profit, so only very tight markets are viable.
|
||
- Unlike statistical arbitrage, this is a near-deterministic arbitrage: no model risk, but significant execution/technology risk.
|
||
- Applicable to crypto exchanges where cross-exchange and cross-pair mispricings can be larger and more persistent than in professional FX markets.
|