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 })); } }
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 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); } }
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); } }
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())); } }