Ejemplo n.º 1
0
 public void Dispose()
 {
     if (DataSourcer != null)
     {
         DataSourcer.Dispose();
         DataSourcer = null;
     }
 }
Ejemplo n.º 2
0
        public StatementHandler(IDBContext context, IDialogService dialogService, IDataSourcer dataSourcer)
        {
            _dialogService = dialogService;

            AssembleComponents();

            DownloaderNames = StatementDownloaders.Select(x => x.Metadata.Name).ToList();
            ParserNames     = StatementParsers.Select(x => x.Metadata.Name).ToList();

            _tradeRepository = new TradesRepository(context, dataSourcer);
        }
Ejemplo n.º 3
0
        public FXTransactionsPageViewModel(IDBContext context, IDataSourcer datasourcer, IDialogService dialogService)
            : base(dialogService)
        {
            Context          = context;
            TradesRepository = new TradesRepository(Context, datasourcer);

            FXTransactions        = new CollectionViewSource();
            FXTransactions.Source = Context.FXTransactions.Local;
            FXTransactions.View.SortDescriptions.Add(new SortDescription("DateTime", ListSortDirection.Descending));

            CreateCommands();
        }
Ejemplo n.º 4
0
        public StatementHandler(IDBContext context, IDialogCoordinator dialogService, IDataSourcer dataSourcer, ITradesRepository repository, IMainViewModel mainVm)
        {
            _dialogService = dialogService;

            AssembleComponents();

            DownloaderNames = StatementDownloaders.Select(x => x.Metadata.Name).ToList();
            ParserNames = StatementParsers.Select(x => x.Metadata.Name).ToList();

            _tradeRepository = repository;
            _mainVm = mainVm;
        }
Ejemplo n.º 5
0
 public void Dispose()
 {
     if (Context != null)
     {
         Context.Dispose();
         Context = null;
     }
     if (Datasourcer != null)
     {
         Datasourcer.Dispose();
         Datasourcer = null;
     }
 }
Ejemplo n.º 6
0
        public FXTransactionsPageViewModel(IDBContext context, IDataSourcer datasourcer, IDialogCoordinator dialogService, IMainViewModel mainVm)
            : base(dialogService)
        {
            Context = context;
            _mainVm = mainVm;
            TradesRepository = mainVm.TradesRepository;

            FXTransactions = new CollectionViewSource();
            FXTransactions.Source = Context.FXTransactions.Local;
            FXTransactions.View.SortDescriptions.Add(new SortDescription("DateTime", ListSortDirection.Descending));

            CreateCommands();
        }
Ejemplo n.º 7
0
 public void Dispose()
 {
     if (Context != null)
     {
         Context.Dispose();
         Context = null;
     }
     if (Datasourcer != null)
     {
         Datasourcer.Dispose();
         Datasourcer = null;
     }
 }
Ejemplo n.º 8
0
        public CashTransactionsPageViewModel(IContextFactory contextFactory, IDataSourcer datasourcer, IDialogCoordinator dialogService, ObservableCollection <CashTransaction> cashTransactions, MainViewModel mainVm)
            : base(dialogService)
        {
            _mainVm = mainVm;

            CashTransactions              = cashTransactions;
            CashTransactionsSource        = new CollectionViewSource();
            CashTransactionsSource.Source = CashTransactions;
            CashTransactionsSource.View.SortDescriptions.Add(new SortDescription("TransactionDate", ListSortDirection.Descending));

            CreateCommands();
            this.contextFactory = contextFactory;
        }
Ejemplo n.º 9
0
        public BenchmarksPageViewModel(IDBContext context, IDialogService dialogService, IDataSourcer datasourcer)
            : base(dialogService)
        {
            Context     = context;
            Datasourcer = datasourcer;

            ExternalInstruments = new ObservableCollection <KeyValuePair <string, int?> >();

            BenchmarksSource        = new CollectionViewSource();
            BenchmarksSource.Source = Context.Benchmarks.Local;
            Context.Tags.Load();

            CreateCommands();
        }
Ejemplo n.º 10
0
        public FXTransactionsPageViewModel(IContextFactory contextFactory, IDataSourcer datasourcer, IDialogCoordinator dialogService, IAppSettings settings, DataContainer data, IMainViewModel mainVm)
            : base(dialogService)
        {
            _contextFactory = contextFactory;
            _mainVm         = mainVm;

            FXTransactions        = new CollectionViewSource();
            FXTransactions.Source = data.FXTransactions;
            FXTransactions.View.SortDescriptions.Add(new SortDescription("DateTime", ListSortDirection.Descending));

            TradesRepository = new TradesRepository(contextFactory, datasourcer, settings);

            CreateCommands();
        }
