public void TestBarMix()
        {
            // get some test symbols and intervals
            var syms     = new string[] { "IBM", "GOOG", "QQQ" };
            var ints     = new int[] { (int)BarInterval.Day, (int)BarInterval.FiveMin, (int)BarInterval.Hour };
            var barsback = new int[] { 100, 100, 20 };
            // make some random bars
            var bars = new List <Bar>();

            for (int i = 0; i < ints.Length; i++)
            {
                bars.AddRange(TestTradeLink_WM.GetRandomBars(syms, ints[i], barsback[i]));
            }
            // populate the tracker
            foreach (var bar in bars)
            {
                var msg = BarImpl.Serialize(bar);
#if DEBUG
                g.d(bar.Symbol + " sending: " + msg);
#endif
                _mt.GotMessage(MessageTypes.BARRESPONSE, 0, 0, 0, string.Empty, ref msg);
            }
            // verify everything was populated
            var blt = _mt.BLT;
            foreach (var sym in syms)
            {
                for (int i = 0; i < ints.Length; i++)
                {
                    var bint = ints[i];
                    var bb   = barsback[i];
                    var bl   = blt[sym, bint];
                    Assert.GreaterOrEqual(bl.IntervalCount((BarInterval)bint, bint), bb, sym + " missing bars on interval: " + bint);
                }
            }
        }
Esempio n. 2
0
        public void SerializeDeseralize()
        {
            Bar    b   = new BarImpl(1, 1, 1, 1, 1, 20100302, 93533, "IBM", (int)BarInterval.FiveMin);
            string msg = BarImpl.Serialize(b);
            Bar    cb  = BarImpl.Deserialize(msg);

            Assert.AreEqual(b.Symbol, cb.Symbol);
            Assert.AreEqual(b.time, cb.time);
            Assert.AreEqual(b.Interval, cb.Interval);
            Assert.AreEqual(b.High, cb.High);
            Assert.AreEqual(b.Low, cb.Low);
            Assert.AreEqual(b.Open, cb.Open);
            Assert.AreEqual(b.Close, cb.Close);
            Assert.AreEqual(b.Volume, cb.Volume);
            Assert.AreEqual(b.Bardate, cb.Bardate);
        }
Esempio n. 3
0
        void processhistory(int lHandle, BarRequest br)
        {
            int numbars = esig.get_GetNumBars(lHandle);

            if (numbars == 0)
            {
                verb("no bars available for reqhandle: " + lHandle);
                return;
            }
            numbars *= -1;
            for (int i = numbars; i <= 0; i++)
            {
                try
                {
                    BarData bd = esig.get_GetBar(lHandle, i);
                    if (VerboseDebugging)
                    {
                        verb(br.Symbol + " " + bd.dtTime.ToString() + " " + bd.dOpen + " " + bd.dHigh + " " + bd.dLow + " " + bd.dClose + " " + bd.dVolume);
                    }
                    Bar    b   = new BarImpl((decimal)bd.dOpen, (decimal)bd.dHigh, (decimal)bd.dLow, (decimal)bd.dClose, (long)bd.dVolume, Util.ToTLDate(bd.dtTime), Util.ToTLTime(bd.dtTime), br.Symbol, br.Interval);
                    string msg = BarImpl.Serialize(b);
                    if (!b.isValid && !AllowSendInvalidBars)
                    {
                        debug("Not sending invalid bar: " + b.ToString() + " raw: " + msg);
                        continue;
                    }
                    tl.TLSend(msg, MessageTypes.BARRESPONSE, br.Client);
                }
                catch (Exception ex)
                {
                    verb("error obtaining bar: " + i + " from: " + lHandle);
                    verb(ex.Message + ex.StackTrace);
                }
            }
            if (ReleaseBarHistoryAfteRequest)
            {
                try
                {
                    esig.ReleaseHistory(lHandle);
                    _barhandle2barrequest.Remove(lHandle);
                }
                catch { }
            }
        }
Esempio n. 4
0
 long s_newUnknownRequest(MessageTypes t, string msg)
 {
     if (t == MessageTypes.BARREQUEST)
     {
         var br = BarRequest.Deserialize(msg);
         var MAXBARPERREQUEST = br.BarsBack;
         if (br.isValid)
         {
             for (int i = 0; i < MAXBARPERREQUEST; i++)
             {
                 var bar = GetRandomBar(br.symbol, br.Interval);
                 s.TLSend(BarImpl.Serialize(bar), MessageTypes.BARRESPONSE, c.Name);
             }
         }
     }
     if (t == MessageTypes.LOOPBACKSERVER)
     {
         return(SPECIAL);
     }
     return(0);
 }
