public PerformanceReportPageViewModel(IDBContext context, IDialogService dialogService, MainViewModel parent)
            : base(dialogService)
        {
            Context = context;
            Parent  = parent;

            ReportSettings      = new ReportSettings();
            TradeFilterSettings = new TradeFilterSettings(Context);

            ToggleTagsText   = "Select All";
            ToggleStratsText = "Select All";

            Strategies = new ObservableCollection <CheckListItem <Strategy> >();
            Tags       = new ObservableCollection <CheckListItem <Tag> >();
            Benchmarks = new ObservableCollection <Benchmark>();

            CreateCommands();
        }
        public PerformanceReportPageViewModel(IDBContext context, IDialogService dialogService, MainViewModel parent, IDataSourcer datasourcer)
            : base(dialogService)
        {
            Context     = context;
            Parent      = parent;
            Datasourcer = datasourcer;

            ReportSettings      = new ReportSettings();
            TradeFilterSettings = new TradeFilterSettings(Context);

            ToggleTagsText        = "Select All";
            ToggleStratsText      = "Select All";
            ToggleInstrumentsText = "Deselect All";

            Strategies     = new ObservableCollection <CheckListItem <Strategy> >();
            Tags           = new ObservableCollection <CheckListItem <Tag> >();
            Instruments    = new ObservableCollection <CheckListItem <Instrument> >();
            Benchmarks     = new ObservableCollection <Benchmark>();
            BacktestSeries = new ObservableCollection <QDMS.Instrument>();

            CreateCommands();
        }
Beispiel #3
0
        public static List<Trade> Filter(List<Tag> selectedTags, List<Strategy> selectedStrategies, List<Instrument> selectedInstruments, IDBContext context, TradeFilterSettings settings)
        {
            if (context == null) throw new ArgumentNullException("context");

            //filter dates
            var trades = context
                .Trades
                .Include(x => x.Tags)
                .Include(x => x.Strategy)
                .Include(x => x.Orders)
                .Include(x => x.CashTransactions)
                .Where(x => x.DateClosed == null || x.DateClosed > settings.From)
                .Where(x => x.DateOpened < settings.To)
                .ToList();

            //filter open if required
            if (settings.ClosedTradesOnly)
            {
                trades = trades.Where(x => !x.Open).ToList();
            }

            //filter by strategy
            switch (settings.StrategyFilterMethod)
            {
                case FilterMethod.Any:
                    trades = trades.Where(x => selectedStrategies.Contains(x.Strategy)).ToList();
                    break;
                case FilterMethod.Exclude:
                    trades = trades.Where(x => !selectedStrategies.Contains(x.Strategy)).ToList();
                    break;
            }


            //filter by tags
            switch (settings.TagFilterMethod)
            {
                case FilterMethod.Any:
                    trades = trades.Where(x => selectedTags.Intersect(x.Tags).Any()).ToList();
                    break;
                case FilterMethod.All:
                    trades = trades.Where(x => selectedTags.Intersect(x.Tags).Count() == selectedTags.Count).ToList();
                    break;
                case FilterMethod.Exclude:
                    trades = trades.Where(x => !selectedTags.Intersect(x.Tags).Any()).ToList();
                    break;
            }

            List<int> selectedInstrumentIDs = selectedInstruments.Select(x => x.ID).ToList();

            //filter by instrument
            switch (settings.InstrumentFilterMethod)
            {
                case FilterMethod.Any:
                    trades = trades.Where(x => 
                        x.Orders.Select(y => y.InstrumentID).Intersect(selectedInstrumentIDs).Any() ||
                        x.CashTransactions.Where(y => y.InstrumentID.HasValue).Select(y => y.InstrumentID.Value).Intersect(selectedInstrumentIDs).Any())
                        .ToList();
                    break;

                case FilterMethod.All:
                    trades = trades.Where(x => 
                        x.Orders.Select(y => y.InstrumentID).Intersect(selectedInstrumentIDs).Union(
                        x.CashTransactions.Where(y => y.InstrumentID.HasValue).Select(y => y.InstrumentID.Value)).Count()
                            == selectedInstrumentIDs.Count)
                        .ToList();
                    break;

                case FilterMethod.Exclude:
                    trades = trades.Where(x => 
                        !x.Orders.Select(y => y.InstrumentID).Intersect(selectedInstrumentIDs).Any() &&
                        !x.CashTransactions.Where(y => y.InstrumentID.HasValue).Select(y => y.InstrumentID.Value).Intersect(selectedInstrumentIDs).Any())
                        .ToList();
                    break;
            }

            return trades.ToList();
        }
