public void GetChartPoints_IfOnlyMasterPeakExtremumWithLongShadow_OnlyLimitedNumberOfPointsIsCreated()
        {
            //Arrange
            DataSet   ds5        = utf.getDataSet(5);
            Price     basePrice  = utf.getPrice(ds5);
            Extremum  master     = new Extremum(basePrice, ExtremumType.PeakByClose);
            Quotation quotation5 = new Quotation(ds5)
            {
                Id = 5, Open = 1.09193, High = 1.09307, Low = 1.09165, Close = 1.09207, Volume = 1819
            };
            ExtremumGroup          extremumGroup = new ExtremumGroup(master, null);
            Mock <IProcessManager> mockManager   = new Mock <IProcessManager>();

            mockManager.Setup(m => m.GetDataSet(5)).Returns(ds5);

            //Act
            TrendlineProcessor processor = new TrendlineProcessor(mockManager.Object);

            //Assert
            processor.MaxChartPointsForExtremumGroup = 6;
            processor.MinDistanceBetweenChartPoints  = 0.0001;
            var result         = processor.GetChartPoints(extremumGroup);
            var expectedResult = new List <ChartPoint>();

            expectedResult.Add(new ChartPoint(master.GetIndexNumber(), 1.09207));
            expectedResult.Add(new ChartPoint(master.GetIndexNumber(), 1.09227));
            expectedResult.Add(new ChartPoint(master.GetIndexNumber(), 1.09247));
            expectedResult.Add(new ChartPoint(master.GetIndexNumber(), 1.09267));
            expectedResult.Add(new ChartPoint(master.GetIndexNumber(), 1.09287));
            expectedResult.Add(new ChartPoint(master.GetIndexNumber(), 1.09307));
            var isEqual = expectedResult.HasEqualItems(result);

            Assert.IsTrue(isEqual);
        }
        public void GetChartPoints_IfOnlySlavePeakExtremumWithShortShadow_PointsFromShadowTopToHighestAdjacentShadow()
        {
            //Arrange
            DataSet   ds5        = utf.getDataSet(5);
            Price     price5     = utf.getPrice(ds5);
            Quotation quotation5 = new Quotation(ds5)
            {
                Id = 5, Open = 1.09193, High = 1.09209, Low = 1.09165, Close = 1.09207, Volume = 1819
            };
            Extremum               slave         = new Extremum(price5, ExtremumType.PeakByHigh);
            ExtremumGroup          extremumGroup = new ExtremumGroup(null, slave);
            Mock <IProcessManager> mockManager   = new Mock <IProcessManager>();

            mockManager.Setup(m => m.GetDataSet(5)).Returns(ds5);

            //Act
            TrendlineProcessor processor = new TrendlineProcessor(mockManager.Object);

            processor.MinDistanceBetweenChartPoints = 1;

            //Assert
            processor.MaxChartPointsForExtremumGroup = 6;
            processor.MinDistanceBetweenChartPoints  = 0.0001;
            var result         = processor.GetChartPoints(extremumGroup);
            var expectedResult = new List <ChartPoint>();

            expectedResult.Add(new ChartPoint(slave.GetIndexNumber(), 1.09207));
            expectedResult.Add(new ChartPoint(slave.GetIndexNumber(), 1.09209));
            var isEqual = expectedResult.HasEqualItems(result);

            Assert.IsTrue(isEqual);
        }
