Example #1
0
        private void CalculateSingleWPR(string contractDesc, WPRCalculator calc, WPRType type, DataGridView grid)
        {
            CalcWPRDelegate calcFunc;
            int             columnIndex;
            double          otherLatestWPR;

            if (type == WPRType.OneDay)
            {
                otherLatestWPR = calc.Latest5DayWPR;
                calcFunc       = calc.Get1DayWPR;
                columnIndex    = WPR_1DAY_INDEX;
            }
            else
            {
                otherLatestWPR = calc.Latest1DayWPR;
                calcFunc       = calc.Get5DayWPR;
                columnIndex    = WPR_5DAY_INDEX;
            }
            double wpr = calcFunc();

            if (ContractDescToRow.ContainsKey(contractDesc))
            {
                if (wpr < 0)
                {
                    int rowIndex = ContractDescToRow[contractDesc];
                    grid[columnIndex, rowIndex].Value = string.Format("{0:F2}", wpr);
                }
                if ((wpr <= -80) && (otherLatestWPR <= -80))
                {
                    SoundPlayer.Play();
                }
            }
        }
Example #2
0
        private void CalculateBothWPRs(string contractDesc, WPRCalculator calc, DataGridView grid)
        {
            double oneDayWPR  = calc.Get1DayWPR();
            double fiveDayWPR = calc.Get5DayWPR();

            if (ContractDescToRow.ContainsKey(contractDesc))
            {
                int rowIndex = ContractDescToRow[contractDesc];
                if (oneDayWPR < 0)
                {
                    grid[WPR_1DAY_INDEX, rowIndex].Value = string.Format("{0:F4}", oneDayWPR);
                }
                if (fiveDayWPR < 0)
                {
                    grid[WPR_5DAY_INDEX, rowIndex].Value = string.Format("{0:F4}", fiveDayWPR);
                }
                if ((oneDayWPR <= -80) && (fiveDayWPR <= -80))
                {
                    SoundPlayer.Play();
                    grid[WPR_1DAY_INDEX, rowIndex].Style.BackColor = Color.Red;
                    grid[WPR_5DAY_INDEX, rowIndex].Style.BackColor = Color.Red;
                }
                else
                {
                    grid[WPR_1DAY_INDEX, rowIndex].Style.BackColor = Color.White;
                    grid[WPR_5DAY_INDEX, rowIndex].Style.BackColor = Color.White;
                }
            }
        }
Example #3
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;
            }
        }
Example #4
0
 public void UpdateRealTimeData(RealTimeBarMessage message)
 {
     if (RealTimeReqIdToContractDesc.ContainsKey(message.RequestId))
     {
         string contractDesc = RealTimeReqIdToContractDesc[message.RequestId];
         if (ContractDescToWPR.ContainsKey(contractDesc))
         {
             WPRCalculator calc = ContractDescToWPR[contractDesc];
             calc.Close      = message.Close;
             calc.LatestHigh = message.High;
             calc.LatestLow  = message.Low;
             DataGridView grid = (DataGridView)DataGrid;
             CalculateBothWPRs(contractDesc, calc, grid);
         }
     }
 }
Example #5
0
        public override void UpdateUI(IBMessage message)
        {
            DataGridView grid = (DataGridView)DataGrid;

            if (message is MarketDataMessage)
            {
                MarketDataMessage dataMessage = (MarketDataMessage)message;
                int    requestId    = dataMessage.RequestId;
                string contractDesc = ReqIdToContractDesc[requestId];
                if (RequestIdToRow.ContainsKey(dataMessage.RequestId))
                {
                    if (message is TickPriceMessage)
                    {
                        TickPriceMessage priceMessage = (TickPriceMessage)message;
                        int columnIndex = -1;
                        switch (dataMessage.Field)                         // TickType
                        {
                        case TickType.BID:
                        case TickType.DELAYED_BID:
                            columnIndex = BID_PRICE_INDEX;
                            break;

                        case TickType.ASK:
                        case TickType.DELAYED_ASK:
                            columnIndex = ASK_PRICE_INDEX;
                            break;

                        case TickType.LAST:
                        case TickType.DELAYED_LAST:
                            columnIndex = LAST_PRICE_INDEX;
                            break;

                        case TickType.LOW:
                        case TickType.DELAYED_LOW:
                            if (ContractDescToWPR.ContainsKey(contractDesc))
                            {
                                WPRCalculator calc = ContractDescToWPR[contractDesc];
                                calc.LatestLow = priceMessage.Price;
                                CalculateBothWPRs(contractDesc, calc, grid);
                            }
                            return;

                        case TickType.HIGH:
                        case TickType.DELAYED_HIGH:
                            if (ContractDescToWPR.ContainsKey(contractDesc))
                            {
                                WPRCalculator calc = ContractDescToWPR[contractDesc];
                                calc.LatestHigh = priceMessage.Price;
                                CalculateBothWPRs(contractDesc, calc, grid);
                            }
                            return;

                        case TickType.CLOSE:
                        case TickType.DELAYED_CLOSE:
                            if (ContractDescToWPR.ContainsKey(contractDesc))
                            {
                                WPRCalculator calc = ContractDescToWPR[contractDesc];
                                calc.Close = priceMessage.Price;
                                CalculateBothWPRs(contractDesc, calc, grid);
                            }
                            return;

                        default:
                            return;
                        }
                        int rowIndex = RequestIdToRow[dataMessage.RequestId];
                        grid[columnIndex, rowIndex].Value = GetFormattedPrice(priceMessage);
                        double previousPrice = Convert.ToDouble(grid[columnIndex, rowIndex].Value);
                        if (previousPrice > priceMessage.Price)
                        {
                            grid[columnIndex, rowIndex].Style.ForeColor = Color.Green;
                        }
                        else if (previousPrice < priceMessage.Price)
                        {
                            grid[columnIndex, rowIndex].Style.ForeColor = Color.Red;
                        }
                        else
                        {
                            grid[columnIndex, rowIndex].Style.ForeColor = Color.Black;
                        }
                    }
                }
            }
            else if (message is CalculateWPRMessage)
            {
                CalculateWPRMessage calcMsg = (CalculateWPRMessage)message;
                foreach (var item in ContractDescToWPR)
                {
                    string        contractDesc = item.Key;
                    WPRCalculator calc         = item.Value;
                    if (calcMsg.WPRType == WPRType.Both)
                    {
                        CalculateBothWPRs(contractDesc, calc, grid);
                    }
                    else
                    {
                        CalculateSingleWPR(contractDesc, calc, calcMsg.WPRType, grid);
                    }
                }
            }
        }