[Quantproject-developers] QuantProject/b7_Scripts/EvaluatingOptimizationTechnique/EfficientPortfolio
Brought to you by:
glauco_1
|
From: Marco M. <mi...@us...> - 2005-09-27 22:26:11
|
Update of /cvsroot/quantproject/QuantProject/b7_Scripts/EvaluatingOptimizationTechnique/EfficientPortfolio In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv9846/b7_Scripts/EvaluatingOptimizationTechnique/EfficientPortfolio Modified Files: RunTestingOptimizationOpenToClose.cs Log Message: The test for the optimization technique on open to close script has been modified. The comparison between fitness in sample and fitness out of sample concerns now only the best genomes (all different in genes) and the worst ones (all different in genes). Index: RunTestingOptimizationOpenToClose.cs =================================================================== RCS file: /cvsroot/quantproject/QuantProject/b7_Scripts/EvaluatingOptimizationTechnique/EfficientPortfolio/RunTestingOptimizationOpenToClose.cs,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** RunTestingOptimizationOpenToClose.cs 28 Aug 2005 10:02:52 -0000 1.2 --- RunTestingOptimizationOpenToClose.cs 27 Sep 2005 22:26:02 -0000 1.3 *************** *** 45,49 **** private int numberOfEligibleTickers; private int numberOfTickersToBeChosen; ! private int numDaysForLiquidity; private int populationSizeForGeneticOptimizer; private int generationNumberForGeneticOptimizer; --- 45,49 ---- private int numberOfEligibleTickers; private int numberOfTickersToBeChosen; ! private int numDaysForOptimization; private int populationSizeForGeneticOptimizer; private int generationNumberForGeneticOptimizer; *************** *** 56,62 **** private Genome[] genomesToTestOutOfSample; private int numberOfGenomesToTest; ! public RunTestingOptimizationOpenToClose(string tickerGroupID, int numberOfEligibleTickers, ! int numberOfTickersToBeChosen, int numDaysForLiquidity, int generationNumberForGeneticOptimizer, int populationSizeForGeneticOptimizer, string benchmark, --- 56,62 ---- private Genome[] genomesToTestOutOfSample; private int numberOfGenomesToTest; ! public RunTestingOptimizationOpenToClose(string tickerGroupID, int numberOfEligibleTickers, ! int numberOfTickersToBeChosen, int numDaysForOptimization, int generationNumberForGeneticOptimizer, int populationSizeForGeneticOptimizer, string benchmark, *************** *** 72,76 **** this.numberOfEligibleTickers = numberOfEligibleTickers; this.numberOfTickersToBeChosen = numberOfTickersToBeChosen; ! this.numDaysForLiquidity = numDaysForLiquidity; this.populationSizeForGeneticOptimizer = populationSizeForGeneticOptimizer; this.generationNumberForGeneticOptimizer = generationNumberForGeneticOptimizer; --- 72,76 ---- this.numberOfEligibleTickers = numberOfEligibleTickers; this.numberOfTickersToBeChosen = numberOfTickersToBeChosen; ! this.numDaysForOptimization = numDaysForOptimization; this.populationSizeForGeneticOptimizer = populationSizeForGeneticOptimizer; this.generationNumberForGeneticOptimizer = generationNumberForGeneticOptimizer; *************** *** 81,86 **** this.numDaysAfterLastOptimizationDay = numDaysAfterLastOptimizationDay; this.numberOfSubsets = numberOfSubsets; ! ! } private DataTable getSetOfTickersToBeOptimized(DateTime date) --- 81,85 ---- this.numDaysAfterLastOptimizationDay = numDaysAfterLastOptimizationDay; this.numberOfSubsets = numberOfSubsets; ! } private DataTable getSetOfTickersToBeOptimized(DateTime date) *************** *** 89,93 **** SelectorByAverageRawOpenPrice selectorByOpenPrice = new SelectorByAverageRawOpenPrice(this.tickerGroupID, false, ! currentDate.AddDays(-this.numDaysForLiquidity), currentDate, this.numberOfEligibleTickers, this.minPriceForMinimumCommission, this.maxPriceForMinimumCommission, 0, 2); --- 88,92 ---- SelectorByAverageRawOpenPrice selectorByOpenPrice = new SelectorByAverageRawOpenPrice(this.tickerGroupID, false, ! currentDate.AddDays(-this.numDaysForOptimization), currentDate, this.numberOfEligibleTickers, this.minPriceForMinimumCommission, this.maxPriceForMinimumCommission, 0, 2); *************** *** 95,176 **** */ ! SelectorByLiquidity mostLiquid = new SelectorByLiquidity(this.tickerGroupID, false, ! date.AddDays(-this.numDaysForLiquidity), date, ! this.numberOfEligibleTickers); ! /*SelectorByOpenToCloseVolatility lessVolatile = ! new SelectorByOpenToCloseVolatility(mostLiquid.GetTableOfSelectedTickers(), ! true, currentDate.AddDays(-5), ! currentDate, ! this.numberOfEligibleTickers/2);*/ DataTable eligibleTickers; ! eligibleTickers = mostLiquid.GetTableOfSelectedTickers(); SelectorByQuotationAtEachMarketDay quotedAtEachMarketDayFromEligible = new SelectorByQuotationAtEachMarketDay( eligibleTickers, ! false, date.AddDays(-this.numDaysForLiquidity), date, this.numberOfEligibleTickers, this.benchmark); //SelectorByWinningOpenToClose winners = ! // new SelectorByWinningOpenToClose(quotedAtEachMarketDayFromMostLiquid.GetTableOfSelectedTickers(), ! // false, currentDate.AddDays(-2), ! // currentDate, this.numberOfEligibleTickers/4); //return winners.GetTableOfSelectedTickers(); ! //SelectorByOpenCloseCorrelationToBenchmark lessCorrelated = ! // new SelectorByOpenCloseCorrelationToBenchmark(quotedAtEachMarketDayFromEligible.GetTableOfSelectedTickers(), ! // this.benchmark, true, ! // currentDate.AddDays(-this.numDaysForLiquidity), ! // currentDate, this.numberOfEligibleTickers/2); return quotedAtEachMarketDayFromEligible.GetTableOfSelectedTickers(); //return lessCorrelated.GetTableOfSelectedTickers(); } ! private double setFitnesses_setFitnessesActually_getFitnessOutOfSample(Genome genome) { ! double returnValue = 0; ! foreach(string tickerCode in (string[])genome.Meaning) ! { ! double coefficient = 1.0; ! string ticker = tickerCode; ! if(ticker.StartsWith("-")) ! { ! ticker = ticker.Substring(1,ticker.Length -1); ! coefficient = -1.0; ! } ! DateTime dateOutOfSample = this.marketDate.AddDays(this.numDaysAfterLastOptimizationDay); ! Quotes tickerQuotes = new Quotes(ticker, dateOutOfSample, ! dateOutOfSample); ! returnValue += ! (tickerQuotes.GetFirstValidRawClose(dateOutOfSample)/ ! tickerQuotes.GetFirstValidRawOpen(dateOutOfSample) - 1.0)*coefficient; ! } ! return returnValue/genome.Size; } ! private void setFitnesses_setFitnessesActually_setGenomesToTestOutOfSample(GeneticOptimizer GO) { ! Random random = new Random(10); ! for(int i = 0; i<this.numberOfGenomesToTest; i++) ! { ! this.genomesToTestOutOfSample[i]= ! (Genome)GO.CurrentGeneration[random.Next(this.populationSizeForGeneticOptimizer)]; ! } ! Array.Sort(this.genomesToTestOutOfSample); } ! private void setFitnesses_setFitnessesActually(GeneticOptimizer GO) { ! this.setFitnesses_setFitnessesActually_setGenomesToTestOutOfSample(GO); ! for(int i = 0; i<this.numberOfGenomesToTest; i++) ! { ! this.fitnessesInSample[i]=(this.genomesToTestOutOfSample[i]).Fitness; ! this.fitnessesOutOfSample[i]= ! this.setFitnesses_setFitnessesActually_getFitnessOutOfSample(this.genomesToTestOutOfSample[i]); ! } } ! ! private void setFitnesses() { --- 94,240 ---- */ ! SelectorByGroup temporizedGroup = new SelectorByGroup(this.tickerGroupID, ! date); ! ! SelectorByOpenCloseCorrelationToBenchmark lessCorrelatedFromTemporizedGroup = ! new SelectorByOpenCloseCorrelationToBenchmark(temporizedGroup.GetTableOfSelectedTickers(), ! this.benchmark,true, ! date.AddDays(-this.numDaysForOptimization ), ! date, ! this.numberOfEligibleTickers); ! DataTable eligibleTickers; ! eligibleTickers = lessCorrelatedFromTemporizedGroup.GetTableOfSelectedTickers(); ! //eligibleTickers = temporizedGroup.GetTableOfSelectedTickers(); SelectorByQuotationAtEachMarketDay quotedAtEachMarketDayFromEligible = new SelectorByQuotationAtEachMarketDay( eligibleTickers, ! false, date.AddDays(-this.numDaysForOptimization), date, this.numberOfEligibleTickers, this.benchmark); //SelectorByWinningOpenToClose winners = ! //new SelectorByWinningOpenToClose(quotedAtEachMarketDayFromEligible.GetTableOfSelectedTickers(), ! // false, date.AddDays(-1), ! // date.AddDays(-1), this.numberOfEligibleTickers/2, ! // true); //return winners.GetTableOfSelectedTickers(); ! return quotedAtEachMarketDayFromEligible.GetTableOfSelectedTickers(); //return lessCorrelated.GetTableOfSelectedTickers(); } ! private double setFitnesses_setFitnessesActually_getFitnessOutOfSample(Genome genome) { ! double returnValue = 0; ! foreach(string tickerCode in (string[])genome.Meaning) ! { ! double coefficient = 1.0; ! string ticker = tickerCode; ! if(ticker.StartsWith("-")) ! { ! ticker = ticker.Substring(1,ticker.Length -1); ! coefficient = -1.0; ! } ! DateTime dateOutOfSample = this.marketDate.AddDays(this.numDaysAfterLastOptimizationDay); ! Quotes tickerQuotes = new Quotes(ticker, dateOutOfSample, ! dateOutOfSample); ! returnValue += ! (tickerQuotes.GetFirstValidRawClose(dateOutOfSample)/ ! tickerQuotes.GetFirstValidRawOpen(dateOutOfSample) - 1.0)*coefficient; ! } ! return returnValue/genome.Size; } + + private bool setFitnesses_setFitnessesActually_setGenomesToTestOutOfSample_addGenomes_sharesNoGeneWithGenomesAlreadyAdded(Genome genomeToBeAdded, + bool addWorstGenomes) + + { + bool returnValue = true; + if(addWorstGenomes) + //the first half containing the worst genomes has to be checked + { + for(int i = 0; i<this.numberOfGenomesToTest/2; i++) + { + if(this.genomesToTestOutOfSample[i]==null) + return true; + if(!genomeToBeAdded.SharesNoGeneWith(this.genomesToTestOutOfSample[i])) + return false; + } + } + else + //the second half containing the best genomes has to be checked + { + for(int i = 0; i<this.numberOfGenomesToTest/2; i++) + { + if(this.genomesToTestOutOfSample[this.numberOfGenomesToTest-1-i]==null) + return true; + if(!genomeToBeAdded.SharesNoGeneWith(this.genomesToTestOutOfSample[this.numberOfGenomesToTest-1-i])) + return false; + } + } + return returnValue; + } + private void setFitnesses_setFitnessesActually_setGenomesToTestOutOfSample_addGenomes(GeneticOptimizer optimizer, + bool addWorstGenomes) + + { + Genome currentGenome; + Genome previousGenome = null; + int numOfDifferentGenomesFound = 0; + for(int j = 0; + j<this.populationSizeForGeneticOptimizer && numOfDifferentGenomesFound<this.numberOfGenomesToTest/2; + j++) + { + if(addWorstGenomes == true) + currentGenome = (Genome)optimizer.CurrentGeneration[j]; + else + currentGenome = (Genome)optimizer.CurrentGeneration[this.populationSizeForGeneticOptimizer-j-1]; + + if(this.setFitnesses_setFitnessesActually_setGenomesToTestOutOfSample_addGenomes_sharesNoGeneWithGenomesAlreadyAdded(currentGenome, addWorstGenomes)) + //no genes of the current genome are present in the relative half + { + if(this.genomesToTestOutOfSample[numOfDifferentGenomesFound]!= null) + //the first half of the array has already been filled + this.genomesToTestOutOfSample[this.numberOfGenomesToTest-1-numOfDifferentGenomesFound]=currentGenome; + else//the first half is still empty + this.genomesToTestOutOfSample[numOfDifferentGenomesFound] = currentGenome; + previousGenome = currentGenome; + numOfDifferentGenomesFound++; + } + + } + + } ! private void setFitnesses_setFitnessesActually_setGenomesToTestOutOfSample(IGenomeManager genomeManager) { ! GeneticOptimizer optimizer = new GeneticOptimizer(genomeManager, ! this.populationSizeForGeneticOptimizer, ! this.generationNumberForGeneticOptimizer, ! ConstantsProvider.SeedForRandomGenerator); ! optimizer.Run(false); ! this.setFitnesses_setFitnessesActually_setGenomesToTestOutOfSample_addGenomes(optimizer, ! true); ! this.setFitnesses_setFitnessesActually_setGenomesToTestOutOfSample_addGenomes(optimizer, ! false); ! Array.Sort(this.genomesToTestOutOfSample); } ! ! private void setFitnesses_setFitnessesActually(IGenomeManager genomeManager) { ! this.setFitnesses_setFitnessesActually_setGenomesToTestOutOfSample(genomeManager); ! for(int i = 0; i<this.numberOfGenomesToTest; i++) ! { ! this.fitnessesInSample[i]=(this.genomesToTestOutOfSample[i]).Fitness; ! this.fitnessesOutOfSample[i]= ! this.setFitnesses_setFitnessesActually_getFitnessOutOfSample(this.genomesToTestOutOfSample[i]); ! } } ! ! private void setFitnesses() { *************** *** 180,196 **** IGenomeManager genManEfficientCTOPortfolio = new GenomeManagerForEfficientCTOPortfolio(setOfTickersToBeOptimized, ! this.marketDate.AddDays(-this.numDaysForLiquidity), this.marketDate, this.numberOfTickersToBeChosen, this.targetReturn, this.portfolioType); ! ! GeneticOptimizer GO = new GeneticOptimizer(genManEfficientCTOPortfolio, ! this.populationSizeForGeneticOptimizer, ! this.generationNumberForGeneticOptimizer, ! ConstantsProvider.SeedForRandomGenerator); ! ! GO.Run(false); ! this.setFitnesses_setFitnessesActually(GO); } --- 244,254 ---- IGenomeManager genManEfficientCTOPortfolio = new GenomeManagerForEfficientCTOPortfolio(setOfTickersToBeOptimized, ! this.marketDate.AddDays(-this.numDaysForOptimization), this.marketDate, this.numberOfTickersToBeChosen, this.targetReturn, this.portfolioType); ! ! this.setFitnesses_setFitnessesActually(genManEfficientCTOPortfolio); } *************** *** 198,206 **** public void Run() { ! this.setFitnesses(); ! OptimizationTechniqueEvaluator evaluator = ! new OptimizationTechniqueEvaluator(this.fitnessesInSample, ! this.fitnessesOutOfSample); ! this.run_writeToLogFile(evaluator); } --- 256,271 ---- public void Run() { ! try ! { ! this.setFitnesses(); ! OptimizationTechniqueEvaluator evaluator = ! new OptimizationTechniqueEvaluator(this.fitnessesInSample, ! this.fitnessesOutOfSample); ! this.run_writeToLogFile(evaluator); ! } ! catch(Exception ex) ! { ! ex = ex; ! } } *************** *** 218,223 **** StreamWriter w = File.AppendText(pathFile); w.WriteLine ("\n----------------------------------------------\r\n"); ! w.Write("\r\nNew Test for Evaluation of Open To Close Optimization {0}\r", DateTime.Now.Date.ToLongDateString()); ! w.WriteLine ("\n----------------------------------------------"); w.Write("\r\nFitnesses compared: {0}\r", this.fitnessesInSample.Length.ToString()); w.Write("\r\nDifferent evaluated genomes: {0}\r", differentEvaluatedGenomes.ToString()); --- 283,293 ---- StreamWriter w = File.AppendText(pathFile); w.WriteLine ("\n----------------------------------------------\r\n"); ! w.Write("\r\nNew Test for Evaluation of Open To Close Optimization {0}\r", DateTime.Now.ToLongDateString()+ " " +DateTime.Now.ToLongTimeString()); ! w.Write("\r\nNum days for optimization {0}\r", this.numDaysForOptimization.ToString()); ! w.Write("\r\nOptimizing market date {0}\r", this.marketDate.ToLongDateString()); ! w.Write("\r\nMarket date for test (out of sample){0}\r", ! this.marketDate.AddDays(this.numDaysAfterLastOptimizationDay).ToLongDateString()); ! w.Write("\r\nNumber of tickers: {0}\r", this.numberOfTickersToBeChosen.ToString()); ! w.WriteLine ("\n----------------------------------------------"); w.Write("\r\nFitnesses compared: {0}\r", this.fitnessesInSample.Length.ToString()); w.Write("\r\nDifferent evaluated genomes: {0}\r", differentEvaluatedGenomes.ToString()); |