Example #3
0
        public void GetIndexNumberForLevelForTrough_IfThereAreBothQuotationsAndLevelLowerThanMasterLowPrice_ReturnsSlaveQuotationIndexNumber()
        {
            //Arrange
            DataSet   ds5        = utf.getDataSet(5);
            Price     price5     = utf.getPrice(ds5);
            Quotation quotation5 = new Quotation(ds5)
            {
                Id = 5, Open = 1.09127, High = 1.09235, Low = 1.09015, Close = 1.09067, Volume = 1519
            };
            Extremum master = new Extremum(price5, ExtremumType.TroughByClose);

            DataSet   ds6        = utf.getDataSet(6);
            Price     price6     = utf.getPrice(ds6);
            Quotation quotation6 = new Quotation(ds6)
            {
                Id = 6, Open = 1.09067, High = 1.09102, Low = 1.08947, Close = 1.09087, Volume = 1819
            };
            Extremum slave = new Extremum(price6, ExtremumType.TroughByLow);

            ExtremumGroup extremumGroup = new ExtremumGroup(master, slave);


            //Act
            int indexNumber = extremumGroup.GetIndexNumberForLevel(1.0900);


            //Assert
            int expectedIndex = 6;

            Assert.AreEqual(expectedIndex, indexNumber);
        }
Example #4
0
        public void ExtremumGroup_Constructor_IfTroughMasterAndPeakSlaveIsGiven_ExceptionIsThrown()
        {
            //Arrange
            Price    p   = utf.getPrice(10);
            Extremum ex1 = new Extremum(p, ExtremumType.TroughByClose);
            Extremum ex2 = new Extremum(p, ExtremumType.PeakByHigh);

            //Act
            ExtremumGroup eg = new ExtremumGroup(ex1, ex2);
        }
Example #5
0
        private Dictionary <int, ExtremumGroup> GetExtremumGroupsMap(int assetId, int timeframeId)
        {
            _repository = new EFTrendlineRepository();
            Dictionary <int, ExtremumGroup> map = new Dictionary <int, ExtremumGroup>();

            foreach (var dto in _repository.GetExtremumGroups(assetId, timeframeId))
            {
                var eg = ExtremumGroup.FromDto(dto);
                map.Add(eg.ExtremumGroupId, eg);
            }
            return(map);
        }
Example #6
0
        public void ExtremumGroup_Constructor_IfPeakMasterAndTroughSlaveIsGiven_ExceptionIsThrown()
        {
            //Arrange
            Price    p   = utf.getPrice(10);
            Extremum ex1 = new Extremum(p, ExtremumType.PeakByClose);
            Extremum ex2 = new Extremum(p, ExtremumType.TroughByLow);

            //Act
            ExtremumGroup eg = new ExtremumGroup(ex1, ex2);

            //Assert
            Assert.AreEqual(false, eg.IsPeak);
        }
Example #7
0
        public void ExtremumGroup_Constructor_ForTroughExtremum_IsPeakPropertyIsCorrectlySet()
        {
            //Arrange
            Price    p   = utf.getPrice(10);
            Extremum ex1 = new Extremum(p, ExtremumType.TroughByClose);
            Extremum ex2 = new Extremum(p, ExtremumType.TroughByLow);

            //Act
            ExtremumGroup eg = new ExtremumGroup(ex1, ex2);

            //Assert
            Assert.AreEqual(false, eg.IsPeak);
        }
Example #8
0
        public void ExtremumGroup_Constructor_IfOnlySlavePassed_ProperObjectIsCreated()
        {
            //Arrange
            Price    p  = utf.getPrice(10);
            Extremum ex = new Extremum(p, ExtremumType.PeakByHigh);

            //Act
            ExtremumGroup eg = new ExtremumGroup(null, ex);

            //Assert
            Assert.IsNotNull(eg);
            Assert.AreEqual(ex, eg.MasterExtremum);
            Assert.AreEqual(ex, eg.SecondExtremum);
        }
Example #9
0
        public void ExtremumGroup_Constructor_IfMasterAndSlavedPassed_ProperObjectIsCreated()
        {
            //Arrange
            Price    p   = utf.getPrice(10);
            Extremum ex1 = new Extremum(p, ExtremumType.PeakByClose);
            Extremum ex2 = new Extremum(p, ExtremumType.PeakByHigh);

            //Act
            ExtremumGroup eg = new ExtremumGroup(ex1, ex2);

            //Assert
            Assert.IsNotNull(eg);
            Assert.AreEqual(ex1, eg.MasterExtremum);
            Assert.AreEqual(ex2, eg.SecondExtremum);
        }
