Beispiel #1
0
        public async Task <IActionResult> InstantForecast()
        {
            var        viewModel         = new InstantForecastModal();
            const int  periods           = 24;
            const int  dataHours         = 230;
            const bool hourlySeasonality = false;
            const bool dailySeasonality  = false;
            var        numFormat         = new CultureInfo("en-US", false).NumberFormat;

            numFormat.PercentDecimalDigits = 3;

            var symbol    = _appSettings.Value.InstantForecast;
            var coin      = new Logic(_appSettings, symbol, dataHours, currentLocation);
            var manager   = new DirectoryManager(_appSettings, currentLocation);
            var pythonRun = new Logic(_appSettings);

            StaticUtility.RequestCounter = (manager.GetRequestCount());
            try
            {
                var pathToFolder = manager.GenerateForecastFolder(symbol, periods, DirSwitcher.Instant);

                if (!coin.GenerateCsvFile(pathToFolder))
                {
                    throw new Exception("Something's wrong with a coin");
                }

                pythonRun.PythonExecutor(manager.GetLastFolder(DirSwitcher.Instant), periods, hourlySeasonality, dailySeasonality);

                var pathToOut        = Path.Combine(manager.GetLastFolder(DirSwitcher.Instant), manager.OutFile);
                var pathToComponents = Path.Combine(manager.GetLastFolder(DirSwitcher.Instant), manager.OutComponents);
                var pathToForecast   = Path.Combine(manager.GetLastFolder(DirSwitcher.Instant), manager.OutForecast);

                var pathToForecastForImg = Path.Combine(_appSettings.Value.ForecastDir, manager.DirForImages(DirSwitcher.Instant), manager.OutForecast);

                var outCreated = await StaticUtility.WaitForFile(pathToOut, 60);

                var componentsCreated = await StaticUtility.WaitForFile(pathToComponents, 10);

                var forecastCreated = await StaticUtility.WaitForFile(pathToForecast, 10);

                var tableInstant = new List <TableRow>();
                if (outCreated)
                {
                    tableInstant = StaticUtility.BuildOutTableRows(pathToOut, periods).ToList();
                }
                else
                {
                    manager.UpdateRequests(StaticUtility.RequestCounter);
                    return(NotFound(new { message = "out.csv not found", requestCount = StaticUtility.RequestCounter }));
                }
                if (forecastCreated)
                {
                    viewModel.ForecastPath = Path.DirectorySeparatorChar + pathToForecastForImg;
                }
                else
                {
                    manager.UpdateRequests(StaticUtility.RequestCounter);
                    return(NotFound(new { message = "forecast.png not found", requestCount = StaticUtility.RequestCounter }));
                }

                if (!componentsCreated)
                {
                    manager.UpdateRequests(StaticUtility.RequestCounter);
                    return(NotFound(new { message = "components.png not found", requestCount = StaticUtility.RequestCounter }));
                }
                manager.UpdateRequests(StaticUtility.RequestCounter);

                viewModel.AssetName = symbol;
                var performance = coin.DefineTrend(tableInstant);
                viewModel.Indicator = performance.Indicator;
                viewModel.Rate      = performance.Rate.ToString("P", numFormat);
            }
            catch (Exception e)
            {
                manager.UpdateRequests(StaticUtility.RequestCounter);
                return(NotFound(new { message = e.Message, requestCount = StaticUtility.RequestCounter }));
            }
            return(Json(viewModel));
        }
