Esempio n. 1
0
        private string GetFormattedPrice(TickPriceMessage message)
        {
            string price;

            switch (message.Field)
            {
            case TickType.BID:
            case TickType.DELAYED_BID:
            case TickType.ASK:
            case TickType.DELAYED_ASK:
                if (message.Price < 1.0)
                {
                    price = string.Format("{0:F3}", message.Price);
                }
                else
                {
                    price = string.Format("{0:F2}", message.Price);
                }
                break;

            case TickType.LAST:
            case TickType.DELAYED_LAST:
            default:
                price = string.Format("{0:F3}", message.Price);
                break;
            }
            return(price);
        }
Esempio n. 2
0
        private void ibClient_Tick(TickPriceMessage msg)
        {
            if (isDebug)
            {
                Console.WriteLine("Tick Price. Ticker Id:" + msg.RequestId + ", Symbol: " + dicAssets[msg.RequestId].Con.Symbol + ", Type: " + TickType.getField(msg.Field) + ", Price: " + msg.Price + ", Pre-Open: " + msg.Attribs.PreOpen);
            }

            switch (msg.Field)
            {
            case TickType.ASK:
            case TickType.DELAYED_ASK:
                dicAssets[msg.RequestId].Ask = msg.Price;
                break;

            case TickType.BID:
            case TickType.DELAYED_BID:
                dicAssets[msg.RequestId].Bid = msg.Price;
                break;

            case TickType.LAST:
            case TickType.DELAYED_LAST:
                dicAssets[msg.RequestId].Last = msg.Price;
                break;
            }
        }
Esempio n. 3
0
        private void UpdateOptionGridPrice(DataGridView grid, int row, TickPriceMessage message)
        {
            switch (message.Field)
            {
            case TickType.ASK:
                grid[ASK_INDEX, row].Value = message.Price;
                break;

            case TickType.BID:
                grid[BID_INDEX, row].Value = message.Price;
                break;
            }
        }
Esempio n. 4
0
        public void putTickPriceEvents(TickPriceMessage priceMessage, MarketDataMessage dataMessage)
        {
            ConcurrentDictionary <String, String> stgNamesMap = stgManager.getActiveStgNamesMap();
            AppTickPriceEvent tickPriceEvent = new AppTickPriceEvent();

            tickPriceEvent.time     = stgManager.getProxyNowTime();
            tickPriceEvent.value    = priceMessage.Price;
            tickPriceEvent.field    = dataMessage.Field;
            tickPriceEvent.tickerId = priceMessage.RequestId;
            stgNamesMap.Keys.ToArray();
            foreach (String name in stgNamesMap.Keys)
            {
                storeEventQueue[name].Add(tickPriceEvent);
            }
        }
Esempio n. 5
0
        void TickPriceHandler(TickPriceMessage message)
        {
            int        contractId = message.RequestId;
            IBTickType type       = (IBTickType)message.Field;
            dynamic    price      = message.Price;

            //Debug.WriteLine("ZEUS - TickPriceHandler: " + contractId + ", " + type + ", " + price);

            Market currentMarket = Contracts[contractId].Item2;

            currentMarket.Timestamp = Now;

            bool send = false;

            if (type == IBTickType.BidPrice && price > 0)
            {                       // TODO(live-5) - true for EFPs?
                currentMarket.Bid = price;

                if (Math.Abs(price / currentMarket.Bid - 1) < 0.15M)
                {
                    send = true;
                }
            }
            else if (type == IBTickType.AskPrice && price > 0)
            {
                currentMarket.Ask = price;

                if (Math.Abs(price / currentMarket.Ask - 1) < 0.15M)
                {
                    send = true;
                }
            }
            else if (currentMarket.Mid.Equals(decimal.MinValue) && (type == IBTickType.ClosePrice || type == IBTickType.LastPrice))
            {
                currentMarket.Ask = currentMarket.Bid = (decimal)price;
                send = true;
            }
            else if (type == IBTickType.ClosePrice)
            {
                currentMarket.PreviousClose = (decimal)price;
                send = true;
            }

            if (send)
            {
                Ether.Send(currentMarket);
            }
        }
        public void test_putTickPriceEvents()
        {
            IAppStrategyManager stgManager   = getAppStrategyManager_for_putEvents();
            AppEventManager     eventManager = new AppEventManager(stgManager);

            TickPriceMessage tickMessage1 = new TickPriceMessage(200001, 4, 22000, 0);
            TickPriceMessage tickMessage2 = new TickPriceMessage(200002, 1, 22100, 0);

            MarketDataMessage dataMessage = (MarketDataMessage)tickMessage1;

            eventManager.putTickPriceEvents(tickMessage1, dataMessage);
            dataMessage = (MarketDataMessage)tickMessage2;
            eventManager.putTickPriceEvents(tickMessage2, dataMessage);
            Assert.AreEqual(2, eventManager.storeEventQueue["S1_RND1"].Count);
            Assert.AreEqual(0, eventManager.storeEventQueue["S2_RBREAK_REVERSE1"].Count);
            Assert.AreEqual(2, eventManager.storeEventQueue["S3_RBREAK_TREND1"].Count);
            Assert.AreEqual(0, stgManager.getAppMainteanceManager().storeEventQueue.Count);
        }
