Exemple #1
0
 static void client_TickPrice(object sender, TickPriceEventArgs e)
 {
     Console.WriteLine("Price: " + e.Price + " Tick Type: " + EnumDescConverter.GetEnumDescription(e.TickType));
 }
        void client_TickPrice(object sender, TickPriceEventArgs e)
        {
            Symbol symbol = null;
            TickData data;
            GotTickData listener = null;
            lock (_lockObject)
            {
                symbol = idToSymbol(e.TickerId);
                if (symbol == null)
                {
                    //	Not a watched symbol
                    return;
                }

                data = new TickData();
                data.time = GetAccountTime("price tick");
                data.price = (double)e.Price;

                if (data.price <= 0 &&
                    symbol.AssetClass != AssetClass.Future &&
                    symbol.AssetClass != AssetClass.Option &&
                    symbol.AssetClass != AssetClass.FuturesOption)
                {
                    //	GBP/USD was getting bid and ask ticks with a price of zero, so ignore these.
                    //	4/20/2010 - A user reported various forex symbols were getting negative prices, so these will also be ignored
                    return;
                }

                if (e.TickType == KRSTickType.BidPrice)
                {
                    //	Bid price
                    data.tickType = TickType.Bid;
                    lastBidSizes.TryGetValue(symbol, out data.size);
                    lastBidPrices[symbol] = (double)e.Price;
                }
                else if (e.TickType == KRSTickType.AskPrice)
                {
                    //	Ask price
                    data.tickType = TickType.Ask;
                    lastAskSizes.TryGetValue(symbol, out data.size);
                    lastAskPrices[symbol] = (double)e.Price;
                }
                else if (e.TickType == KRSTickType.LastPrice)
                {
                    //	Last price;
                    lastPrices[symbol] = (double)e.Price;

                    if (symbol.AssetClass == AssetClass.Index)
                    {
                        // Indexes don't come with volume ticks, so we can
                        // force this tick through instead of trying to match
                        // it up with a volume tick.
                        data.tickType = TickType.Trade;
                    }
                    else
                    {
                        return;
                    }
                }
                else if (e.TickType == KRSTickType.HighPrice)
                {
                    //	High price
                    data.tickType = TickType.HighPrice;
                }
                else if (e.TickType == KRSTickType.LowPrice)
                {
                    //	Low price
                    data.tickType = TickType.LowPrice;
                }
                else if (e.TickType == KRSTickType.ClosePrice)
                {
                    //	Close price
                    data.tickType = TickType.PreviousClose;
                }
                else if (e.TickType == Krs.Ats.IBNet.TickType.OpenPrice)
                {
                    data.tickType = TickType.OpenPrice;
                }
                else
                {
                    //	Unknown tick type
                    return;
                }
                listener = tickListener;
            }
            if (data.tickType != TickType.NotSet && listener != null)
            {
                listener(symbol, data);
            }
        }
        public void priceChangeTick(Object sender, TickPriceEventArgs e)
        {
            Product p = tickerIdsToProduct[e.TickerId];
            p.asOf = DateTime.UtcNow;
            log.Debug("Price change for " + p.symbol + " on " + e.TickType.ToString() + " New price = " + Convert.ToString(e.Price));

            switch (e.TickType)
            {
                case Krs.Ats.IBNet.TickType.BidPrice:
                    p.bid = Convert.ToDouble(e.Price);
                    if (BidUpdate != null)
                        BidUpdate(p);
                    break;
                case Krs.Ats.IBNet.TickType.AskPrice:
                    p.ask = Convert.ToDouble(e.Price);
                    if (AskUpdate != null)
                        AskUpdate(p);
                    break;
                case Krs.Ats.IBNet.TickType.LastPrice:
                    p.last = Convert.ToDouble(e.Price);
                    if (LastUpdate != null)
                        LastUpdate(p);
                    break;
                default:
                    break;
            }
        }
        //////////////////////////////////////////////////////////////////////
        ////////////////////  TWS message event handlers /////////////////////
        //////////////////////////////////////////////////////////////////////

        void client_TickPrice(object sender, TickPriceEventArgs e)
        {
            //Console.WriteLine("Price: " + e.Price + " Tick Type: " + EnumDescConverter.GetEnumDescription(e.TickType));
            DateTime now = DateTime.Now;
            int secondFraction = (int)(now.Ticks % TimeSpan.TicksPerSecond / (TimeSpan.TicksPerSecond / 256));

            lock (capturingWriterLock)
            {
                capturingWriter.Write((byte)secondFraction); // record sub-second time (1/256th resolution)
                capturingWriter.Write((byte)e.TickType);  // kind of data (like bid, ask, last...)
                capturingWriter.Write((byte)e.TickerId);  // The Symbol ID (like AMD, INTC, INDU..)
                capturingWriter.Write((float)e.Price);    // The data - in this case price.
            }

            logger.Trace("{0} : {1} : {2} : {3}", e.TickType, symbols[e.TickerId].Symbol, e.TickerId, e.Price);
            totalCaptureEventsForDisplay++;
            lastRecievedUpdate = now;
        }