コード例 #1
0
 public void TestMutations()
 {
     using (var provider = new TextCandleProvider())
     {
         var gen        = new GeneticsSelector <TextCandleProvider, BasicAlgorithm>(provider, 5, 30, 50);
         var mutatedInd = new float[] { 1, 2, 3, 4 };
         gen.Mutate(mutatedInd);
         Assert.IsFalse(mutatedInd.SequenceEqual(new float[] { 1, 2, 3, 4 }));
     }
 }
コード例 #2
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;
        }
コード例 #3
0
 public void TestWaitForGeneticsSelection()
 {
     using (var provider = new TextCandleProvider())
     {
         provider.SetTextParams(@"data\si-9-17.dat");
         var gen = new GeneticsSelector <TextCandleProvider, BasicAlgorithm>(new MemoryCache <TextCandleProvider>(provider), 5, 30, 4);
         gen.Select(2);
         gen.Wait();
         var bestResults = gen.GetBestResults();
         Assert.AreEqual(2, gen.PopulationIndex);
     }
 }
コード例 #4
0
 public void TestParentsCross()
 {
     using (var provider = new TextCandleProvider())
     {
         var     gen = new GeneticsSelector <TextCandleProvider, BasicAlgorithm>(provider, 5, 30, 50);
         float[] child1;
         float[] child2;
         gen.Cross(new float[] { 1, 2, 3 }, new float[] { 4, 5, 6 }, out child1, out child2);
         Assert.IsTrue(child1.SequenceEqual(new float[] { 4, 2, 6 }));
         Assert.IsTrue(child2.SequenceEqual(new float[] { 1, 5, 3 }));
         gen.Cross(new float[] { 1 }, new float[] { 4, 1 }, out child1, out child2);
         Assert.IsNull(child1);
         Assert.IsNull(child2);
     }
 }
コード例 #5
0
 public void TestRandomPopulation()
 {
     using (var provider = new TextCandleProvider())
     {
         provider.SetTextParams("data/si-9-17.dat");
         var gen = new GeneticsSelector <TextCandleProvider, BasicAlgorithm>(provider, 5, 30, 50,
                                                                             generationSize: 100);
         var randomPopulation = gen.GenerateRandomPopulation();
         Assert.IsTrue(randomPopulation.Length == 100);
         Assert.IsTrue(randomPopulation.All(o => o.Length == 50));
         foreach (var ind in randomPopulation)
         {
             foreach (var p in ind)
             {
                 Assert.IsTrue(p >= 5 && p <= 30);
             }
         }
         Assert.IsFalse(randomPopulation.First()
                        .SequenceEqual(randomPopulation.Last()));
     }
 }