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);
        }
예제 #4
0
 public void AddHistoricalData(int requestId, HistoricalDataMessage data)
 {
     if (HistoricalData.ContainsKey(requestId))
     {
         HistoricalData[requestId].Add(data);
     }
     else
     {
         HistoricalData.Add(requestId, new List <HistoricalDataMessage> {
             data
         });
     }
 }
예제 #5
0
        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);
        }
예제 #7
0
 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;
 }
예제 #8
0
        //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;
            }
        }
예제 #11
0
 public void UpdateUI(HistoricalDataMessage message)
 {
     historicalData.Add(message);
 }
예제 #12
0
 void HistoricalDataHandler(HistoricalDataMessage message)
 {
     throw new NotImplementedException();
 }
예제 #13
0
 private void HistoricalDataUpdateHandler(HistoricalDataMessage obj)
 {
     throw new NotImplementedException();
 }
예제 #14
0
        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;
            }
            }
        }
예제 #15
0
        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));
                }
            }
        }
예제 #16
0
 public StockOptionQuote(Contract OptionContract, Contract Underlying, HistoricalDataMessage OptionQuote, HistoricalDataMessage StockQuote)
     : base(OptionContract, Underlying, OptionQuote)
 {
     this.basePrice = StockQuote.Close;
 }