public void Dispose() { if (DataSourcer != null) { DataSourcer.Dispose(); DataSourcer = null; } }
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); }
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(); }
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; }
public void Dispose() { if (Context != null) { Context.Dispose(); Context = null; } if (Datasourcer != null) { Datasourcer.Dispose(); Datasourcer = null; } }
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(); }
public void Dispose() { if (Context != null) { Context.Dispose(); Context = null; } if (Datasourcer != null) { Datasourcer.Dispose(); Datasourcer = null; } }
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; }
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(); }
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(); }
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(); }
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(); }
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); }
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(); }
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(); }
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(); }
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(); }
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(); }
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(); }
public MainViewModel(IDBContext context, IDataSourcer datasourcer, IDialogService dialogService) : base(dialogService) { Context = context; Datasourcer = datasourcer; StatementHandler = new StatementHandler( context, dialogService, datasourcer); CreateSubViewModels(); SelectedPageViewModel = OpenPositionsPageViewModel; CreateCommands(); }
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(); }
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(); }
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(); }
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); }
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); }
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(); }
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); }
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(); }
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); }
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; }
/// <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; }
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(); }
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(); }
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; }
public ExecutionStatsGenerator(IDataSourcer datasourcer) { Orders = new List<Order>(); _datasourcer = datasourcer; _data = new Dictionary<int, List<OHLCBar>>(); }
public TradesRepository(IDBContext context, IDataSourcer datasourcer, decimal optionsCapitalUsageMultiplier) : base(context) { _optionsCapitalUsageMultiplier = optionsCapitalUsageMultiplier; Datasourcer = datasourcer; }
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); }
/// <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); }
public TradesRepository(IContextFactory contextFactory, IDataSourcer dataSourcer, IAppSettings settings) { _contextFactory = contextFactory; _dataSourcer = dataSourcer; _settings = settings; }
public ExecutionStatsGenerator(IDataSourcer datasourcer) { Orders = new List <Order>(); _datasourcer = datasourcer; _data = new Dictionary <int, List <OHLCBar> >(); }
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(); }
public TradesRepository(IDBContext context, IDataSourcer datasourcer) : base(context) { Datasourcer = datasourcer; }
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(); }
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; }
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; }