Ejemplo n.º 11
0
        public InstrumentsPageViewModel(IDBContext context, IDialogService dialogService, IDataSourcer datasourcer)
            : base(dialogService)
        {
            Context             = context;
            Datasourcer         = datasourcer;
            StrategyNames       = new ObservableCollection <string>();
            ExternalInstruments = new ObservableCollection <KeyValuePair <string, int?> >();

            InstrumentsSource        = new CollectionViewSource();
            InstrumentsSource.Source = Context.Instruments.Local;
            InstrumentsSource.View.SortDescriptions.Add(new SortDescription("Symbol", ListSortDirection.Ascending));

            CreateCommands();
        }
Ejemplo n.º 12
0
        public CashTransactionsPageViewModel(IDBContext context, IDataSourcer datasourcer, IDialogCoordinator dialogService, MainViewModel mainVm)
            : base(dialogService)
        {
            Context = context;
            _mainVm = mainVm;

            CashTransactionsSource        = new CollectionViewSource();
            CashTransactionsSource.Source = Context.CashTransactions.Local;
            CashTransactionsSource.View.SortDescriptions.Add(new SortDescription("TransactionDate", ListSortDirection.Descending));

            TradesRepository = mainVm.TradesRepository;

            CreateCommands();
        }
Ejemplo n.º 13
0
        private static Dictionary <int, TimeSeries> GetInstrumentData(Trade trade, IDataSourcer dataSourcer, DateTime startDate, DateTime endDate)
        {
            var data = new Dictionary <int, TimeSeries>();

            if (trade.Orders == null)
            {
                return(data);
            }

            foreach (EntityModel.Instrument inst in trade.Orders.Select(x => x.Instrument).Distinct(x => x.ID))
            {
                data.Add(inst.ID, new TimeSeries(dataSourcer.GetData(inst, startDate, endDate)));
            }
            return(data);
        }
Ejemplo n.º 14
0
        public BenchmarksPageViewModel(IDBContext context, IDialogCoordinator dialogService, IDataSourcer datasourcer, IMainViewModel mainVm)
            : base(dialogService)
        {
            Context = context;
            Datasourcer = datasourcer;
            _mainVm = mainVm;

            ExternalInstruments = new ObservableCollection<KeyValuePair<string, int?>>();

            BenchmarksSource = new CollectionViewSource();
            BenchmarksSource.Source = Context.Benchmarks.Local;
            Context.Tags.Load();

            CreateCommands();
        }
Ejemplo n.º 15
0
        public TradesPageViewModel(IDBContext context, IDialogService dialogService, IDataSourcer datasourcer, MainViewModel parent)
            : base(dialogService)
        {
            Context          = context;
            Parent           = parent;
            Datasourcer      = datasourcer;
            TradesRepository = new TradesRepository(Context, Datasourcer);

            TradesSource        = new CollectionViewSource();
            TradesSource.Source = Context.Trades.Local;
            TradesSource.View.SortDescriptions.Add(new SortDescription("DateOpened", ListSortDirection.Descending));

            Strategies = new ObservableCollection <Strategy>();

            CreateCommands();
        }
Ejemplo n.º 16
0
        public TradesPageViewModel(IDBContext context, IDialogCoordinator dialogService, IDataSourcer datasourcer, MainViewModel parent)
            : base(dialogService)
        {
            Context = context;
            Parent = parent;
            Datasourcer = datasourcer;
            TradesRepository = parent.TradesRepository;

            TradesSource = new CollectionViewSource();
            TradesSource.Source = Context.Trades.Local;
            TradesSource.View.SortDescriptions.Add(new SortDescription("DateOpened", ListSortDirection.Descending));

            Strategies = new ObservableCollection<Strategy>();

            CreateCommands();
        }
Ejemplo n.º 17
0
        public OrdersPageViewModel(IDBContext context, IDialogCoordinator dialogService, IDataSourcer datasourcer, IMainViewModel parent)
            : base(dialogService)
        {
            Context = context;
            Parent = parent;
            Datasourcer = datasourcer;

            TradesRepository = parent.TradesRepository;

            OrdersSource = new CollectionViewSource();
            OrdersSource.Source = Context.Orders.Local;
            OrdersSource.SortDescriptions.Add(new SortDescription("TradeDate", ListSortDirection.Descending));

            ExecutionStatsGenerator = new ExecutionStatsGenerator(datasourcer);

            CreateCommands();
        }
