Reference
Pricing formulas
The exact arithmetic behind a parity target and a confidence score, with every constant and weight stated.
Every number on this page is the value the engine actually uses. Concepts and reasoning live in Parity targets; this page is for looking things up.
Money
All amounts are integer micros — millionths of a currency unit. $4.99 is 4990000. Arithmetic is done in BigInt to avoid floating-point drift, with half-up rounding on multiplication.
A constraint, override, or current price must be denominated in the target market's currency. A mismatch is an error, not a silent conversion.
Dampening
dampened(factor, intensity) = 1 - intensity x (1 - factor)
intensity must be within [0, 1]. At 0 the factor is neutralised to 1; at 1 it passes through unchanged.
Economic factor
raw = ppp x priceLevel x income
combined = dampened(ppp, pppIntensity)
x dampened(priceLevel, priceLevelIntensity)
x dampened(income, incomeIntensity)
adjusted = clamp(combined, minPriceRatio, maxPriceRatio)
priceLevel and income default to 1 when absent. ppp is required, and every factor must be finite and greater than zero.
Both raw and adjusted are stored in the snapshot, so the effect of dampening is always recoverable.
Strategy constants
| Conservative | Balanced | Growth | |
|---|---|---|---|
pppIntensity | 0.35 | 0.65 | 0.90 |
incomeIntensity | 0.10 | 0.20 | 0.30 |
priceLevelIntensity | 0.10 | 0.15 | 0.20 |
minPriceRatio | 0.70 | 0.45 | 0.25 |
maxPriceRatio | 1.20 | 1.20 | 1.10 |
Target price
converted = basePrice x fxRate
candidate = converted x adjusted
selected = override.absolutePrice
| converted x override.priceRatio
| candidate
constrained = clamp(selected, floor, ceiling)
rounded = roundToIncrement(constrained, market)
final = clamp(rounded, floor, ceiling)
fxRate is the target currency per base-currency unit, and must be finite and positive.
The final clamp is not redundant: rounding can push a price back outside its bounds.
For a protected market the result is the current price, and a current price is required — the calculation throws without one.
Eligibility
eligible = storeSupported AND NOT protectedMarket
Confidence
stability = 1 - min(1, |1 - adjusted|)
score = clamp(dataCoverage) x 0.35
+ clamp(freshness) x 0.20
+ (storeSupported ? 1 : 0) x 0.20
+ (roundingRuleAvailable ? 1:0) x 0.10
+ stability x 0.15
Rounded to two decimal places. dataCoverage is the count of present economic inputs divided by three.
Bands
| Score | Level | Decision |
|---|---|---|
< 0.40 | Very Low | abstain |
< 0.60 | Low | abstain |
< 0.75 | Medium | provisional |
< 0.90 | High | normal |
>= 0.90 | Very High | normal |
Drift
changeRatio = actual / expected - 1
| |changeRatio| | Severity |
| --- | --- |
| < 0.05 | ignored |
| < 0.10 | mild |
| <= 0.20 | review |
| > 0.20 | significant |
Store drift is only classified when expected and actual share a currency, and when the expected amount is finite and positive.
Approvability
approvable = status = "open"
AND NOT withdrawn
AND confidenceDecision != "abstain"
AND |changeRatio| >= 0.05
Checked in the interface so the buttons state what will happen, and enforced again on the server.