private void FillPanelChain(OptionChain dateChain) { panelChain.Controls.Clear(); if (dateChain.Options.Count > 0) { for (int i = 0; i < _strikes.Length; i++) { OptionChainDataPoint call = dateChain.FindOption(Options.OptionType.Call, _experation, _strikes[i]); OptionChainDataPoint put = dateChain.FindOption(Options.OptionType.Put, _experation, _strikes[i]); OptionChainStrikeLine line = new OptionChainStrikeLine(call, put); line.Location = new Point(0, 32 * i); line.CallClicked += new MouseEventHandler(FireCallClickEvent); line.PutClicked += new MouseEventHandler(FirePutClickEvent); line.CallDoubleClicked += new MouseEventHandler(FireCallDoubleClickEvent); line.PutDoubleClicked += new MouseEventHandler(FirePutDoubleClickEvent); line.CallEntered += new EventHandler(FireCallEnteredEvent); line.PutEntered += new EventHandler(FirePutEnteredEvent); line.CallMouseUp += new MouseEventHandler(FireCallMouseUpEvent); line.PutMouseUp += new MouseEventHandler(FirePutMouseUpEvent); line.CallMouseMove += new MouseEventHandler(FireCallMouseMoveEvent); line.PutMouseMove += new MouseEventHandler(FirePutMouseMoveEvent); panelChain.Controls.Add(line); } } }
private void FillLabels(OptionChainDataPoint option, int amount) { _isFilling = true; if (option != null) { numericUpDownQuantity.Visible = true; numericUpDownQuantity.Value = amount; labelDate.Text = option.Experation.ToString("MMM dd"); labelDaysOut.Text = (option.Experation - option.DataDate).TotalDays.ToString(); labelStrike.Text = option.Strike.ToString(); labelType.Text = option.Type.ToString().Substring(0, 1); if (amount < 0) { labelOrderType.Text = "STO"; labelOrderType.ForeColor = Color.Red; } else { labelOrderType.Text = "BTO"; labelOrderType.ForeColor = Color.Green; } } else { numericUpDownQuantity.Visible = false; labelDate.Text = ""; labelDaysOut.Text = ""; labelStrike.Text = ""; labelType.Text = ""; labelOrderType.Text = ""; } _isFilling = false; }
public OptionChainStrikeLine(OptionChainDataPoint dataPointCall, OptionChainDataPoint dataPointPut) { InitializeComponent(); labelStrike.Text = dataPointCall.Strike.ToString(); labelVolumeCall.Text = dataPointCall.Volume.ToString(); labelAskCall.Text = dataPointCall.Ask.ToString(); labelBidCall.Text = dataPointCall.Bid.ToString(); labelOpenInterestCall.Text = dataPointCall.OpenInterest.ToString(); labelVolumePut.Text = dataPointPut.Volume.ToString(); labelAskPut.Text = dataPointPut.Ask.ToString(); labelBidPut.Text = dataPointPut.Bid.ToString(); labelOpenInterestPut.Text = dataPointPut.OpenInterest.ToString(); Strike = dataPointCall.Strike; Experation = dataPointCall.Experation; }
public static Option GetOption(Stock stock, OptionType optionType, PositionType posType, double strike, DateTime experation, DateTime date) { OptionChain chain = OptionDataBase.Get(stock, date); if (chain != null) { OptionChainDataPoint option = chain.FindOption(optionType, experation, strike); return(new Option(stock, option.Type, posType, option.Strike, option.Experation)); } else { int daysUntilThursday = 4 - (int)experation.DayOfWeek; experation = experation.AddDays(daysUntilThursday); strike = Math.Round(strike, 0); double amountFromTwoFifty = (strike % 2.5) <= (2.5 - strike % 2.5) ? -(strike % 2.5) : (2.5 - strike % 2.5); strike += amountFromTwoFifty; return(new Option(stock, optionType, posType, strike, experation)); } }
public async Task <double> Price(DateTime date) { double price = 0; OptionChain chain = OptionDataBase.Get(_stock, date); if (chain != null) { OptionChainDataPoint option = chain.FindOption(_optionType, _expDate, _strike); price = (option.Bid + option.Ask) * 0.5; } else { TimeSpan updateSpan = DateTime.UtcNow - date; StockData data = await StockDataBase.Get(_stock, Api.Interval.Daily, updateSpan); int index = data.FindDateIndex(date); int expiration = DaysUntilExpiration(date); price = Indicators.Options.AproxPrice(data, index, _optionType, _strike, expiration); } return(price); }
public OptionChain Load() { if (File.Exists(FilePath)) { string[] fileLines = File.ReadAllLines(FilePath); if (fileLines.Length > 0) { string[] values = fileLines[0].Split(','); Stock stock = new Stock(values[0]); DateTime dataDate = DateTime.Parse(values[5]); OptionChain result = new OptionChain(stock, dataDate); for (int i = 0; i < fileLines.Length; i++) { values = fileLines[i].Split(','); OptionChainDataPoint dataPoint = new OptionChainDataPoint() { Stock = stock, StockPrice = Convert.ToDouble(values[1]), Code = values[2], Type = Option.ParseType(values[3]), Experation = DateTime.Parse(values[4]), DataDate = dataDate, Strike = Convert.ToDouble(values[6]), Last = Convert.ToDouble(values[7]), Bid = Convert.ToDouble(values[8]), Ask = Convert.ToDouble(values[9]), Volume = Convert.ToDouble(values[10]), OpenInterest = Convert.ToDouble(values[11]) }; result.Options.Add(dataPoint); } return(result); } } return(null); }
public void Fill(OptionTrade trade, DateTime dataDate) { Clear(); if (trade.Spread.Options[0] != null) { if (trade.Spread.Options[0].Strike > 0) { OptionChain chain = OptionDataBase.Get(trade.Spread.Stock, dataDate); OptionChainDataPoint option1 = chain.FindOption(trade.Spread.Options[0].OptionType, trade.Spread.Options[0].ExpirationDate, trade.Spread.Options[0].Strike); if (trade.Spread.Options[0].PositionType == PositionType.Long) { orderLineUI1.Fill(option1, trade.Amount); } else if (trade.Spread.Options[0].PositionType == PositionType.Short) { orderLineUI1.Fill(option1, trade.Amount * -1); } } } if (trade.Spread.Options[1] != null) { if (trade.Spread.Options[1].Strike > 0) { OptionChain chain = OptionDataBase.Get(trade.Spread.Stock, dataDate); OptionChainDataPoint option1 = chain.FindOption(trade.Spread.Options[1].OptionType, trade.Spread.Options[1].ExpirationDate, trade.Spread.Options[1].Strike); if (trade.Spread.Options[1].PositionType == PositionType.Long) { orderLineUI2.Fill(option1, trade.Amount); } else if (trade.Spread.Options[1].PositionType == PositionType.Short) { orderLineUI2.Fill(option1, trade.Amount * -1); } } } }
public void Fill(OptionChainDataPoint option, int amount) { FillLabels(option, amount); }