Ejemplo n.º 18
0
        public OrdersPageViewModel(IDBContext context, IDialogService dialogService, IDataSourcer datasourcer, MainViewModel parent)
            : base(dialogService)
        {
            Context     = context;
            Parent      = parent;
            Datasourcer = datasourcer;

            TradesRepository = new TradesRepository(Context, Datasourcer);

            OrdersSource        = new CollectionViewSource();
            OrdersSource.Source = Context.Orders.Local;
            OrdersSource.SortDescriptions.Add(new SortDescription("TradeDate", ListSortDirection.Descending));

            ExecutionStatsGenerator = new ExecutionStatsGenerator(datasourcer);

            CreateCommands();
        }
Ejemplo n.º 19
0
        public TradesPageViewModel(IContextFactory contextFactory, IDialogCoordinator dialogService, IDataSourcer datasourcer, IAppSettings settings, DataContainer data, IMainViewModel parent)
            : base(dialogService)
        {
            Parent           = parent;
            _contextFactory  = contextFactory;
            Datasourcer      = datasourcer;
            _data            = data;
            TradesRepository = new TradesRepository(contextFactory, datasourcer, settings);

            TradesSource        = new CollectionViewSource();
            TradesSource.Source = _data.Trades;
            TradesSource.View.SortDescriptions.Add(new SortDescription("DateOpened", ListSortDirection.Descending));

            Strategies = data.Strategies;

            CreateCommands();
        }
Ejemplo n.º 20
0
        public MainViewModel(IDBContext context, IDataSourcer datasourcer, IDialogService dialogService)
            : base(dialogService)
        {
            Context     = context;
            Datasourcer = datasourcer;

            StatementHandler = new StatementHandler(
                context,
                dialogService,
                datasourcer);

            CreateSubViewModels();

            SelectedPageViewModel = OpenPositionsPageViewModel;

            CreateCommands();
        }
Ejemplo n.º 21
0
        public TradeWindow(Trade trade, IDBContext context, IDataSourcer dataSourcer)
        {
            Trade = trade;
            _context = context;

            InitializeComponent();

            ViewModel = new TradeViewModel(trade, dataSourcer, context);
            DataContext = ViewModel;

            InitializeFontSizes();

            FontFamilyComboBox.ItemsSource = Fonts.SystemFontFamilies;
            FontSizeComboBox.ItemsSource = FontSizes;

            //load the notes
            LoadNotes();
        }
Ejemplo n.º 22
0
        public OrdersPageViewModel(IContextFactory contextFactory, IDialogCoordinator dialogService, IDataSourcer datasourcer, IAppSettings settings, DataContainer data, IScriptRunner scriptRunner, IMainViewModel parent)
            : base(dialogService)
        {
            Parent           = parent;
            _contextFactory  = contextFactory;
            Datasourcer      = datasourcer;
            _data            = data;
            _scriptRunner    = scriptRunner;
            TradesRepository = new TradesRepository(contextFactory, datasourcer, settings);

            OrdersSource        = new CollectionViewSource();
            OrdersSource.Source = data.Orders;
            OrdersSource.SortDescriptions.Add(new SortDescription("TradeDate", ListSortDirection.Descending));

            ExecutionStatsGenerator = new ExecutionStatsGenerator(datasourcer);

            CreateCommands();
        }
Ejemplo n.º 23
0
        public TradeWindow(Trade trade, IDBContext context, IDataSourcer dataSourcer)
        {
            Trade    = trade;
            _context = context;

            InitializeComponent();

            ViewModel   = new TradeViewModel(trade, dataSourcer, context);
            DataContext = ViewModel;

            InitializeFontSizes();

            FontFamilyComboBox.ItemsSource = Fonts.SystemFontFamilies;
            FontSizeComboBox.ItemsSource   = FontSizes;

            //load the notes
            LoadNotes();
        }
Ejemplo n.º 24
0
        public TradeViewModel(Trade trade, IDataSourcer dataSourcer, IDBContext context) : base(null)
        {
            context.Trades
            .Where(x => x.ID == trade.ID)
            .Include(x => x.Strategy)
            .Include(x => x.Orders)
            .Include("Orders.Instrument")
            .Include("Orders.Currency")
            .Include(x => x.CashTransactions)
            .Include("CashTransactions.Instrument")
            .Include("CashTransactions.Currency")
            .Include(x => x.FXTransactions)
            .Include("FXTransactions.FunctionalCurrency")
            .Include("FXTransactions.FXCurrency")
            .Load();

            Trade   = trade;
            Tracker = TradeSim.SimulateTrade(trade, context, dataSourcer, Properties.Settings.Default.optionsCapitalUsageMultiplier);
        }