Esempio n. 7
0
        private void ibClient_Tick(TickPriceMessage msg)
        {
            if (isDebug)
            {
                Console.WriteLine("Tick Price. Ticker Id:{1}, Symbol: {2}, Type: {3}, Price: {4}, Pre-Open: {4}",
                                  msg.RequestId, dicAssets[msg.RequestId].Con.Symbol, TickType.getField(msg.Field), msg.Price, msg.Attribs.PreOpen);
            }

            switch (msg.Field)
            {
            case TickType.ASK:
            case TickType.DELAYED_ASK:
                dicAssets[msg.RequestId].Ask = msg.Price;
                break;

            case TickType.BID:
            case TickType.DELAYED_BID:
                dicAssets[msg.RequestId].Bid = msg.Price;
                break;

            case TickType.LAST:
            case TickType.DELAYED_LAST:
                dicAssets[msg.RequestId].Last = msg.Price;
                break;
            }

            if (OnPriceEvent != null)
            {
                OnPriceMessage e = new OnPriceMessage();
                e.RequestId = msg.RequestId;
                e.Symbol    = dicAssets[msg.RequestId].Con.Symbol;
                e.AssetID   = dicAssets[msg.RequestId].ID;
                e.Type      = TickType.getField(msg.Field);
                e.Price     = msg.Price;
                e.PreOpen   = msg.Attribs.PreOpen;

                OnPriceEvent(e);
            }
        }
Esempio n. 8
0
 public void RaiseTickPriceMessage(TickPriceMessage message)
 {
     OnTickPrice(message);
 }
        public void UpdateUI(TickPriceMessage dataMessage)
        {
            DataGridView grid = (DataGridView)uiControl;

            if ((grid[MARKET_DATA_TYPE_INDEX, GetIndex(dataMessage.RequestId)].Value.Equals(MarketDataType.Real_Time.Name)) &&
                (dataMessage.Field == 66 ||
                 dataMessage.Field == 67 ||
                 dataMessage.Field == 75 ||
                 dataMessage.Field == 76 ||
                 dataMessage.Field == 68 ||
                 dataMessage.Field == 72 ||
                 dataMessage.Field == 73))
            {
                grid[MARKET_DATA_TYPE_INDEX, GetIndex(dataMessage.RequestId)].Value = MarketDataType.Delayed.Name;
            }

            switch (dataMessage.Field)
            {
            case 1:
            case 66:
            {
                //BID, DELAYED_BID
                grid[BID_PRICE_INDEX, GetIndex(dataMessage.RequestId)].Value = dataMessage.Price;
                grid[PRE_OPEN_BID, GetIndex(dataMessage.RequestId)].Value    = dataMessage.Attribs.PreOpen;
                break;
            }

            case 2:
            case 67:
            {
                //ASK, DELAYED_ASK
                grid[ASK_PRICE_INDEX, GetIndex(dataMessage.RequestId)].Value = dataMessage.Price;
                grid[PRE_OPEN_ASK, GetIndex(dataMessage.RequestId)].Value    = dataMessage.Attribs.PreOpen;
                break;
            }

            case 9:
            case 75:
            {
                //CLOSE, DELAYED_CLOSE
                grid[CLOSE_PRICE_INDEX, GetIndex(dataMessage.RequestId)].Value = dataMessage.Price;
                break;
            }

            case 14:
            case 76:
            {
                //OPEN, DELAYED_OPEN
                grid[OPEN_PRICE_INDEX, GetIndex(dataMessage.RequestId)].Value = dataMessage.Price;
                break;
            }

            case 4:
            case 68:
            {
                //LAST, DELAYED_LAST
                grid[LAST_PRICE_INDEX, GetIndex(dataMessage.RequestId)].Value = dataMessage.Price;
                break;
            }

            case 6:
            case 72:
            {
                //HIGH, DELAYED_HIGH
                grid[HIGH_PRICE_INDEX, GetIndex(dataMessage.RequestId)].Value = dataMessage.Price;
                break;
            }

            case 7:
            case 73:
            {
                //LOW, DELAYED_LOW
                grid[LOW_PRICE_INDEX, GetIndex(dataMessage.RequestId)].Value = dataMessage.Price;
                break;
            }
            }
        }
