Simple returns measure a change relative to starting value; log returns measure the natural logarithm of the ending-to-starting value ratio. In crypto research, compound simple returns by multiplying their growth factors, or add log returns across consecutive periods and convert back. Across portfolio holdings, use beginning-of-period value weights on simple returns. Choosing a return unit changes the arithmetic, not the underlying profit or loss.
A return column labeled “daily %” leaves an important question unanswered. Is 0.10 a simple return of 10%, a log return, or a percentage already multiplied by 100? Resolve that unit before calculating a cumulative result, average or risk statistic.
Define the return before aggregating it
For positive prices measured in the same quote currency, with no distributions during the interval, define:
- Simple return:
R = ending price / starting price − 1. - Log return:
r = ln(ending price / starting price) = ln(1 + R). - Conversion back:
R = exp(r) − 1.
Use the natural logarithm, not base 10. Store returns as decimals: a 10% simple return is 0.10, and its log return is approximately 0.095310. These numbers encode the same price ratio of 1.10. A log return displayed as 9.531% must still be labeled as a log return; it does not mean the holding gained only 9.531% of its initial value.
For consecutive observations of the same value series, simple growth factors multiply and log returns add. Stony Brook's financial time-series lecture sets out both identities. The result can be reported in familiar simple-return terms after the aggregation.
Neither definition corrects a broken input series. Changing venue, contract or quote currency halfway through a price history changes what the ratios measure. Resolve the input contract with the backtest data-quality checklist.
Reconcile one path in both units
This original hypothetical example starts with $10,000 and follows four equal-length periods. There are no deposits, withdrawals, distributions, fees, funding, borrowing or taxes. The account remains exposed to the stipulated returns. This isolates return arithmetic; it is not historical crypto data or a KLINEO result.
| Period | Starting value | Simple return | Log return, decimal | Ending value |
|---|---|---|---|---|
| 1 | $10,000 | +25.00% | +0.223144 | $12,500 |
| 2 | $12,500 | −20.00% | −0.223144 | $10,000 |
| 3 | $10,000 | +10.00% | +0.095310 | $11,000 |
| 4 | $11,000 | −10.00% | −0.105361 | $9,900 |
Using the unrounded simple returns, the total is:
1.25 × 0.80 × 1.10 × 0.90 − 1 = −0.01, or −1.00%.
Using unrounded log returns, their sum is approximately −0.010050336. Converting gives exp(−0.010050336) − 1 = −0.01. Both methods reconcile to $9,900 / $10,000 − 1.
Adding the simple returns instead gives 25 − 20 + 10 − 10 = +5 percentage points. That sum is not the account's cumulative return. Each percentage has a different starting-value denominator. The second-period 20% loss removes $2,500, exactly reversing the first-period 25% gain.
Keep full precision through the calculation. The six-decimal log values in the table are for reading, so their rounded sum will differ slightly from the unrounded result. A reconciliation should compare within an explicit numerical tolerance, rather than require text-rounded values to reproduce every cent.
Portfolio weights require a different operation
Time aggregation and aggregation across holdings are separate operations. Consider a hypothetical portfolio that begins one period with $5,000 in asset A and $5,000 in asset B. A rises 50%; B falls 50%. With no trades, flows or costs during that period, the ending holdings are $7,500 and $2,500. Total value remains $10,000.
The portfolio's simple return is 0.5 × 0.50 + 0.5 × (−0.50) = 0. Its log return is therefore ln(1) = 0 too.
Weighting the individual log returns gives approximately 0.5 × ln(1.5) + 0.5 × ln(0.5) = −0.143841. Converting that value would suggest a simple loss of about 13.40%, which this portfolio did not experience. The logarithm of a weighted sum is not generally the weighted sum of logarithms.
Eric Zivot's return-calculation chapter explains portfolio simple-return weighting, rebalancing and the distinction for continuously compounded portfolio returns. Use realized beginning-of-period value weights, under the stated no-flow holding assumptions. Reusing 50/50 weights next period assumes a rebalance; the unchanged holdings now have 75/25 weights. Model any actual rebalance and its costs.
For an actively traded account, reconstruct net marked equity with transactions and costs accounted for, then calculate the account's periodic returns. Do not assemble account performance by casually averaging log returns from its traded coins.
Averages need their own label
The four-period path has an arithmetic mean simple return of (25 − 20 + 10 − 10) / 4 = 1.25% per period. That is a summary of the observed one-period simple returns. It is not a constant compounded growth rate for the realized path.
The mean log return is approximately −0.002512584. Convert it to obtain the constant simple growth rate that reproduces this four-period endpoint: exp(−0.002512584) − 1, approximately −0.250943% per period. Applying that rate four times takes $10,000 to $9,900. A positive arithmetic mean can therefore coexist with a negative cumulative return.
An annual rate requires a further choice about elapsed time and compounding. The annualized return and CAGR guide handles that boundary. Do not multiply the displayed 1.25% mean into an annual performance claim. Similarly, keep the return convention explicit when interpreting Sharpe and Sortino ratios.
Use a return-column worksheet
Before sharing a research result, fill in these fields and preserve them with the calculation:
| Field | Example declaration | Verification |
|---|---|---|
| Value series | Net marked equity in USD | Same account scope and valuation method throughout |
| Interval | Consecutive daily observations at a stated UTC time | Missing observations remain identifiable |
| Unit | Simple decimal return | 10% is stored as 0.10 |
| Time aggregation | Product of 1 + R, minus 1 | Agrees with endpoint ratio when no external flows occur |
| Portfolio aggregation | Actual starting value weights | Includes cash and reflects trades or rebalances |
| Presentation | Cumulative simple return | Any log calculation is converted before display |
If using numerical software, log1p(R) and expm1(r) express the conversions directly. NumPy documents log1p's accuracy for small inputs and expm1's precision advantage near zero. These functions address floating-point precision; they do not validate the economic inputs.
Stop when the denominator or domain fails
A complete loss gives a simple return of −100%, but no finite real log return: the log return tends to negative infinity as ending value approaches zero. Zero or negative equity cannot enter an ordinary real-valued log-return series. Do not silently drop such an observation or replace it with zero. A leveraged account can also require a different loss and liability treatment from a positive spot-price series.
External deposits are another failure case. Adding $2,000 to an unchanged $10,000 account produces $12,000 of equity without a 20% investment gain. Neither logging nor compounding that raw balance ratio fixes the mistake. Choose the appropriate cash-flow treatment using time-weighted versus money-weighted returns.
Finally, a sum of log returns contains no extra observations and supplies no evidence of a trading edge. For performance comparisons, retain the same unit, period, currency and costs across both sides of the strategy benchmark comparison.
Method and limits
This AI-assisted editorial article uses the linked teaching and software documentation plus original hypothetical arithmetic examples. Both time-aggregation routes and the portfolio counterexample were recomputed. No historical backtest, live account or strategy-ranking experiment was analyzed. The worksheet helps audit measurement conventions; it does not predict future returns.
