public void UpdatesProperly() { var bar = new Bar(); bar.Update(10); Assert.AreEqual(10, bar.Open); Assert.AreEqual(10, bar.High); Assert.AreEqual(10, bar.Low); Assert.AreEqual(10, bar.Close); bar.Update(20); Assert.AreEqual(10, bar.Open); Assert.AreEqual(20, bar.High); Assert.AreEqual(10, bar.Low); Assert.AreEqual(20, bar.Close); bar.Update(5); Assert.AreEqual(10, bar.Open); Assert.AreEqual(20, bar.High); Assert.AreEqual(5, bar.Low); Assert.AreEqual(5, bar.Close); bar.Update(11); Assert.AreEqual(10, bar.Open); Assert.AreEqual(20, bar.High); Assert.AreEqual(5, bar.Low); Assert.AreEqual(11, bar.Close); }
public void HandlesAssetWithValidZeroPrice() { var bar = new Bar(); bar.Update(10); Assert.AreEqual(10, bar.Open); Assert.AreEqual(10, bar.High); Assert.AreEqual(10, bar.Low); Assert.AreEqual(10, bar.Close); bar.Update(0); Assert.AreEqual(10, bar.Open); Assert.AreEqual(10, bar.High); Assert.AreEqual(0, bar.Low); Assert.AreEqual(0, bar.Close); bar.Update(-5); Assert.AreEqual(10, bar.Open); Assert.AreEqual(10, bar.High); Assert.AreEqual(-5, bar.Low); Assert.AreEqual(-5, bar.Close); bar.Update(5); Assert.AreEqual(10, bar.Open); Assert.AreEqual(10, bar.High); Assert.AreEqual(-5, bar.Low); Assert.AreEqual(5, bar.Close); bar.Update(50); Assert.AreEqual(10, bar.Open); Assert.AreEqual(50, bar.High); Assert.AreEqual(-5, bar.Low); Assert.AreEqual(50, bar.Close); }
public void DoesNotHandleAssetsWithZeroPrice() { var bar = new Bar(); bar.Update(10); Assert.AreEqual(10, bar.Open); Assert.AreEqual(10, bar.High); Assert.AreEqual(10, bar.Low); Assert.AreEqual(10, bar.Close); // no update performed bar.Update(0); Assert.AreEqual(10, bar.Open); Assert.AreEqual(10, bar.High); Assert.AreEqual(10, bar.Low); Assert.AreEqual(10, bar.Close); bar.Update(-5); Assert.AreEqual(10, bar.Open); Assert.AreEqual(10, bar.High); Assert.AreEqual(-5, bar.Low); Assert.AreEqual(-5, bar.Close); bar.Update(5); Assert.AreEqual(10, bar.Open); Assert.AreEqual(10, bar.High); Assert.AreEqual(-5, bar.Low); Assert.AreEqual(5, bar.Close); bar.Update(50); Assert.AreEqual(10, bar.Open); Assert.AreEqual(50, bar.High); Assert.AreEqual(-5, bar.Low); Assert.AreEqual(50, bar.Close); }
/// <summary> /// Default initializer to setup an empty quotebar. /// </summary> public QuoteBar() { Symbol = Symbol.Empty; Time = new DateTime(); Bid = new Bar(); Ask = new Bar(); AvgBidSize = 0; AvgAskSize = 0; Value = 0; Period = TimeSpan.FromMinutes(1); DataType = MarketDataType.QuoteBar; }
/// <summary> /// Update the quotebar - build the bar from this pricing information: /// </summary> /// <param name="lastTrade">The last trade price</param> /// <param name="bidPrice">Current bid price</param> /// <param name="askPrice">Current asking price</param> /// <param name="volume">Volume of this trade</param> /// <param name="bidSize">The size of the current bid, if available, if not, pass 0</param> /// <param name="askSize">The size of the current ask, if available, if not, pass 0</param> public override void Update(decimal lastTrade, decimal bidPrice, decimal askPrice, decimal volume, decimal bidSize, decimal askSize) { // update our bid and ask bars - handle null values, this is to give good values for midpoint OHLC if (Bid == null && bidPrice != 0) Bid = new Bar(); if (Bid != null) Bid.Update(bidPrice); if (Ask == null && askPrice != 0) Ask = new Bar(); if (Ask != null) Ask.Update(askPrice); if (bidSize > 0) { LastBidSize = (long) bidSize; } if (askSize > 0) { LastAskSize = (long) askSize; } // be prepared for updates without trades if (lastTrade != 0) Value = lastTrade; else if (askPrice != 0) Value = askPrice; else if (bidPrice != 0) Value = bidPrice; }