Ejemplo n.º 25
0
        public TradeViewModel(Trade trade, IDataSourcer dataSourcer, IDBContext context) : base(null)
        {
            context.Trades
                    .Where(x => x.ID == trade.ID)
                    .Include(x => x.Strategy)
                    .Include(x => x.Orders)
                    .Include("Orders.Instrument")
                    .Include("Orders.Currency")
                    .Include(x => x.CashTransactions)
                    .Include("CashTransactions.Instrument")
                    .Include("CashTransactions.Currency")
                    .Include(x => x.FXTransactions)
                    .Include("FXTransactions.FunctionalCurrency")
                    .Include("FXTransactions.FXCurrency")
                    .Load();

            Trade = trade;
            Tracker = TradeSim.SimulateTrade(trade, context, dataSourcer, Properties.Settings.Default.optionsCapitalUsageMultiplier);
        }
Ejemplo n.º 26
0
        public MainWindow(DataContainer data, IAppSettings settings, DbContextFactory contextFactory, IDataSourcer dataSourcer)
        {
            /////////////////////////////////////////////////////////
            InitializeComponent();
            /////////////////////////////////////////////////////////

            Settings       = settings;
            ContextFactory = contextFactory;
            DataSourcer    = dataSourcer;

            ViewModel        = new MainViewModel(ContextFactory, DataSourcer, DialogCoordinator.Instance, Settings, data);
            this.DataContext = ViewModel;

            PopulateStatementMenus();

            //Restore column ordering, widths, and sorting
            LoadDataGridLayouts();

            //A hack to force the heavy stuff to load,
            //providing snappier navigation at the expense of longer startup time
#if !DEBUG
            TradesGrid.Measure(new Size(500, 500));

            OrdersGrid.Measure(new Size(500, 500));

            CashTransactionsGrid.Measure(new Size(500, 500)); //todo: remove this stuff?
#endif
            //hiding the tab headers
            Style s = new Style();
            s.Setters.Add(new Setter(VisibilityProperty, Visibility.Collapsed));
            MainTabCtl.ItemContainerStyle = s;

            //close the slash screen
            //App.Splash.LoadComplete();

            this.Show();

            ShowChangelog();
        }
Ejemplo n.º 27
0
        public MainViewModel(IDBContext context, IDataSourcer datasourcer, IDialogCoordinator dialogService)
            : base(dialogService)
        {
            Context = context;
            Datasourcer = datasourcer;
            TradesRepository = new TradesRepository(context, datasourcer, Properties.Settings.Default.optionsCapitalUsageMultiplier);

            StatementHandler = new StatementHandler(
                context,
                dialogService,
                datasourcer,
                TradesRepository,
                this);

            CreateSubViewModels();

            SelectedPageViewModel = OpenPositionsPageViewModel;

            CreateCommands();

            ScriptRunner = new ScriptRunner(TradesRepository);
        }
Ejemplo n.º 28
0
        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();
        }
Ejemplo n.º 29
0
        public MainViewModel(IDBContext context, IDataSourcer datasourcer, IDialogCoordinator dialogService)
            : base(dialogService)
        {
            Context          = context;
            Datasourcer      = datasourcer;
            TradesRepository = new TradesRepository(context, datasourcer, Properties.Settings.Default.optionsCapitalUsageMultiplier);

            StatementHandler = new StatementHandler(
                context,
                dialogService,
                datasourcer,
                TradesRepository,
                this);

            CreateSubViewModels();

            SelectedPageViewModel = OpenPositionsPageViewModel;

            CreateCommands();

            ScriptRunner = new ScriptRunner(TradesRepository);
        }
Ejemplo n.º 30
0
        public MainViewModel(IContextFactory contextFactory, IDataSourcer datasourcer, IDialogCoordinator dialogService, IAppSettings settings, DataContainer data)
            : base(dialogService)
        {
            Datasourcer       = datasourcer;
            Settings          = settings;
            Data              = data;
            _tradesRepository = new TradesRepository(contextFactory, datasourcer, settings);

            StatementHandler = new StatementHandler(
                dialogService,
                contextFactory,
                settings,
                this);

            this._contextFactory = contextFactory;
            ScriptRunner         = new ScriptRunner(contextFactory, _tradesRepository, data);

            CreateCommands();

            CreateSubViewModels();

            SelectedPageViewModel = OpenPositionsPageViewModel;
        }