Esempio n. 5
0
        private void m_Session_OnHistMessage(object sender, BWHistResponse histMsg)
        {
            if (histMsg.Error.Length > 0)
            {
                debug("ERROR: " + histMsg.Error);
            }
            else
            {
                v(histMsg.Symbol + " received bar history data containing " + histMsg.bars.Length + " bars.");
                if (histMsg.bars != null && histMsg.bars.Length > 0)
                {
                    string sym = histMsg.Symbol;

                    foreach (BWBar bar in histMsg.bars)
                    {
                        int tlDate = TradeLink.Common.Util.ToTLDate(bar.time);
                        int tlTime = TradeLink.Common.Util.ToTLTime(bar.time);
                        Bar tlBar  = new BarImpl((decimal)bar.open, (decimal)bar.high, (decimal)bar.low, (decimal)bar.close, (int)bar.volume, tlDate, tlTime, sym, (int)histMsg.Interval);
                        for (int i = 0; i < tl.NumClients; i++)
                        {
                            tl.TLSend(BarImpl.Serialize(tlBar), MessageTypes.BARRESPONSE, i.ToString());
                        }
                    }
                }
                //else if (histMsg.ticks != null && histMsg.ticks.Length > 0)
                //{
                //    foreach (BWTickData tick in histMsg.ticks)
                //    {
                //        Tick tlTick = new TickImpl(tick.symbol);
                //        tlTick.ask = (decimal)tick.askprice;
                //        tlTick.AskSize = (int)tick.asksize;
                //        tlTick.bid = (decimal)tick.bidprice;
                //        tlTick.BidSize = (int)tick.bidsize;
                //        tlTick.trade = (decimal)tick.price;
                //        tlTick.size = (int)tick.size;
                //    }
                //}
            }
        }
Esempio n. 6
0
        public void SerializeDeseralize_Custom()
        {
            Bar b = new BarImpl(1, 1, 1, 1, 1, 20100302, 93533, "IBM", (int)BarInterval.CustomVol, 10000, OrderImpl.Unique);

            g.d(b.Interval + b.CustomInterval.ToString());
            Assert.IsTrue(b.isCustom, "org not custom");
            string msg = BarImpl.Serialize(b);
            Bar    cb  = BarImpl.Deserialize(msg);

            Assert.AreEqual(b.Symbol, cb.Symbol);
            Assert.AreEqual(b.time, cb.time);
            Assert.AreEqual(b.Interval, cb.Interval);
            Assert.AreEqual(b.High, cb.High);
            Assert.AreEqual(b.Low, cb.Low);
            Assert.AreEqual(b.Open, cb.Open);
            Assert.AreEqual(b.Close, cb.Close);
            Assert.AreEqual(b.Volume, cb.Volume);
            Assert.AreEqual(b.Bardate, cb.Bardate);

            Assert.IsTrue(cb.isCustom, "copy not custom");
            Assert.AreEqual(b.CustomInterval, cb.CustomInterval, "cust int mismatch");
            Assert.AreNotEqual(b.id, 0, "id was zero");
            Assert.AreEqual(b.id, cb.id);
        }
Esempio n. 7
0
 void OnReceiveHist(IAsyncResult result)
 {
     try
     {
         int      bytesReceived = m_hist.EndReceive(result);
         string   recvdata      = Encoding.ASCII.GetString(m_buffhist, 0, bytesReceived);
         string   rawData       = _histbuff == string.Empty ? recvdata : _histbuff + recvdata;
         string[] bars          = rawData.Split(Environment.NewLine.ToCharArray());
         foreach (string bar in bars)
         {
             string[] r = bar.Split(',');
             // this should get hit on ENDMSG
             if (r.Length < 8)
             {
                 continue;
             }
             // get request id
             long rid = 0;
             if (!long.TryParse(r[0], out rid))
             {
                 continue;
             }
             BarRequest br;
             if (!reqid2req.TryGetValue(rid, out br))
             {
                 continue;
             }
             bool errorfree = true;
             Bar  b         = new BarImpl();
             try
             {
                 DateTime dt = DateTime.Parse(r[1]);
                 decimal  h  = Convert.ToDecimal(r[2]);
                 decimal  l  = Convert.ToDecimal(r[3]);
                 decimal  o  = Convert.ToDecimal(r[4]);
                 decimal  c  = Convert.ToDecimal(r[5]);
                 long     v  = Convert.ToInt64(r[7]);
                 // build bar
                 b = new BarImpl(o, h, l, c, v, Util.ToTLDate(dt), Util.ToTLTime(dt), br.Symbol, br.Interval);
             }
             catch { errorfree = false; }
             // send it
             if (errorfree)
             {
                 tl.TLSend(BarImpl.Serialize(b), MessageTypes.BARRESPONSE, br.Client);
             }
         }
         string lastrecord = bars[bars.Length - 1];
         if (lastrecord.Contains(HISTEND))
         {
             _histbuff = string.Empty;
         }
         else
         {
             _histbuff = lastrecord;
         }
         // wait for more historical data
         WaitForData(HISTSOCKET);
     }
     catch (Exception ex)
     {
         debug(ex.Message + ex.StackTrace);
     }
 }