8

Bernd Scherer has done exactly this test in his text "Portfolio Construction and Risk Budgeting 4th Edition". There is an SSRN paper by Scherer called "Resampled Efficiency and Portfolio Choice (2004)" you can take a look at as well. I would suggest you skip re-sampling (especially if you have a long-only portfolio) and take a look at Meucci's Robot ...


6

There is no way to calculate returns here. Let me stop you right there. You didn't open a brokerage account with zero dollars. The money you put-up for margin is your starting position. After a year of trading, you have a stopping position represented by a different amount of money in your account. The change from your starting position to your stopping is ...


6

The problem is that you are not pricing the same thing, and for two reasons: The vanilla instruments you are pricing should start on spot date and have a maturity with that start as reference The frequency of the fixed leg on the OIS swap should be annual. If you change you code to: print('TENOR \t PV \t fairrate% \t fairrate% + fairspread%') calendar = ql....


5

You're not the first to trip on this, and unfortunately the fact that the provided example is from a different era doesn't help. Quite simply, you're not writing rates correctly. The 5-years swap rate, 0.3523%, must be written in decimal form as 0.003523. The same goes for the deposit rates. As your code is now, you're writing that the 4-years rate is 23....


5

While @Baruch Youssin answers correctly in the general sense, the first part of his answer isn't what happened in the example code. While QLNet is a port of QuantLib, it's not a direct port. Your quoted example doesn't show up in QLNet. The example in QuantLib was written in a very complicated way, in fact it's a simple example. discountingTermStructure is ...


5

There is a great deal of misinformation and out-of-date information on this site. Many of the references in this discussion and elsewhere have serious research flaws. The Michaud efficient frontier was invented and patented by Robert Michaud and Richard Michaud, U.S. patent # 6,003,018. The alternatives discussed here are not patented nor in many cases ...


5

Yes, it's possible to reduce the number of objects you'll create; whether this will speed up your calculations depend on how much time is taken by their creation and how much is taken by the actual bootstrapping. In any case: When you create your rate helpers, make sure you're passing quote objects and not simple numbers; that is, something like q1 = ...


5

To retrieve the original curve, you need to use the same key tenors of the original curve and with the same interpolation. For instance, when you create the original curve as: crv = ql.PiecewiseLinearZero(2, ql.TARGET(), deposits + futures + swaps, ql.Actual365Fixed()) the curve linearly interpolates zero rates between nodes given by the maturities of the ...


5

You do not need zero rates to estimate a parametric model of the yield curve, such as Nelson-Siegel. Suppose for instance that you have a cross-section of bond prices. Then: For given parameters for your yield-curve model, compute yield curve; with this yield curve, calculate theoretical bond prices; compute discrepancy between theoretical bond prices and ...


5

