Exemple #1
0
        public void ProfitCorrectlyCalculatedAfterReversing()
        {
            var pos = new CurrencyPosition(_currency);

            decimal fxRate   = 1.35m;
            int     quantity = 1000;

            var transaction1 = new FXTransaction
            {
                Quantity   = quantity,
                Proceeds   = fxRate * quantity,
                Cost       = -fxRate * quantity,
                FXCurrency = _currency
            };

            pos.AddFXTransaction(transaction1);

            decimal newFxRate    = 1.36m;
            int     newQuantity  = -2000;
            var     transaction2 = new FXTransaction
            {
                Quantity   = newQuantity,
                Proceeds   = newFxRate * newQuantity,
                Cost       = -newFxRate * newQuantity,
                FXCurrency = _currency
            };

            pos.AddFXTransaction(transaction2);

            Assert.AreEqual(quantity * (newFxRate - fxRate), pos.RealizedPnL);

            pos.Update(newFxRate);

            Assert.AreEqual(quantity * (newFxRate - fxRate), pos.TotalPnL);
        }
Exemple #2
0
        public void RealizedProfitsWithUpdateBetweenTradesCalculatedCorrectly()
        {
            var pos = new CurrencyPosition(_currency);

            decimal fxRate   = 1.35m;
            int     quantity = 1000;

            var transaction1 = new FXTransaction
            {
                Quantity   = quantity,
                Proceeds   = fxRate * quantity,
                Cost       = -fxRate * quantity,
                FXCurrency = _currency
            };

            pos.AddFXTransaction(transaction1);

            decimal newFxRate = 1.36m;

            pos.Update(newFxRate);

            Assert.AreEqual(quantity * (newFxRate - fxRate), pos.TotalPnL);


            int     newQuantity = -1000;
            decimal newFxRate2  = 1.37m;

            var transaction2 = new FXTransaction
            {
                Quantity   = newQuantity,
                Proceeds   = newFxRate2 * newQuantity,
                Cost       = -newFxRate2 * newQuantity,
                FXCurrency = _currency
            };

            pos.AddFXTransaction(transaction2);

            Assert.AreEqual(-newQuantity * (newFxRate2 - fxRate), pos.RealizedPnL);
        }
Exemple #3
0
        public void QuantityAndPriceReflectAddedTransactions()
        {
            var pos = new CurrencyPosition(_currency);

            decimal fxRate   = 1.35m;
            int     quantity = 1000;

            var transaction1 = new FXTransaction
            {
                Quantity   = quantity,
                Proceeds   = fxRate * quantity,
                Cost       = -fxRate * quantity,
                FXCurrency = _currency
            };

            pos.AddFXTransaction(transaction1);

            Assert.AreEqual(quantity, pos.Quantity);
            Assert.AreEqual(fxRate, pos.CostBasis);
            Assert.AreEqual(fxRate, pos.PriorPeriodCostBasis);
        }