Exemplo n.º 1
0
        public void Clustering_OneClusterExpectedWithinValueRange_ReturnsOneBreach()
        {
            A.CallTo(() => this._equitiesParameters.PerformClusteringPositionAnalysis).Returns(true);

            var rule = new WashTradeRule(
                this._equitiesParameters,
                this._ruleCtx,
                this._clustering,
                this._alertStream,
                this._currencyConverterService,
                this._orderFilter,
                this._equityFactory,
                this._fixedIncomeFactory,
                RuleRunMode.ValidationRun,
                this._logger,
                this._tradingLogger);

            var tr1 = new Order().Random(19);
            var tr2 = new Order().Random(21);

            tr1.OrderDirection = OrderDirections.BUY;
            tr2.OrderDirection = OrderDirections.SELL;

            tr1.OrderAverageFillPrice = tr2.OrderAverageFillPrice;
            tr1.OrderFilledVolume     = 950;
            tr2.OrderFilledVolume     = 1000;

            var trades = new List <Order> {
                tr1, tr2
            };
            var result = rule.ClusteringTrades(trades);

            Assert.AreEqual(result.ClusteringPositionBreach, true);
            Assert.AreEqual(result.AmountOfBreachingClusters, 1);
        }
Exemplo n.º 2
0
        private WashTradeRule BuildRule()
        {
            var rule = new WashTradeRule(
                this._equitiesParameters,
                this._ruleCtx,
                this._clustering,
                this._alertStream,
                this._currencyConverterService,
                this._orderFilter,
                this._equityFactory,
                this._fixedIncomeFactory,
                RuleRunMode.ValidationRun,
                this._logger,
                this._tradingLogger);

            return(rule);
        }
Exemplo n.º 3
0
        public void Clustering_DontPerformAnalysis_ReturnsNoBreach()
        {
            A.CallTo(() => this._equitiesParameters.PerformClusteringPositionAnalysis).Returns(false);

            var rule = new WashTradeRule(
                this._equitiesParameters,
                this._ruleCtx,
                this._clustering,
                this._alertStream,
                this._currencyConverterService,
                this._orderFilter,
                this._equityFactory,
                this._fixedIncomeFactory,
                RuleRunMode.ValidationRun,
                this._logger,
                this._tradingLogger);

            var result = rule.ClusteringTrades(null);

            Assert.AreEqual(result.ClusteringPositionBreach, false);
        }
Exemplo n.º 4
0
        public void Clustering_FourClusterExpectedWithTwoWithinValueRange_ReturnsOneBreach()
        {
            A.CallTo(() => this._equitiesParameters.PerformClusteringPositionAnalysis).Returns(true);

            var rule = new WashTradeRule(
                this._equitiesParameters,
                this._ruleCtx,
                this._clustering,
                this._alertStream,
                this._currencyConverterService,
                this._orderFilter,
                this._equityFactory,
                this._fixedIncomeFactory,
                RuleRunMode.ValidationRun,
                this._logger,
                this._tradingLogger);

            var tr1 = new Order().Random(21);
            var tr2 = new Order().Random(21);

            var tr3 = new Order().Random(100);
            var tr4 = new Order().Random(101);

            var tr5 = new Order().Random(50);
            var tr6 = new Order().Random(70);

            tr1.OrderDirection    = OrderDirections.BUY;
            tr2.OrderDirection    = OrderDirections.SELL;
            tr1.OrderFilledVolume = 950;
            tr2.OrderFilledVolume = 1000;
            tr1.FilledDate        = DateTime.UtcNow.AddMinutes(5);
            tr2.FilledDate        = DateTime.UtcNow.AddMinutes(5);

            tr3.OrderDirection    = OrderDirections.BUY;
            tr4.OrderDirection    = OrderDirections.SELL;
            tr4.OrderFilledVolume = 1500;
            tr3.OrderFilledVolume = 1500;
            tr3.FilledDate        = DateTime.UtcNow.AddMinutes(10);
            tr4.FilledDate        = DateTime.UtcNow.AddMinutes(10);

            tr5.OrderDirection    = OrderDirections.BUY;
            tr6.OrderDirection    = OrderDirections.SELL;
            tr6.OrderFilledVolume = 1500;
            tr5.OrderFilledVolume = 1500;
            tr5.FilledDate        = DateTime.UtcNow.AddMinutes(15);
            tr6.FilledDate        = DateTime.UtcNow.AddMinutes(15);

            var trades = new List <Order>
            {
                tr1,
                tr2,
                tr3,
                tr4,
                tr5,
                tr6
            };
            var result = rule.ClusteringTrades(trades);

            Assert.AreEqual(result.ClusteringPositionBreach, true);
            Assert.IsTrue(result.AmountOfBreachingClusters < 3);
        }