For keeping track of P/L on thinly traded options ....

Discussion in 'Options' started by dcwriter2, Nov 15, 2019.

  1. TheBigShort

    TheBigShort


    Once importing chain from IB here is what I do.
    Calculate Mid price for each strike
    use the splines package to fit the polynomial of 3rd degree using the bs() function.

    I don't adjust any weights. I realized after your post the loess() function has a weight parameter. I'll have to look more into this.

    Heres an example with HQY Jan data.
    fairValue = lm(IvolMid ~ bs(Strikes), data = hqy)
    Screen Shot 2019-12-06 at 3.19.59 AM.png

    *bs() is from require(splines)
     
    #11     Dec 6, 2019
    Matt_ORATS likes this.
  2. bln

    bln

    Use the realtime modeled price from the Binomial pricing model. That is the real price. Bid, Ask and the Midpoint is not to be trusted.
     
    #12     Dec 6, 2019
    dcwriter2 likes this.
  3. Wheezooo

    Wheezooo

    That looks all pretty and stuff, but attempting to model those wings with such a short term to expry is making a huge giant mess of the most relevant strikes. Obviously something is wrong with that 50-55 which a quote can tighten up, and everything looks wrong in the atm'ish strikes (again too much curvature being created by modeling those 50p's down - just take them out.)

    Regardless of that, excellent example.
     
    #13     Dec 6, 2019
    newwurldmn likes this.
  4. I have not examined this that closely, however you may consider a very simple "tweak" to your current algo to improve slightly... search for an appropriate lower threshold of say for example (50 cents) for the minimum BID to be included in your strikes to be evaluated. (Note: CBOE discards zero BID strikes in their VIX derivations -- a similar reason here, except also trying to reduce noise in our data) A 2nd level "cleaning" would be to discard those with error distance from your fitted poly, then re-apply the poly fitting to the remainder until your maximum error is within your tolerance. (I use a similar algo for extracting other information from chains)
     
    Last edited: Dec 6, 2019
    #14     Dec 6, 2019
  5. At a glance, the fit in your plot looks pretty good. Upon closer inspection, there are many problems with the way you are going about this.


    First of all, you need to get this part right. Do you actually calc mid-price and then mid-vol from that? or do you calc bid and ask vol and then calc mid-vol? At any rate, your mid-vols are off. They show multiple butterfly arbs at mid (zero-cost or debit flys). The vol curve in strikes should be convex, meaning the vols between any two strikes should be below a straight line drawn between those two strikes. Draw a line between the mids of the 70 and 80 strikes. The 75-strike mid should fall below that line. It doesn't, it is right on the line, meaning there is a zero-cost 70-75-80 fly at mid (free lottery ticket).

    You need to adjust the mids so that you pass an arb-free curve to your smoother. I don't have any R code for this as I do my surface fitting in gawk (C), but I recall a good quant.stackexchange post on this by Alex C with R code. I will see if I can look it up and post it here.

    Also your two endpoint vols look biased (down on left, up on right) which is pretty common when dealing very low priced options and bid-ask granulatiry. An ad-hoc adjustment of these two mids is appropriate. This is expecially important in a spline fit because your curve is, by default, anchored at these two points. That means your curve will pass right through those points even when it shouldn't.

    I wouldn't use a spline fit here, because:
    1) too much fitting power -- default degree is three (cubic spline) and default interior knots = degree = 3 -- way too much potential curviness for this task
    2) anchored at the endpoints by default (see above)
    3) more subtly, it assumes your rows are equidistant. I.e. the x-axis on the ftt is an integer line, This is a bad assumption for fitting vols that, for various good theoretical reasons, should be approximately quadratic in log-moneyness.
    4) points where the curve's first derivative is high in absolute value will have too great an influence. This is because, in the presence of steep slope, the residual can be large even when the point lies quite close to the curve. These high slope points should be underweighted in your fit.

    I would try, instead of a spline, a weighted fit of a 2nd degree polynomial (parabolic fit) in log-moneyness using simple linear algegra (%*% and solve or ginv).
     
    #15     Dec 6, 2019
    taowave, .sigma and timbo like this.
  6. .sigma

    .sigma

    Do the spreads get wider when vol expands?

    How does your regression model enable a fair value figure? And how do you know this number is fair? Just curious man, this stuff is a tad over my head but your posts always epiphanize my cortex. Cheers!
     
    #16     Dec 7, 2019
  7. .sigma

    .sigma

    Slow down Kev, I'm trying to keep up lol
     
    #17     Dec 7, 2019
  8. Matt_ORATS

    Matt_ORATS Sponsor

    Nice post TheBigShort and I agree with Kevin Schmit's concerns.

    At ORATS, we use a modified Bezier curve (MBC) to start the process. We are careful to constrain the IV levels at the extreme wings. This method produces skews that are useful for risk. However, these skews are not great for trading. For trading vols we use a method that allows local movement off the MBC. We also make separate call and put skews. The MBC is drawn using both calls and puts.

    For the HQY example by TheBigShort, here are our New SMV vols column AH and theoretical values columns M and P:
    [​IMG]

    I would be careful using the extreme wings as there is not much information in those prices. For example the 45 put is offered at $0.20 and the 35 at $0.25. Obviously, the 45 is more valuable and using the mid point IV for these strikes is misleading.

    Here's a graph with Strikes on the X-Axis.

    [​IMG]

    I prefer to present the skews in terms of delta.

    [​IMG]
     
    #18     Dec 9, 2019
    taowave likes this.