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