예제 #1
0
 private ExchangeRate CreateExchangeRate(KeyValuePair <string, ExchangeTicker> ticker)
 {
     if (notFoundSymbols.Contains(ticker.Key))
     {
         return(null);
     }
     try
     {
         var tickerName = _ExchangeAPI.ExchangeSymbolToGlobalSymbol(ticker.Key);
         if (!CurrencyPair.TryParse(tickerName, out var pair))
         {
             notFoundSymbols.Add(ticker.Key);
             return(null);
         }
         if (ReverseCurrencyPair)
         {
             pair = new CurrencyPair(pair.Right, pair.Left);
         }
         var rate = new ExchangeRate();
         rate.CurrencyPair = pair;
         rate.Exchange     = _ExchangeName;
         rate.BidAsk       = new BidAsk(ticker.Value.Bid, ticker.Value.Ask);
         return(rate);
     }
     catch (ArgumentException)
     {
         notFoundSymbols.Add(ticker.Key);
         return(null);
     }
 }
예제 #2
0
 public async Task <string> ExchangeCurrencyToGlobalCurrency(string symbol)
 {
     return(_api.ExchangeSymbolToGlobalSymbol(symbol));
 }
예제 #3
0
        public async Task CacheAllData(ExchangeAPI api, Exchange exchange)
        {
            Global.Logger.Information($"Starting CacheAllData");
            var watch1 = System.Diagnostics.Stopwatch.StartNew();

            var exchangeCoins = api.GetSymbolsMetadataAsync().Result.Where(m => m.BaseCurrency == Global.Configuration.TradeOptions.QuoteCurrency);

            // If there are items on the only trade list remove the rest
            if (Global.Configuration.TradeOptions.OnlyTradeList.Count > 0)
            {
                exchangeCoins = exchangeCoins.Where(m => Global.Configuration.TradeOptions.OnlyTradeList.Any(c => c.Contains(m.MarketName))).ToList();
            }

            var currentExchangeOption = Global.Configuration.ExchangeOptions.FirstOrDefault();

            IExchangeAPI realExchange = ExchangeAPI.GetExchangeAPI(api.Name);

            foreach (var coin in exchangeCoins)
            {
                var symbol = coin.MarketName;

                if (realExchange is ExchangeBinanceAPI)
                {
                    symbol = api.ExchangeSymbolToGlobalSymbol(symbol);
                }

                var backtestOptions = new BacktestOptions
                {
                    DataFolder   = Global.DataPath,
                    Exchange     = exchange,
                    Coin         = symbol,
                    CandlePeriod = Int32.Parse(currentExchangeOption.SimulationCandleSize)
                };

                var key1 = api.Name + backtestOptions.Coin + backtestOptions.CandlePeriod;
                if (Global.AppCache.Get <List <Candle> >(key1) != null)
                {
                    continue;
                }

                Candle databaseFirstCandle = Global.DataStoreBacktest.GetBacktestFirstCandle(backtestOptions).Result;
                Candle databaseLastCandle  = Global.DataStoreBacktest.GetBacktestLastCandle(backtestOptions).Result;

                if (databaseFirstCandle == null || databaseLastCandle == null)
                {
                    continue;
                }

                backtestOptions.StartDate = databaseFirstCandle.Timestamp;
                backtestOptions.EndDate   = databaseLastCandle.Timestamp;

                var candleProvider = new DatabaseCandleProvider();
                var _candle15      = candleProvider.GetCandles(backtestOptions, Global.DataStoreBacktest).Result;

                Global.AppCache.Remove(backtestOptions.Coin + backtestOptions.CandlePeriod);
                Global.AppCache.Add(api.Name + backtestOptions.Coin + backtestOptions.CandlePeriod, _candle15, new MemoryCacheEntryOptions());

                Global.Logger.Information($"   Cached {key1}");

                backtestOptions.CandlePeriod = 1;

                var key2 = api.Name + backtestOptions.Coin + backtestOptions.CandlePeriod;
                if (Global.AppCache.Get <List <Candle> >(key2) != null)
                {
                    continue;
                }

                Candle database1FirstCandle = Global.DataStoreBacktest.GetBacktestFirstCandle(backtestOptions).Result;
                Candle database1LastCandle  = Global.DataStoreBacktest.GetBacktestLastCandle(backtestOptions).Result;

                if (database1FirstCandle == null || database1LastCandle == null)
                {
                    continue;
                }

                backtestOptions.StartDate = database1FirstCandle.Timestamp;
                backtestOptions.EndDate   = database1LastCandle.Timestamp;

                var _candle1 = candleProvider.GetCandles(backtestOptions, Global.DataStoreBacktest).Result;

                Global.AppCache.Remove(backtestOptions.Coin + backtestOptions.CandlePeriod);
                Global.AppCache.Add(api.Name + backtestOptions.Coin + backtestOptions.CandlePeriod, _candle1, new MemoryCacheEntryOptions());

                Global.Logger.Information($"   Cached {key2}");
            }

            watch1.Stop();
            Global.Logger.Warning($"Ended CacheAllData in #{watch1.Elapsed.TotalSeconds} seconds");
        }