Thanks for the example. The config files indicate that you are calibrating to create a single curve of zero-rates that is used for three purposes - discounting, EURIBOR 3M and EURIBOR 6M.
Firstly, the calibrations csv file has been enhanced to allow either relative futures or absolute futures. As such, there is no need to use the 7D+3 notation now. The following 6 lines can replace those in your file:
EUR-STD,Mar17,OG-Future,Mar17,SettlementPrice,IFU,EUR-EURIBOR-3M-Quarterly-IMM,Mar17,
EUR-STD,Jun17,OG-Future,Jun17,SettlementPrice,IFU,EUR-EURIBOR-3M-Quarterly-IMM,Jun17,
EUR-STD,Sep17,OG-Future,Sep17,SettlementPrice,IFU,EUR-EURIBOR-3M-Quarterly-IMM,Sep17,
EUR-STD,Dec17,OG-Future,Dec17,SettlementPrice,IFU,EUR-EURIBOR-3M-Quarterly-IMM,Dec17,
EUR-STD,Mar18,OG-Future,Mar18,SettlementPrice,IFU,EUR-EURIBOR-3M-Quarterly-IMM,Mar18,
EUR-STD,Jun18,OG-Future,Jun18,SettlementPrice,IFU,EUR-EURIBOR-3M-Quarterly-IMM,Jun18,
(These will make no difference to pricing, but are a little clearer)
I have run the CalibrationCheckExample
with your data and observed your results (I think). The y-values of the calibrated curve from ON to 8M match closely to the numbers you added, but for the futures and swaps the gap is bigger. The question is why the results differ.
What we can say is that the Strata results are self-consistent. The CalibrationCheckExample
does two things - first it calibrates the curve, then it checks that when the trades are priced using the curve the resulting PV is zero. The PV is zero to around 1e-15 in general.
Since the results differ based on asset class, it is possible that the pricing methodology is different between the benchmark system and Strata. Strata will use a simple discounting method for the futures and swaps (no convexity adjustment). Does the benchmark?
Another possibility is how the two systems decide on the date associated with the node. Strata uses the “end date” of the trade by default, which for a future is the implied maturity date and for the swap is the last date of the last period.
However, our quant Marc thinks that the difference may be due to how the period on the forward curve is determined for futures. Strata uses the implied period related to the index, which is 3 months in this case. Thus, Strata calculates that the Mar17 future has a fixing on the 2017-03-13, a start date of 2017-03-15 and an end date of 2017-06-15. We are aware that some systems use an end date of the 3rd Wednesday ie. 2017-06-21. Clearly, if your benchmark system does this, your results will be different. Can you determine if this is the case?