コード例 #1
0
        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);
        }
コード例 #2
0
ファイル: ScriptRunner.cs プロジェクト: herbota/QPAS
 public ScriptRunner(IContextFactory contextFactory, TradesRepository tradesRepository, DataContainer data)
 {
     _tradeScriptExecutor = new TradeScriptActionExecutor(tradesRepository, data);
     _orderScriptExecutor = new OrderScriptActionExecutor(tradesRepository, data);
     _contextFactory      = contextFactory;
     _data = data;
 }
コード例 #3
0
ファイル: TradesRepositoryTest.cs プロジェクト: QANTau/QPAS
        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);
        }
コード例 #4
0
        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);
        }
コード例 #5
0
ファイル: MainViewModel.cs プロジェクト: QANTau/QPAS
        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);
        }
コード例 #6
0
 public TradesController()
 {
     _tradesRepository = new TradesRepository();
 }
コード例 #7
0
 internal OrderScriptActionExecutor(TradesRepository tradesRepository, DataContainer data)
 {
     TradesRepository = tradesRepository;
     _data            = data;
 }
コード例 #8
0
        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);
        }
コード例 #9
0
 internal TradeScriptActionExecutor(TradesRepository tradesRepository, DataContainer data)
 {
     TradesRepository = tradesRepository;
     Strategies       = data.Strategies.ToList();
     Tags             = data.Tags.ToList();
 }
コード例 #10
0
        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);
            }
        }
コード例 #11
0
ファイル: MainWindow.xaml.cs プロジェクト: QANTau/QPAS
        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();
        }