protected void PopulateGrid(IBMessage message) { HistoricalDataMessage bar = (HistoricalDataMessage)message; RealTimeBarMessage rtBar = (RealTimeBarMessage)message; DateTime start = new DateTime(1970, 1, 1, 0, 0, 0); DateTime dt = start.AddMilliseconds(rtBar.Timestamp * 1000).ToLocalTime(); String strDT = String.Format("{0:yyyyMMdd HH:mm:ss}", dt); gridView.Rows.Add(1); //gridView[0, gridView.Rows.Count - 1].Value = bar.Date; gridView[0, gridView.Rows.Count - 1].Value = strDT; gridView[1, gridView.Rows.Count - 1].Value = bar.Close; gridView[2, gridView.Rows.Count - 1].Value = bar.Open; gridView[3, gridView.Rows.Count - 1].Value = bar.High; gridView[4, gridView.Rows.Count - 1].Value = bar.Low; gridView[5, gridView.Rows.Count - 1].Value = rtBar.LongVolume; /* * gridView[0, gridView.Rows.Count - 1].Value = bar.Date; * gridView[1, gridView.Rows.Count - 1].Value = bar.Open; * gridView[2, gridView.Rows.Count - 1].Value = bar.High; * gridView[3, gridView.Rows.Count - 1].Value = bar.Low; * gridView[4, gridView.Rows.Count - 1].Value = bar.Close; * gridView[5, gridView.Rows.Count - 1].Value = bar.Volume; * gridView[6, gridView.Rows.Count - 1].Value = bar.Wap; * */ }
protected void PopulateGrid(HistoricalDataMessage bar) { gridView.Rows.Add(1); gridView[0, gridView.Rows.Count - 1].Value = bar.Date; gridView[1, gridView.Rows.Count - 1].Value = bar.Open; gridView[2, gridView.Rows.Count - 1].Value = bar.High; gridView[3, gridView.Rows.Count - 1].Value = bar.Low; gridView[4, gridView.Rows.Count - 1].Value = bar.Close; gridView[5, gridView.Rows.Count - 1].Value = bar.Volume; gridView[6, gridView.Rows.Count - 1].Value = bar.Wap; }
public Boolean updateTimeBarSeries(IBMessage message) { Boolean isAdded = false; if ((!isDataMerged && getNeedMergeFlag()) || !getNeedMergeFlag()) { return(isAdded); } Series <DateTime, MarketDataElement> TimeBarSeries = appMDManager.getTimeBarSeries(); if (TimeBarSeries == null) { return(isAdded); } HistoricalDataMessage histMessage = (HistoricalDataMessage)message; double h = Convert.ToDouble(histMessage.High); double l = Convert.ToDouble(histMessage.Low); double o = Convert.ToDouble(histMessage.Open); double c = Convert.ToDouble(histMessage.Close); double vol = Convert.ToDouble(histMessage.Volume); DateTime time = DateTime.ParseExact(histMessage.Date.Trim(), "yyyyMMdd HH:mm:ss", CultureInfo.InvariantCulture, DateTimeStyles.AssumeLocal); MarketDataElement currentHsiData = MarketDataUtil.createHLOC(time, "HLOC", "HSI", "FUT"); currentHsiData.volume = vol; currentHsiData.time = time; if (TimeBarSeries == null) { TimeBarSeries = new SeriesBuilder <DateTime, MarketDataElement>() { { time, currentHsiData } }.Series; isAdded = true; } else { MarketDataElement element = TimeBarSeries.GetAt(TimeBarSeries.KeyCount - 1); if (!TimeBarSeries.ContainsKey(time)) { TimeBarSeries = TimeBarSeries.Merge(new SeriesBuilder <DateTime, MarketDataElement>() { { time, currentHsiData } }.Series); isAdded = true; } } return(isAdded); }
public void AddHistoricalData(int requestId, HistoricalDataMessage data) { if (HistoricalData.ContainsKey(requestId)) { HistoricalData[requestId].Add(data); } else { HistoricalData.Add(requestId, new List <HistoricalDataMessage> { data }); } }
public void UpdateHistoricalData(IBMessage message) { switch (message.Type) { case MessageType.HistoricalData: HistoricalDataMessage hdMsg = (HistoricalDataMessage)message; if (!HistoricalData.ContainsKey(hdMsg.RequestId)) { HistoricalData.Add(hdMsg.RequestId, new List <HistoricalDataMessage>()); } HistoricalData[hdMsg.RequestId].Add(hdMsg); break; case MessageType.HistoricalDataEnd: HistoricalDataEndMessage endMsg = (HistoricalDataEndMessage)message; int requestId = endMsg.RequestId; if (!HistoricalData.ContainsKey(requestId)) { throw new Exception("Received end message with no historical data"); } HistoricalData[endMsg.RequestId].Sort(HistoricalDataComparer); if (HistoricalReqIdToContractDesc.ContainsKey(requestId)) { string contractDesc = HistoricalReqIdToContractDesc[requestId]; if (ContractDescToWPR.ContainsKey(contractDesc)) { WPRCalculator calc = ContractDescToWPR[contractDesc]; if (HistoricalData.ContainsKey(requestId) && (HistoricalData[requestId].Count > 0)) { List <HistoricalDataMessage> historicalData = HistoricalData[requestId]; HistoricalDataMessage last = historicalData.Last(); calc.OneDayHigh = last.High; calc.OneDayLow = last.Low; calc.Close = last.Close; double fiveDayHigh = -1; double fiveDayLow = double.MaxValue; foreach (var item in historicalData) { fiveDayHigh = Math.Max(fiveDayHigh, item.High); fiveDayLow = Math.Min(fiveDayLow, item.Low); } calc.FiveDayHigh = fiveDayHigh; calc.FiveDayLow = (fiveDayLow == double.MaxValue) ? -1 : fiveDayLow; } } } break; } }
public Boolean updatePreMergeHistBarSeries(IBMessage message) { Boolean isAdded = false; if (isDataMerged) { return(isAdded); } HistoricalDataMessage histMessage = (HistoricalDataMessage)message; double h = Convert.ToDouble(histMessage.High); double l = Convert.ToDouble(histMessage.Low); double o = Convert.ToDouble(histMessage.Open); double c = Convert.ToDouble(histMessage.Close); double vol = Convert.ToDouble(histMessage.Volume); DateTime time = DateTime.ParseExact(histMessage.Date.Trim(), "yyyyMMdd HH:mm:ss", CultureInfo.InvariantCulture, DateTimeStyles.AssumeLocal); MarketDataElement currentHistData = MarketDataUtil.createHLOC(time, "HLOC", "HSI", "FUT"); MarketDataUtil.setHLOC(currentHistData, h, l, o, c); currentHistData.volume = vol; currentHistData.time = time; if (preMergeHistBarSeries == null) { preMergeHistBarSeries = new SeriesBuilder <DateTime, MarketDataElement>() { { time, currentHistData } }.Series; isAdded = true; } else { if (!preMergeHistBarSeries.ContainsKey(time)) { preMergeHistBarSeries = preMergeHistBarSeries.Merge(new SeriesBuilder <DateTime, MarketDataElement>() { { time, currentHistData } }.Series); isAdded = true; } } return(isAdded); }
public OptionQuote(Contract OptionContract, Contract Underlying, HistoricalDataMessage Quote) { this.symbol = OptionContract.LocalSymbol; this.type = OptionContract.SecType; this.contractId = OptionContract.ConId; this.date = DateTime.Parse(Quote.Date); this.id = this.symbol + " " + this.date.ToString("yyyy-MM-ddTHH:mm:ssZ"); //fixed-length ISO string this.expiry = (DateTime)Framework.ParseDateTz(OptionContract.LastTradeDateOrContractMonth, DateTime.Now); this.daysExp = (int)(this.expiry - this.date).TotalDays; this.strike = OptionContract.Strike; this.right = OptionContract.Right; this.bid = Quote.Open; this.maxAsk = Quote.High; this.lowBid = Quote.Low; this.ask = Quote.Close; this.baseSymbol = Underlying.Symbol; this.baseType = Underlying.SecIdType; this.volume = Quote.Volume; }
//2015-10-27 private Boolean isHistDataRequested(IBMessage message) { IAppMDManager appMDMManager = appStrategyManager.getAppMDManager(); switch (message.Type) { case MessageType.HistoricalData: HistoricalDataMessage hMessage = (HistoricalDataMessage)message; if (appMDMManager.isHistDataAdHocRequested(hMessage.RequestId)) { return(true); } break; case MessageType.HistoricalDataEnd: return(false); break; } return(false); }
//used to update the historical data grid protected void PopulateHistGrid(IBMessage message) { HistoricalDataMessage bar = (HistoricalDataMessage)message; // DateTime start = new DateTime(1970, 1, 1, 0, 0, 0); //DateTime dt = start.AddMilliseconds(bar.Timestamp * 1000).ToLocalTime(); //String strDT = String.Format("{0:yyyy-MM-dd HH:mm:ss}", dt); gridView.Rows.Add(1); //gridView[0, gridView.Rows.Count - 1].Value = bar.Date; //gridView[0, gridView.Rows.Count - 1].Value = strDT; //gridView[0, gridView.Rows.Count - 1].Value = bar.RequestId; gridView[1, gridView.Rows.Count - 1].Value = bar.Date; gridView[2, gridView.Rows.Count - 1].Value = bar.Close; gridView[3, gridView.Rows.Count - 1].Value = bar.Open; gridView[4, gridView.Rows.Count - 1].Value = bar.High; gridView[5, gridView.Rows.Count - 1].Value = bar.Low; gridView[6, gridView.Rows.Count - 1].Value = bar.Volume; }
public override void UpdateUI(IBMessage message) { switch (message.Type) { case MessageType.HistoricalData: var watch = Stopwatch.StartNew(); RTBSynchronizer.updatePreMergeHistBarSeries(message); Series <DateTime, MarketDataElement> series = appMDManager.getTimeBarSeries(); HistoricalDataMessage histMsg = (HistoricalDataMessage)message; DateTime time = DateTime.ParseExact(histMsg.Date.Trim(), "yyyyMMdd HH:mm:ss", CultureInfo.InvariantCulture, DateTimeStyles.AssumeLocal); if (series != null && series.ContainsKey(time)) { PopulateHistGrid(message); } appForm.showMessage("test 1 : " + watch.ElapsedMilliseconds + " millsecond"); break; case MessageType.HistoricalDataEnd: PaintChart(); break; } }
public void UpdateUI(HistoricalDataMessage message) { historicalData.Add(message); }
void HistoricalDataHandler(HistoricalDataMessage message) { throw new NotImplementedException(); }
private void HistoricalDataUpdateHandler(HistoricalDataMessage obj) { throw new NotImplementedException(); }
private void UpdateUI(IBMessage message) { switch (message.Type) { case MessageType.ConnectionStatus: { ConnectionStatusMessage status = (ConnectionStatusMessage)message; if (status.Connected) { tssLabel.Text = "Status: Connected - Client ID = " + Client.ClientId; btnConnect.Text = "Disconnect"; //OneDayWPRTimer = new Timer(new TimerCallback(CalculateWPR), WPRType.OneDay, 0, 60 * 1000); //FiveDayWPRTimer = new Timer(new TimerCallback(CalculateWPR), WPRType.FiveDay, 0, 60 * 1000); //WPRTimer = new Timer(new TimerCallback(CalculateWPR), WPRType.Both, 0, 60 * 1000); } else { tssLabel.Text = "Status: Disconnected"; btnConnect.Text = "Connect"; } break; } case MessageType.Error: { ErrorMessage error = (ErrorMessage)message; string requestId = GetString(error.RequestId, "RequestId"); string code = GetString(error.Code, "Code"); Log($"{(string.IsNullOrEmpty(requestId) ? string.Empty : requestId + ", ")}" + $"{(string.IsNullOrEmpty(code) ? string.Empty : code + " - ")}" + $"{error.Message}"); break; } case MessageType.Log: { LogMessage log = (LogMessage)message; Log(log.Message); break; } case MessageType.CalculateWPR: { //Log(string.Format("{0:MM/dd/yyyy HH:mm:ss} - Calculate WPR", DateTime.Now)); MDManager.UpdateUI(message); break; } case MessageType.TickPrice: { MDManager.UpdateUI(message); break; } case MessageType.HistoricalDataEnd: { HistoricalDataEndMessage historicalDataEndMessage = (HistoricalDataEndMessage)message; HandleMessage(new LogMessage(historicalDataEndMessage.ToString())); MDManager.UpdateHistoricalData(message); break; } case MessageType.HistoricalData: { HistoricalDataMessage historicalDataMessage = (HistoricalDataMessage)message; HandleMessage(new LogMessage(historicalDataMessage.ToString())); MDManager.UpdateHistoricalData(message); break; } case MessageType.RealTimeBars: { RealTimeBarMessage rtbMessage = (RealTimeBarMessage)message; HandleMessage(new LogMessage(rtbMessage.ToString())); MDManager.UpdateRealTimeData(rtbMessage); break; } //case MessageType.ScannerData: //case MessageType.ScannerParameters: // { // scannerManager.UpdateUI(message); // break; // } //case MessageType.OpenOrder: //case MessageType.OpenOrderEnd: //case MessageType.OrderStatus: //case MessageType.ExecutionData: //case MessageType.CommissionsReport: // { // orderManager.UpdateUI(message); // break; // } //case MessageType.ManagedAccounts: // { // orderManager.ManagedAccounts = ((ManagedAccountsMessage)message).ManagedAccounts; // accountManager.ManagedAccounts = ((ManagedAccountsMessage)message).ManagedAccounts; // exerciseAccount.Items.AddRange(((ManagedAccountsMessage)message).ManagedAccounts.ToArray()); // break; // } //case MessageType.AccountSummaryEnd: // { // accSummaryRequest.Text = "Request"; // accountManager.UpdateUI(message); // break; // } //case MessageType.AccountDownloadEnd: // { // break; // } //case MessageType.AccountUpdateTime: // { // accUpdatesLastUpdateValue.Text = ((UpdateAccountTimeMessage)message).Timestamp; // break; // } //case MessageType.PortfolioValue: // { // accountManager.UpdateUI(message); // if (exerciseAccount.SelectedItem != null) // optionsManager.HandlePosition((UpdatePortfolioMessage)message); // break; // } //case MessageType.AccountSummary: //case MessageType.AccountValue: //case MessageType.Position: //case MessageType.PositionEnd: // { // accountManager.UpdateUI(message); // break; // } //case MessageType.ContractDataEnd: // { // searchContractDetails.Enabled = true; // contractManager.UpdateUI(message); // break; // } //case MessageType.ContractData: // { // HandleContractDataMessage((ContractDetailsMessage)message); // break; // } //case MessageType.FundamentalData: // { // fundamentalsQueryButton.Enabled = true; // contractManager.UpdateUI(message); // break; // } //case MessageType.ReceiveFA: // { // advisorManager.UpdateUI((AdvisorDataMessage)message); // break; // } //case MessageType.PositionMulti: //case MessageType.AccountUpdateMulti: //case MessageType.PositionMultiEnd: //case MessageType.AccountUpdateMultiEnd: // { // acctPosMultiManager.UpdateUI(message); // break; // } //case MessageType.SecurityDefinitionOptionParameter: //case MessageType.SecurityDefinitionOptionParameterEnd: // { // optionsManager.UpdateUI(message); // break; // } //case MessageType.SoftDollarTiers: // { // orderManager.UpdateUI(message); // break; // } default: { HandleMessage(new ErrorMessage(message.ToString())); break; } } }
static void Insert(MySqlConnection db, MySqlTransaction tr, string symbol, int granularity, HistoricalDataMessage msg) { bool inserted = false; using (var cmd = new MySqlCommand(@"INSERT IGNORE INTO candles(symbol, date, granularity, open, high, low, close, volume, trades) VALUES((SELECT id FROM symbols WHERE symbol=@symbol LIMIT 1), @date, @granularity, @open, @high, @low, @close, @volume, @trades)", db, tr)) { cmd.Parameters.Add(new MySqlParameter("@symbol", symbol)); cmd.Parameters.Add(new MySqlParameter("@date", IBtoDateTime(msg.Date))); cmd.Parameters.Add(new MySqlParameter("@granularity", granularity)); cmd.Parameters.Add(new MySqlParameter("@open", msg.Open)); cmd.Parameters.Add(new MySqlParameter("@high", msg.High)); cmd.Parameters.Add(new MySqlParameter("@low", msg.Low)); cmd.Parameters.Add(new MySqlParameter("@close", msg.Close)); cmd.Parameters.Add(new MySqlParameter("@volume", msg.Volume)); cmd.Parameters.Add(new MySqlParameter("@trades", msg.Count)); inserted = cmd.ExecuteNonQuery() > 0; } if (!inserted) { using (var cmd = new MySqlCommand(@"UPDATE candles SET open=@open, high=@high, low=@low, close=@close, volume=@volume, trades=@trades WHERE symbol=(SELECT id FROM symbols WHERE symbol=@symbol LIMIT 1) AND date=@date AND granularity=@granularity LIMIT 1", db, tr)) { cmd.Parameters.Add(new MySqlParameter("@symbol", symbol)); cmd.Parameters.Add(new MySqlParameter("@date", IBtoDateTime(msg.Date))); cmd.Parameters.Add(new MySqlParameter("@granularity", granularity)); cmd.Parameters.Add(new MySqlParameter("@open", msg.Open)); cmd.Parameters.Add(new MySqlParameter("@high", msg.High)); cmd.Parameters.Add(new MySqlParameter("@low", msg.Low)); cmd.Parameters.Add(new MySqlParameter("@close", msg.Close)); cmd.Parameters.Add(new MySqlParameter("@volume", msg.Volume)); cmd.Parameters.Add(new MySqlParameter("@trades", msg.Count)); } } }
public StockOptionQuote(Contract OptionContract, Contract Underlying, HistoricalDataMessage OptionQuote, HistoricalDataMessage StockQuote) : base(OptionContract, Underlying, OptionQuote) { this.basePrice = StockQuote.Close; }