Пример #1
0
        public static IObservable <(OHLC raw, int ofst, OHLC cnt)> OHLC(this StreamReader rdr)
        {
            // bar_end, symbol, qty, open, high, low, close
            var  dict = new Dictionary <string, int>();
            OHLC prev = null;
            var  src  = rdr.ReadAllLines().Skip(1).Select(ln => {
                var rec = ln.Split(',');
                var sec = Security.Lookup(rec[1]);
                var dt  = DateTime.Parse(rec[0]);
                var oh  = new OHLC(new Tick(sec, uint.Parse(rec[2]), uint.Parse(rec[3]), dt.AddMinutes(-59)));
                oh.Add(new Tick(sec, 1, uint.Parse(rec[4]), dt.AddMinutes(-40)));
                oh.Add(new Tick(sec, 1, uint.Parse(rec[5]), dt.AddMinutes(-20)));
                oh.Add(new Tick(sec, 1, uint.Parse(rec[6]), dt.AddMinutes(-1)));
                return(oh);
            }).Select(oh => {
                var ofst = oh.get_Offset(prev);
                if (ofst != 0)
                {
                    dict.Keys.ToList().ForEach(ky => dict[ky] += ofst);
                }
                if (!dict.ContainsKey(oh.Open.Security.Symbol))
                {
                    dict[oh.Open.Security.Symbol] = 0;
                }
                prev = oh;
                return(oh);
            }).ToList();

            return(src.ToObservable().Select(raw => {
                var sec = Security.Lookup("DMK3");
                var ofst = dict[raw.Open.Security.Symbol];
                var cnt = new OHLC(new Tick(sec, raw.Open.Quantity, (uint)(raw.Open.Price + ofst), raw.Open.TradedAt));
                cnt.Add(new Tick(sec, 1, (uint)(raw.High.Price + ofst), raw.High.TradedAt));
                cnt.Add(new Tick(sec, 1, (uint)(raw.Low.Price + ofst), raw.Low.TradedAt));
                cnt.Add(new Tick(sec, 1, (uint)(raw.Close.Price + ofst), raw.Close.TradedAt));
                return (raw, ofst, cnt);
            }));
        }
Пример #2
0
        /// <summary>
        /// Create DataTimeSeries, DataTSOHLC, DataTSVolume objects add to DataBuilder collection
        /// </summary>
        /// <param name="tinterval">time interval of timeseries (in minutes)</param>
        /// /// <param name="nrows">number of rows to allocate</param>
        public void NewTimeSeriesOHLCVolume(int tinterval, int nrows = 2880)
        {
            // check if time interval already exist
            foreach (DataTimeSeries ts0 in TimeSeries)
            {
                if (ts0.TimeInterval == tinterval)
                {
                    return;
                }
            }

            DataTimeSeries ts = new DataTimeSeries(tinterval, nrows);

            TimeSeries.Add(ts);
            OHLC.Add(new DataTSOHLC(ts));
            Volume.Add(new DataTSVolume(ts));
        }