Beispiel #2
0
        public async Task <IActionResult> ManualForecast(string symbol, int dataHours, int periods, bool hourlySeasonality, bool dailySeasonality)
        {
            var viewModel = new MainViewModel();
            var coin      = new Logic(_appSettings, symbol, dataHours, currentLocation);
            var manager   = new DirectoryManager(_appSettings, currentLocation);
            var pythonRun = new Logic(_appSettings);

            StaticUtility.RequestCounter = (manager.GetRequestCount());
            try
            {
                var pathToFolder = manager.GenerateForecastFolder(symbol, periods, DirSwitcher.Manual);
                if (!coin.GenerateCsvFile(pathToFolder))
                {
                    throw new Exception("Something's wrong with a coin");
                }

                pythonRun.PythonExecutor(manager.GetLastFolder(DirSwitcher.Manual), periods, hourlySeasonality, dailySeasonality);

                var pathToOut        = Path.Combine(manager.GetLastFolder(DirSwitcher.Manual), manager.OutFile);
                var pathToComponents = Path.Combine(manager.GetLastFolder(DirSwitcher.Manual), manager.OutComponents);
                var pathToForecast   = Path.Combine(manager.GetLastFolder(DirSwitcher.Manual), manager.OutForecast);

                var pathToComponentsForImg = Path.Combine(_appSettings.Value.ForecastDir, manager.DirForImages(DirSwitcher.Manual), manager.OutComponents);
                var pathToForecastForImg   = Path.Combine(_appSettings.Value.ForecastDir, manager.DirForImages(DirSwitcher.Manual), manager.OutForecast);

                var outCreated = await StaticUtility.WaitForFile(pathToOut, 60);

                var componentsCreated = await StaticUtility.WaitForFile(pathToComponents, 10);

                var forecastCreated = await StaticUtility.WaitForFile(pathToForecast, 10);

                if (outCreated)
                {
                    viewModel.Table = StaticUtility.BuildOutTableRows(pathToOut, periods);
                }
                else
                {
                    manager.UpdateRequests(StaticUtility.RequestCounter);
                    return(NotFound(new { message = "out.csv not found", requestCount = StaticUtility.RequestCounter }));
                }

                if (forecastCreated)
                {
                    viewModel.ForecastPath = Path.DirectorySeparatorChar + pathToForecastForImg;
                }
                else
                {
                    manager.UpdateRequests(StaticUtility.RequestCounter);
                    return(NotFound(new { message = "forecast.png not found", requestCount = StaticUtility.RequestCounter }));
                }

                if (componentsCreated)
                {
                    viewModel.ComponentsPath = Path.DirectorySeparatorChar + pathToComponentsForImg;
                }
                else
                {
                    manager.UpdateRequests(StaticUtility.RequestCounter);
                    return(NotFound(new { message = "components.png not found", requestCount = StaticUtility.RequestCounter }));
                }

                manager.UpdateRequests(StaticUtility.RequestCounter);
                viewModel.RequestsPerDay = StaticUtility.RequestCounter;//manager.CurrentCounts;
                viewModel.AssetName      = symbol;
                var performance = coin.DefineTrend(viewModel.Table);
                viewModel.Indicator = performance.Indicator;
            }
            catch (Exception e)
            {
                manager.UpdateRequests(StaticUtility.RequestCounter);
                return(NotFound(new { message = e.Message, requestCount = StaticUtility.RequestCounter }));
            }

            return(Json(viewModel));
        }
Beispiel #3
0
        public IActionResult GetForecastData(Indicator indicator, string assetName, int periods)
        {
            var viewModel = new MainViewModel();

            var manager = new DirectoryManager(_appSettings, currentLocation);
            var folder  = manager.GetLastFolder(DirSwitcher.Auto);

            try
            {
                string indicatorDir;
                string dir;
                switch (indicator)
                {
                case Indicator.Positive:
                    indicatorDir = manager.DirPositive;
                    dir          = Path.Combine(folder, indicatorDir);
                    break;

                case Indicator.Neutral:
                    indicatorDir = manager.DirNeutral;
                    dir          = Path.Combine(folder, indicatorDir);
                    break;

                case Indicator.Negative:
                    indicatorDir = manager.DirNegative;
                    dir          = Path.Combine(folder, indicatorDir);
                    break;

                case Indicator.StrongPositive:
                    indicatorDir = manager.DirStrongPositive;
                    dir          = Path.Combine(folder, indicatorDir);
                    break;

                default:
                    throw new ArgumentOutOfRangeException(nameof(indicator), indicator, null);
                }

                var targetFolder           = DirectoryManager.GetForecastFolderByName(dir, assetName);
                var pathToOut              = Path.Combine(dir, targetFolder, manager.OutFile);
                var pathToComponentsForImg = Path.Combine(_appSettings.Value.ForecastDir, manager.DirForImages(DirSwitcher.Auto), indicatorDir, targetFolder, manager.OutComponents);
                var pathToForecastForImg   = Path.Combine(_appSettings.Value.ForecastDir, manager.DirForImages(DirSwitcher.Auto), indicatorDir, targetFolder, manager.OutForecast);

                viewModel.ComponentsPath = Path.DirectorySeparatorChar + pathToComponentsForImg;
                viewModel.ForecastPath   = Path.DirectorySeparatorChar + pathToForecastForImg;
                viewModel.RequestsPerDay = manager.GetRequestCount();
                viewModel.AssetName      = assetName;
                viewModel.Indicator      = indicator;
                viewModel.Table          = StaticUtility.BuildOutTableRows(pathToOut, periods);
            }
            catch (Exception e)
            {
                return(NotFound(new { message = e.Message }));
            }


            return(Json(viewModel));
        }