Esempio n. 10
0
        public void UpdateUI(TickPriceMessage dataMessage)
        {
            DataGridView grid = (DataGridView)uiControl;

            if ((grid[MARKET_DATA_TYPE_INDEX, GetIndex(dataMessage.RequestId)].Value.Equals(MarketDataType.Real_Time.Name)) &&
                (dataMessage.Field == TickType.DELAYED_BID ||
                 dataMessage.Field == TickType.DELAYED_ASK ||
                 dataMessage.Field == TickType.DELAYED_CLOSE ||
                 dataMessage.Field == TickType.DELAYED_OPEN ||
                 dataMessage.Field == TickType.DELAYED_LAST ||
                 dataMessage.Field == TickType.DELAYED_HIGH ||
                 dataMessage.Field == TickType.DELAYED_LOW))
            {
                grid[MARKET_DATA_TYPE_INDEX, GetIndex(dataMessage.RequestId)].Value = MarketDataType.Delayed.Name;
            }

            switch (dataMessage.Field)
            {
            case TickType.BID:
            case TickType.DELAYED_BID:
            {
                //BID, DELAYED_BID
                grid[BID_PRICE_INDEX, GetIndex(dataMessage.RequestId)].Value = dataMessage.Price;
                grid[PRE_OPEN_BID, GetIndex(dataMessage.RequestId)].Value    = dataMessage.Attribs.PreOpen;
                break;
            }

            case TickType.ASK:
            case TickType.DELAYED_ASK:
            {
                //ASK, DELAYED_ASK
                grid[ASK_PRICE_INDEX, GetIndex(dataMessage.RequestId)].Value = dataMessage.Price;
                grid[PRE_OPEN_ASK, GetIndex(dataMessage.RequestId)].Value    = dataMessage.Attribs.PreOpen;
                break;
            }

            case TickType.CLOSE:
            case TickType.DELAYED_CLOSE:
            {
                //CLOSE, DELAYED_CLOSE
                grid[CLOSE_PRICE_INDEX, GetIndex(dataMessage.RequestId)].Value = dataMessage.Price;
                break;
            }

            case TickType.OPEN:
            case TickType.DELAYED_OPEN:
            {
                //OPEN, DELAYED_OPEN
                grid[OPEN_PRICE_INDEX, GetIndex(dataMessage.RequestId)].Value = dataMessage.Price;
                break;
            }

            case TickType.LAST:
            case TickType.DELAYED_LAST:
            {
                //LAST, DELAYED_LAST
                grid[LAST_PRICE_INDEX, GetIndex(dataMessage.RequestId)].Value = dataMessage.Price;
                break;
            }

            case TickType.HIGH:
            case TickType.DELAYED_HIGH:
            {
                //HIGH, DELAYED_HIGH
                grid[HIGH_PRICE_INDEX, GetIndex(dataMessage.RequestId)].Value = dataMessage.Price;
                break;
            }

            case TickType.LOW:
            case TickType.DELAYED_LOW:
            {
                //LOW, DELAYED_LOW
                grid[LOW_PRICE_INDEX, GetIndex(dataMessage.RequestId)].Value = dataMessage.Price;
                break;
            }
            }
        }
