public void SetUp() { _inst = new Instrument { ID = 1, Multiplier = 1, AssetCategory = AssetClass.Stock }; _t = new Trade { Orders = new List <Order>(), CashTransactions = new List <CashTransaction>(), FXTransactions = new List <FXTransaction>() }; _dsMock = new Mock <IDataSourcer>(); _dsMock.Setup(x => x.GetData(It.IsAny <Instrument>(), It.IsAny <DateTime>(), It.IsAny <DateTime>(), It.IsAny <QDMS.BarSize>())) .Returns <Instrument, DateTime, DateTime, QDMS.BarSize>((a, b, c, d) => Task.FromResult(GenerateData(b, c))); _contextMock = new Mock <IDBContext>(); _dbSetStub = new DbSetStub <EquitySummary>(); var equitySummaries = new List <EquitySummary> { new EquitySummary { Date = new DateTime(2000, 1, 1), Total = 10000 } }; _dbSetStub.AddRange(equitySummaries); _contextMock.SetupGet(x => x.EquitySummaries).Returns(_dbSetStub); _repository = new TradesRepository(_contextMock.Object, _dsMock.Object, 0.1m); }
public ScriptRunner(IContextFactory contextFactory, TradesRepository tradesRepository, DataContainer data) { _tradeScriptExecutor = new TradeScriptActionExecutor(tradesRepository, data); _orderScriptExecutor = new OrderScriptActionExecutor(tradesRepository, data); _contextFactory = contextFactory; _data = data; }
public void SetUp() { _inst = new Instrument {ID = 1, Multiplier = 1, AssetCategory = AssetClass.Stock}; _t = new Trade { Orders = new List<Order>(), CashTransactions = new List<CashTransaction>(), FXTransactions = new List<FXTransaction>() }; _dsMock = new Mock<IDataSourcer>(); _dsMock.Setup(x => x.GetData(It.IsAny<Instrument>(), It.IsAny<DateTime>(), It.IsAny<DateTime>(), It.IsAny<QDMS.BarSize>())) .Returns<Instrument, DateTime, DateTime, QDMS.BarSize>((a, b, c, d) => GenerateData(b, c)); _contextMock = new Mock<IDBContext>(); _dbSetStub = new DbSetStub<EquitySummary>(); var equitySummaries = new List<EquitySummary> { new EquitySummary { Date = new DateTime(2000,1,1), Total = 10000 } }; _dbSetStub.AddRange(equitySummaries); _contextMock.SetupGet(x => x.EquitySummaries).Returns(_dbSetStub); _repository = new TradesRepository(_contextMock.Object, _dsMock.Object, 0.1m); }
public void SetUp() { _inst = new Instrument { ID = 1, Multiplier = 1, AssetCategory = AssetClass.Stock }; _t = new Trade { Orders = new List <Order>(), CashTransactions = new List <CashTransaction>(), FXTransactions = new List <FXTransaction>() }; _dsMock = new Mock <IDataSourcer>(); _dsMock.Setup(x => x.GetData(It.IsAny <Instrument>(), It.IsAny <DateTime>(), It.IsAny <DateTime>(), It.IsAny <QDMS.BarSize>())) .Returns <Instrument, DateTime, DateTime, QDMS.BarSize>((a, b, c, d) => Task.FromResult(GenerateData(b, c))); _contextMock = new Mock <IQpasDbContext>(); var dbContextOptions = new DbContextOptionsBuilder <QpasDbContext>() .UseInMemoryDatabase(databaseName: "qpasdb") .Options; _dbContext = new QpasDbContext(dbContextOptions); var equitySummaries = new List <EquitySummary> { new EquitySummary { Date = new DateTime(2000, 1, 1), Total = 10000 } }; _dbContext.EquitySummaries.AddRange(equitySummaries); _contextMock.SetupGet(x => x.EquitySummaries).Returns(_dbContext.EquitySummaries); var factory = new DbContextFactory(() => _contextMock.Object); var settings = new AppSettings() { OptionsCapitalUsageMultiplier = 0.1m }; _repository = new TradesRepository(factory, _dsMock.Object, settings); }
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 TradesController() { _tradesRepository = new TradesRepository(); }
internal OrderScriptActionExecutor(TradesRepository tradesRepository, DataContainer data) { TradesRepository = tradesRepository; _data = data; }
private IDataChecker RegisterCheckers( ContainerBuilder builder, IClientAccountClient clientAccountClient, IAssetsService assetsServiceClient) { var checkersRepository = new CheckersRepository(_log); builder .RegisterInstance(checkersRepository) .As <IDataChecker>() .SingleInstance(); var settings = _appSettings.SqlBridgeCheckerJob; var balanceUpdatesStorage = AzureTableStorage <ClientBalanceChangeLogRecordEntity> .Create( _settingsManager.ConnectionString(i => i.BalanceLogWriterMainConnection), "UpdateBalanceLog", _log, _timeout); var balanceUpdatesRepository = new BalanceUpdatesRepository(balanceUpdatesStorage); var balanceUpdatesChecker = new BalanceUpdatesChecker( settings.SqlDbConnectionString, balanceUpdatesRepository, _log); checkersRepository.AddChecker(balanceUpdatesChecker); var cashOperationsStorage = AzureTableStorage <CashInOutOperationEntity> .Create( _settingsManager.ConnectionString(i => i.ClientPersonalInfoConnString), "OperationsCash", _log, _timeout); var cashOperationsRepository = new CashOperationsRepository(cashOperationsStorage); var cashOperationsChecker = new CashOperationsChecker( settings.SqlDbConnectionString, cashOperationsRepository, _log); checkersRepository.AddChecker(cashOperationsChecker); var transfersStorage = AzureTableStorage <TransferEventEntity> .Create( _settingsManager.ConnectionString(i => i.ClientPersonalInfoConnString), "Transfers", _log, _timeout); var transfersRepository = new TransfersRepository(transfersStorage); var transfersChecker = new TransfersChecker( settings.SqlDbConnectionString, transfersRepository, _log); checkersRepository.AddChecker(transfersChecker); var marketOrdersStorage = AzureTableStorage <MarketOrderEntity> .Create( _settingsManager.ConnectionString(i => i.HMarketOrdersConnString), "MarketOrders", _log, _timeout); var marketOrdersRepository = new MarketOrdersRepository(marketOrdersStorage); var limitOrdersStorage = AzureTableStorage <LimitOrderEntity> .Create( _settingsManager.ConnectionString(i => i.HMarketOrdersConnString), "LimitOrders", _log, _timeout); var limitOrdersRepository = new LimitOrdersRepository(limitOrdersStorage); var tradesStorage = AzureTableStorage <ClientTradeEntity> .Create( _settingsManager.ConnectionString(i => i.HTradesConnString), "Trades", _log, _timeout); var tradesRepository = new TradesRepository(tradesStorage, _log); var marketOrdersChecker = new MarketOrdersChecker( settings.SqlDbConnectionString, marketOrdersRepository, limitOrdersRepository, tradesRepository, _log); checkersRepository.AddChecker(marketOrdersChecker); var limitOrdersChecker = new LimitOrdersChecker( settings.SqlDbConnectionString, limitOrdersRepository, tradesRepository, marketOrdersRepository, _log); checkersRepository.AddChecker(limitOrdersChecker); var tradesChecker = new TradesChecker( settings.SqlDbConnectionString, tradesRepository, clientAccountClient, _log); checkersRepository.AddChecker(tradesChecker); var candlesticksStorage = AzureTableStorage <FeedHistoryEntity> .Create( _settingsManager.ConnectionString(i => i.HLiquidityConnString), "FeedHistory", _log, _timeout); var candlesticksRepository = new CandlestiсksRepository(candlesticksStorage, assetsServiceClient, _log); var candlesticksChecker = new CandlesticksChecker( settings.SqlDbConnectionString, candlesticksRepository, _log); checkersRepository.AddChecker(candlesticksChecker); return(checkersRepository); }
internal TradeScriptActionExecutor(TradesRepository tradesRepository, DataContainer data) { TradesRepository = tradesRepository; Strategies = data.Strategies.ToList(); Tags = data.Tags.ToList(); }
public async Task ScheduledTask_DownloadTrades_AssumeTrue() { // unit test the WebJob.CoinTracking.ScheduledTask // mock trades repository - do we need to mock the .insert method? // mock cointrackingrepository - mock the .downloadtrades method to return mocked trades // ARRANGE // setup our data var lstDownloadedTradeData = new List <CoinTrackingTrade>() { new CoinTrackingTrade() { CoinTrackingTradeID = 574025, BuyAmount = 0.5f, BuyCurrency = "BTC", SellAmount = 900.2f, SellCurrency = "USD", FeeAmount = 4.5f, FeeCurrency = "USD", TradeType = CoinTrackingTrade.TradeTypeEnum.Trade, Exchange = "Kraken", Group = null, Comment = "This is a Kraken Trade", ImportedFrom = "kraken", Time = DateTime.ParseExact("25/01/2018 03:45:12", "dd/MM/yyyy HH:mm:ss", CultureInfo.InvariantCulture), ImportedTime = DateTime.ParseExact("26/01/2018 16:45:12", "dd/MM/yyyy HH:mm:ss", CultureInfo.InvariantCulture), ImportedTradeID = "43250" }, new CoinTrackingTrade() { CoinTrackingTradeID = 574024, BuyAmount = 1f, BuyCurrency = "BTC", SellAmount = null, SellCurrency = null, FeeAmount = null, FeeCurrency = null, TradeType = CoinTrackingTrade.TradeTypeEnum.Deposit, Exchange = "Bittrex", Group = "My Bittrex Deposits", Comment = "This is my Bittrex Deposit", ImportedFrom = "job_bittrex", Time = DateTime.ParseExact("25/12/2017 12:45:12", "dd/MM/yyyy HH:mm:ss", CultureInfo.InvariantCulture), ImportedTime = DateTime.ParseExact("26/12/2017 23:45:12", "dd/MM/yyyy HH:mm:ss", CultureInfo.InvariantCulture), ImportedTradeID = "fe9ois82msma91d821a" }, new CoinTrackingTrade() { CoinTrackingTradeID = 574026, BuyAmount = 1f, BuyCurrency = "BTC", SellAmount = null, SellCurrency = null, FeeAmount = null, FeeCurrency = null, TradeType = CoinTrackingTrade.TradeTypeEnum.Gift_Or_Tip__In, Exchange = "Wallet", Group = null, Comment = "This is a gift Deposit", ImportedFrom = "job_wallet", Time = DateTime.ParseExact("25/12/2017 12:45:12", "dd/MM/yyyy HH:mm:ss", CultureInfo.InvariantCulture), ImportedTime = DateTime.ParseExact("26/12/2017 23:45:12", "dd/MM/yyyy HH:mm:ss", CultureInfo.InvariantCulture), ImportedTradeID = "123gifttest" } }; // setup our mock repos to return some fake data in our target method var loggerFactory = new LoggerFactory().AddConsole(); var loggerTR = loggerFactory.CreateLogger <TradesRepository>(); var loggerST = loggerFactory.CreateLogger <ScheduledTask>(); var coinTrackingRepo = new Mock <ICoinTrackingRepository>(); coinTrackingRepo .Setup(repo => repo.DownloadTradesAsync()) .ReturnsAsync(lstDownloadedTradeData); var dbContextOptions = new DbContextOptionsBuilder <ApplicationDbContext>() .UseInMemoryDatabase(databaseName: "ScheduledTask_DownloadTrades_AssumeTrue") .Options; dbContextOptions.Freeze(); // Run the test against one instance of the context using (var dbContext = new ApplicationDbContext(dbContextOptions)) { var tradesRepo = new TradesRepository(dbContext, loggerTR); // create our WebJob.CoinTracking by injecting our mock repository var webJob = new ScheduledTask(loggerST, tradesRepo, coinTrackingRepo.Object); // ACT - call our method under test var result = webJob.SyncTradesAsync(null, null); } // Use a separate instance of the context to verify correct data was saved to database using (var dbContext = new ApplicationDbContext(dbContextOptions)) { var tradesRepo = new TradesRepository(dbContext, loggerTR); // ASSERT - we got the result we expected - our fake data has 6 goals we should get this back from the method var tradesFromDbContext = await tradesRepo.GetAllTradesAsync(); Assert.Equal(lstDownloadedTradeData.Count(), tradesFromDbContext.Count()); Assert.NotNull(await tradesRepo.FindTradeByCoinTrackingTradeIdAsync(lstDownloadedTradeData[0].CoinTrackingTradeID)); Assert.NotNull(await tradesRepo.FindTradeByCoinTrackingTradeIdAsync(lstDownloadedTradeData[1].CoinTrackingTradeID)); Assert.True(tradesFromDbContext.All(t => t.TradeID > 0)); Assert.Equal(Trade.TradeTypeEnum.Gift_Or_Tip__In, (await tradesRepo.FindTradeByCoinTrackingTradeIdAsync(574026))?.TradeType); } }
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(); }