示例#1
0
        public async Task AutoForecast()
        {
            string       lastFolder;
            const int    dataHours         = 200;
            const int    periods           = 24;
            const bool   hourlySeasonality = false;
            const bool   dailySeasonality  = false;
            const string readFrom          = "assets";

            try
            {
                IEnumerable <string> assets;
                if (readFrom.ToLower().Equals("assets"))
                {
                    assets = _fileManager.ReadAssetsFromExcel(_directoryManager.AsstesLocation);
                }
                else
                {
                    assets = _fileManager.ReadAssetsFromExcel(_directoryManager.ObservablesLocation);
                }
                var currentTime = DateTime.Now;
                Parallel.ForEach(assets, asset =>
                {
                    var pathToFolder =
                        _directoryManager.GenerateForecastFolder(asset, periods, DirSwitcher.Auto, currentTime);

                    var normalized = _processModel.GetDataAuto(asset, dataHours);
                    if (normalized == null || !normalized.Any())
                    {
                        _directoryManager.RemoveFolder(pathToFolder);
                        var zeroResults = new ExcelLog()
                        {
                            AssetName = asset,
                            Log       = Indicator.ZeroRezults.ToString(),
                            Rate      = "0",
                            Width     = "0",
                            Volume    = "0",
                            Change    = "0",
                            Rsi       = "0"
                        };
                        Shared.Log(zeroResults);
                        //Shared.Log(asset, Indicator.ZeroRezults, 0, "0", 0, 0, 0);
                        return;
                    }

                    var csv = _fileManager.CreateDataCsv(normalized, pathToFolder);
                    if (string.IsNullOrEmpty(csv))
                    {
                        var zeroResults = new ExcelLog()
                        {
                            AssetName = asset,
                            Log       = Indicator.ZeroRezults.ToString(),
                            Rate      = "0",
                            Width     = "0",
                            Volume    = "0",
                            Change    = "0",
                            Rsi       = "0"
                        };
                        Shared.Log(zeroResults);
                        //Shared.Log(asset, Indicator.ZeroRezults, 0, "0", 0, 0, 0);
                        return;
                    }
                    _directoryManager.SaveDataFile(csv, pathToFolder);

                    _pythonExec.RunPython(pathToFolder, periods, hourlySeasonality, dailySeasonality);

                    var pathToOut        = _directoryManager.FilePathOut(pathToFolder);
                    var pathToComponents = _directoryManager.FileComponentsOut(pathToFolder);
                    var pathToForecast   = _directoryManager.FileForecastOut(pathToFolder);

                    var outCreated        = _directoryManager.WaitForFile(pathToOut, 60);
                    var componentsCreated = _directoryManager.WaitForFile(pathToComponents, 10);
                    var forecastCreated   = _directoryManager.WaitForFile(pathToForecast, 10);

                    if (!outCreated.Result || !forecastCreated.Result || !componentsCreated.Result)
                    {
                        return;
                    }

                    var stats          = _fileManager.BuildOutTableRows(pathToOut, periods);
                    var performance    = _utility.DefinePerformance(stats);
                    var marketFeatures = _utility.GetFeatures(normalized, asset);
                    var rsi            = _utility.Rsi(normalized);
                    var log            = new ExcelLog()
                    {
                        AssetName = asset,
                        Log       = performance.Indicator.ToString(),
                        Rate      = performance.Rate.ToString(),
                        Width     = performance.Width.ToString(),
                        Volume    = marketFeatures.Volume.ToString() + "BTC",
                        Change    = marketFeatures.Change.ToString("N2"),
                        Rsi       = rsi.ToString("N2") + "%"
                    };
                    Shared.Log(log);
                    //Shared.Log(asset, performance.Indicator, performance.Rate, performance.Width.ToString(),marketFeatures.Volume, marketFeatures.Change, rsi);
                    _directoryManager.SpecifyDirByTrend(performance.Indicator, pathToFolder);
                }
                                 );

                lastFolder = _directoryManager.GetLastFolder(DirSwitcher.Auto);
                var results = _directoryManager.GetListByIndicator(lastFolder);

                var res = _fileManager.WriteLogExcel(lastFolder, Shared.GetLog);
                _directoryManager.WriteLogToExcel(lastFolder, res);
                Shared.ClearLog();
                var model = _requestHelper.GetStats();
                await _messenger.SendMessage("Done Assets");
            }
            catch (Exception e)
            {
                lastFolder = _directoryManager.GetLastFolder(DirSwitcher.Auto);
                if (Shared.GetLog.Any())
                {
                    var res = _fileManager.WriteLogExcel(lastFolder, Shared.GetLog);
                    _directoryManager.WriteLogToExcel(lastFolder, res);
                    Shared.ClearLog();
                }
                await _messenger.SendMessage("Failed Assets");

                throw new Exception(e.Message);
            }
        }
示例#2
0
 public ServerRequestsStats GetStats()
 {
     return(_requestHelper.GetStats());
 }