示例#1
0
    static OHCL[] loadData(DateTime max)
    {
        if (max == null)
        {
            DateTime.Now.AddDays(1);
        }

        String jsonAsText = System.IO.File.ReadAllText(@"Z:\temp\BTCUSDT.txt");

        Newtonsoft.Json.Linq.JContainer json = (Newtonsoft.Json.Linq.JContainer)JsonConvert.DeserializeObject(jsonAsText);

        List <OHCL> array = new List <OHCL>();

        foreach (var item in json)
        {
            try
            {
                OHCL ohcl = new OHCL();
                ohcl.CurrentDate = UnixTimeStampToDateTime(float.Parse(item[0].ToString().Replace(".", ",").Substring(0, 10)));
                if (ohcl.CurrentDate > max)
                {
                    break;
                }
                ohcl.PreviousOpen              = float.Parse(item.Previous[1].ToString().Replace(".", ","));
                ohcl.PreviousHigh              = float.Parse(item.Previous[2].ToString().Replace(".", ","));
                ohcl.PreviousLow               = float.Parse(item.Previous[3].ToString().Replace(".", ","));
                ohcl.NextClose                 = float.Parse(item[4].ToString().Replace(".", ","));
                ohcl.PreviousClose             = float.Parse(item.Previous[4].ToString().Replace(".", ","));
                ohcl.PreviousVolume            = float.Parse(item.Previous[5].ToString().Replace(".", ","));
                ohcl.PreviousQuoeteAssetVolume = float.Parse(item.Previous[7].ToString().Replace(".", ","));
                ohcl.PreviousTrades            = int.Parse(item.Previous[8].ToString().Replace(".", ","));
                array.Add(ohcl);
            }
            catch
            {
            }
        }

        return(array.ToArray());
    }
示例#2
0
    public static void start()
    {
        String lines = "";

        try
        {
            OHCL[] list = loadData(DateTime.Now);
            String l    = "";
            foreach (var item in list)
            {
                l += item.CurrentDate.ToString("yyyyMMdd") + ";" + item.NextClose + Environment.NewLine;
            }

            DateTime dateBegin   = DateTime.Parse("2019-10-01");
            String   longOrShort = "null";

            while (dateBegin < DateTime.Now.AddDays(-1))
            {
                //Import context
                MLContext mlContext = new MLContext();

                // 1. Import or create training data
                OHCL[]    ohclData     = loadData(dateBegin);
                IDataView trainingData = mlContext.Data.LoadFromEnumerable(ohclData);

                // 2. Specify data preparation and model training pipeline
                var pipeline = mlContext.Transforms.CopyColumns(outputColumnName: "Label", inputColumnName: "NextClose")
                               .Append(mlContext.Transforms.Categorical.OneHotEncoding(outputColumnName: "CurrentDateE", inputColumnName: "CurrentDate"))
                               .Append(mlContext.Transforms.NormalizeMeanVariance(outputColumnName: nameof(OHCL.PreviousClose)))
                               .Append(mlContext.Transforms.NormalizeMeanVariance(outputColumnName: nameof(OHCL.PreviousVolume)))
                               .Append(mlContext.Transforms.NormalizeMeanVariance(outputColumnName: nameof(OHCL.PreviousTrades)))
                               .Append(mlContext.Transforms.NormalizeMeanVariance(outputColumnName: nameof(OHCL.PreviousQuoeteAssetVolume)))
                               .Append(mlContext.Transforms.NormalizeMeanVariance(outputColumnName: nameof(OHCL.PreviousOpen)))
                               .Append(mlContext.Transforms.NormalizeMeanVariance(outputColumnName: nameof(OHCL.PreviousHigh)))
                               .Append(mlContext.Transforms.NormalizeMeanVariance(outputColumnName: nameof(OHCL.PreviousLow)))
                               .Append(mlContext.Transforms.Concatenate("Features", "CurrentDateE", nameof(OHCL.PreviousClose), nameof(OHCL.PreviousVolume), nameof(OHCL.PreviousTrades), nameof(OHCL.PreviousQuoeteAssetVolume), nameof(OHCL.PreviousOpen), nameof(OHCL.PreviousHigh), nameof(OHCL.PreviousLow)))
                               .Append(mlContext.Regression.Trainers.OnlineGradientDescent())
                ;


                // STEP 3: Set the training algorithm, then create and config the modelBuilder - Selected Trainer (SDCA Regression algorithm)
                var trainer          = mlContext.Regression.Trainers.Sdca(labelColumnName: "Label", featureColumnName: "Features");
                var trainingPipeline = pipeline.Append(trainer);

                // 3. Train model
                Console.WriteLine(dateBegin + " - Train...");
                var model = trainingPipeline.Fit(trainingData);
                Console.WriteLine("OK!");

                OHCL last = getOHCL(dateBegin, loadData(DateTime.Now));

                OHCL prediction = new OHCL();
                prediction.CurrentDate               = dateBegin;
                prediction.PreviousClose             = last.PreviousClose;
                prediction.PreviousVolume            = last.PreviousVolume;
                prediction.PreviousTrades            = last.PreviousTrades;
                prediction.PreviousQuoeteAssetVolume = last.PreviousQuoeteAssetVolume;
                prediction.PreviousOpen              = last.PreviousOpen;
                prediction.PreviousHigh              = last.PreviousHigh;
                prediction.PreviousLow               = last.PreviousLow;
                prediction.NextClose = 0;
                var aux = mlContext.Model.CreatePredictionEngine <OHCL, OHCLPrediction>(model).Predict(prediction);
                //Console.WriteLine(aux.NextClose);



                if (last.PreviousClose < aux.NextClose)
                {
                    longOrShort = "'L'";
                }
                if (last.PreviousClose > aux.NextClose)
                {
                    longOrShort = "'S'";
                }

                lines += "['" + dateBegin.ToString("yyyy-MM-dd") + "'," + last.NextClose.ToString().Replace(",", ".") + "," + aux.NextClose.ToString().Replace(",", ".") + "," + longOrShort + "],";



                dateBegin = dateBegin.AddDays(1);
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message + ex.StackTrace);
        }

        Console.WriteLine("press enter to exit...");
        Console.ReadLine();
        Environment.Exit(0);
    }