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); } } }
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); }
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 { } } }
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); }
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; // } //} } }
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); }
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); } }