Ejemplo n.º 31
0
        /// <summary>
        /// generate EC and other curves for a benchmark
        /// </summary>
        public static EquityCurve GetBenchmarkReturns(
            int benchmarkID, 
            DBContext context, 
            List<DateTime> datesInPeriod, 
            IDataSourcer dataSourcer, 
            out Dictionary<DateTime, double> benchmarkSeries,
            out List<double> benchmarkReturns)
        {
            Logger logger = LogManager.GetCurrentClassLogger();

            List<BenchmarkComponent> components = context.BenchmarkComponents.Where(x => x.BenchmarkID == benchmarkID).ToList();

            DateTime earliestDate = datesInPeriod[0].Date;
            DateTime latestDate = datesInPeriod.Last();

            Dictionary<int, TimeSeries> data =
                components
                .ToDictionary(
                    component => component.QDMSInstrumentID,
                    component => new TimeSeries(
                        dataSourcer.GetExternalData(component.QDMSInstrumentID, earliestDate, latestDate)));

            Dictionary<int, decimal> weights = components.ToDictionary(x => x.QDMSInstrumentID, x => (decimal)x.Weight);

            benchmarkSeries = new Dictionary<DateTime, double>();
            benchmarkReturns = new List<double>();
            var benchmarkEC = new EquityCurve(1, null);

            decimal equity = 1;

            bool first = true;

            foreach (DateTime today in datesInPeriod)
            {
                decimal ret = 0;
                foreach (var kvp in data)
                {
                    var ts = kvp.Value;
                    ts.ProgressTo(today);
                    if (ts.CurrentBar > 0)
                    {
                        decimal todayClose = ts[0].AdjClose.HasValue ? ts[0].AdjClose.Value : ts[0].Close;
                        decimal lastClose = ts[1].AdjClose.HasValue ? ts[1].AdjClose.Value : ts[1].Close;
                        ret += weights[kvp.Key] * (todayClose / lastClose - 1);
#if DEBUG
                        logger.Log(LogLevel.Trace, "Benchmark component: Date: {0} Close: {1} PrevClose: {2} Ret: {3}", today, todayClose, lastClose, ret);
#endif
                    }
                }

                benchmarkEC.AddReturn((double)ret, today);

                if (first)
                {
                    first = false;
                    benchmarkReturns.Add((double)(1 + ret));
                    benchmarkSeries.Add(today, (double)equity);

                    continue;
                }

                equity *= 1 + ret;
                benchmarkReturns.Add((double)(1 + ret));
                benchmarkSeries.Add(today, (double)equity);
            }

            return benchmarkEC;
        }
Ejemplo n.º 32
0
        public MainWindow()
        {
            //make sure we have a database connection and stuff, otherwise show the dialog to set db settings
            try
            {
                DBUtils.CheckDBConnection();
            }
            catch
            {
                App.Splash.LoadComplete();
                var dbDetailsWindow = new DBPicker();
                dbDetailsWindow.ShowDialog();
            }

            //initialize logging
            InitializeLogging();

            //Log unhandled exceptions
            AppDomain.CurrentDomain.UnhandledException += AppDomain_CurrentDomain_UnhandledException;

            //set the connection string
            DBUtils.SetConnectionString();

            Context = new DBContext();

            //create db if it doesn't exist
            Context.Database.Initialize(false);

            //check for any currencies, seed the db with initial values if nothing is found
            if (!Context.Currencies.Any())
            {
                Seed.DoSeed();
            }

            //check for empty account fields
            if (Context.EquitySummaries.Any(x => x.AccountID == null))
            {
                App.Splash.LoadComplete();
                var accountMigrationWindow = new AccountMigrationWindow();
                accountMigrationWindow.ShowDialog();
            }

            var qdmsSource = new ExternalDataSources.QDMS();

            Datasourcer = new DataSourcer(Context, qdmsSource);

            TradesRepository = new TradesRepository(Context, Datasourcer);

            IDialogService dialogService = new DialogService(this);

            ViewModel = new MainViewModel(Context, Datasourcer, dialogService);

            /////////////////////////////////////////////////////////
            InitializeComponent();
            /////////////////////////////////////////////////////////

            DataContext = ViewModel;

            //Create the load statement menus using the loaded plugins
            PopulateStatementMenus();

            //Restore column ordering, widths, and sorting
            LoadDataGridLayouts();

            //A hack to force the heavy stuff to load,
            //providing snappier navigation at the expense of longer startup time
#if !DEBUG
            ViewModel.TradesPageViewModel.Refresh();
            TradesGrid.Measure(new Size(500, 500));

            ViewModel.OrdersPageViewModel.Refresh();
            OrdersGrid.Measure(new Size(500, 500));

            ViewModel.CashTransactionsPageViewModel.Refresh();
            CashTransactionsGrid.Measure(new Size(500, 500));
#endif
            //hiding the tab headers
            Style s = new Style();
            s.Setters.Add(new Setter(VisibilityProperty, Visibility.Collapsed));
            MainTabCtl.ItemContainerStyle = s;

            //load the open positions page data
            ViewModel.RefreshCurrentPage();

            //close the slash screen
            App.Splash.LoadComplete();

            ShowChangelog();
        }
