예제 #1
0
        public void Calculate()
        {
            var fName = string.Format("{0}_{1}", typeof(T).Name, Settings.Default.ResultsFileName);

            if (File.Exists(fName))
            {
                File.Delete(fName);
            }
            MemoryCache <FinamCandleProvider> cache;

            using (var provider = new FinamCandleProvider(Settings.Default.InsName, Settings.Default.TimePeriod,
                                                          Settings.Default.MarketCode, Settings.Default.InsCode, Settings.Default.DateFrom, Settings.Default.DateTo))
            {
                cache = new MemoryCache <FinamCandleProvider>(provider);
            }
            File.AppendAllLines(fName, new string[] { "Parameters;Populations total;Sharp Index;Profit;Mean profit per deal;Mean +profit per deal;Mean -profit per deal;Success %;" });
            for (var i = Settings.Default.ParamsCountFrom; i < Settings.Default.ParamsCountTo; i = i + 2)
            {
                _num          = i;
                Console.Title = string.Format("Length {0}", _num);
                Console.WriteLine();
                Console.WriteLine(" Length {0}:", i);
                Console.WriteLine(" ----------------------------------------------------------------");
                Console.WriteLine(" | iter | profit | sharp | mean p | success | mean p+ | mean p- |");
                Console.WriteLine(" ----------------------------------------------------------------");
                var genSelector = new GeneticsSelector <FinamCandleProvider, T>(cache, 3, 100, i, generationSize: Settings.Default.GenerationSize, threadsNum: Settings.Default.ThreadsCount, crossPercent: Settings.Default.CrossPercent);
                genSelector.PopulationCompleted += GenSelector_PopulationCompleted;
                genSelector.Select(Settings.Default.PopulationsCount);
                genSelector.Wait();
                var result = genSelector.GetBestResults().First();
                File.AppendAllLines(fName,
                                    new string[]
                {
                    string.Format("{0};{1};{2};{3};{4};{5};{6};{7};",
                                  string.Join(",", result.Parameters),
                                  genSelector.PopulationIndex,
                                  result.SharpIndex,
                                  result.Balance,
                                  result.MeanProfit,
                                  result.MeanPositiveProfit,
                                  result.MeanNegativeProfit,
                                  result.SuccessRatio)
                });
                // generate result file for best result
                var algDataFileName = string.Format("{0}_{1}params_{2}",
                                                    typeof(T).Name, i, Settings.Default.ResultsFileName);
                AlgDataExport.ExportToCSV(result, algDataFileName, typeof(T).Name);
            }

            Console.WriteLine();
            Console.ForegroundColor = ConsoleColor.White;
            Console.WriteLine("Calculation completed.");
            Console.ReadLine();
            _num = 0;
        }
        public void TestFinamProviderBasicDownload()
        {
            var lowDate  = new DateTime(2016, 6, 10);
            var highDate = new DateTime(2016, 7, 10);

            using (var provider = new FinamCandleProvider("SPFB.SI", TimePeriod.Hour,
                                                          "14", "19899", lowDate, highDate))
            {
                Assert.AreEqual(provider.Current, default(Candle));
                provider.Initialize();
                var num = 0;
                while (provider.MoveNext())
                {
                    num++;
                    Assert.IsTrue(provider.Current.TimeStamp >= lowDate && provider.Current.TimeStamp <= highDate);
                }
                Assert.AreEqual(279, num);
            }
        }
예제 #3
0
        public void TestGuppiAlgMatrix()
        {
            var alg = new GuppiAlgorithm(4, 6, 9, 11, 13, 16, 31, 36, 41, 46, 51, 61);

            using (var provider = new FinamCandleProvider("SPFB.SI", TimePeriod.Hour,
                                                          "14", "19899", new DateTime(2013, 9, 1), new DateTime(2014, 03, 10)))
            {
                provider.Initialize();
                using (var reader = new StreamReader(@"data\guppi_data.dat"))
                {
                    var startDate = new DateTime(2014, 01, 13, 15, 0, 0);
                    while (provider.Current.TimeStamp != startDate)
                    {
                        provider.MoveNext();
                        alg.Check(provider.Current);
                    }
                    reader.ReadLine();
                    while (!reader.EndOfStream)
                    {
                        provider.MoveNext();
                        alg.Check(provider.Current);
                        var data    = reader.ReadLine().Split(';');
                        var algData = alg.Data.Last();
                        int i;
                        for (i = 0; i < 12; i++)
                        {
                            Assert.IsTrue(Math.Abs(float.Parse(data[i]) - algData[i]) <= 1);
                        }
                        for (i = 12; i < 24; i++)
                        {
                            Assert.AreEqual(int.Parse(data[i]), algData[i]);
                        }
                        Assert.IsTrue(algData[33] == algData[28] && algData[28] == -1);
                    }
                }
            }
        }
예제 #4
0
        static void Main(string[] args)
        {
            List <Type> algTypes   = new List <Type>();
            var         searchPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);

            foreach (var file in Directory.GetFiles(searchPath, "*.dll"))
            {
                algTypes.AddRange(Assembly.LoadFrom(file).GetTypes()
                                  .Where(o =>
                                         o.BaseType == typeof(AlgorithmBase) &&
                                         o.IsDefined(typeof(AlgorithmAttribute))));
            }

            Console.WriteLine("=== Found {0} algorithms ===", algTypes.Count());
            for (var i = 1; i <= algTypes.Count(); i++)
            {
                Console.WriteLine(" {0}) {1}", i, algTypes[i - 1].Name);
            }
            Console.WriteLine();
            Console.Write(" Select algorithm: ");
            int num;

            int.TryParse(Console.ReadLine(), out num);

            if (num < 1 || num > algTypes.Count())
            {
                Console.WriteLine("Incorrect choice.");
                Console.ReadLine();
                return;
            }

            if (!args.Any() || (args[0] == "--genetics"))
            {
                var calc = (IRealTimeCalculator)Activator.CreateInstance(typeof(RealTimeCalculator <>)
                                                                         .MakeGenericType(algTypes[num - 1]));
                calc.Calculate();
            }
            if (args[0] == "--calculate")
            {
                if (args.Length <= 1)
                {
                    return;
                }
                using (var provider = new FinamCandleProvider(Settings.Default.InsName, Settings.Default.TimePeriod,
                                                              Settings.Default.MarketCode, Settings.Default.InsCode, Settings.Default.DateFrom, Settings.Default.DateTo))
                {
                    var calc = (ICalculator <FinamCandleProvider>)Activator.CreateInstance(typeof(Calculator <,>)
                                                                                           .MakeGenericType(typeof(FinamCandleProvider), algTypes[num - 1]));
                    calc.MemCache = new MemoryCache <FinamCandleProvider>(provider);

                    foreach (var arg in args.Skip(1))
                    {
                        if (!arg.StartsWith("--p="))
                        {
                            return;
                        }
                        var splits = arg.Split('=').Last().Split(',');
                        var prms   = new float[splits.Length];
                        for (var i = 0; i < splits.Length; i++)
                        {
                            float p;
                            if (!float.TryParse(splits[i], out p))
                            {
                                return;
                            }
                            prms[i] = p;
                        }
                        calc.AddParamsForCalculation(prms);
                    }
                    calc.CalculateAsync();
                    calc.Wait();
                    var n = 0;
                    foreach (var r in calc.Results)
                    {
                        n++;
                        AlgDataExport.ExportToCSV(r, string.Format("{0}_{1}",
                                                                   n, Settings.Default.ResultsFileName), algTypes[num - 1].Name);
                    }
                }
            }
        }