I see several problems that might explain those differences: The frequency of the fixed leg on a EONIA swap is Annual and not semi The deposit facility rate is not part of the EONIA curve. Use the Eonia rate. You are calculating rates with simple compounding and not annual compounding Here is an alternative implementation: tenors = [ '1D', '1W', '2W', '...


4

No, you can't. You can never deduce the 3M/6M basis spread from 3 month instruments alone. If you consider the OIS curve riskless, you can interpret the 3 month curve as riskless rate + additional cost for things like credit risk, liquidity and so on. The 6 month rate contains even more of these credit risk and liquidity cost. How much exactly though is ...


4

15 years does correspond to t=15.236 according to the day counter you told the curve to use. First, you can't get exactly 15 anyway. Your calculation date is September 1st, 2016; according to the usual conventions, the swap whose rate you're quoting starts spot, that is, two business days after the calculation date. Given the weekend (your calculation date ...


4

Simulation for timeseries data is not a trivial matter and there are a number of methods to ensure you retain some of the relevant properties (mostly called dependent bootstrap methods): Block bootstrap - contiguous blocks of data chosen so that they are large enough to retain significant autocorrelations. Stationary bootstrap - randomised block size ...


4

At this point liquidity in SOFR is provided by a set of futures contracts in the very short end of the curve , and then through Libor -SOFR basis swaps which are reasonably liquid up to around 5years, although quotations exist up to 30yrs. You can build a curve using these basis swaps. Currently , the SOFR curve differs from the Fed Funds curve by only a ...


4

A multi-curve meants that you observe the discounting instruments (such as fed funds) and projection (libor, swap curve) and solve for all of them simultaneously; as opposed to bootstrapping separately a projection curve and a discounting curve. A simple paper with examples is Numerix Model Calibration: The Multiple Curve Approach. A more detailed intro is ...


4

It's done in 2 steps: 1) First you bootstrap OIS curve independently from Libor curve, get OIS discount factors 2) Then use these to bootstrap Libor curve (using OIS discount factors instead of Libor ones,Libor used for projections only)


3

The FuturesRateHelper class knows that futures are quoted as 100-rate, so there's no need to convert the prices. You can just create them as futures_helpers.append(ql.FuturesRateHelper( ql.QuoteHandle(ql.SimpleQuote(future_rates[i])), imm,ql.Euribor3M(),ql.QuoteHandle(convexity_quote[i]))) I admit that the name of the class can lead one astray by ...


3

Unfortunately, financial markets are not like physical measures, where you know the "true" value of a physical variable but you just access to it thanks to noised sensors. We do not know the "true" volatility, just because there is not such one value... In statistics you have two kinds of modelling procedures: the ones dedicated to estimate the unknown ...


3

It is true that intraday/market-making strategies don't have a reasonable "return" metric. For this reason you can't characterize them with the Sharpe Ratio, which depends on a capital basis and how that basis is leveraged (not to mention the risk-free rate on the capital basis). What you're asking is how to characterize the performance of a daily stream ...


3

A curve is used to do calculations (e.g. discounting of cash flows) as of a given trade date. Bootstrapping a single curve for two different trade dates does not make sense. With the first set of data you should bootstrap an OIS curve for the 2017-02-09 trade date, with the second set of data you should bootstrap an OIS curve for the 2017-02-10 trade date.


3

Modern curve building methodologies, certainly implemented in top tier fixed income trading houses, use a simultaneous non-linear solver to construct all curves at once. Essentially the procedure is: a) define a set of instruments whose prices are known and will be calibrated (arbitrarily different in different currencies but of sufficient coverage to ...


2

I do not yet know QuantLib but one question is general and easy to answer: My first question is why do they use different yield curve? These two curves differ by risk levels inherent in them - the credit spreads over the risk-free yield curve (e.g., the OIS curve). The discounting curve, discountingTermStructure, embeds the risk that this particular ...


2

Bootstrap is a very interesting method to obtain the variance of any estimator. This means you can rely on it to obtain de variance of your Sharpe ratio (SR), but what you try to do is to deduce something (the probability to be positive) from the distribution of it. From a methodological viewpoint, if you boostrap your SR a "standard" way (i.e. ...


2

Answering my own question: All the indicated numbers as obtained from ICAP need to be divided by 100, as they are percentages The OptionletStripper1 takes an IborIndex, which should have a tenor equal to 1Y. I had set it to 6M, and that seemed to cause problems Ouch!


2

Let $\delta$ be 3 month and consider points of interest $\{T_i\}_i$ evenly spaced with $T_{i+1} -T_i = 3 month$. The Forward Rate $F_m^n(t)$ from period m to n at time $t$ is defined by $$(1 + \delta (n-m) F_m^n(t)) = \frac{B(t,T_m)}{B(t,T_n)},$$ where $B(t,T_i)$ is the time $t$ value of a zero coupon bond that matures in $T_i$. A swap rate $S_m^n(t)$ a ...


2

In interest rate land you can look at the yield curve in 3 ways: par space (a chart of the par swap rates of different maturities) , zero space (the zero coupon swap rates) and forward space (usually the 3 month forward rates for various maturities). These are equivalent ways to display the prevailing market rates. Perhaps that is what is being referred to


2

The section that refers to USD-LIBOR-BBA 3M looks correct. This shows that CME IRS are marginally higher than LCH IRS. This means that when you bootstrap the curve, the corresponding forward rates will be higher also. The sections USD-LIBOR-BBA 1M and USD-LIBOR-BBA 6M appear to show the level of 3M-1M and 6M-1M basis swaps respectively. These may help ...


2

There are no traded instruments that would allow a 1w libor curve to be bootstrapped. If you need to calculate a forward rate for 1week libor in the current environment, I would suggest that it can be bounded as follows : overnight fed funds < 1 week libor < 1 month libor. The forward rates on the bounds can be calculated from bootstrapped curves.


2

From a pure mathematical perspective, this is possible. For example, consider dates $t_0 \le t_1 < t_2 < t_3$. Given \begin{align*} L(t_0, t_1, t_2) = \frac{1}{\Delta t_2}\left(\frac{P(t_0, t_1)}{P(t_0, t_2)}-1 \right), \end{align*} and \begin{align*} L(t_0, t_2, t_3) = \frac{1}{\Delta t_3}\left(\frac{P(t_0, t_2)}{P(t_0, t_3)}-1 \right), \end{align*} ...


2

USD FRA: $\text{payoff} = N \frac{\delta (R - K) }{ 1 + \delta R}$ paid on the FRA start date, where $N$=notional, $\delta$= year fraction, $K$= fixed rate, $R$= floating rate; AUD FRA: $\text{payoff} = N (\frac{1}{1 + \delta K} - \frac{1}{1 + \delta R} )$ paid on the FRA start date. Now $$ N \left(\frac{1}{1 + \delta K} - \frac{1}{1 + \delta R} \...


Only top voted, non community-wiki answers of a minimum length are eligible