Harkirat Singh / Analytics

Finance / Forex strategy research

Seven pairs. Two trading rules.

Do simple trend-following and mean-reversion rules produce consistent returns after transaction costs?

PostgreSQLPythonTableau

Positive returns depend on the pair and cost.

Question
Can either unchanged trading rule deliver a repeatable, risk-adjusted result across currency pairs and evaluation periods?

Historical inputs, 2016–2025. Seven separate pair-level experiments; 126 independently initialized rule/split/cost accounts. No combined portfolio.

Supported finding

At 1 bp in the Final Test, 5 of 14 accounts gained. No pair-rule account gained in all three evaluation splits at 1 bp.

Decision implication

Check the pair, year, drawdown and costs before calling a trading rule robust. An isolated profitable account is insufficient evidence of a consistent edge.

Limitation

Idealized bid-price proxies, assumed costs and no financing. Documented 2023 source gaps affect the final evaluation. These are research simulations, not broker-executable returns.

Keep all seven pairs in view

Each cell describes one full evaluation account. The metric changes; the currency universe stays visible.

Loading reviewed research outputs.

Final Test warning: February–July 2023 has limited observed-hour coverage. A flat section can reflect inactivity.

At 1 bp, no pair-rule account gained in all three evaluation splits.

Development: 2016–2020 · Validation: 2021–2022 · Final Test: 2023–2025. Costs are hypothetical basis points per one-way traded notional. CAGR is annualized; period total return is not.

EURUSD: returns and risk

Inspect one pair without hiding the cross-currency comparison above.

TrendMean Reversion

Recorded daily observations load for the selected account.

Each split starts independently at 100. Daily curves use observed UTC date-end marks; absent dates are not filled. Full-split Sharpe and CAGR remain full-split metrics.

Exact daily equity and drawdown values
Exposure, turnover and trading behavior

Exposure is the mean of daily-end gross positions, not time-weighted exposure. Dates ending flat may still contain intraday trading. Turnover includes one-way resizing; trading events are not round-trip trades. Account units start from equity 100.

Which years drove the selected pair?

All ten years remain visible at the selected cost. Green is positive, orange is negative; both rules use the same performance colors.

Annual returns come from accounts reset at the development, validation and final-test boundaries. They do not describe one continuous ten-year account.

What changed after trading costs?

The selected pair and evaluation split, with all three cost assumptions. The single-cost control does not remove a scenario here.

Final Test: 8/14 accounts gained at 0 bp, 5/14 at 1 bp and 2/14 at 3 bp. Compare non-annualized returns within each split.

Mechanics, coverage and interpretation

The seven-pair study extends the initial EURUSD analysis; currency selection was not preregistered.

Trend
SMA 24/120 uses fixed windows of recorded completed hourly closes. Quality or gap failures block the candidate; invalid bars are not replaced with older qualifying rows. Target weights resize at available exact-opening decisions.
Mean Reversion
The current close is compared with the previous 48 recorded closes, excluding the current one, using sample standard deviation. Entry at ±2 only while flat; exits have priority at the position-dependent zero crossing or a 24 observed-interval timeout. No same-decision reversal. Quantities stay fixed while held; delayed exits retain their original decision time.
Currency orientation
For USD-quoted pairs the analytical price is the original quote. For USD-base pairs it is the reciprocal. Long/short direction reverses relative to the quoted instrument. Reciprocal prices are analytical proxies, not observed executable reverse bid quotes.
Risk measurements
Sharpe uses zero benchmark and observed UTC weekday equity before lag, sample standard deviation and 252-observation annualization. CAGR uses actual first/last recorded quote timestamps. Daily drawdown differs from hourly-mark drawdown; gaps can produce irregular observed return intervals.
2023 observed-hour coverage for the selected pair

An hour bucket containing observations differs from an exact HH:00 opening. A partial hour has fewer than 60 observed minutes. These counts have no defensible market-open completeness denominator.

Targeted EURUSD checks found whole-hour gaps already absent from imported raw records and no hourly loss during cleaning. The pre-import cause was not established. EURUSD Mean Reversion stayed at 102.6616 across 130 observed dates in March–July 2023 with no trading events; that inactivity is not evidence of successful risk management.

Inspect the research outputs and code

The website contains derived results, not the source price corpus.

Included

126 summary records, annual and coverage aggregates, daily account indices and the original parameterized Python strategy code.

Software

Browser views need JavaScript. Producer code uses Python’s standard library; full research replay also needs authorized local HistData/PostgreSQL input snapshots.

Reproduction scope

Aggregate and plot inspection is self-contained. The full backtest is source-only here because original and normalized price inputs are excluded.

Source and verification

HistData input specification. Analysis preserved the earlier EURUSD findings and all 18 original account scenarios. An independent export audit checked metrics, grain, endpoints, annual returns and conversion mappings.