September 23rd, 2006, 3:12 pm
Hi,I have been working on putting together fx vol surfaces with the data that I have and have a problem which seems like a bit of a 'loop' but that it think can be solved. I will try to define it carefully below, first by explaining what I am currently doing and then by explaining where I need to get to.Currently doingI have the following data:1) Spot price2) Forward prices (for a range of tenors)3) ATM implied vol4) 25 delta and 10 delta butterfly vol (given as the spread above /below spot)5) 25 delta and 10 delta risk reversal vol (given as the spread above /below spot)We can use this data to construct a surface of implied vols for a rangeof different deltas.To get a vol for a given delta:Put = ATM + BFLY - .5 * RRCall = ATM + BFLY + .5 * RRThen, to get the implied vol for a delta that is not ATM and that we don't have the risk reversal or butterfly for (one that is not 10 or 25 delta), we interpolate. In reality a cubic spleen would be best but to keep it simple lets do it linear here:For example, if:10 delta Butterfly = 1% (over ATM)25 delta Butterfly = 2% (over ATM)10 delta risk reversal = 0.5% (over ATM)25 delta risk reversal = 1.25% (over ATM)1 week forward price = 1.8500ATM vol = 12%and we wish to calculate the 25 delta call vol then this would be:12%+2%+0.5*1.25% = 14.63%If we then wish to price the 17.5 delta call (so that we can keep it simple and use equal weightings of 50% for the interpolation); this would be:12%+((0.5*2%)+(0.5*1%))+0.5*((0.5*1.25%)+(0.5*0.5%))=13.94%(where all the 0.5s except the last one that you see in the formula arethe 50% weightings).To get vols above 25d but below 50d we can calculate the implied vol for 25d andinterpolate between there and ATM (50d). If it is below 10d I suppose we just use the 10d vol.If the option does not have a delta from 10d to 50d we can use put call parity to get the vol of any option from 51d to 100d from the 0d to 50d curve as it is a 'mirror'. For example 60d call vol = 40d put vol, 30d call vol = 70d put vol, 25d put vol = 75d call vol etc...So far I have just described what I am doing to get a vol for any delta from the limited data that I have, it seems right intuitively but as I have not got a reference I am not certain that it is the correct way to do it (comments appreciated!). Next comes the problem...The problemI need to be able to calculate an implied vol for any strike price without knowing the delta. For example, if we want the implied vol for the 1.8945 call (which is not ATM) how do I know the delta for 1.8945 in order to calculate the implied vol? The formula used for calculating delta N(d1) has implied vol as one of it's inputs so the problem appears to be circular. If we knew the delta but not the strike we could map from delta to strike price using the following formula.strike = fwd*Exp(v*t0.5*(x*normalinverse(delta*exp(t*b)+0.5*v*t0.5))Where x= -1 for call and 1 for put, fwd is the forward price, t is time to expiry and v is implied vol and delta is the delta for which we are seeking the strike price. To get from strike to delta using this method we would need to calculate all strikes from all deltas in real time. Doing this on one computer for a load of call and put surfaces for 20 different fx crosses is a nightmare and is VERY computationally expensive as the whole surface needs to be re-done every time any of the inputs changes which is usually about once a second. What I need to do then is find the delta while only knowing the strike price rather than, as is the case above, knowing the delta and then figuring out the strike by matching every delta to a strike using the above formula. If there is a way to get the implied vol while knowing the strike but not the delta then the computational requirements will fall dramatically in a context in which options are priced by a system user in terms of strike.So, my question is: How do I get from strike to delta (which leads me to implied vol as I have already constructed a surface in terms of delta rather than strike) with the information that I have?Any thoughts?Thanks,N