internal void Refresh() { lock (m_synchronizer) { Algorithm.Swap(ref m_first, ref m_second); m_first.Clear(); } foreach (var element in m_second) { m_quotes.Enqueue(element); m_last = element; } long now = EnvironmentEx.GetTickCountEx(); for (; m_quotes.Count > 0;) { QuoteEx entry = m_quotes.Peek(); long delta = (now - entry.Time); if (delta > m_intervalInMs) { m_quotes.Dequeue(); } else { break; } } m_time = now; }
internal static GraphPart CreateAsks(double requiredVolume, Quotes quotes) { GraphPart result = new GraphPart(quotes); List <Point2F> points = result.m_points; long now = quotes.Time; foreach (var element in quotes.Items) { Point2F point = new Point2F(); point.X = (element.Time - now) / 1000.0F; point.Y = MathEx.CalculateWAVP(requiredVolume, element.Quote.Asks); points.Add(point); } QuoteEx quote = quotes.Last; if (null != quote.Quote) { Point2F point = new Point2F(); point.X = (quote.Time - now) / 1000.0F; if (point.X < -quotes.Interval) { point.X = -(float)quotes.Interval; } point.Y = MathEx.CalculateWAVP(requiredVolume, quote.Quote.Asks); points.Add(point); } return(result); }
internal void Add(Quote quote) { lock (m_synchronizer) { long now = EnvironmentEx.GetTickCountEx(); QuoteEx entry = new QuoteEx(now, quote); m_first.Add(entry); } }
internal void Set(Quote[] quotes) { m_quotes.Clear(); Quote last = quotes.Last(); m_time = 0; foreach (var element in quotes) { long time = (long)(element.CreatingTime - last.CreatingTime).TotalMilliseconds; long delta = (m_time - time); if (delta <= m_intervalInMs) { QuoteEx quote = new QuoteEx(time, element); m_quotes.Enqueue(quote); } } }
private static void WriteQuote(double lotSize, double roundingStepOfPrice, IEnumerable <double> volumes, QuoteEx quote, long start, StringBuilder builder) { double delta = (quote.Time - start) / 1000.0; builder.Append(delta); builder.AppendFormat(",{0}", quote.Quote.CreatingTime.ToString("yyyy-MM-ddTHH:mm:ss.fff")); foreach (var element in volumes) { float?bid = MathEx.CalculateWAVP(element * lotSize, quote.Quote.Bids); float?ask = MathEx.CalculateWAVP(element * lotSize, quote.Quote.Asks); if (bid.HasValue) { bid = (float)MathEx.RoundDown(bid.Value, roundingStepOfPrice); } if (ask.HasValue) { ask = (float)MathEx.RoundUp(ask.Value, roundingStepOfPrice); } builder.AppendFormat(",{0},{1}", bid, ask); } builder.AppendLine(); }