Example #10
0
        public void GetIndexNumberForLevelForTrough_ThrowsArgumentException_IfQuotationLevelAboveRange()
        {
            //Arrange
            DataSet   ds5        = utf.getDataSet(5);
            Price     price5     = utf.getPrice(ds5);
            Quotation quotation5 = new Quotation(ds5)
            {
                Id = 5, Open = 1.09127, High = 1.09235, Low = 1.09095, Close = 1.09157, Volume = 1519
            };
            Extremum      slave         = new Extremum(price5, ExtremumType.TroughByLow);
            ExtremumGroup extremumGroup = new ExtremumGroup(null, slave);

            //Act
            int indexNumber = extremumGroup.GetIndexNumberForLevel(1.0916);
        }
Example #11
0
        public void GetIndexNumberForLevelForPeak_ThrowsArgumentException_IfQuotationLevelAboveRange()
        {
            //Arrange
            DataSet   ds5        = utf.getDataSet(5);
            Price     price5     = utf.getPrice(ds5);
            Quotation quotation5 = new Quotation(ds5)
            {
                Id = 5, Open = 1.09127, High = 1.09235, Low = 1.09095, Close = 1.09207, Volume = 1519
            };
            Extremum      master        = new Extremum(price5, ExtremumType.PeakByClose);
            ExtremumGroup extremumGroup = new ExtremumGroup(master, null);

            //Act
            int indexNumber = extremumGroup.GetIndexNumberForLevel(1.0941);
        }
Example #12
0
        public void GetLateIndexNumber_IfThereIsOnlyMasterExtremum_MasterExtremumIndexIsReturned()
        {
            //Arrange
            DataSet       ds        = utf.getDataSet(50);
            Price         price     = utf.getPrice(ds);
            Quotation     quotation = new Quotation(ds);
            Extremum      master    = new Extremum(price, ExtremumType.PeakByClose);
            ExtremumGroup group     = new ExtremumGroup(master, null);

            //Assert
            int lateIndexNumber = group.GetLateIndexNumber();

            //Act
            int expected = 50;

            Assert.AreEqual(expected, lateIndexNumber);
        }
Example #13
0
        public void GetLateIndexNumber_IfThereIsOnlySlaveExtremum_SlaveExtremumIndexIsReturned()
        {
            //Arrange
            DataSet       ds        = utf.getDataSet(51);
            Price         price     = utf.getPrice(ds);
            Quotation     quotation = new Quotation(ds);
            Extremum      slave     = new Extremum(price, ExtremumType.PeakByHigh);
            ExtremumGroup group     = new ExtremumGroup(null, slave);

            //Assert
            int lateIndexNumber = group.GetLateIndexNumber();

            //Act
            int expected = 51;

            Assert.AreEqual(expected, lateIndexNumber);
        }
        public void GetChartPoints_IfBothPeakExtremaAndSlaveLater_PointsAreProperlyGenerated()
        {
            //Arrange
            DataSet   ds5        = utf.getDataSet(5);
            Price     price5     = utf.getPrice(ds5);
            Quotation quotation5 = new Quotation(ds5)
            {
                Id = 5, Open = 1.09127, High = 1.09235, Low = 1.09095, Close = 1.09207, Volume = 1519
            };
            Extremum master = new Extremum(price5, ExtremumType.PeakByClose);

            DataSet   ds6        = utf.getDataSet(6);
            Price     price6     = utf.getPrice(ds6);
            Quotation quotation6 = new Quotation(ds6)
            {
                Id = 6, Open = 1.09207, High = 1.09307, Low = 1.08947, Close = 1.09067, Volume = 1819
            };
            Extremum slave = new Extremum(price6, ExtremumType.PeakByHigh);


            ExtremumGroup          extremumGroup = new ExtremumGroup(master, slave);
            Mock <IProcessManager> mockManager   = new Mock <IProcessManager>();

            mockManager.Setup(m => m.GetDataSet(5)).Returns(ds5);
            mockManager.Setup(m => m.GetDataSet(6)).Returns(ds6);

            //Act
            TrendlineProcessor processor = new TrendlineProcessor(mockManager.Object);

            //Assert
            processor.MaxChartPointsForExtremumGroup = 6;
            processor.MinDistanceBetweenChartPoints  = 0.0001;
            var result         = processor.GetChartPoints(extremumGroup);
            var expectedResult = new List <ChartPoint>();

            expectedResult.Add(new ChartPoint(master.GetIndexNumber(), 1.09207));
            expectedResult.Add(new ChartPoint(master.GetIndexNumber(), 1.09227));
            expectedResult.Add(new ChartPoint(slave.GetIndexNumber(), 1.09247));
            expectedResult.Add(new ChartPoint(slave.GetIndexNumber(), 1.09267));
            expectedResult.Add(new ChartPoint(slave.GetIndexNumber(), 1.09287));
            expectedResult.Add(new ChartPoint(slave.GetIndexNumber(), 1.09307));
            var isEqual = expectedResult.HasEqualItems(result);

            Assert.IsTrue(isEqual);
        }