Beispiel #4
0
        public static List <Trade> Filter(List <Tag> selectedTags, List <Strategy> selectedStrategies, IDBContext context, TradeFilterSettings settings)
        {
            if (context == null)
            {
                throw new ArgumentNullException("context");
            }

            //filter dates
            var trades = context
                         .Trades
                         .Include(x => x.Tags)
                         .Include(x => x.Strategy)
                         .Where(x => x.DateClosed == null || x.DateClosed > settings.From)
                         .Where(x => x.DateOpened < settings.To)
                         .ToList();

            //filter open if required
            if (settings.ClosedTradesOnly)
            {
                trades = trades.Where(x => !x.Open).ToList();
            }

            //filter by strategy
            switch (settings.StrategyFilterMethod)
            {
            case FilterMethod.Any:
                trades = trades.Where(x => selectedStrategies.Contains(x.Strategy)).ToList();
                break;

            case FilterMethod.Exclude:
                trades = trades.Where(x => !selectedStrategies.Contains(x.Strategy)).ToList();
                break;
            }


            //filter by tags
            switch (settings.TagFilterMethod)
            {
            case FilterMethod.Any:
                trades = trades.Where(x => selectedTags.Intersect(x.Tags).Any()).ToList();
                break;

            case FilterMethod.All:
                trades = trades.Where(x => selectedTags.Intersect(x.Tags).Count() == selectedTags.Count).ToList();
                break;

            case FilterMethod.Exclude:
                trades = trades.Where(x => !selectedTags.Intersect(x.Tags).Any()).ToList();
                break;
            }

            return(trades.ToList());
        }
        public PerformanceReportPageViewModel(IDBContext context, IDialogCoordinator dialogService, MainViewModel parent, IDataSourcer datasourcer)
            : base(dialogService)
        {
            Context = context;
            Parent = parent;
            Datasourcer = datasourcer;

            ReportSettings = new ReportSettings();
            TradeFilterSettings = new TradeFilterSettings(Context);

            ToggleTagsText = "Select All";
            ToggleStratsText = "Select All";
            ToggleInstrumentsText = "Deselect All";

            Strategies = new ObservableCollection<CheckListItem<Strategy>>();
            Tags = new ObservableCollection<CheckListItem<Tag>>();
            Instruments = new ObservableCollection<CheckListItem<Instrument>>();
            Benchmarks = new ObservableCollection<Benchmark>();
            BacktestSeries = new ObservableCollection<QDMS.Instrument>();

            CreateCommands();
        }
Beispiel #6
0
        public static List <Trade> Filter(List <Tag> selectedTags, List <Strategy> selectedStrategies, List <Instrument> selectedInstruments, IEnumerable <Trade> allTrades, TradeFilterSettings settings)
        {
            //filter dates
            var trades = allTrades
                         .Where(x => x.DateClosed == null || x.DateClosed > settings.From)
                         .Where(x => x.DateOpened < settings.To)
                         .ToList();

            //filter open if required
            if (settings.ClosedTradesOnly)
            {
                trades = trades.Where(x => !x.Open).ToList();
            }

            //filter by strategy
            switch (settings.StrategyFilterMethod)
            {
            case FilterMethod.Any:
                trades = trades.Where(x => selectedStrategies.Contains(x.Strategy)).ToList();
                break;

            case FilterMethod.Exclude:
                trades = trades.Where(x => !selectedStrategies.Contains(x.Strategy)).ToList();
                break;
            }

            //filter by tags
            switch (settings.TagFilterMethod)
            {
            case FilterMethod.Any:
                trades = trades.Where(x => selectedTags.Intersect(x.Tags).Any()).ToList();
                break;

            case FilterMethod.All:
                trades = trades.Where(x => selectedTags.Intersect(x.Tags).Count() == selectedTags.Count).ToList();
                break;

            case FilterMethod.Exclude:
                trades = trades.Where(x => !selectedTags.Intersect(x.Tags).Any()).ToList();
                break;
            }

            List <int> selectedInstrumentIDs = selectedInstruments.Select(x => x.ID).ToList();

            //filter by instrument
            switch (settings.InstrumentFilterMethod)
            {
            case FilterMethod.Any:
                trades = trades.Where(x =>
                                      x.Orders.Select(y => y.InstrumentID).Intersect(selectedInstrumentIDs).Any() ||
                                      x.CashTransactions.Where(y => y.InstrumentID.HasValue).Select(y => y.InstrumentID.Value).Intersect(selectedInstrumentIDs).Any())
                         .ToList();
                break;

            case FilterMethod.All:
                trades = trades.Where(x =>
                                      x.Orders.Select(y => y.InstrumentID).Intersect(selectedInstrumentIDs).Union(
                                          x.CashTransactions.Where(y => y.InstrumentID.HasValue).Select(y => y.InstrumentID.Value)).Count()
                                      == selectedInstrumentIDs.Count)
                         .ToList();
                break;

            case FilterMethod.Exclude:
                trades = trades.Where(x =>
                                      !x.Orders.Select(y => y.InstrumentID).Intersect(selectedInstrumentIDs).Any() &&
                                      !x.CashTransactions.Where(y => y.InstrumentID.HasValue).Select(y => y.InstrumentID.Value).Intersect(selectedInstrumentIDs).Any())
                         .ToList();
                break;
            }

            return(trades.ToList());
        }