Beispiel #1
0
        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);
            }
        }
Beispiel #2
0
 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);
     }
 }
Beispiel #3
0
        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);
            }
        }