public async Task <ActionResult> GetSignals(string exchange, string coinsToBuy, string strategy, string candleSize = "5") { var strategyName = WebUtility.HtmlDecode(strategy); List <string> coins = new List <string>(); Char delimiter = ','; String[] coinsToBuyArray = coinsToBuy.Split(delimiter); foreach (var coin in coinsToBuyArray) { coins.Add(coin.ToUpper()); } var backtestOptions = new BacktestOptions { DataFolder = Global.DataPath, Exchange = (Exchange)Enum.Parse(typeof(Exchange), exchange, true), Coins = coins, Coin = coinsToBuy, CandlePeriod = Int32.Parse(candleSize) }; var candleProvider = new DatabaseCandleProvider(); var items = await candleProvider.GetSignals(backtestOptions, Global.DataStoreBacktest, strategyName); return(new JsonResult(items)); }
public async Task <bool> Simulation(string coinToBuy, string strategy, string fromDate, string toDate) { var candleProvider = new DatabaseCandleProvider(); var globalFullApi = await Global.ExchangeApi.GetFullApi(); await candleProvider.CacheAllData(globalFullApi, Global.Configuration.ExchangeOptions.FirstOrDefault().Exchange); var currentExchangeOption = Global.Configuration.ExchangeOptions.FirstOrDefault(); var simulationStartingDate = TimeZoneInfo.ConvertTimeToUtc(DateTime.ParseExact(fromDate, "yyyy-MM-ddTHH:mm:ss", System.Globalization.CultureInfo.InvariantCulture)); var simulationEndingDate = TimeZoneInfo.ConvertTimeToUtc(DateTime.ParseExact(toDate, "yyyy-MM-ddTHH:mm:ss", System.Globalization.CultureInfo.InvariantCulture)); var tradeManager = new TradeManager(); currentExchangeOption.SimulationCurrentDate = simulationStartingDate; while (currentExchangeOption.SimulationCurrentDate <= simulationEndingDate) { Global.Logger.Information($"------ SimulationCurrentDate start: {currentExchangeOption.SimulationCurrentDate}"); var watch1 = System.Diagnostics.Stopwatch.StartNew(); await tradeManager.LookForNewTrades(strategy); await tradeManager.UpdateExistingTrades(); currentExchangeOption.SimulationCurrentDate = currentExchangeOption.SimulationCurrentDate.AddMinutes(5); watch1.Stop(); Global.Logger.Information($"------SimulationCurrentDate end: {currentExchangeOption.SimulationCurrentDate} in #{watch1.Elapsed.TotalSeconds} seconds"); } return(true); }