Ejemplo n.º 33
0
        public MainWindow()
        {
            //make sure we have a database connection and stuff, otherwise show the dialog to set db settings
            try
            {
                DBUtils.CheckDBConnection();
            }
            catch
            {
                App.Splash.LoadComplete();
                var dbDetailsWindow = new DBPicker();
                dbDetailsWindow.ShowDialog();
            }

            //initialize logging
            InitializeLogging();

            //Log unhandled exceptions
            AppDomain.CurrentDomain.UnhandledException += AppDomain_CurrentDomain_UnhandledException;

            //set the connection string
            DBUtils.SetConnectionString();

            //set EF configuration, necessary for MySql to work
            DBUtils.SetDbConfiguration();

            Context = new DBContext();

            //create db if it doesn't exist
            Context.Database.Initialize(false);

            //check for any currencies, seed the db with initial values if nothing is found
            if (!Context.Currencies.Any())
            {
                Seed.DoSeed();
            }

            //check for empty account fields
            if(Context.EquitySummaries.Any(x => x.AccountID == null))
            {
                App.Splash.LoadComplete();
                var accountMigrationWindow = new AccountMigrationWindow();
                accountMigrationWindow.ShowDialog();
            }

            var qdmsSource = new ExternalDataSources.QDMS();
            Datasourcer = new DataSourcer(Context, qdmsSource, Properties.Settings.Default.allowExternalDataSource);

            TradesRepository = new TradesRepository(Context, Datasourcer, Properties.Settings.Default.optionsCapitalUsageMultiplier);

            ViewModel = new MainViewModel(Context, Datasourcer, DialogCoordinator.Instance);

            //Load user scripts
            ScriptLoader.LoadUserScriptTypes();

            /////////////////////////////////////////////////////////
            InitializeComponent();
            /////////////////////////////////////////////////////////

            DataContext = ViewModel;

            //Create the load statement menus using the loaded plugins
            PopulateStatementMenus();

            //Restore column ordering, widths, and sorting
            LoadDataGridLayouts();

            //A hack to force the heavy stuff to load, 
            //providing snappier navigation at the expense of longer startup time
#if !DEBUG
            ViewModel.TradesPageViewModel.Refresh();
            TradesGrid.Measure(new Size(500, 500));

            ViewModel.OrdersPageViewModel.Refresh();
            OrdersGrid.Measure(new Size(500, 500));

            ViewModel.CashTransactionsPageViewModel.Refresh();
            CashTransactionsGrid.Measure(new Size(500, 500));
#endif
            //hiding the tab headers
            Style s = new Style();
            s.Setters.Add(new Setter(VisibilityProperty, Visibility.Collapsed));
            MainTabCtl.ItemContainerStyle = s;

            //load the open positions page data
            ViewModel.RefreshCurrentPage();

            //close the slash screen
            App.Splash.LoadComplete();

            ShowChangelog();
        }
Ejemplo n.º 34
0
        public StatementHandler(IDBContext context, IDialogCoordinator dialogService, IDataSourcer dataSourcer, ITradesRepository repository, IMainViewModel mainVm)
        {
            _dialogService = dialogService;

            AssembleComponents();

            DownloaderNames = StatementDownloaders.Select(x => x.Metadata.Name).ToList();
            ParserNames     = StatementParsers.Select(x => x.Metadata.Name).ToList();

            _tradeRepository = repository;
            _mainVm          = mainVm;
        }
Ejemplo n.º 35
0
 public ExecutionStatsGenerator(IDataSourcer datasourcer)
 {
     Orders = new List<Order>();
     _datasourcer = datasourcer;
     _data = new Dictionary<int, List<OHLCBar>>();
 }
Ejemplo n.º 36
0
 public TradesRepository(IDBContext context, IDataSourcer datasourcer, decimal optionsCapitalUsageMultiplier)
     : base(context)
 {
     _optionsCapitalUsageMultiplier = optionsCapitalUsageMultiplier;
     Datasourcer = datasourcer;
 }
