private async void EnsureHistoricalTrades() { if (!Exchange.SupportsHistoricalLoad) { return; } Logger.LogInformation("Ensure historical trades are captured."); foreach (var symbolCode in ExchangeWorker.Configuration.Symbol) { var symbol = SymbolFactory.Get(symbolCode); var lastTradeFilter = await HistorianRepository.GetTradeFilter(Exchange.Name, symbolCode); var priority = string.Equals(lastTradeFilter, Exchange.GetHttpClient().InitialTradeFilter) ? 2 : 1; var catchup = new HistorianTradeCatchup { Exchange = Exchange.Name, SymbolCode = symbolCode, TradeFilter = lastTradeFilter, EpochTo = Epoch.Now, CurrentTradeFilter = lastTradeFilter, Priority = priority }; await HistorianRepository.AddTradeCatchup(catchup); } }
private void BeginReceiveTradesHttp() => Task.Run(async() => { using (Logger.BeginProtocolScope("Https")) { var symbols = ExchangeWorker.Configuration.Symbol.Select(symbolCode => SymbolFactory.Get(symbolCode)).Where(symbol => symbol.Tradable); while (true) { if (!ExchangeWorker.Online) { await Task.Delay(1000); continue; } foreach (var symbol in symbols) { using (Logger.BeginSymbolScope(symbol.Code)) { try { var lastTradeFilter = await HistorianRepository.GetTradeFilter(Exchange.Name, symbol.Code); TradeResult result; using (var transaction = await StorageTransactionFactory.Begin()) { result = await ExchangeTradeProvider.ReceiveTradesHttp(transaction, Logger, Exchange.Name, symbol, HttpClient, Limit, lastTradeFilter); if (result != null) { await HistorianRepository.SetTradeFilter(transaction, Exchange.Name, symbol.Code, result.Filter); } await transaction.Commit(); } if (result == null) { await Task.Delay(1000); } } catch (Exception ex) { Logger.LogError(ex, "Unexpected error occurred"); } } } } } });
public async Task <bool> Run(ILogger logger) { logger.LogInformation("Running repository bootstrapper"); try { foreach (var currency in CurrencyFactory.List()) { await CurrencyRepository.Add(currency); } foreach (var symbol in SymbolFactory.List()) { await SymbolRepository.Add(symbol); } foreach (var group in IntervalFactory.ListGroups()) { foreach (var ik in IntervalFactory.ListIntervalKeys(group.IntervalGroup)) { await IntervalRepository.Add(ik); } } foreach (var exchange in ExchangeFactory.List()) { await ExchangeRepository.Add(exchange); var httpClient = exchange.GetHttpClient(); foreach (var symbolCode in exchange.Symbol) { var symbol = SymbolFactory.Get(symbolCode); await SymbolRepository.Add(symbol); await ExchangeRepository.AddSymbol(exchange.Name, symbolCode); var tradeFilter = await HistorianRepository.GetTradeFilter(exchange.Name, symbolCode); if (tradeFilter == null) { using (var transaction = await StorageTransactionFactory.Begin()) { await HistorianRepository.SetTradeFilter(transaction, exchange.Name, symbolCode, httpClient.InitialTradeFilter); await transaction.Commit(); } } } } foreach (var orderSide in OrderSideFactory.List()) { await OrderSideRepository.Add(orderSide); } return(true); } catch (Exception ex) { logger.LogCritical(ex, "Unable to run repository bootstrapper"); return(false); } }