예제 #1
0
        public void AddingOrderInForeignCurrencyResultsInFxPositionAddition()
        {
            var trade = new Trade();
            var date  = new DateTime(2000, 1, 1);
            var eur   = new Currency {
                ID = 2, Name = "EUR"
            };

            trade.Orders = new List <Order>
            {
                new Order {
                    Instrument = _inst, Quantity = 10, FXRateToBase = 1.5m, Multiplier = 1, Price = 100, BuySell = "BUY", TradeDate = date, Currency = eur, CurrencyID = 2
                },
            };

            var tracker = new TradeTracker(trade, 1);

            foreach (Order o in trade.Orders)
            {
                tracker.AddOrder(o);
            }

            Assert.IsTrue(tracker.CurrencyPositions.ContainsKey(2));
            Assert.IsTrue(tracker.CurrencyPositions[2].Quantity == -10 * 100);
            Assert.IsTrue(tracker.CurrencyPositions[2].CostBasis == 1.5m);
        }
예제 #2
0
        public void TodaysPnlResetsEvenWhenTrackerIsNotOpen()
        {
            var trade = new Trade();
            var date  = new DateTime(2000, 1, 1);

            trade.Orders = new List <Order>
            {
                new Order {
                    Instrument = _inst, Quantity = -10, FXRateToBase = 1, Price = 100, BuySell = "BUY", TradeDate = date
                },
                new Order {
                    Instrument = _inst, Quantity = 5, FXRateToBase = 1, Price = 95, BuySell = "SELL", TradeDate = date
                }
            };

            var tracker = new TradeTracker(trade, 1);

            foreach (Order o in trade.Orders)
            {
                tracker.AddOrder(o);
            }

            var data = new Dictionary <int, TimeSeries> {
                { 1, TimeSeriesGenerator.GenerateData(date, date.AddDays(1), 90) }
            };

            foreach (TimeSeries ts in data.Values)
            {
                ts.ProgressTo(date);
            }

            tracker.Update(date, data, null);

            Assert.AreEqual(5 * 5 + 10 * 5, tracker.TodaysPnL);

            data[1].ProgressTo(date.AddDays(1));
            tracker.Update(date.AddDays(1), data, null);
            Assert.AreEqual(0, tracker.TodaysPnL);
        }
예제 #3
0
        public void TotalPnlLongIsTheSumOfRealizedAndUnrealizedPnlForShortPositions()
        {
            var trade = new Trade();
            var date  = new DateTime(2000, 1, 1);

            trade.Orders = new List <Order>
            {
                new Order {
                    Instrument = _inst, Quantity = -10, FXRateToBase = 1, Price = 100, BuySell = "BUY", TradeDate = date
                },
                new Order {
                    Instrument = _inst, Quantity = 5, FXRateToBase = 1, Price = 95, BuySell = "SELL", TradeDate = date
                }
            };

            var tracker = new TradeTracker(trade, 1);

            foreach (Order o in trade.Orders)
            {
                tracker.AddOrder(o);
            }

            var data = new Dictionary <int, TimeSeries> {
                { 1, TimeSeriesGenerator.GenerateData(date, date, 90) }
            };

            foreach (TimeSeries ts in data.Values)
            {
                ts.ProgressTo(date);
            }

            tracker.Update(date, data, null);

            Assert.AreEqual(5 * 5 + 10 * 5, tracker.TotalPnL);
            Assert.AreEqual(5 * 5 + 10 * 5, tracker.TotalPnlShort);
        }