Ejemplo n.º 37
0
        public static async Task <TradeTracker> SimulateTrade(Trade trade, IContextFactory contextFactory, IDataSourcer dataSourcer, decimal optionsCapitalUsageMultiplier)
        {
            var tracker = new TradeTracker(trade, optionsCapitalUsageMultiplier);

            //starting and ending dates
            DateTime startDate = trade.DateOpened;
            DateTime endDate;

            if (!trade.Open && trade.DateClosed != null)
            {
                endDate = trade.DateClosed.Value.Date;
            }
            else
            {
                using (var dbContext = contextFactory.Get())
                {
                    var lastSummary = dbContext.EquitySummaries.OrderByDescending(x => x.Date).First();
                    endDate = lastSummary.Date.Date;
                }
            }

            var orders = trade.Orders == null
                ? new List <Order>()
                : trade.Orders.OrderBy(x => x.TradeDate).ToList();

            var cashTransactions = trade.CashTransactions == null
                ? new List <CashTransaction>()
                : trade.CashTransactions.OrderBy(x => x.TransactionDate).ToList();

            var fxTransactions = trade.FXTransactions == null
                ? new List <FXTransaction>()
                : trade.FXTransactions.OrderBy(x => x.DateTime).ToList();

            //Grab the data
            Dictionary <int, TimeSeries> data = await GetInstrumentData(trade, dataSourcer, startDate, endDate);

            Dictionary <int, TimeSeries> fxData = GetFXData(trade, contextFactory);

            DateTime currentDate = startDate.Date;

            //Loop through the dates
            while (currentDate <= endDate)
            {
                //Progress time series to current date
                foreach (TimeSeries ts in data.Values)
                {
                    ts.ProgressTo(currentDate);
                }
                foreach (TimeSeries ts in fxData.Values)
                {
                    ts.ProgressTo(currentDate);
                }

                //Add orders
                while (orders.Count > 0 && orders[0].TradeDate.Date <= currentDate)
                {
                    tracker.AddOrder(orders[0]);
                    orders.RemoveAt(0);
                }

                //Add cash transactions
                while (cashTransactions.Count > 0 && cashTransactions[0].TransactionDate.Date <= currentDate)
                {
                    tracker.AddCashTransaction(cashTransactions[0]);
                    cashTransactions.RemoveAt(0);
                }

                //add fx transactions
                while (fxTransactions.Count > 0 && fxTransactions[0].DateTime.Date <= currentDate)
                {
                    tracker.AddFXTransaction(fxTransactions[0]);
                    fxTransactions.RemoveAt(0);
                }

                tracker.Update(currentDate, data, fxData);

                if (orders.Count == 0 && cashTransactions.Count == 0 && fxTransactions.Count == 0 && !tracker.Open)
                {
                    break;
                }

                currentDate = currentDate.AddDays(1);
            }

            return(tracker);
        }
Ejemplo n.º 38
0
        /// <summary>
        /// generate EC and other curves for a benchmark
        /// </summary>
        public static EquityCurve GetBenchmarkReturns(
            int benchmarkID,
            DBContext context,
            List <DateTime> datesInPeriod,
            IDataSourcer dataSourcer,
            out Dictionary <DateTime, double> benchmarkSeries,
            out List <double> benchmarkReturns)
        {
            Logger logger = LogManager.GetCurrentClassLogger();

            List <BenchmarkComponent> components = context.BenchmarkComponents.Where(x => x.BenchmarkID == benchmarkID).ToList();

            DateTime earliestDate = datesInPeriod[0].Date;
            DateTime latestDate   = datesInPeriod.Last();

            Dictionary <int, TimeSeries> data =
                components
                .ToDictionary(
                    component => component.QDMSInstrumentID,
                    component => new TimeSeries(
                        dataSourcer.GetExternalData(component.QDMSInstrumentID, earliestDate, latestDate)));

            Dictionary <int, decimal> weights = components.ToDictionary(x => x.QDMSInstrumentID, x => (decimal)x.Weight);

            benchmarkSeries  = new Dictionary <DateTime, double>();
            benchmarkReturns = new List <double>();
            var benchmarkEC = new EquityCurve(1);

            decimal equity = 1;

            bool first = true;

            foreach (DateTime today in datesInPeriod)
            {
                decimal ret = 0;
                foreach (var kvp in data)
                {
                    var ts = kvp.Value;
                    ts.ProgressTo(today);
                    if (ts.CurrentBar > 0)
                    {
                        decimal todayClose = ts[0].AdjClose.HasValue ? ts[0].AdjClose.Value : ts[0].Close;
                        decimal lastClose  = ts[1].AdjClose.HasValue ? ts[1].AdjClose.Value : ts[1].Close;
                        ret += weights[kvp.Key] * (todayClose / lastClose - 1);
#if DEBUG
                        logger.Log(LogLevel.Trace, "Benchmark component: Date: {0} Close: {1} PrevClose: {2} Ret: {3}", today, todayClose, lastClose, ret);
#endif
                    }
                }

                benchmarkEC.AddReturn((double)ret, today);

                if (first)
                {
                    first = false;
                    benchmarkReturns.Add((double)(1 + ret));
                    benchmarkSeries.Add(today, (double)equity);

                    continue;
                }

                equity *= 1 + ret;
                benchmarkReturns.Add((double)(1 + ret));
                benchmarkSeries.Add(today, (double)equity);
            }

            return(benchmarkEC);
        }