Example #15
0
        public void GetLateIndexNumber_IfMasterExtremumIsEarlier_SlaveExtremumIndexIsReturned()
        {
            //Arrange
            Price price50 = utf.getPrice(50);
            Price price51 = utf.getPrice(51);

            Extremum      master = new Extremum(price50, ExtremumType.PeakByClose);
            Extremum      slave  = new Extremum(price51, ExtremumType.PeakByHigh);
            ExtremumGroup group  = new ExtremumGroup(master, slave);

            //Assert
            int lateIndexNumber = group.GetLateIndexNumber();

            //Act
            int expected = 51;

            Assert.AreEqual(expected, lateIndexNumber);
        }
Example #16
0
        public void GetIndexNumberForLevelForTrough_IfThereIsOnlySlaveQuotation_ReturnsSlaveQuotationIndexNumber()
        {
            //Arrange
            DataSet   ds5        = utf.getDataSet(5);
            Price     price5     = utf.getPrice(ds5);
            Quotation quotation5 = new Quotation(ds5)
            {
                Id = 5, Open = 1.09127, High = 1.09235, Low = 1.09065, Close = 1.09107, Volume = 1519
            };
            Extremum      slave         = new Extremum(price5, ExtremumType.TroughByLow);
            ExtremumGroup extremumGroup = new ExtremumGroup(null, slave);

            //Act
            int indexNumber = extremumGroup.GetIndexNumberForLevel(1.09075);

            //Assert
            int expectedIndex = 5;

            Assert.AreEqual(expectedIndex, indexNumber);
        }
Example #17
0
        public void GetIndexNumberForLevelForPeak_IfThereIsOnlyMasterQuotation_ReturnsMasterQuotationIndexNumber()
        {
            //Arrange
            DataSet   ds5        = utf.getDataSet(5);
            Price     price5     = utf.getPrice(ds5);
            Quotation quotation5 = new Quotation(ds5)
            {
                Id = 5, Open = 1.09127, High = 1.09235, Low = 1.09095, Close = 1.09207, Volume = 1519
            };
            Extremum      master        = new Extremum(price5, ExtremumType.PeakByClose);
            ExtremumGroup extremumGroup = new ExtremumGroup(master, null);

            //Act
            int indexNumber = extremumGroup.GetIndexNumberForLevel(1.09208);

            //Assert
            int expectedIndex = 5;

            Assert.AreEqual(expectedIndex, indexNumber);
        }
