Esempio n. 1
0
        public void GetNextDelayTest()
        {
            var strategy = new LinearRetryStrategy(1000);

            var delay01 = strategy.GetNextDelay();

            Assert.AreEqual(0, delay01);

            var delay02 = strategy.GetNextDelay();

            Assert.AreEqual(1000, delay02);

            var delay03 = strategy.GetNextDelay();

            Assert.AreEqual(1000, delay03);

            var delay04 = strategy.GetNextDelay();

            Assert.AreEqual(1000, delay04);

            var delay05 = strategy.GetNextDelay();

            Assert.AreEqual(1000, delay05);

            var delay06 = strategy.GetNextDelay();

            Assert.AreEqual(1000, delay06);
        }
Esempio n. 2
0
        // NOTE: Use Demo instances for tests
        private static async Task Run()
        {
            var retryStrategy = new LinearRetryStrategy(TimeSpan.FromSeconds(10), 50);
            var generator     = HttpClientGenerator.BuildForUrl("http://localhost:5000").WithApiKey("margintrading")
                                .WithRetriesStrategy(retryStrategy).Create();

            await CheckMarginParametersAsync(generator);

            //await CheckAccountsAsync(generator);
            //await CheckOrdersAsync(generator);
            //await CheckPricesAsync(generator);

            Console.WriteLine("Successfuly finished");
        }
        private static async Task Run()
        {
            var retryStrategy = new LinearRetryStrategy(TimeSpan.FromSeconds(10), 50);

//            var generator = HttpClientGenerator.BuildForUrl("http://localhost:5040")
//                .WithRetriesStrategy(retryStrategy).Create();

            //var generator = HttpClientGenerator.BuildForUrl("http://mt-tradinghistory.mt.svc.cluster.local")
            //    .WithRetriesStrategy(retryStrategy).Create();

//            await CheckOrderEventsPaginatedApiAsync(generator);
            //await CheckDealsApiAsync(generator);
//            await CheckPositionEventsPaginatedApiAsync(generator);
            await CheckPositionHistoryRepoAsync();

            Console.WriteLine("Successfully finished");
        }
