Self-financing hedge


[PortSens,PortValue,PortHolds] = hedgeslf(Sensitivities,Price,CurrentHolds,FixedInd,ConSet)



Number of instruments (NINST) by number of sensitivities (NSENS) matrix of dollar sensitivities of each instrument. Each row represents a different instrument. Each column represents a different sensitivity.


NINST-by-1 vector of instrument unit prices.


NINST-by-1 vector of contracts allocated in each instrument.


(Optional) Empty or number of fixed instruments (NFIXED-by-1) vector of indices of instruments to hold fixed. The default is FixedInd = 1; the holdings in the first instrument are held fixed. If NFIXED instruments will not be changed, enter all their locations in the portfolio in a vector. If no instruments are to be held fixed, enter FixedInd = [].


(Optional) Number of constraints (NCONS)-by-NINST matrix of additional conditions on the portfolio reallocations. An eligible NINST-by-1 vector of contract holdings, PortHolds, satisfies all the inequalities for A*PortHolds <= b, where A = ConSet(:,1:end-1) and b = ConSet(:,end).


[PortSens,PortValue,PortHolds] = hedgeslf(Sensitivities,Price,CurrentHolds,FixedInd,ConSet) allocates a self-financing hedge among a collection of instruments. hedgeslf finds the reallocation in a portfolio of financial instruments that hedges the portfolio against market moves and that is closest to being self-financing (maintaining constant portfolio value). By default the first instrument entered is hedged with the other instruments.

PortSens is a 1-by-NSENS vector of portfolio dollar sensitivities. When a perfect hedge exists, PortSens is zeros. Otherwise, the best possible hedge is chosen.

PortValue is the total portfolio value (scalar). When a perfectly self-financing hedge exists, PortValue is equal to dot(Price, CurrentWts) of the initial portfolio.

PortHolds is an NINST-by-1 vector of contracts allocated to each instrument. This is the reallocated portfolio.


  • The constraints PortHolds(FixedInd) = CurrentHolds(FixedInd) are appended to any constraints passed in ConSet. Pass FixedInd = [] to specify all constraints through ConSet.

  • The default constraints generated by portcons are inappropriate, since they require the sum of all holdings to be positive and equal to one.

  • hedgeself first tries to find the allocations of the portfolio that make it closest to being self-financing, while reducing the sensitivities to 0. If no solution is found, it finds the allocations that minimize the sensitivities. If the resulting portfolio is self-financing, PortValue is equal to the value of the original portfolio.


Example 1. Perfect sensitivity cannot be reached.

Sens = [0.44  0.32; 1.0 0.0];
Price = [1.2; 1.0];
W0 = [1; 1];
[PortSens, PortValue, PortHolds]= hedgeslf(Sens, Price, W0)
PortSens =


PortValue =


PortHolds =


Example 2. Constraints are in conflict.

Sens = [0.44  0.32; 1.0 0.0];
Price = [1.2; 1.0];
W0 = [1; 1];
ConSet = pcalims([2 2])

% O.K. if nothing fixed.

[PortSens, PortValue, PortHolds]= hedgeslf(Sens, Price, W0,... 
[], ConSet)
PortSens =


PortValue =


PortHolds =

% W0(1) is not greater than 2.

[PortSens, PortValue, PortHolds] = hedgeslf(Sens, Price, W0,... 
1, ConSet)
??? Error using ==> hedgeslf
Overly restrictive allocation constraints implied by ConSet and 
by fixing the weight of instruments(s): 1

Example 3. Constraints are impossible to meet.

Sens = [0.44  0.32; 1.0 0.0];
Price = [1.2; 1.0];
W0 = [1; 1];
ConSet = pcalims([2 2],[1 1]);

[PortSens, PortValue, PortHolds] = hedgeslf(Sens, Price, W0,... 
??? Error using ==> hedgeslf
Overly restrictive allocation constraints specified in ConSet

Introduced before R2006a