Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        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);
        }
Esempio n. 4
0
        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;
        }
Esempio n. 6
0
        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);
        }
Esempio n. 7
0
        public void ToTimeframeUnit_ReturnTimeframeUnitMonths_ForMonths()
        {
            //Act
            string        value  = "months";
            TimeframeUnit result = value.ToTimeframeUnit();

            //Assert
            TimeframeUnit expected = TimeframeUnit.Months;

            Assert.AreEqual(expected, result);
        }
Esempio n. 8
0
        public void ToTimeframeUnit_ReturnTimeframeUnitWeeks_ForWeeks()
        {
            //Act
            string        value  = "weeks";
            TimeframeUnit result = value.ToTimeframeUnit();

            //Assert
            TimeframeUnit expected = TimeframeUnit.Weeks;

            Assert.AreEqual(expected, result);
        }
Esempio n. 9
0
        public void ToTimeframeUnit_ReturnTimeframeUnitDays_ForDays()
        {
            //Act
            string        value  = "Days";
            TimeframeUnit result = value.ToTimeframeUnit();

            //Assert
            TimeframeUnit expected = TimeframeUnit.Days;

            Assert.AreEqual(expected, result);
        }
Esempio n. 10
0
        public void ToTimeframeUnit_ReturnTimeframeUnitHours_ForHours()
        {
            //Act
            string        value  = "HOURS";
            TimeframeUnit result = value.ToTimeframeUnit();

            //Assert
            TimeframeUnit expected = TimeframeUnit.Hours;

            Assert.AreEqual(expected, result);
        }
Esempio n. 11
0
        public void ToTimeframeUnit_ReturnTimeframeUnitMinutes_ForMinutes()
        {
            //Act
            string        value  = "MINUTES";
            TimeframeUnit result = value.ToTimeframeUnit();

            //Assert
            TimeframeUnit expected = TimeframeUnit.Minutes;

            Assert.AreEqual(expected, result);
        }
Esempio n. 12
0
        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);
        }
Esempio n. 14
0
        /// <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;
        }
Esempio n. 15
0
 public void ToTimeframeUnit_ThrowsException_ForUnknownTimeframeName()
 {
     //Act
     string        value  = "unknown";
     TimeframeUnit result = value.ToTimeframeUnit();
 }