Пример #1
0
        /// <summary>
        /// Get Wealth Lab bars from QuikBars
        /// </summary>
        /// <param name="symbol"></param>
        /// <param name="startTime"></param>
        /// <param name="endTime"></param>
        public static BarsAndDom GetHistoryBars(string symbol, DataSource ds, DateTime startTime, DateTime endTime)
        {
            // Return bars in ticks data. Will be recalculated by Wealth-lab
            //            Bars bars = new Bars(symbol.Trim(new char[] { ' ', '"' }), ds.Scale, ds.BarInterval);
            if (HistoryBars.ContainsKey(symbol))
            {
                HistoryBars.Remove(symbol);
                //return HistoryBars[symbol];

            }
            BarsAndDom bars = new BarsAndDom(symbol.Trim(new char[] { ' ', '"' }), ds.Scale, ds.BarInterval);
            HistoryBars.Add(bars.Symbol, bars);

            // Load from file
            string[] lines = File.ReadAllLines(string.Format(historyFilePath, bars.Symbol));
            int i = 0;
            // Init quik bar
            QuikBar quikBar = null;
            if (lines.Length > 2)
            {
                if (ds.Scale == BarScale.Tick)
                {
                    QuikQuote quikQuote = new QuikQuote(lines[1]);
                    quikBar = new QuikBar(quikQuote);
                }
                else
                {
                    quikBar = new QuikBar(lines[1]);
                }
            }
            // Add bars
            foreach (string line in lines)
            {
                // First line is a header, no parse
                if (i++ == 0)
                    continue;
                QuikQuote quikQuote = new QuikQuote(line);

                // Add bar to wealth-lab if quote is a quote of new bar
                if(IsNewBarQuote(quikBar, quikQuote, ds.BarDataScale))
                {
                    bars.Add(quikBar.OpenTime, quikBar.Open, quikBar.High, quikBar.Low, quikBar.Close, quikBar.Volume);
                    quikBar = new QuikBar();
                }
                quikBar.Update(quikQuote);

                // Start a new bar or not?
                //TimeSpan timeFromOpen = quikBar.OpenTime - quikQuote.Time;

            //                bars.Add(quikQuote.Time, quikQuote.Close, quikQuote.Close, quikQuote.Close, quikQuote.Close, quikQuote.Volume);

            }

            // Load history
            if (bars.Count != 0)
            {

                bars.Level2History= new Level2History(bars.Symbol);
                bars.Level2History.Load(bars.Date.Last());
            }
            return bars;
        }
Пример #2
0
        /// <summary>
        /// True if QuikQuote is inside QuikBar time interval
        /// </summary>
        /// <param name="bar">QuikBar</param>
        /// <param name="quote">QuikQuote</param>
        /// <param name="dataScale">Bar data scale</param>
        /// <returns></returns>
        private static bool IsNewBarQuote(QuikBar bar, QuikQuote quote, BarDataScale dataScale)
        {
            switch (dataScale.Scale)
            {
                case BarScale.Tick:
                    return true;
                    break;
                case BarScale.Second:
                    return (quote.Time.Second != bar.OpenTime.Second
                        && quote.Time.Second % dataScale.BarInterval == 0);
                    break;
                case BarScale.Minute:
                    return ( quote.Time.Minute != bar.OpenTime.Minute
                        && quote.Time.Minute % dataScale.BarInterval == 0);
                    break;
                case BarScale.Daily:
                case BarScale.Weekly:
                default:
                    return (quote.Time.Day != bar.OpenTime.Day
                        && quote.Time.Day % dataScale.BarInterval == 0);
                    break;
                case BarScale.Monthly:
                case BarScale.Quarterly:
                    return (quote.Time.Month != bar.OpenTime.Month
                        && quote.Time.Month % dataScale.BarInterval == 0);
                    break;
                case BarScale.Yearly:
                    return (quote.Time.Year != bar.OpenTime.Year
                        && quote.Time.Year % dataScale.BarInterval == 0);

            }
        }