Skip to content
All library documents

Constraining Portfolio Turnover in Bond Allocation Optimization

Article Quant Q&A · Author: ash

Summary

The document discusses limiting turnover when optimizing a bond portfolio for option-adjusted spread (OAS) subject to duration and other constraints. Given current weights, the accepted approach expresses a turnover cap as a bound on the sum of absolute differences between proposed and existing weights. This turns turnover into an explicit constraint that can be handled by a nonlinear optimizer; the example describes using MATLAB’s constrained optimization tools.

A second contributor first reports difficulty getting a nonlinear solver to converge and describes a brute-force alternative: repeatedly solve linear programs under different duration bounds, then compare feasible portfolios by OAS, duration, and transaction costs. They later report implementing the absolute-weight-difference constraint and obtaining results consistent with a least-squares churn minimization. The post offers practical formulations rather than a general solver comparison. Its turnover convention matters: buy-plus-sell activity can be twice the sum of absolute weight changes, so the cap must match the portfolio’s definition of churn. The reported agreement is specific to the contributor’s setup and is not independent validation.

Key ideas

  • Turnover can be constrained by bounding the sum of absolute changes from current portfolio weights.
  • The absolute-value formulation makes the turnover limit nonlinear in a direct optimizer.
  • A grid of duration bounds with repeated linear programs can map feasible portfolios when nonlinear optimization is difficult.
  • Buy-plus-sell turnover may differ by a factor of two from the sum of absolute weight changes.

Tags

Full text
# Portfolio Turnover Constraint


# Portfolio Turnover Constraint












I have a few bonds and OAS and Duration for each. I had a Linear programming type of problem where I had to maximize OAS and keep duration <= constraint. There are few other constraints. I could easily model them using `linprog` in MATLAB.

Unfortunately the portfolio turnover is too high. I want to put a constraint on this turnover. Something like 10% of total portfolio. Since it is not a linear programming problem anymore I am a bit stuck. Any thoughts will be greatly helpful?

## Answer by Brian B (score 3, accepted)

https://quant.stackexchange.com/a/14932

At each rebalancing day, you were previously maximizing

$$ \vec{w}^* \vec{r} -\lambda \vec{w}^* \Sigma \vec{w} $$

Now, you need to combine this with a way of expressing your trading constraint mathematically. Let's say your previous weights were $\vec{p}$. Then your 10% constraint translates to specifying that

$$ 0.1 \geq \sum |w_i-p_i| $$

This can be handled by `fmincon`, or perhaps even by some of Matlab's simpler optimizers.

## Answer by ash (score -1)

https://quant.stackexchange.com/a/14941

Thanks all for the adivse. I tried `fmincon` . Unfortunately it was not converging to any solution and I was not getting an idea of which constraint is breaking it and which direction I should modify the constrain to reach a solution. So this is what I finally did.

- Continue using `linprog` for optimization.

- Calculate $w_b$ and $w_s$ and calculate the portfolio churn as $w_c = w_b+w_s$

- if $w_c > 0.10*w_{total}$

- Create a vector of rates duration such that $\delta_r \in [\frac{\delta_{rTot}}{10},\delta_{rTot}] $

- Create a vector of spread duration such that $\delta_s \in [\frac{\delta_{sTot}}{10},\delta_{sTot}] $

- For each $\delta(i)_r$ I draw spreads from $\delta(1)_s...\delta(10)_s$ and re-run `linprog` . I save each successful solutions $\delta(i)_s$,$\delta_r(j)$,OAS and $w_c$.

Hence in the end I have all the feasible solutions and corrosponding boundries of durations. Now I can suggest a few optimial portfolios with acceptable durations , OAS and transaction costs. (I have a function which models this for me based on Outstanding Amount , buy/sell Amounts etc) It is brute force but works for me. This wasy I not just know the infeasibles but also all posible feasibles under an investment strategy be it

- Increade OAS and keep spread and duration under a boundry

- Keep OAS same but reduce durations

- A combination of the two with low transaction cost

Just wanted to let other know in case it provide any help to anyone.

EDIT

I ended up coding up using fmincon . I modelled the obective to increase the OAS and non linear constrain bit as

```
function [c,ceq]=NonLiniearConstraints(~,x,w_i)
    churn = 0.10;
   res = sum(abs(x-w_i));
   c(1) = res - 2*churn; % Buy + Sell = Total churn 
   ceq = [];
end
```

I verified that it produces same results as that of `isqlin` which tries to minimize churn using least sqaures meathod. So I have marked Brian's answer as the correct one.

Shown in full with attribution under the source's licence. Licence: CC BY-SA 4.0 (Stack Exchange)

This summary was written by Stratmill's research agent from the original; it is not a copy of the source.