Esempio n. 11
0
        public override void UpdateUI(IBMessage message)
        {
            MarketDataMessage dataMessage = (MarketDataMessage)message;

            checkToAddRow(dataMessage.RequestId);
            DataGridView grid = (DataGridView)uiControl;

            if (grid.Rows.Count >= dataMessage.RequestId - TICK_ID_BASE)
            {
                if (message is TickPriceMessage)
                {
                    TickPriceMessage priceMessage = (TickPriceMessage)message;
                    switch (dataMessage.Field)
                    {
                    case 1:
                    {
                        //BID
                        grid[BID_PRICE_INDEX, GetIndex(dataMessage.RequestId)].Value = priceMessage.Price;
                        break;
                    }

                    case 2:
                    {
                        //ASK
                        grid[ASK_PRICE_INDEX, GetIndex(dataMessage.RequestId)].Value = priceMessage.Price;
                        break;
                    }

                    case 9:
                    {
                        //CLOSE
                        grid[CLOSE_PRICE_INDEX, GetIndex(dataMessage.RequestId)].Value = priceMessage.Price;
                        break;
                    }
                    }
                }
                else if (dataMessage is TickSizeMessage)
                {
                    TickSizeMessage sizeMessage = (TickSizeMessage)message;
                    switch (dataMessage.Field)
                    {
                    case 0:
                    {
                        //BID SIZE
                        grid[BID_SIZE_INDEX, GetIndex(dataMessage.RequestId)].Value = sizeMessage.Size;
                        break;
                    }

                    case 3:
                    {
                        //ASK SIZE
                        grid[ASK_SIZE_INDEX, GetIndex(dataMessage.RequestId)].Value = sizeMessage.Size;
                        break;
                    }

                    case 5:
                    {
                        //LAST SIZE
                        grid[LAST_SIZE_INDEX, GetIndex(dataMessage.RequestId)].Value = sizeMessage.Size;
                        break;
                    }

                    case 8:
                    {
                        //VOLUME
                        grid[VOLUME_SIZE_INDEX, GetIndex(dataMessage.RequestId)].Value = sizeMessage.Size;
                        break;
                    }
                    }
                }
            }
        }
        public override void UpdateUI(IBMessage message)
        {
            IAppMDManager     appMDMManager   = appStrategyManager.getAppMDManager();
            IAppEventManager  appEventManager = appStrategyManager.getAppEventManager();
            MarketDataMessage dataMessage     = (MarketDataMessage)message;

            checkToAddRow(dataMessage.RequestId);
            DataGridView grid = (DataGridView)uiControl;

            if (grid.Rows.Count >= dataMessage.RequestId - TICK_ID_BASE)
            {
                if (message is TickPriceMessage)
                {
                    TickPriceMessage priceMessage = (TickPriceMessage)message;
                    switch (dataMessage.Field)
                    {
                    case 1:
                    {
                        //BID
                        appEventManager.putTickPriceEvents(priceMessage, dataMessage);
                        //stgManager.handleTickMessage(message);
                        grid[BID_PRICE_INDEX, GetIndex(dataMessage.RequestId)].Value = priceMessage.Price;
                        break;
                    }

                    case 2:
                    {
                        //ASK
                        appEventManager.putTickPriceEvents(priceMessage, dataMessage);
                        //stgManager.handleTickMessage(message);
                        grid[ASK_PRICE_INDEX, GetIndex(dataMessage.RequestId)].Value = priceMessage.Price;
                        break;
                    }

                    case 4:
                    {
                        //LAST
                        appEventManager.putTickPriceEvents(priceMessage, dataMessage);
                        //stgManager.handleTickMessage(message);
                        grid[LAST_PRICE_INDEX, GetIndex(dataMessage.RequestId)].Value = priceMessage.Price;
                        break;
                    }

                    case 6:
                    {
                        //HIGH
                        grid[HIGH_PRICE_INDEX, GetIndex(dataMessage.RequestId)].Value = priceMessage.Price;
                        break;
                    }

                    case 7:
                    {
                        //LOW
                        grid[LOW_PRICE_INDEX, GetIndex(dataMessage.RequestId)].Value = priceMessage.Price;
                        break;
                    }

                    case 9:
                    {
                        //CLOSE
                        grid[CLOSE_PRICE_INDEX, GetIndex(dataMessage.RequestId)].Value = priceMessage.Price;
                        break;
                    }
                    }
                }
                else if (dataMessage is TickSizeMessage)
                {
                    TickSizeMessage sizeMessage = (TickSizeMessage)message;
                    switch (dataMessage.Field)
                    {
                    case 0:
                    {
                        //BID SIZE
                        grid[BID_SIZE_INDEX, GetIndex(dataMessage.RequestId)].Value = sizeMessage.Size;
                        break;
                    }

                    case 3:
                    {
                        //ASK SIZE
                        grid[ASK_SIZE_INDEX, GetIndex(dataMessage.RequestId)].Value = sizeMessage.Size;
                        break;
                    }

                    case 5:
                    {
                        //LAST SIZE

                        grid[LAST_SIZE_INDEX, GetIndex(dataMessage.RequestId)].Value = sizeMessage.Size;
                        break;
                    }

                    case 8:
                    {
                        //VOLUME
                        //stgManager.handleTickMessage(message);
                        grid[VOLUME_SIZE_INDEX, GetIndex(dataMessage.RequestId)].Value = sizeMessage.Size;
                        break;
                    }
                    }
                }
            }
        }
Esempio n. 13
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);
                    }
                }
            }
        }
Esempio n. 14
0
 static void client_TickPrice(TickPriceMessage e)
 {
     //Console.WriteLine("Price: " + e.Price + " Tick Type: " + TickType. EnumDescConverter.ToIBTxt((TickType) e.Field));
 }