Esempio n. 4
0
        // NOTE: Use Demo instances for tests
        private static async Task Run()
        {
            var services      = new ServiceCollection();
            var builder       = new ContainerBuilder();
            var retryStrategy = new LinearRetryStrategy(TimeSpan.FromSeconds(10), 50);

            services.RegisterMtBackendClient(HttpClientGenerator.BuildForUrl("http://localhost:5000")
                                             .WithApiKey("margintrading").WithRetriesStrategy(retryStrategy).Create());
            services.RegisterMtDataReaderClient(HttpClientGenerator.BuildForUrl("http://localhost:5008")
                                                .WithApiKey("margintrading").WithRetriesStrategy(retryStrategy).Create());
            builder.Populate(services);
            var container     = builder.Build();
            var backendClient = container.Resolve <IMtBackendClient>();

            await backendClient.ScheduleSettings.ListExclusions().Dump();

            var excl = await backendClient.ScheduleSettings.CreateExclusion(new DayOffExclusionInputContract
            {
                AssetPairRegex = "lol",
                Start          = DateTime.Now.AddDays(-1),
                End            = DateTime.Now.Date,
                IsTradeEnabled = false,
            }).Dump();

            var id = excl.Id;
            var ex = await backendClient.ScheduleSettings.GetExclusion(id).Dump();

            ex.AssetPairRegex = "^btc";
            await backendClient.ScheduleSettings.UpdateExclusion(id, ex).Dump();

            await backendClient.ScheduleSettings.GetExclusion(id).Dump();

            await backendClient.ScheduleSettings.ListCompiledExclusions().Dump();

            await backendClient.ScheduleSettings.DeleteExclusion(id).Dump();

            await backendClient.ScheduleSettings.GetExclusion(id).Dump();

            var s = await backendClient.ScheduleSettings.GetSchedule().Dump();

            s.AssetPairsWithoutDayOff.Add("BTCRABBIT");
            await backendClient.ScheduleSettings.SetSchedule(s).Dump();

            s.AssetPairsWithoutDayOff.Remove("BTCRABBIT");
            await backendClient.ScheduleSettings.SetSchedule(s).Dump();

            var assetPairSettingsInputContract = new AssetPairContract
            {
                Id                     = "BTCUSD.test",
                BasePairId             = "BTCUSD",
                LegalEntity            = "LYKKETEST",
                StpMultiplierMarkupBid = 0.9m,
                StpMultiplierMarkupAsk = 1.1m,
                MatchingEngineMode     = MatchingEngineModeContract.MarketMaker,
                Name                   = "BTCUSD.test name",
                Accuracy               = 123,
                BaseAssetId            = "BTC",
                QuoteAssetId           = "USD",
            };

            await backendClient.AssetPairsEdit.Delete("BTCUSD.test").Dump();

            var result = await backendClient.AssetPairsEdit.Insert("BTCUSD.test", assetPairSettingsInputContract)
                         .Dump();

            CheckAssetPair(result, assetPairSettingsInputContract);

            assetPairSettingsInputContract.MatchingEngineMode = MatchingEngineModeContract.Stp;
            var result2 = await backendClient.AssetPairsEdit.Update("BTCUSD.test", assetPairSettingsInputContract)
                          .Dump();

            CheckAssetPair(result2, assetPairSettingsInputContract);


            var dataReaderClient = container.Resolve <IMtDataReaderClient>();

            var list = await dataReaderClient.AssetPairsRead.List().Dump();

            var ours = list.First(e => e.Id == "BTCUSD.test");

            CheckAssetPair(ours, assetPairSettingsInputContract);

            var get = await dataReaderClient.AssetPairsRead.Get("BTCUSD.test").Dump();

            CheckAssetPair(get, assetPairSettingsInputContract);

            var nonexistentGet = await dataReaderClient.AssetPairsRead.Get("nonexistent").Dump();

            nonexistentGet.RequiredEqualsTo(null, nameof(nonexistentGet));

            var getByMode = await dataReaderClient.AssetPairsRead.List("LYKKETEST", MatchingEngineModeContract.Stp)
                            .Dump();

            var ours2 = getByMode.First(e => e.Id == "BTCUSD.test");

            CheckAssetPair(ours2, assetPairSettingsInputContract);

            var getByOtherMode = await dataReaderClient.AssetPairsRead
                                 .List("LYKKETEST", MatchingEngineModeContract.MarketMaker).Dump();

            getByOtherMode.Count(e => e.Id == "BTCUSD.test").RequiredEqualsTo(0, "getByOtherMode.Count");

            var result3 = await backendClient.AssetPairsEdit.Delete("BTCUSD.test").Dump();

            CheckAssetPair(result3, assetPairSettingsInputContract);

            var nonexistentDelete = await backendClient.AssetPairsEdit.Delete("nonexistent").Dump();

            nonexistentDelete.RequiredEqualsTo(null, nameof(nonexistentDelete));

            #region TradeMonitoring

            var assetSumary = await dataReaderClient.TradeMonitoringRead.AssetSummaryList().Dump();

            var openPositions = await dataReaderClient.TradeMonitoringRead.OpenPositions().Dump();

            var openPosition = openPositions.FirstOrDefault();
            if (openPosition != null)
            {
                string clientId = openPosition.ClientId;
                var    openPositionsByClient =
                    await dataReaderClient.TradeMonitoringRead.OpenPositionsByClient(clientId).Dump();
            }

            var openPositionsByDate = await dataReaderClient.TradeMonitoringRead
                                      .OpenPositionsByDate(DateTime.UtcNow.AddDays(-30), DateTime.UtcNow).Dump();

            var openPositionsByVolume = await dataReaderClient.TradeMonitoringRead.OpenPositionsByVolume(100).Dump();

            var pendingOrders = await dataReaderClient.TradeMonitoringRead.PendingOrders().Dump();

            var pendingOrder = pendingOrders.FirstOrDefault();
            if (pendingOrder != null)
            {
                string clientId = pendingOrder.ClientId;
                var    pendingOrdersByClient =
                    await dataReaderClient.TradeMonitoringRead.PendingOrdersByClient(clientId).Dump();
            }

            var pendingOrdersByDate = await dataReaderClient.TradeMonitoringRead
                                      .PendingOrdersByDate(DateTime.UtcNow.AddDays(-30), DateTime.UtcNow).Dump();

            var pendingOrdersByVolume = await dataReaderClient.TradeMonitoringRead.PendingOrdersByVolume(100).Dump();

            var orderBooksByInstrument = await dataReaderClient.TradeMonitoringRead.OrderBooksByInstrument("BTCUSD");

            #endregion

            var accountAssetPairs = await dataReaderClient.AccountAssetPairsRead
                                    .List()
                                    .Dump();

            var firstAccountAssetPair  = accountAssetPairs.First();
            var secondAccountAssetPair = await dataReaderClient.AccountAssetPairsRead
                                         .Get(firstAccountAssetPair.TradingConditionId, firstAccountAssetPair.BaseAssetId,
                                              firstAccountAssetPair.Instrument)
                                         .Dump();

            firstAccountAssetPair.Should().BeEquivalentTo(secondAccountAssetPair);

            var accountAssetPairsGetByTradingCondition = await dataReaderClient.AccountAssetPairsRead
                                                         .Get(firstAccountAssetPair.TradingConditionId, firstAccountAssetPair.BaseAssetId)
                                                         .Dump();

            foreach (var accountAssetPair in accountAssetPairsGetByTradingCondition)
            {
                var item = accountAssetPairs
                           .Single(x => x.TradingConditionId == accountAssetPair.TradingConditionId &&
                                   x.BaseAssetId == accountAssetPair.BaseAssetId &&
                                   x.Instrument == accountAssetPair.Instrument);
                item.Should().BeEquivalentTo(accountAssetPair);
            }

            firstAccountAssetPair.OvernightSwapLong = 0.1m;
            var updatedAccountAssetPair = await backendClient.TradingConditionsEdit
                                          .InsertOrUpdateAccountAsset(firstAccountAssetPair)
                                          .Dump();

            updatedAccountAssetPair.Result.Should().BeEquivalentTo(firstAccountAssetPair);

            var tc = await backendClient.TradingConditionsEdit.InsertOrUpdate(
                new Contracts.TradingConditions.TradingConditionContract
            {
                Id          = "LYKKETEST",
                LegalEntity = "LYKKEVA",
                IsDefault   = false,
                Name        = "Test Trading Condition",
            }).Dump();

            tc.Result.Id.RequiredEqualsTo("LYKKETEST", "tc.Result.Id");

            var ag = await backendClient.TradingConditionsEdit.InsertOrUpdateAccountGroup(
                new Contracts.TradingConditions.AccountGroupContract
            {
                BaseAssetId           = "BTC",
                TradingConditionId    = tc.Result.Id,
                DepositTransferLimit  = 0.1m,
                ProfitWithdrawalLimit = 0.2m,
                MarginCall            = 0.3m,
                StopOut = 0.4m
            })
                     .Dump();

            ag.Result.StopOut.RequiredEqualsTo(0.4m, "ag.Result.StopOut");

            var aa = await backendClient.TradingConditionsEdit.InsertOrUpdateAccountAsset(new AccountAssetPairContract
            {
                Instrument         = "TSTLKK",
                BaseAssetId        = "BTC",
                TradingConditionId = tc.Result.Id
            })
                     .Dump();

            aa.Result.Instrument.RequiredEqualsTo("TSTLKK", "aa.Result.Instrument");

            var ai = await backendClient.TradingConditionsEdit.AssignInstruments(
                new Contracts.TradingConditions.AssignInstrumentsContract
            {
                BaseAssetId        = "BTC",
                TradingConditionId = tc.Result.Id,
                Instruments        = new string[] { "TSTLKK" }
            })
                     .Dump();

            ai.IsOk.RequiredEqualsTo(true, "ai.IsOk");

            var tclist = await dataReaderClient.TradingConditionsRead.List().Dump();

            await dataReaderClient.TradingConditionsRead.Get(tclist.First().Id).Dump();

            var manualCharge = await backendClient.AccountsBalance.ChargeManually(
                new Contracts.AccountBalance.AccountChargeManuallyRequest
            {
                ClientId  = "232b3b04-7479-44e7-a6b3-ac131d8e6ccd",
                AccountId = "d_f4c745f19c834145bcf2d6b5f1a871f3",
                Amount    = 1,
                Reason    = "API TEST"
            })
                               .Dump();

            var accountGroups = await dataReaderClient.AccountGroups.List().Dump();

            var accountGroup1 = accountGroups.FirstOrDefault();
            if (accountGroup1 != null)
            {
                var accountGroup =
                    (await dataReaderClient.AccountGroups.GetByBaseAsset(accountGroup1.TradingConditionId,
                                                                         accountGroup1.BaseAssetId)).Dump();
                accountGroup.Should().BeEquivalentTo(accountGroup1);
            }

            var assetPairs = await dataReaderClient.Dictionaries.AssetPairs().Dump();

            var matchingEngines = await dataReaderClient.Dictionaries.MatchingEngines().Dump();

            var orderTypes = await dataReaderClient.Dictionaries.OrderTypes().Dump();


            var routes = await dataReaderClient.Routes.List().Dump();

            var route1 = routes.FirstOrDefault();
            if (route1 != null)
            {
                var route = await dataReaderClient.Routes.GetById(route1.Id).Dump();

                route.Should().BeEquivalentTo(route1);
            }

            var isEnabled =
                await dataReaderClient.Settings.IsMarginTradingEnabled("232b3b04-7479-44e7-a6b3-ac131d8e6ccd");

            Console.WriteLine("Successfuly finished");
        }