Example #18
0
        private Dictionary <int, TrendHit> GetTrendHitsMap(int assetId, int timeframeId)
        {
            _repository = new EFTrendlineRepository();
            IEnumerable <TrendHitDto>  dtos         = _repository.GetTrendHits();
            IEnumerable <TrendHit>     trendHits    = dtos.Select(th => TrendHit.FromDto(th));
            Dictionary <int, TrendHit> trendHitsMap = new Dictionary <int, TrendHit>();

            Dictionary <int, ExtremumGroup> extremumGroupsMap = GetExtremumGroupsMap(assetId, timeframeId);

            foreach (var trendHit in trendHits)
            {
                ExtremumGroup eg = null;
                extremumGroupsMap.TryGetValue(trendHit.ExtremumGroupId, out eg);
                if (eg != null)
                {
                    trendHit.ExtremumGroup = eg;
                }
                trendHitsMap.Add(trendHit.TrendHitId, trendHit);
            }

            return(trendHitsMap);
        }
        public void CanCreateTrendlines_ReturnTrue_IfDistanceIsSuitable()
        {
            //Arrange
            Mock <IProcessManager> mockManager = new Mock <IProcessManager>();
            Price         basePrice            = utf.getPrice(100);
            Extremum      baseMaster           = new Extremum(basePrice, ExtremumType.PeakByClose);
            ExtremumGroup baseExtremumGroup    = new ExtremumGroup(baseMaster, null);

            Price         footholdPrice         = utf.getPrice(200);
            Extremum      footholdMaster        = new Extremum(footholdPrice, ExtremumType.PeakByClose);
            ExtremumGroup footholdExtremumGroup = new ExtremumGroup(footholdMaster, null);

            //Act
            TrendlineProcessor processor = new TrendlineProcessor(mockManager.Object);

            processor.MaxDistanceBetweenExtrema = 150;

            //Assert
            var result = processor.CanCreateTrendline(baseExtremumGroup, footholdExtremumGroup);

            Assert.IsTrue(result);
        }
Example #20
0
        private Trendline getDefaultTrendline()
        {
            AtsSettings settings = new AtsSettings(DEFAULT_ASSET_ID, DEFAULT_TIMEFRAME_ID, DEFAULT_SIMULATION_ID);

            Price          basePrice  = getPrice(DEFAULT_START_INDEX);
            Extremum       baseMaster = new Extremum(basePrice, ExtremumType.PeakByClose);
            ExtremumGroup  baseGroup  = new ExtremumGroup(baseMaster, null);
            TrendlinePoint basePoint  = new TrendlinePoint(baseGroup, DEFAULT_START_LEVEL);

            Price          secondPrice   = getPrice(DEFAULT_FOOTHOLD_INDEX);
            Extremum       secondMaster  = new Extremum(secondPrice, ExtremumType.PeakByClose);
            ExtremumGroup  secondGroup   = new ExtremumGroup(secondMaster, null);
            TrendlinePoint footholdPoint = new TrendlinePoint(secondGroup, DEFAULT_FOOTHOLD_LEVEL);

            Trendline trendline = new Trendline(settings, basePoint, footholdPoint);

            trendline.Id                 = DEFAULT_ID;
            trendline.Value              = DEFAULT_VALUE;
            trendline.LastUpdateIndex    = DEFAULT_LAST_UPDATE_INDEX;
            trendline.FootholdSlaveIndex = DEFAULT_FOOTHOLD_SLAVE_INDEX;
            trendline.CurrentIsPeak      = DEFAULT_CURRENT_IS_PEAK;

            return(trendline);
        }
Example #21
0
 public IEnumerable <ExtremumGroup> GetExtremumGroups(int assetId, int timeframeId)
 {
     _repository = new EFTrendlineRepository();
     return(_repository.GetExtremumGroups(assetId, timeframeId).Select(dto => ExtremumGroup.FromDto(dto)));
 }
Example #22
0
 public void ExtremumGroup_Constructor_IfNoneExtremumIsGiven_ExceptionIsThrown()
 {
     //Act
     ExtremumGroup eg = new ExtremumGroup(null, null);
 }