Core mechanism
The adjustment depends on volatility and correlation terms that modify the effective drift or forward. The page makes those inputs visible rather than hiding the result behind a single price.
Every displayed adjustment is computed by Java from the form inputs: futures convexity, LIBOR in arrears, payment timing, CMS convexity, and the quanto forward and option.
This exact source runs in TeaVM. Form changes update its Java literals and reset manual edits.
import com.nablatensor.quant.OptionTypeEnum;
import com.nablatensor.quant.QuantoMarket;
import com.nablatensor.quant.adjust.Adjustment;
import com.nablatensor.quant.adjust.ConvexityAdjustment;
import com.nablatensor.quant.adjust.QuantoAdjustment;
import com.nablatensor.quant.adjust.TimingAdjustment;
public final class QuantoConvexityRiskStudio {
private QuantoConvexityRiskStudio() {}
public static void main(String[] args) {
var ed = ConvexityAdjustment.eurodollarFutures(3 / 100.0, 90 / 10000.0, 2.0, 2.25);
Adjustment arr = ConvexityAdjustment.inArrears(3 / 100.0, 20 / 100.0, 0.5, 3.0);
Adjustment early = TimingAdjustment.liborPaymentShift(3 / 100.0, 20 / 100.0, 0.5, 3.0, 3.0);
Adjustment late = TimingAdjustment.liborPaymentShift(3 / 100.0, 20 / 100.0, 0.5, 3.0, 4.0);
Adjustment cms = ConvexityAdjustment.cms(3.2 / 100.0, 25 / 100.0, 5.0, 2, 20);
QuantoMarket m = QuantoMarket.of()
.assetSpot(100)
.strike(100.0)
.volAsset(22 / 100.0)
.volFx(9 / 100.0)
.corr(-0.35)
.rateDom(0.03)
.rateForeign(0.012)
.build();
double drift = QuantoAdjustment.driftAdjustment(m.corr(), m.volAsset(), m.volFx());
double noQuanto = m.assetSpot() * Math.exp(m.rateForeign());
double quanto = QuantoAdjustment.quantoForward(m, 1.0);
var option = QuantoAdjustment.quantoOption(OptionTypeEnum.CALL, m, 1.0, 1.25);
System.out.println("RESULT|" + (ed.rateAdjustment() * 10000.0) + "|" + ed.dSigma() + "|" + ed.dMeanReversion()
+ "|" + arr.adjustmentBp() + "|" + (100.0 * arr.adjustedRate()) + "|" + (early.adjustmentBp())
+ "|" + late.adjustmentBp() + "|" + cms.adjustmentBp() + "|" + (100.0 * cms.adjustedRate())
+ "|" + drift + "|" + noQuanto + "|" + quanto + "|" + option.price() + "|" + option.delta()
+ "|" + option.vega());
}
}
Quanto and convexity adjustments arise when the payoff currency, discounting currency and underlying dynamics do not share the same natural measure.
The adjustment depends on volatility and correlation terms that modify the effective drift or forward. The page makes those inputs visible rather than hiding the result behind a single price.
Specify payoff and collateral currencies, identify the relevant correlations and volatility sources, validate sign conventions, and compare against a consistent cross-currency valuation framework.
*Keywords: convexity adjustment java, eurodollar futures convexity java, libor in arrears java, cms convexity adjustment java, quanto adjustment java, timing adjustment java*
Feature F8. A rate observed or quoted in one measure but paid in another needs a correction. This packages the five standard closed forms.
A quanto payoff fixes the conversion rate between an underlying measured in one currency and a settlement currency. Under the pricing measure appropriate to settlement, the drift of the foreign underlying contains a correction involving FX volatility, underlying volatility and their correlation.
The sign and size of the adjustment depend on conventions: which currency is domestic, which factor is quoted directly, and the correlation definition. Making those assumptions explicit is more useful than presenting a closed-form price without its measure-change inputs.
The closed-form example simplifies smile, stochastic rates and collateral effects. These are often material for real cross-currency products.