internal static string ToString(OptionSymbol s) { int year = (s.ExpirationDate.Year - 2010) % 10; string month = ToMonth(s.ExpirationDate.Month, s.OptionType); string day = ToDay(s.ExpirationDate.Day); string fractionsPart = ""; var fractions = s.StrikePrice - Math.Truncate(s.StrikePrice); if (fractions > 0m) { fractionsPart = fractions.ToString(CultureInfo.InvariantCulture); fractionsPart = fractionsPart.Substring(1, fractionsPart.Length - 1).Replace(".", ""); } string truncatedPart = ""; var truncated = Math.Truncate(s.StrikePrice); truncatedPart = truncated.ToString(CultureInfo.InvariantCulture); string strike = ""; if (truncatedPart.Length <= 3 && fractionsPart.Length <= 3) { strike = "C" + truncatedPart.PadLeft(3, '0') + fractionsPart.PadRight(3, '0'); } else if (truncatedPart.Length == 4 && fractionsPart.Length <= 2) { strike = "B" + truncatedPart + fractionsPart.PadRight(2, '0'); } else if (truncatedPart.Length == 5 && fractionsPart.Length <= 1) { strike = "A" + truncatedPart + fractionsPart.PadRight(1, '0'); } else if (truncatedPart.Length == 6) { strike = "0" + truncatedPart; } else if (truncatedPart.Length == 2 && fractionsPart.Length == 4) { strike = "D" + truncatedPart.PadLeft(2, '0') + fractionsPart; } else if (truncatedPart.Length == 1 && fractionsPart.Length == 5) { strike = "E" + truncatedPart.PadLeft(1, '0') + fractionsPart; } else { // invalid strike = truncatedPart + fractionsPart; } return(s.IsValid ? string.Format("{0}{1}{2}{3}{4}", s.Series, year, month, day, strike) : ""); }
public static string ToString(OptionSymbol s) { return(s.IsValid ? string.Format("{0,-6}{1:yyMMdd}{2}{3:00000.}{4:000.}", s.Series, s.ExpirationDate, s.OptionType == OptionType.Call ? "C" : "P", Math.Truncate(s.StrikePrice), (s.StrikePrice % 1) * 1000) : ""); }