示例#1
0
 public void Update(DateTime expiryDate, double strike, OptionType type, VolQuote volQuote)
 {
     VolExpiry existingExpiry = null;
     if (this.VolExpiries.TryGetValue(expiryDate, out existingExpiry))
     {
         existingExpiry.Update(strike, type, volQuote);
     }
     else
     {
         VolExpiry volExpiry = new VolExpiry(expiryDate);
         volExpiry.Update(strike, type, volQuote);
         this.VolExpiries[expiryDate] = volExpiry;
     }
 }
示例#2
0
        private void BuildChart(DateTime expiry)
        {
            VolExpiry volExpiry = null;

            double strikeMin = 9999.00;
            double strikeMax = 0.00;
            double volMin    = 9999.00;
            double volMax    = 0.00;

            if (this.VolSurface.VolExpiries.TryGetValue(expiry, out volExpiry))
            {
                foreach (VolStrike volStrike in volExpiry.VolStrikes.Values)
                {
                    if (volStrike.VolCallQuote != null)
                    {
                        VolQuote volCallQuote = volStrike.VolCallQuote;

                        if (this.IsValid(volCallQuote.BidImpliedVolatility))
                        {
                            double strike = volStrike.Strike;
                            strikeMin = Math.Min(strikeMin, strike);
                            strikeMax = Math.Max(strikeMax, strike);

                            double vol = volCallQuote.BidImpliedVolatility * 100;
                            volMin = Math.Min(volMin, vol);
                            volMax = Math.Max(volMax, vol);
                            chart1.Series["call_bid"].Points.AddXY(strike, vol);
                        }

                        if (this.IsValid(volCallQuote.AskImpliedVolatility))
                        {
                            double strike = volStrike.Strike;
                            strikeMin = Math.Min(strikeMin, strike);
                            strikeMax = Math.Max(strikeMax, strike);

                            double vol = volCallQuote.AskImpliedVolatility * 100;
                            volMin = Math.Min(volMin, vol);
                            volMax = Math.Max(volMax, vol);
                            chart1.Series["call_ask"].Points.AddXY(strike, vol);
                        }
                    }

                    if (volStrike.VolPutQuote != null)
                    {
                        VolQuote volPutQuote = volStrike.VolPutQuote;

                        if (this.IsValid(volPutQuote.BidImpliedVolatility))
                        {
                            double strike = volStrike.Strike;
                            strikeMin = Math.Min(strikeMin, strike);
                            strikeMax = Math.Max(strikeMax, strike);

                            double vol = volPutQuote.BidImpliedVolatility * 100;
                            volMin = Math.Min(volMin, vol);
                            volMax = Math.Max(volMax, vol);
                            chart1.Series["put_bid"].Points.AddXY(strike, vol);
                        }

                        if (this.IsValid(volPutQuote.AskImpliedVolatility))
                        {
                            double strike = volStrike.Strike;
                            strikeMin = Math.Min(strikeMin, strike);
                            strikeMax = Math.Max(strikeMax, strike);

                            double vol = volPutQuote.AskImpliedVolatility * 100;
                            volMin = Math.Min(volMin, vol);
                            volMax = Math.Max(volMax, vol);
                            chart1.Series["put_ask"].Points.AddXY(strike, vol);
                        }
                    }
                }
            }

            chart1.ChartAreas[0].AxisX.Minimum  = Math.Floor(strikeMin);
            chart1.ChartAreas[0].AxisX.Maximum  = Math.Ceiling(strikeMax);
            chart1.ChartAreas[0].AxisX.Interval = 1;

            chart1.ChartAreas[0].AxisY.Minimum  = Math.Floor(volMin);
            chart1.ChartAreas[0].AxisY.Maximum  = Math.Ceiling(volMax);
            chart1.ChartAreas[0].AxisY.Interval = 5;
        }