Files
ai/gateway/knowledge/trading/strategies/fx/triangular-arbitrage.md
Tim Olson 47471b7700 Expand model tag support: add GLM-5.1, simplify Anthropic IDs, scan tags anywhere in message
- 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
2026-04-28 15:05:15 -04:00

2.9 KiB
Raw Blame History

description, tags
description tags
FX triangular arbitrage that exploits momentary mispricing across three currency pairs by executing a circular chain of exchanges to lock in a riskless profit.
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.