Ejemplo n.º 39
0
 public TradesRepository(IContextFactory contextFactory, IDataSourcer dataSourcer, IAppSettings settings)
 {
     _contextFactory = contextFactory;
     _dataSourcer    = dataSourcer;
     _settings       = settings;
 }
Ejemplo n.º 40
0
 public ExecutionStatsGenerator(IDataSourcer datasourcer)
 {
     Orders       = new List <Order>();
     _datasourcer = datasourcer;
     _data        = new Dictionary <int, List <OHLCBar> >();
 }
Ejemplo n.º 41
0
        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();
        }
Ejemplo n.º 42
0
 public TradesRepository(IDBContext context, IDataSourcer datasourcer)
     : base(context)
 {
     Datasourcer = datasourcer;
 }
Ejemplo n.º 43
0
        public InstrumentsPageViewModel(IDBContext context, IDialogCoordinator dialogService, IDataSourcer datasourcer, IMainViewModel mainVm)
            : base(dialogService)
        {
            Context = context;
            Datasourcer = datasourcer;
            _mainVm = mainVm;
            StrategyNames = new ObservableCollection<string>();
            ExternalInstruments = new ObservableCollection<KeyValuePair<string, int?>>();

            InstrumentsSource = new CollectionViewSource();
            InstrumentsSource.Source = Context.Instruments.Local;
            InstrumentsSource.View.SortDescriptions.Add(new SortDescription("Symbol", ListSortDirection.Ascending));

            CreateCommands();
        }
Ejemplo n.º 44
0
        public static TradeTracker SimulateTrade(Trade trade, IDBContext context, IDataSourcer dataSourcer, decimal optionsCapitalUsageMultiplier)
        {
            var tracker = new TradeTracker(trade, optionsCapitalUsageMultiplier);

            //starting and ending dates
            DateTime startDate = trade.DateOpened;
            DateTime endDate;
            
            if(!trade.Open && trade.DateClosed != null)
            {
                endDate = trade.DateClosed.Value.Date;
            }
            else
            {
                var lastSummary = context.EquitySummaries.OrderByDescending(x => x.Date).First();
                endDate = lastSummary.Date.Date;
            }

            var orders = trade.Orders == null 
                ? new List<Order>()
                : trade.Orders.OrderBy(x => x.TradeDate).ToList();

            var cashTransactions = trade.CashTransactions == null
                ? new List<CashTransaction>()
                : trade.CashTransactions.OrderBy(x => x.TransactionDate).ToList();

            var fxTransactions = trade.FXTransactions == null
                ? new List<FXTransaction>()
                : trade.FXTransactions.OrderBy(x => x.DateTime).ToList();

            //Grab the data
            Dictionary<int, TimeSeries> data = GetInstrumentData(trade, dataSourcer, startDate, endDate);
            Dictionary<int, TimeSeries> fxData = GetFXData(trade, context);

            DateTime currentDate = startDate.Date;
            //Loop through the dates
            while (currentDate <= endDate)
            {
                //Progress time series to current date
                foreach (TimeSeries ts in data.Values)
                {
                    ts.ProgressTo(currentDate);
                }
                foreach (TimeSeries ts in fxData.Values)
                {
                    ts.ProgressTo(currentDate);
                }

                //Add orders
                while (orders.Count > 0 && orders[0].TradeDate.Date <= currentDate)
                {
                    tracker.AddOrder(orders[0]);
                    orders.RemoveAt(0);
                }

                //Add cash transactions
                while (cashTransactions.Count > 0 && cashTransactions[0].TransactionDate.Date <= currentDate)
                {
                    tracker.AddCashTransaction(cashTransactions[0]);
                    cashTransactions.RemoveAt(0);
                }

                //add fx transactions
                while (fxTransactions.Count > 0 && fxTransactions[0].DateTime.Date <= currentDate)
                {
                    tracker.AddFXTransaction(fxTransactions[0]);
                    fxTransactions.RemoveAt(0);
                }

                tracker.Update(currentDate, data, fxData);

                if (orders.Count == 0 && cashTransactions.Count == 0 && fxTransactions.Count == 0 && !tracker.Open) break;

                currentDate = currentDate.AddDays(1);
            }

            return tracker;
        }
Ejemplo n.º 45
0
        private static Dictionary<int, TimeSeries> GetInstrumentData(Trade trade, IDataSourcer dataSourcer, DateTime startDate, DateTime endDate)
        {
            var data = new Dictionary<int, TimeSeries>();
            if (trade.Orders == null) return data;

            foreach (EntityModel.Instrument inst in trade.Orders.Select(x => x.Instrument).Distinct(x => x.ID))
            {
                data.Add(inst.ID, new TimeSeries(dataSourcer.GetData(inst, startDate, endDate)));
            }
            return data;
        }