public void DualTimeframeSignalAdvisor_GeneratesCloseSignal() { //Arrange var forexPair = new TickerSymbol("EURUSD"); var m1Timeframe = new TimeframeUnit(TimeframeOption.M1); var m5Timeframe = new TimeframeUnit(TimeframeOption.M5); var feedService = new PriceFeedService(new ManualPriceFeeder(new MockFeedProvider())); var signalTimeframe = feedService.Setup(forexPair, m1Timeframe, OHLCPriceOption.All); var trendTimeframe = feedService.Setup(forexPair, m5Timeframe, OHLCPriceOption.All); var signalAdvisor = new DualTimeframeSignalAdvisor(signalTimeframe, trendTimeframe); signalAdvisor.Subscribe(feedService); var position = PositionOption.None; signalAdvisor.Buy += delegate(int strength) { position = PositionOption.Buy; }; signalAdvisor.Sell += delegate(int strength) { position = PositionOption.Sell; }; signalAdvisor.Close += delegate() { position = PositionOption.None; }; //Act feedService.OHLC.PriceAction(signalTimeframe, new OHLCBar(DateTime.Now.Ticks, 11, 2, 3, 1)); feedService.OHLC.PriceAction(signalTimeframe, new OHLCBar(DateTime.Now.Ticks, 1, 2, 3, 1)); //Assert Assert.AreEqual(position, PositionOption.None); }
public void SMACrossProbe_OHLCFeed_DoesNotTriggerAnEvent() { //Arrange var forexPair = MockObjectFactory.MockTickerSymbol(MockObjectFactory.EURUSD); var timeFrame = new TimeframeUnit(TimeframeOption.M1); var feedService = MockObjectFactory.MockManualPriceFeedService(); var ticker = feedService.Setup(forexPair.Object, timeFrame, OHLCPriceOption.All); var isTriggered = false; var smaCross = new SMACrossProbe(ticker, 3, 5, () => isTriggered = true); smaCross.Subscribe(feedService); var priceSwing = MockDataFactory.ExtractOHLCPrices(MockDataFactory.PriceSwingBeginMarker, MockDataFactory.PriceSwingEndMarker, -1); //Act priceSwing.ForEach((s) => feedService.OHLC.PriceAction(ticker, s)); //Assert Assert.IsFalse(isTriggered); Assert.AreEqual(0, smaCross.Length); }
public void SingleTimeframeSignalAdvisor_ClosesSellPositionOnReversal() { //Arrange var forexPair = new TickerSymbol("EURUSD"); var timeFrame = new TimeframeUnit(TimeframeOption.M1); var feedService = new PriceFeedService(new ManualPriceFeeder(new MockFeedProvider())); var signalTimeframe = feedService.Setup(forexPair, timeFrame, OHLCPriceOption.All); var signalAdvisor = new SingleTimeframeSignalAdvisor(signalTimeframe); signalAdvisor.Subscribe(feedService); var position = PositionOption.None; var closed = false; signalAdvisor.Buy += delegate(int strength) { position = PositionOption.Buy; }; signalAdvisor.Sell += delegate(int strength) { position = PositionOption.Sell; }; signalAdvisor.Close += delegate() { position = PositionOption.None; closed = true; }; //Act feedService.OHLC.PriceAction(signalTimeframe, new OHLCBar(DateTime.Now.Ticks, 11, 2, 3, 1)); feedService.OHLC.PriceAction(signalTimeframe, new OHLCBar(DateTime.Now.Ticks, 1, 2, 3, 11)); //Assert Assert.AreEqual(position, PositionOption.Buy); Assert.IsTrue(closed); }
public void SMACrossProbe_PriceBarOptionFeedTriggersAnEvent() { //Arrange var forexPair = MockObjectFactory.MockTickerSymbol(MockObjectFactory.EURUSD); var timeFrame = new TimeframeUnit(TimeframeOption.M1); var feedService = MockObjectFactory.MockManualPriceFeedService(); var ticker = feedService.Setup(forexPair.Object, timeFrame, PriceBarOption.Close); var isTriggered = false; var smaCross = new SMACrossProbe(ticker, 2, 5, () => isTriggered = true); smaCross.Subscribe(feedService); feedService.Start(); var priceSwing = MockDataFactory.ExtractPrices(MockDataFactory.PriceSwingBeginMarker, MockDataFactory.PriceSwingEndMarker); //Act priceSwing.ForEach((s) => feedService.PriceBar.PriceAction(ticker, s.TimeStamp, PriceBarOption.Close, s.Close)); //Assert Assert.IsTrue(isTriggered); Assert.IsTrue(smaCross.Current.Status == EventStateOption.On); }
/// <summary> /// Constructor /// </summary> public Candle(DateTime date, //DateTime dateOutput, double bidOpen, double bidHigh, double bidLow, double bidClose, double askOpen, double askHigh, double askLow, double askClose, double volume, bool isCompleted, Timeframe timeframe, int precision) { mDate = date; // mDateOutput = dateOutput; mBidOpen = bidOpen; mBidHigh = bidHigh; mBidLow = bidLow; mBidClose = bidClose; mAskOpen = askOpen; mAskHigh = askHigh; mAskLow = askLow; mAskClose = askClose; mVolume = volume; mTimeframeUnit = timeframe.Unit; mIsCompleted = isCompleted; mPrecision = precision; }
public void SingleTimeframeSignalAdvisor_GeneratesBuySignal() { //Arrange var feeder = new ManualPriceFeeder(new MockFeedProvider()); var forexPair = new TickerSymbol("EURUSD"); var timeFrame = new TimeframeUnit(TimeframeOption.M1); var feedService = new PriceFeedService(feeder); var signalTimeframe = feedService.Setup(forexPair, timeFrame, OHLCPriceOption.All); var signalAdvisor = new SingleTimeframeSignalAdvisor(signalTimeframe); signalAdvisor.Subscribe(feedService); feedService.Start(); var position = PositionOption.None; signalAdvisor.Buy += delegate(int strength) { position = PositionOption.Buy; }; signalAdvisor.Sell += delegate(int strength) { position = PositionOption.Sell; }; signalAdvisor.Close += delegate() { position = PositionOption.None; }; //Act feeder.MinutePriceAction(signalTimeframe, new PriceBar(DateTime.Now.Ticks, 1, 2, 3, 11)); //Assert Assert.AreEqual(PositionOption.Buy, position); Assert.AreEqual(signalAdvisor.Position, PositionOption.Buy); Assert.AreEqual(100, signalAdvisor.PositionStrength); }
public void ToTimeframeUnit_ReturnTimeframeUnitMonths_ForMonths() { //Act string value = "months"; TimeframeUnit result = value.ToTimeframeUnit(); //Assert TimeframeUnit expected = TimeframeUnit.Months; Assert.AreEqual(expected, result); }
public void ToTimeframeUnit_ReturnTimeframeUnitWeeks_ForWeeks() { //Act string value = "weeks"; TimeframeUnit result = value.ToTimeframeUnit(); //Assert TimeframeUnit expected = TimeframeUnit.Weeks; Assert.AreEqual(expected, result); }
public void ToTimeframeUnit_ReturnTimeframeUnitDays_ForDays() { //Act string value = "Days"; TimeframeUnit result = value.ToTimeframeUnit(); //Assert TimeframeUnit expected = TimeframeUnit.Days; Assert.AreEqual(expected, result); }
public void ToTimeframeUnit_ReturnTimeframeUnitHours_ForHours() { //Act string value = "HOURS"; TimeframeUnit result = value.ToTimeframeUnit(); //Assert TimeframeUnit expected = TimeframeUnit.Hours; Assert.AreEqual(expected, result); }
public void ToTimeframeUnit_ReturnTimeframeUnitMinutes_ForMinutes() { //Act string value = "MINUTES"; TimeframeUnit result = value.ToTimeframeUnit(); //Assert TimeframeUnit expected = TimeframeUnit.Minutes; Assert.AreEqual(expected, result); }
public void EMAProbe_ReactsToPriceFeed() { var forexPair = MockObjectFactory.MockTickerSymbol(MockObjectFactory.EURUSD); var timeFrame = new TimeframeUnit(TimeframeOption.M1); var feedService = MockObjectFactory.MockManualPriceFeedService(); var ticker = feedService.Setup(forexPair, timeFrame, OHLCPriceOption.All); var probe = new EMAProbe(ticker, 3); probe.Subscribe(feedService); var priceSwing = MockDataFactory.ExtractOHLCPrices(MockDataFactory.PriceSwingBeginMarker, MockDataFactory.PriceSwingEndMarker); //Act priceSwing.ForEach((s) => feedService.OHLC.PriceAction(ticker, s)); //Assert Assert.IsTrue(probe.Length > 0); }
public string GetFormattedDate(DateTime dDisplayDate, TimeframeUnit timeFrameUnit) { string sDisplayDate = string.Empty; switch (timeFrameUnit) { case TimeframeUnit.Minute: sDisplayDate = dDisplayDate.ToString(string.Format("dd'/'MM'/'yyyy'{0}'HH:mm", mDateTimeSeparator)); break; case TimeframeUnit.Hour: sDisplayDate = dDisplayDate.ToString(string.Format("dd'/'MM'/'yyyy'{0}'HH:mm", mDateTimeSeparator)); break; case TimeframeUnit.Day: dDisplayDate = dDisplayDate.AddDays(1); //sDisplayDate = dDisplayDate.ToString("dd'/'MM'/'yyyy"); sDisplayDate = dDisplayDate.ToString(string.Format("dd'/'MM'/'yyyy'{0}'HH:mm", mDateTimeSeparator)); break; case TimeframeUnit.Week: dDisplayDate = dDisplayDate.AddDays(1); //sDisplayDate = dDisplayDate.ToString("dd'/'MM'/'yyyy"); sDisplayDate = dDisplayDate.ToString(string.Format("dd'/'MM'/'yyyy'{0}'HH:mm", mDateTimeSeparator)); break; case TimeframeUnit.Month: dDisplayDate = dDisplayDate.AddDays(1); //sDisplayDate = dDisplayDate.ToString("MM'/'yyyy"); sDisplayDate = dDisplayDate.ToString(string.Format("dd'/'MM'/'yyyy'{0}'HH:mm", mDateTimeSeparator)); break; case TimeframeUnit.Year: dDisplayDate = dDisplayDate.AddDays(1); //sDisplayDate = dDisplayDate.ToString("yyyy"); sDisplayDate = dDisplayDate.ToString(string.Format("dd'/'MM'/'yyyy'{0}'HH:mm", mDateTimeSeparator)); break; } return(sDisplayDate); }
/// <summary> /// Constructor /// </summary> public Timeframe(TimeframeUnit unit, int length) { if (length <= 0) { throw new ArgumentException("The length cannot be zero or negative"); } //validate length switch (unit) { case TimeframeUnit.Minute: if (length >= MINUTES_IN_DAY || ((MINUTES_IN_DAY % length) != 0)) { throw new ArgumentException("Minute time frame must be shorter than a day and there must be the whole number of bars in a day"); } if (length == 1) { mGetCandle = new GetCandleDelegate(this.GetCandleOneMinute); } else { mGetCandle = new GetCandleDelegate(this.GetCandleNMinutes); } mLengthInSeconds = (long)length * 60; break; case TimeframeUnit.Hour: if (length >= 24 || ((24 % length) != 0)) { throw new ArgumentException("Hour time frame must be shorter than a day and there must be the whole number of bars in a day"); } mGetCandle = new GetCandleDelegate(this.GetCandleNMinutes); mLengthInSeconds = (long)length * 3600; break; case TimeframeUnit.Day: if (length >= 365) { throw new ArgumentException("Day frame frame must be shorter than an year"); } mLengthInSeconds = (long)length * SECONDS_IN_DAY; if (length == 1) { mGetCandle = new GetCandleDelegate(this.GetCandleOneDay); } else { mGetCandle = new GetCandleDelegate(this.GetCandleNDays); } break; case TimeframeUnit.Week: if (length != 1) { throw new ArgumentException("1-week period only is supported"); } mGetCandle = new GetCandleDelegate(this.GetCandleWeek); break; case TimeframeUnit.Month: if (length >= 12 || ((12 % length) != 0)) { throw new ArgumentException("Month time frame must be shorter than an year and there must be the whole number of bars in an year"); } mGetCandle = new GetCandleDelegate(this.GetCandleMonth); break; case TimeframeUnit.Year: if (length != 1) { throw new ArgumentException("1-year period only is supported"); } mGetCandle = new GetCandleDelegate(this.GetCandleYear); break; } mUnit = unit; mLength = length; }
public void ToTimeframeUnit_ThrowsException_ForUnknownTimeframeName() { //Act string value = "unknown"; TimeframeUnit result = value.ToTimeframeUnit(); }