Checked pricing and risk code
When an agent writes your pricing or risk code, C Note checks it against the properties your desk relies on: no-arbitrage bounds, put-call parity, the signs of delta, gamma and vega. Each property comes back proven, tested on samples, or disproved, and a disproved one comes with the input that breaks it.
Research and production in one language
When research is in Python and production is in C++, the two copies drift apart. In C Note the pricing model is written once, in Chelis, and that one version is both checked and compiled.
Use cases
- Pricing
- Payoffs, discounting and calibration, with their numerical assumptions in the types.
- Greeks
- Sign and range properties checked before a sensitivity reaches a hedge.
- Risk
- Scenario grids and aggregation, with stated properties next to the tests.
- Curves
- Construction and interpolation checked against their stated domains.
- Governance
- One record for model-risk sign-off: each property, its method and its result.
Option pricing properties
The properties a vanilla option pricer must hold. State them once and C Note checks the code against them.
| Property | What it says | Sketch |
|---|---|---|
| Non-negativity | No option is worth less than nothing. | price >= 0.0 |
| No-arbitrage bounds | A call stays between its intrinsic value and the underlying price. Outside those bounds there is free money. | call >= max(spot - strike * discount_factor, 0.0) && call <= spot |
| Put-call parity | Calls and puts at the same strike and tenor are locked together. The parity residual is zero. | call - put == spot - strike * discount_factor |
| Monotonicity in volatility | Raising volatility never lowers the price of a vanilla option. | sigma2 >= sigma1 -> price(sigma2) >= price(sigma1) |
| Delta range | Call delta stays in [0, 1]; put delta stays in [-1, 0]. | delta_call >= 0.0 && delta_call <= 1.0 |
| Vega and gamma signs | Vega and gamma are non-negative for vanilla options. | vega >= 0.0 && gamma >= 0.0 |
| Probability bounds | Terms that stand for probabilities stay in [0, 1]. | n_d2 >= 0.0 && n_d2 <= 1.0 |
Check a pricing model
Open a finance example in C Note, or bring a pricing or risk kernel your desk runs today.