[Quantproject-developers] QuantProject/b7_Scripts/TechnicalAnalysisTesting/Oscillators/ExtremeCount
Brought to you by:
glauco_1
|
From: Marco M. <mi...@us...> - 2008-01-14 23:38:39
|
Update of /cvsroot/quantproject/QuantProject/b7_Scripts/TechnicalAnalysisTesting/Oscillators/ExtremeCounterTrend In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv21302/b7_Scripts/TechnicalAnalysisTesting/Oscillators/ExtremeCounterTrend Modified Files: GenomeManagerECT.cs Log Message: GenomeManagers have been updated (WeightedPositions have been used instead of CandidateProperties) Index: GenomeManagerECT.cs =================================================================== RCS file: /cvsroot/quantproject/QuantProject/b7_Scripts/TechnicalAnalysisTesting/Oscillators/ExtremeCounterTrend/GenomeManagerECT.cs,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** GenomeManagerECT.cs 17 Sep 2006 21:48:39 -0000 1.4 --- GenomeManagerECT.cs 14 Jan 2008 23:38:36 -0000 1.5 *************** *** 24,31 **** --- 24,37 ---- using System.Data; using System.Collections; + using QuantProject.ADT.Statistics; using QuantProject.ADT.Optimizing.Genetic; using QuantProject.Data; using QuantProject.Data.DataTables; + using QuantProject.Business.DataProviders; + using QuantProject.Business.Timing; + using QuantProject.Business.Strategies; + using QuantProject.Business.Strategies.ReturnsManagement; + using QuantProject.Business.Strategies.ReturnsManagement.Time; using QuantProject.Scripts.TickerSelectionTesting.EfficientPortfolios; *************** *** 41,158 **** { private int numDaysForReturnCalculation; public GenomeManagerECT(DataTable setOfInitialTickers, ! DateTime firstQuoteDate, ! DateTime lastQuoteDate, ! int numberOfTickersInPortfolio, ! int numDaysForReturnCalculation, ! PortfolioType portfolioType) ! : ! base(setOfInitialTickers, ! firstQuoteDate, ! lastQuoteDate, ! numberOfTickersInPortfolio, ! 0.0, ! portfolioType) { this.numDaysForReturnCalculation = numDaysForReturnCalculation; ! this.retrieveData(); } ! protected override float[] getArrayOfRatesOfReturn(string ticker) ! { ! float[] returnValue = null; ! Quotes tickerQuotes = new Quotes(ticker, this.firstQuoteDate, this.lastQuoteDate); ! returnValue = ExtendedDataTable.GetArrayOfFloatFromColumn(tickerQuotes, ! Quotes.AdjustedCloseToCloseRatio); ! ! ! for(int i = 0; i<returnValue.Length; i++) ! returnValue[i] = returnValue[i] - 1.0f; ! ! this.numberOfExaminedReturns = returnValue.Length; ! ! return returnValue; ! } ! ! //delete remarks if this object inherits from ! //simple genomeManagerForEfficientPortfolio (no coefficients) ! ! // public override object Decode(Genome genome) ! // { ! // ! // string[] arrayOfTickers = new string[genome.Genes().Length]; ! // int indexOfTicker; ! // for(int index = 0; index < genome.Genes().Length; index++) ! // { ! // indexOfTicker = (int)genome.Genes().GetValue(index); ! // arrayOfTickers[index] = this.decode_getTickerCodeForLongOrShortTrade(indexOfTicker); ! // } ! // GenomeMeaning meaning = new GenomeMeaning(arrayOfTickers); ! // return meaning; ! // } ! ! ! //fitness is a sharpe-ratio based indicator for the equity line resulting ! //from applying the strategy ! public override double GetFitnessValue(Genome genome) { ! this.portfolioRatesOfReturn = this.getPortfolioRatesOfReturn(genome.Genes()); ! ! double[] equityLine = this.getFitnessValue_getEquityLineRates(); ! // double sharpeRatioAll = BasicFunctions.SimpleAverage(equityLine)/ ! // BasicFunctions.StdDev(equityLine); ! // double modifiedSharpeRatioAll = BasicFunctions.SimpleAverage(equityLine)/ ! // Math.Pow(BasicFunctions.StdDev(equityLine),0.9); ! ! // double[] equityLineSecondHalf = new double[equityLine.Length/2]; ! // for(int i = 0; i<equityLine.Length/2; i++) ! // equityLineSecondHalf[i] = equityLine[i+equityLine.Length/2]; ! // double sharpeRatioSecondHalf = BasicFunctions.SimpleAverage(equityLineSecondHalf)/ ! // Math.Pow(BasicFunctions.StdDev(equityLineSecondHalf),1.2); ! // return sharpeRatioAll;//*sharpeRatioSecondHalf; ! // return modifiedSharpeRatioAll; ! //return AdvancedFunctions.GetExpectancyScore(equityLine); ! return AdvancedFunctions.GetSharpeRatio(equityLine); ! } ! private double[] getFitnessValue_getEquityLineRates() ! { ! double[] returnValue = new double[this.PortfolioRatesOfReturn.Length]; ! double K;//initial capital invested at the beginning of the period ! for(int i = this.numDaysForReturnCalculation - 1; ! i<this.PortfolioRatesOfReturn.Length - this.numDaysForReturnCalculation; ! i += this.numDaysForReturnCalculation) { ! K = 1.0; ! for(int j=this.numDaysForReturnCalculation - 1; ! j > -1; j--) ! { ! K = K + K * this.PortfolioRatesOfReturn[i-j]; ! } ! ! for(int t=1;t<this.numDaysForReturnCalculation + 1;t++) ! { ! if(K < 1.0) ! // if gain of first half period is negative ! returnValue[i+t] = this.PortfolioRatesOfReturn[i+t]; ! else if(K > 1.0 && this.PortfolioType == PortfolioType.ShortAndLong) ! //if gain of first half period is positive and ! //original positions can be reversed ! returnValue[i+t] = - this.PortfolioRatesOfReturn[i+t]; ! else if(K > 1.0 && this.PortfolioType != PortfolioType.ShortAndLong) ! //if gain of first half period is positive and ! //original positions can't be reversed ! returnValue[i+t] = 0.0;//out of the market ! } ! } return returnValue; ! } ! } - } --- 47,121 ---- { private int numDaysForReturnCalculation; + private ReturnsManager returnsManager; public GenomeManagerECT(DataTable setOfInitialTickers, ! DateTime firstQuoteDate, ! DateTime lastQuoteDate, ! int numberOfTickersInPortfolio, ! int numDaysForReturnCalculation, ! PortfolioType portfolioType, ! string benchmark) ! : ! base(setOfInitialTickers, ! firstQuoteDate, ! lastQuoteDate, ! numberOfTickersInPortfolio, ! 0.0, ! portfolioType, ! benchmark) { this.numDaysForReturnCalculation = numDaysForReturnCalculation; ! this.setReturnsManager(); } ! private void setReturnsManager() { ! EndOfDayDateTime firstEndOfDayDateTime = ! new EndOfDayDateTime(firstQuoteDate, EndOfDaySpecificTime.MarketClose); ! EndOfDayDateTime lastEndOfDayDateTime = ! new EndOfDayDateTime(lastQuoteDate, EndOfDaySpecificTime.MarketClose); ! this.returnsManager = ! new ReturnsManager( new CloseToCloseIntervals( ! firstEndOfDayDateTime, ! lastEndOfDayDateTime, ! this.benchmark, ! this.numDaysForReturnCalculation) , ! new HistoricalAdjustedQuoteProvider() ); } ! private float[] getStrategyReturns_getReturnsActually( ! float[] plainReturns) ! { ! float[] returnValue = new float[plainReturns.Length]; ! returnValue[0] = 0; //a the very first day the ! //first strategy return is equal to 0 because no position ! //has been entered ! float coefficient = 0; ! for(int i = 0; i < returnValue.Length - 1; i++) { ! if( plainReturns[i] > 0 ) ! //portfolio is overbought ! coefficient = -1; ! else if( plainReturns[i] <= 0 ) ! //portfolio is oversold ! coefficient = 1; ! ! returnValue[i + 1] = coefficient * plainReturns[i + 1]; } return returnValue; ! } ! ! protected override float[] getStrategyReturns() ! { ! EndOfDayDateTime firstEndOfDayDateTime = ! new EndOfDayDateTime(firstQuoteDate, EndOfDaySpecificTime.MarketClose); ! EndOfDayDateTime lastEndOfDayDateTime = ! new EndOfDayDateTime(lastQuoteDate, EndOfDaySpecificTime.MarketClose); ! float[] plainReturns = this.weightedPositionsFromGenome.GetReturns( ! this.returnsManager); ! return this.getStrategyReturns_getReturnsActually(plainReturns); ! } } } |