11. Carry vs. Trend within GUQFXP: When to Lean into Rollover Income

Introduction

The Global Universal Quantum FX Portfolio (GUQFXP) balances two complementary drivers: pure trend-following and positive-carry capture. In long-term timeframes (M1440, M43200), wide 16×ATR256 stops mean trend entries can be far apart—carry-positive pairs provide daily income that helps offset these wide risk buffers. This guide shows how to compute carry yields, adjust for volatility, detect regimes favoring carry or trend, and compare M1440 vs. M43200 performance.


1. Carry Yield Computations & Risk-Adjusted Carry Ratios

For each carry-positive pair i (e.g. AUD/JPY, USD/CHF, CAD/CHF, AUD/CHF, NZD/CHF, GBP/CAD, USD/CAD):


// 1. Annualized carry yield (in %)
swapPipsPerDay_i = fetchSwapLong(pair=i)
pipValue_i        = getPipValue(pair=i)
notional         = 1_000_000       // example notional
dailyCarryUSD    = swapPipsPerDay_i * pipValue_i
annualCarryPct   = (dailyCarryUSD * 252) / notional * 100

// 2. Annualized volatility (σ_i)
dailyReturns = fetchLogReturns(pair=i, timeframe="M1440")
volDaily     = std(dailyReturns)
volAnnual    = volDaily * sqrt(252)

// 3. Risk-adjusted carry ratio
carryAdj_i = annualCarryPct / volAnnual

Sample Estimates:

PairAnnual Carry (%)Volatility (%)Carry/σ
AUD/JPY3.5012.00.29
USD/CHF2.8010.50.27
CAD/CHF2.5011.00.23
AUD/CHF2.2011.50.19
NZD/CHF2.3012.20.19
GBP/CAD2.0013.00.15
USD/CAD1.8010.80.17

Higher carryAdji indicates pairs where carry income is more attractive relative to volatility.


2. Trend-vs-Carry Regime Detection

Use market regime filters to tilt between trend and carry weightings:


// 1. Compute regime indicator R (Law 2 & 3 inputs)
DAATS_i  = fetchDAATS(pair=i)
corr_i   = fetchCorrelation(pair=i, universe)
lambda_i = DAATS_i / corr_i

// 2. Determine regime
if (lambda_i > λ_c) or (recent VIX shock):
  regime = "Risk-Off"     // favor carry for existing positions, freeze new trend entries
else if (ADX_M1440 > 25 and price > EMA200):
  regime = "Trending"     // favor trend weight
else:
  regime = "Neutral"      // blend carry & trend equally

// 3. Set blending factor α
switch(regime):
  case "Trending": α = 0.3   // 30% carry, 70% trend
  case "Neutral":  α = 0.5
  case "Risk-Off": α = 0.7   // 70% carry, 30% trend

// 4. Compute final weight for pair i
trendScore_i = computeTrendStrength(pair=i, timeframe="M1440")  // normalized 0–1
carryScore_i = carryAdj_i / Σ carryAdj_j
weight_i     = α * carryScore_i + (1–α) * trendScore_i
\end{code>

3. Case Studies: M1440 vs M43200 Performance

Below are performance snapshots comparing a pure daily-trend strategy (M1440) versus a pure monthly-carry strategy (M43200) on the same carry-positive pairs (Jan 2023–Dec 2024):

MetricM1440 Trend OnlyM43200 Carry Only
Annual Return8.0 %9.5 %
Max Drawdown5.0 %7.0 %
Sharpe Ratio1.301.18
Avg Daily Carry Accrualn/a0.015 %
Hit-Rate55 %n/a

Insights:

  • Carry outperforms in return but with wider drawdowns due to infrequent re‐entry points on monthly TF.
  • Daily trend offers smoother equity but misses out on steady rollover income.
  • Blended weighting (α