void bw_DoWork(object sender, DoWorkEventArgs e) { if (!_valid) return; while (_go) { try { if (qc > qr) { // get requested symbols string[] syms = _tmpregister.Split(','); // go through each one foreach (string sym in syms) { // if we don't have subscription already if (!contains(sym)) { // add it to list _mb.Add(sym); // request subscription esig.RequestSymbol(sym, 1); } } if (ReleaseDeadSymbols) { // clone requested basket Basket newbasket = new BasketImpl(syms); // clone existing basket as deadbasket Basket deadbasket = new BasketImpl(_mb); // existing - new = deadsymbols deadbasket.Remove(newbasket); // release dead symbols string symsreleased = string.Empty; foreach (Security dead in deadbasket) { try { esig.ReleaseSymbol(dead.symbol); symsreleased += dead.symbol + " "; } catch { } } if (symsreleased!=string.Empty) verb("released unused symbols: " + symsreleased); } qr = qc; } while (_barrequests.hasItems) { BarRequest br = new BarRequest(); try { br = _barrequests.Read(); BarInterval bi = (BarInterval)br.Interval; string interval = string.Empty; int barsback = DefaultBarsBack; if (bi == BarInterval.CustomTicks) interval = br.CustomInterval + "T"; else if (bi == BarInterval.CustomTime) interval = br.CustomInterval + "S"; else if (bi == BarInterval.CustomVol) interval = br.CustomInterval + "V"; else { if (br.Interval == (int)BarInterval.Day) interval = "D"; else interval = (br.Interval / 60).ToString(); barsback = BarImpl.BarsBackFromDate(bi, br.StartDateTime, br.EndDateTime); } int alldata = BarRequestsGetAllData ? -1 : 0; int hnd = esig.get_RequestHistory(br.symbol, interval, (bi == BarInterval.Day) ? barType.btDAYS : barType.btBARS, barsback, alldata, alldata); verb("requested bar data for " + br.symbol + " on: " + br.Interval.ToString() + " " + br.CustomInterval.ToString() + " reqhandle: " + hnd); // cache request if (!_barhandle2barrequest.ContainsKey(hnd)) _barhandle2barrequest.Add(hnd, br); else verb("already had bar request: " + hnd + " " + _barhandle2barrequest[hnd].ToString()); if (esig.get_IsHistoryReady(hnd) != 0) processhistory(hnd, br); } catch (Exception ex) { debug("error on historical bar request: " + br.ToString()); debug(ex.Message + ex.StackTrace); } } } catch (Exception ex) { if (GotDebug != null) GotDebug(ex.Message + ex.StackTrace); } if (e.Cancel || !_go) break; System.Threading.Thread.Sleep(WaitBetweenEvents); } }
void RequestBars(BarRequest br) { string command; long id = _idt.AssignId; if (br.Interval == (int)BarInterval.Day) { command = String.Format("HDT,{0},{1},,1,{2}\r\n", br.Symbol,br.StartDateTime.ToLongDateString(),br.EndDateTime.ToLongDateString(),id); } else { command = String.Format("HIT,{0},{1},{2} {3},{4} {5},,000000,235959,1,{6}\r\n", br.Symbol, br.Interval, br.StartDateTime.ToString("yyyyMMdd"), br.StartDateTime.ToString("HHmmss"), br.EndDateTime.ToString("yyyyMMdd"), br.EndDateTime.ToString("HHmmss"),id); } reqid2req.Add(id, br); // we form a watch command in the form of wSYMBOL\r\n byte[] watchCommand = new byte[command.Length]; watchCommand = Encoding.ASCII.GetBytes(command); try { m_hist.Send(watchCommand, watchCommand.Length, SocketFlags.None); debug("Requested historical bars for: " + br.Symbol); } catch (Exception ex) { debug("Exception sending barrequest: " + br.ToString()); debug(ex.Message + ex.StackTrace); } }
void RequestBars(BarRequest br) { // for command docs see http://www.iqfeed.net/dev/api/docs/HistoricalviaTCPIP.cfm string command = string.Empty; // ensure we're connected if (m_hist == null) { ConnectHist(); } if (br.BarInterval == BarInterval.Day) { var previousdays = br.isExplictBarsBack ? br.BarsBackExplicit : BarImpl.BarsBackFromDate(br.BarInterval, br.StartDateTime, br.EndDateTime); // HDX,[Symbol],[MaxDatapoints],[DataDirection],[RequestID],[DatapointsPerSend] if (br.isExplictBarsBack) { br.Tag = "HDX"; command = String.Format("HDX,{0},{1},{2},{3},{4}", br.symbol, previousdays, HistoricalDataDirection, br.ID, HistoricalDataPointPerSec); } else if (br.isExplicitStart) { // HDT,[Symbol],[BeginDate],[EndDate],[MaxDatapoints],[DataDirection],[RequestID],[DatapointsPerSend] var start = br.StartDateTime.ToString("yyyyMMdd"); var end = br.isExplicitDate ? br.EndDateTime.ToString("yyyyMMdd") : string.Empty; var maxdata = br.isExplicitDate ? (int)br.EndDateTime.Subtract(br.StartDateTime).TotalDays : (int)DateTime.Now.Subtract(br.StartDateTime).TotalDays; br.Tag = "HDT"; command = string.Format("HDT,{0},{1},{2},{3},{4},{5},{6}", br.symbol, start, end, maxdata, HistoricalDataDirection, br.ID, HistoricalDataPointPerSec); } } else { // validate interval type string sIntervalType = "s"; int bint = br.CustomInterval; if (br.BarInterval== BarInterval.CustomVol) { sIntervalType = "v"; bint = br.CustomInterval; } else if (br.BarInterval== BarInterval.CustomTicks) { sIntervalType = "t"; bint = br.CustomInterval; } if (br.isExplictBarsBack && !br.isExplicitEnd && !br.isExplicitStart) { br.Tag = "HIX"; //HIX,[Symbol],[Interval],[MaxDatapoints],[DataDirection],[RequestID],[DatapointsPerSend],[IntervalType] command = String.Format("HIX,{0},{1},{2},{3},{4},{5},{6}", br.symbol, bint, br.BarsBackExplicit, HistoricalDataDirection, br.ID, HistoricalDataPointPerSec, sIntervalType); } else { br.Tag = "HIT"; // request in the format: //HIT,[Symbol],[Interval],[BeginDate BeginTime],[EndDate EndTime],[MaxDatapoints],[BeginFilterTime],[EndFilterTime],[DataDirection],[RequestID],[DatapointsPerSend],[IntervalType]<CR><LF> // HIT,SYMBOL,INTERVAL,BEGINDATE BEGINTIME,ENDDATE ENDTIME,MaxDataPoints,BEGINFILTERTIME,ENDFILTERTIME,DIRECTION,REQUESTID,DATAPOINTSPERSEND,INTERVALTYPE<CR><LF> var startdate = br.isExplicitStart ? br.StartDateTime.ToString("yyyyMMdd") : string.Empty; var starttime = br.isExplicitStart ? br.StartDateTime.ToString("HHmmss") : string.Empty; var enddate = br.isExplicitEnd ? br.EndDateTime.ToString("yyyyMMdd") : string.Empty; var endtime = br.isExplicitEnd ? br.EndDateTime.ToString("HHmmss") : string.Empty; var maxpoints = br.isExplictBarsBack ? br.BarsBackExplicit.ToString("F0") : string.Empty; command = String.Format("HIT,{0},{1},{2} {3},{4} {5},{6},,,{7},{8},{9},{10}", br.symbol, bint, startdate, starttime,enddate ,endtime , maxpoints, HistoricalDataDirection, br.ID, HistoricalDataPointPerSec, sIntervalType); } } reqid2req.Add(br.ID, br); byte[] watchCommand = getcmddata(command); try { if (m_hist != null) { m_hist.Send(watchCommand, watchCommand.Length, SocketFlags.None); if (VerboseDebugging) v("hist requested: " + br.symbol + " watch: " + command+" for: "+br.ToString()); else debug("Requested historical bars for: " + br.ToString()); } else { debug("No historical connection available to request bars: " + br.ToString()); } } catch (Exception ex) { debug("Exception sending barrequest: " + br.ToString()); debug(ex.Message + ex.StackTrace); } }