コード例 #1
0
        public void GetProfitLossReport_Tests()
        {
            var reportBuilder = new ProfitLossReportBuilder(_cacheMock.Object);

            var transactionGroups = new Dictionary <string, List <EquityTransaction> >
            {
                {
                    "GOOG", new List <EquityTransaction>
                    {
                        new EquityTransaction
                        {
                            Quantity  = 10,
                            Action    = "Buy",
                            Price     = 2,
                            TradeDate = _firstDate
                        },
                        new EquityTransaction
                        {
                            Quantity  = 20,
                            Action    = "Buy",
                            Price     = 4,
                            TradeDate = _secondDate
                        },
                        new EquityTransaction
                        {
                            Quantity  = 20,
                            Action    = "Buy",
                            Price     = 4,
                            TradeDate = _thirdDate
                        }
                    }
                }
            };

            var profitLossReport = reportBuilder.GetProfitLossReport(transactionGroups);

            var expected = new List <object>
            {
                new
                {
                    AsOfDate       = "29/03/2021",
                    Cost           = 180,
                    DailyPandL     = 50M,
                    InceptionPandL = 320M,
                    MarketValue    = 500M,
                    PrevPrice      = 9M,
                    Price          = 10M,
                    Quantity       = 50,
                    Ticker         = "GOOG"
                }
            };

            profitLossReport.Should().NotBeEmpty()
            .And.HaveCount(1)
            .And.BeEquivalentTo(expected);
        }
コード例 #2
0
        protected override void Execute(PrintProfitLossOptions options, IContext context)
        {
            context.JournalManager.ReloadJournal();

            var reportBuilder = new ProfitLossReportBuilder();

            reportBuilder.Journal      = context.JournalManager.Journal;
            reportBuilder.Book         = "default";
            reportBuilder.AccountQuery = options.AccountQuery;
            reportBuilder.StartIndex   = ResolveIndex(options.StartIndex, context, false);
            reportBuilder.EndIndex     = ResolveIndex(options.EndIndex, context, false) ?? context.JournalManager.Journal.Entries.LastOrDefault().Index?.ToString();
            reportBuilder.AssetQuery   = options.AssetQuery;

            var report = reportBuilder.GetReport();

            report.Print(Console.Out);
        }