[Quantproject-developers] QuantProject/b7_Scripts/WalkForwardTesting/LinearCombination CloseToOpen
Brought to you by:
glauco_1
Update of /cvsroot/quantproject/QuantProject/b7_Scripts/WalkForwardTesting/LinearCombination In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv10276/b7_Scripts/WalkForwardTesting/LinearCombination Modified Files: CloseToOpenDailyStrategy.cs ExtremeCounterTrendStrategy.cs FixedLevelOscBiasedOTC_PVONoThresholdsStrategy.cs FixedLevelOscillatorBiasedPVONoThresholdsStrategy.cs FixedLevelOscillatorBiasedPVOStrategy.cs FixedLevelOscillatorPVOStrategy.cs FixedPeriodOscillatorStrategy.cs ImmediateTrendFollowerStrategy.cs LinearCombinationTest.cs OpenToCloseDailyStrategy.cs OpenToCloseWeeklyStrategy.cs OTC_CTODailyStrategy.cs Log Message: Code has been re-organized in a more logical and Object Oriented way: - WeightedPositions class has been used. - Some static methods have been deleted from SignedTicker class. They have been moved to WeightedPositions. - Basic orders'management has been moved to the primitive base class EndOfDayTimerHandler and to AccountManager class Index: FixedLevelOscillatorBiasedPVOStrategy.cs =================================================================== RCS file: /cvsroot/quantproject/QuantProject/b7_Scripts/WalkForwardTesting/LinearCombination/FixedLevelOscillatorBiasedPVOStrategy.cs,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** FixedLevelOscillatorBiasedPVOStrategy.cs 9 Apr 2007 18:06:25 -0000 1.2 --- FixedLevelOscillatorBiasedPVOStrategy.cs 29 Aug 2007 09:43:36 -0000 1.3 *************** *** 46,51 **** public FixedLevelOscillatorBiasedPVOStrategy( Account accountPVO , ! string[,] tickers, ! double[,] tickersPortfolioWeights, double[] oversoldThreshold, double[] overboughtThreshold, --- 46,50 ---- public FixedLevelOscillatorBiasedPVOStrategy( Account accountPVO , ! WeightedPositions[] weightedPositionsToEvaluateOutOfSample, double[] oversoldThreshold, double[] overboughtThreshold, *************** *** 55,59 **** double minimumAcceptableGain): base("", 0, ! tickers.GetUpperBound(1)+1, 0, accountPVO, 0, 0, "", numOfDifferentGenomesToEvaluateOutOfSample, numDaysForOscillatingPeriod,1,1,1,1,1,false,false,0, --- 54,58 ---- double minimumAcceptableGain): base("", 0, ! weightedPositionsToEvaluateOutOfSample[0].Count, 0, accountPVO, 0, 0, "", numOfDifferentGenomesToEvaluateOutOfSample, numDaysForOscillatingPeriod,1,1,1,1,1,false,false,0, *************** *** 62,67 **** { ! this.bestGenomesChosenTickers = tickers; ! this.bestGenomesChosenTickersPortfolioWeights = tickersPortfolioWeights; this.currentOversoldThreshold = oversoldThreshold; this.currentOverboughtThreshold = overboughtThreshold; --- 61,65 ---- { ! this.weightedPositionsToEvaluateOutOfSample = weightedPositionsToEvaluateOutOfSample; this.currentOversoldThreshold = oversoldThreshold; this.currentOverboughtThreshold = overboughtThreshold; *************** *** 75,80 **** } ! protected override double getCurrentChosenTickersGainOrLoss(IndexBasedEndOfDayTimer timer, ! int indexForChosenTickers) { double returnValue = 999.0; --- 73,78 ---- } ! protected override double getCurrentWeightedPositionsGainOrLoss(IndexBasedEndOfDayTimer timer, ! int indexForChosenWeightedPositions) { double returnValue = 999.0; *************** *** 83,112 **** //that's why the method has been overriden { ! try ! { ! DateTime initialDate = ! (DateTime)timer.IndexQuotes.Rows[timer.CurrentDateArrayPosition - this.numDaysForOscillatingPeriod + 2]["quDate"]; ! //so to replicate exactly in sample scheme, where only numOscillatingDay - 1 returns ! //are computed ! DateTime finalDate = ! (DateTime)timer.IndexQuotes.Rows[timer.CurrentDateArrayPosition]["quDate"]; ! string[] tickers = new string[this.numberOfTickersToBeChosen]; ! double[] tickerWeights = new double[this.numberOfTickersToBeChosen]; ! for(int i = 0; i < this.numberOfTickersToBeChosen; i++) ! { ! tickers[i] = this.bestGenomesChosenTickers[indexForChosenTickers,i]; ! tickerWeights[i] = this.bestGenomesChosenTickersPortfolioWeights[indexForChosenTickers,i]; ! } ! returnValue = ! SignedTicker.GetCloseToClosePortfolioReturn( ! tickers, tickerWeights, ! initialDate,finalDate) + 1.0; ! } ! catch(MissingQuotesException ex) ! { ! ex = ex; ! } ! } ! return returnValue; } --- 81,100 ---- //that's why the method has been overriden { ! try ! { ! DateTime today = ! (DateTime)timer.IndexQuotes.Rows[timer.CurrentDateArrayPosition]["quDate"]; ! DateTime lastMarketDay = ! (DateTime)timer.IndexQuotes.Rows[timer.CurrentDateArrayPosition - 1]["quDate"]; ! returnValue = ! this.weightedPositionsToEvaluateOutOfSample[indexForChosenWeightedPositions].GetCloseToCloseReturn( ! lastMarketDay, today); ! } ! catch(MissingQuotesException ex) ! { ! ex = ex; ! } ! } ! return returnValue; } Index: OpenToCloseWeeklyStrategy.cs =================================================================== RCS file: /cvsroot/quantproject/QuantProject/b7_Scripts/WalkForwardTesting/LinearCombination/OpenToCloseWeeklyStrategy.cs,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** OpenToCloseWeeklyStrategy.cs 2 Aug 2005 23:07:59 -0000 1.1 --- OpenToCloseWeeklyStrategy.cs 29 Aug 2007 09:43:37 -0000 1.2 *************** *** 39,76 **** { private Account account; ! private string[] signedTickers; public OpenToCloseWeeklyStrategy( Account account , ! string[] signedTickers) { this.account = account; ! this.signedTickers = signedTickers; ! } ! private long marketOpenEventHandler_addOrder_getQuantity( ! string ticker ) ! { ! double accountValue = this.account.GetMarketValue(); ! double currentTickerAsk = ! this.account.DataStreamer.GetCurrentAsk( ticker ); ! double maxPositionValueForThisTicker = ! accountValue/this.signedTickers.Length; ! long quantity = Convert.ToInt64( Math.Floor( ! maxPositionValueForThisTicker / currentTickerAsk ) ); ! return quantity; ! } ! private void marketOpenEventHandler_addOrder( string signedTicker ) ! { ! OrderType orderType = GenomeRepresentation.GetOrderType( signedTicker ); ! string ticker = GenomeRepresentation.GetTicker( signedTicker ); ! long quantity = marketOpenEventHandler_addOrder_getQuantity( ticker ); ! Order order = new Order( orderType , new Instrument( ticker ) , ! quantity ); ! this.account.AddOrder( order ); ! } ! private void marketOpenEventHandler_addOrders() ! { ! foreach ( string signedTicker in this.signedTickers ) ! marketOpenEventHandler_addOrder( signedTicker ); } public void MarketOpenEventHandler( Object sender , EndOfDayTimingEventArgs endOfDayTimingEventArgs ) --- 39,51 ---- { private Account account; ! private WeightedPositions weightedPositions; public OpenToCloseWeeklyStrategy( Account account , ! WeightedPositions weightedPositions) { this.account = account; ! this.weightedPositions = weightedPositions; } + public void MarketOpenEventHandler( Object sender , EndOfDayTimingEventArgs endOfDayTimingEventArgs ) *************** *** 79,95 **** ( this.account.Transactions.Count == 0 ) ) // cash has not been added yet ! this.account.AddCash( 30000 ); if ( endOfDayTimingEventArgs.EndOfDayDateTime.DateTime.DayOfWeek == DayOfWeek.Monday ) ! marketOpenEventHandler_addOrders(); ! } ! private void fiveMinutesBeforeMarketCloseEventHandler_closePositions() ! { ! ArrayList tickers = new ArrayList(); ! foreach ( Position position in this.account.Portfolio.Positions ) ! tickers.Add( position.Instrument.Key ); ! foreach ( string ticker in tickers ) ! this.account.ClosePosition( ticker ); } public void FiveMinutesBeforeMarketCloseEventHandler( Object sender , EndOfDayTimingEventArgs endOfDayTimingEventArgs) --- 54,63 ---- ( this.account.Transactions.Count == 0 ) ) // cash has not been added yet ! this.account.AddCash( 15000 ); if ( endOfDayTimingEventArgs.EndOfDayDateTime.DateTime.DayOfWeek == DayOfWeek.Monday ) ! AccountManager.OpenPositions(this.weightedPositions, this.account); } + public void FiveMinutesBeforeMarketCloseEventHandler( Object sender , EndOfDayTimingEventArgs endOfDayTimingEventArgs) *************** *** 97,101 **** if ( endOfDayTimingEventArgs.EndOfDayDateTime.DateTime.DayOfWeek == DayOfWeek.Friday ) ! this.fiveMinutesBeforeMarketCloseEventHandler_closePositions(); } --- 65,69 ---- if ( endOfDayTimingEventArgs.EndOfDayDateTime.DateTime.DayOfWeek == DayOfWeek.Friday ) ! AccountManager.ClosePositions(this.account); } Index: ExtremeCounterTrendStrategy.cs =================================================================== RCS file: /cvsroot/quantproject/QuantProject/b7_Scripts/WalkForwardTesting/LinearCombination/ExtremeCounterTrendStrategy.cs,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** ExtremeCounterTrendStrategy.cs 7 Aug 2006 21:10:36 -0000 1.3 --- ExtremeCounterTrendStrategy.cs 29 Aug 2007 09:43:35 -0000 1.4 *************** *** 42,47 **** { private Account account; ! private string[] signedTickers; ! private double[] weightsForSignedTickers; private int numDaysForReturnCalculation; private int numOfClosesElapsed = 0; --- 42,46 ---- { private Account account; ! private WeightedPositions weightedPositions; private int numDaysForReturnCalculation; private int numOfClosesElapsed = 0; *************** *** 50,61 **** public ExtremeCounterTrendStrategy( Account account , ! string[] signedTickers, ! double[] weightsForSignedTickers, int numDaysForReturnCalculation, PortfolioType portfolioType) { this.account = account; ! this.signedTickers = signedTickers; ! this.weightsForSignedTickers = weightsForSignedTickers; this.numDaysForReturnCalculation = numDaysForReturnCalculation; this.portfolioType = portfolioType; --- 49,58 ---- public ExtremeCounterTrendStrategy( Account account , ! WeightedPositions weightedPositions, int numDaysForReturnCalculation, PortfolioType portfolioType) { this.account = account; ! this.weightedPositions = weightedPositions; this.numDaysForReturnCalculation = numDaysForReturnCalculation; this.portfolioType = portfolioType; *************** *** 72,102 **** } - private long marketCloseEventHandler_addOrder_getQuantity( - int indexForSignedTicker) - { - double accountValue = this.account.GetMarketValue(); - double currentTickerAsk = - this.account.DataStreamer.GetCurrentAsk( SignedTicker.GetTicker(this.signedTickers[indexForSignedTicker]) ); - double maxPositionValueForThisTicker = - accountValue*this.weightsForSignedTickers[indexForSignedTicker]; - long quantity = Convert.ToInt64( Math.Floor( - maxPositionValueForThisTicker / currentTickerAsk ) ); - return quantity; - } - private void marketCloseEventHandler_addOrder( int indexForSignedTicker ) - { - OrderType orderType = GenomeRepresentation.GetOrderType( this.signedTickers[indexForSignedTicker] ); - string ticker = GenomeRepresentation.GetTicker( this.signedTickers[indexForSignedTicker] ); - long quantity = marketCloseEventHandler_addOrder_getQuantity( indexForSignedTicker ); - Order order = new Order( orderType , new Instrument( ticker ) , - quantity ); - this.account.AddOrder( order ); - } - private void marketCloseEventHandler_addOrders() - { - for(int i = 0; i<this.signedTickers.Length; i++) - marketCloseEventHandler_addOrder( i ); - } - private double marketCloseEventHandler_openPositions_getLastHalfPeriodGain(IndexBasedEndOfDayTimer timer) { --- 69,72 ---- *************** *** 108,114 **** DateTime finalDateForHalfPeriod = (DateTime)timer.IndexQuotes.Rows[timer.CurrentDateArrayPosition]["quDate"]; ! returnValue = ! SignedTicker.GetCloseToClosePortfolioReturn( ! this.signedTickers,initialDateForHalfPeriod,finalDateForHalfPeriod); } catch(MissingQuotesException ex) --- 78,82 ---- DateTime finalDateForHalfPeriod = (DateTime)timer.IndexQuotes.Rows[timer.CurrentDateArrayPosition]["quDate"]; ! this.weightedPositions.GetCloseToCloseReturn(initialDateForHalfPeriod,finalDateForHalfPeriod); } catch(MissingQuotesException ex) *************** *** 127,140 **** { if(lastHalfPeriodGain < 0.0) ! this.marketCloseEventHandler_addOrders(); ! else if (lastHalfPeriodGain > 0.0 && ! this.portfolioType == PortfolioType.ShortAndLong ) ! //if gain of the last half period is positive and ! //original positions can be reversed { ! SignedTicker.ChangeSignOfEachTicker(this.signedTickers); //short the portfolio (short --> long; long --> short) try{ ! this.marketCloseEventHandler_addOrders(); } catch(Exception ex) --- 95,106 ---- { if(lastHalfPeriodGain < 0.0) ! AccountManager.OpenPositions(this.weightedPositions,this.account); ! else if (lastHalfPeriodGain > 0.0) ! //if gain of the last half period is positive { ! this.weightedPositions.Reverse(); //short the portfolio (short --> long; long --> short) try{ ! AccountManager.OpenPositions(this.weightedPositions,this.account); } catch(Exception ex) *************** *** 143,147 **** } finally{ ! SignedTicker.ChangeSignOfEachTicker(this.signedTickers); } } --- 109,113 ---- } finally{ ! this.weightedPositions.Reverse(); } } *************** *** 151,159 **** private void marketCloseEventHandler_closePositions() { ! ArrayList tickers = new ArrayList(); ! foreach ( Position position in this.account.Portfolio.Positions ) ! tickers.Add( position.Instrument.Key ); ! foreach ( string ticker in tickers ) ! this.account.ClosePosition( ticker ); this.numOfDaysWithOpenPosition = 0; } --- 117,121 ---- private void marketCloseEventHandler_closePositions() { ! AccountManager.ClosePositions(this.account); this.numOfDaysWithOpenPosition = 0; } *************** *** 165,169 **** if(this.account.Transactions.Count == 0) ! this.account.AddCash(30000); if(this.account.Portfolio.Count > 0) --- 127,131 ---- if(this.account.Transactions.Count == 0) ! this.account.AddCash(15000); if(this.account.Portfolio.Count > 0) *************** *** 182,187 **** EndOfDayTimingEventArgs endOfDayTimingEventArgs) { ! ! } } } --- 144,148 ---- EndOfDayTimingEventArgs endOfDayTimingEventArgs) { ! } } } Index: FixedLevelOscBiasedOTC_PVONoThresholdsStrategy.cs =================================================================== RCS file: /cvsroot/quantproject/QuantProject/b7_Scripts/WalkForwardTesting/LinearCombination/FixedLevelOscBiasedOTC_PVONoThresholdsStrategy.cs,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** FixedLevelOscBiasedOTC_PVONoThresholdsStrategy.cs 27 Feb 2007 22:54:44 -0000 1.1 --- FixedLevelOscBiasedOTC_PVONoThresholdsStrategy.cs 29 Aug 2007 09:43:35 -0000 1.2 *************** *** 48,62 **** public FixedLevelOscBiasedOTC_PVONoThresholdsStrategy( Account accountPVO , ! string[,] tickers, ! double[,] tickersPortfolioWeights, int numOfDifferentGenomesToEvaluateOutOfSample): base("", 0, ! tickers.GetUpperBound(1)+1, 0, accountPVO, 0, 0, "", numOfDifferentGenomesToEvaluateOutOfSample,0, PortfolioType.ShortAndLong) { ! this.chosenTickers = tickers; ! this.chosenTickersPortfolioWeights = tickersPortfolioWeights; } --- 48,60 ---- public FixedLevelOscBiasedOTC_PVONoThresholdsStrategy( Account accountPVO , ! WeightedPositions[] weightedPositionsToEvaluateOutOfSample, int numOfDifferentGenomesToEvaluateOutOfSample): base("", 0, ! weightedPositionsToEvaluateOutOfSample[0].Count, 0, accountPVO, 0, 0, "", numOfDifferentGenomesToEvaluateOutOfSample,0, PortfolioType.ShortAndLong) { ! this.weightedPositionsToEvaluateOutOfSample = weightedPositionsToEvaluateOutOfSample; } *************** *** 65,69 **** { if(this.account.Portfolio.Count == 0) ! this.marketOpenEventHandler_openPositions((IndexBasedEndOfDayTimer)sender); } --- 63,67 ---- { if(this.account.Portfolio.Count == 0) ! this.openPositions((IndexBasedEndOfDayTimer)sender); } *************** *** 73,82 **** } ! protected override double getCurrentChosenTickersGainOrLoss(IndexBasedEndOfDayTimer timer, ! int indexForChosenTickers) { double returnValue = 999.0; if(timer.CurrentDateArrayPosition >= 1) ! //if there are sufficient data for computing currentChosenTickersValue //that's why the method has been overriden { --- 71,80 ---- } ! protected override double getCurrentWeightedPositionsGainOrLoss(IndexBasedEndOfDayTimer timer, ! int indexForChosenWeightedPositions) { double returnValue = 999.0; if(timer.CurrentDateArrayPosition >= 1) ! //if there are sufficient data for computing currentChosenWeightedPositionsValue //that's why the method has been overriden { *************** *** 88,102 **** (DateTime)timer.IndexQuotes.Rows[timer.CurrentDateArrayPosition - 1]["quDate"]; ! string[] tickers = new string[this.numberOfTickersToBeChosen]; ! double[] tickerWeights = new double[this.numberOfTickersToBeChosen]; ! for(int i = 0; i < this.numberOfTickersToBeChosen; i++) ! { ! tickers[i] = this.chosenTickers[indexForChosenTickers,i]; ! tickerWeights[i] = this.chosenTickersPortfolioWeights[indexForChosenTickers,i]; ! } ! returnValue = ! SignedTicker.GetLastNightPortfolioReturn( ! tickers, tickerWeights, ! lastMarketDay, today); } catch(MissingQuotesException ex) --- 86,91 ---- (DateTime)timer.IndexQuotes.Rows[timer.CurrentDateArrayPosition - 1]["quDate"]; ! returnValue = this.weightedPositionsToEvaluateOutOfSample[indexForChosenWeightedPositions].GetLastNightReturn( ! lastMarketDay, today); } catch(MissingQuotesException ex) *************** *** 111,115 **** EndOfDayTimingEventArgs endOfDayTimingEventArgs) { - } } --- 100,103 ---- Index: FixedLevelOscillatorBiasedPVONoThresholdsStrategy.cs =================================================================== RCS file: /cvsroot/quantproject/QuantProject/b7_Scripts/WalkForwardTesting/LinearCombination/FixedLevelOscillatorBiasedPVONoThresholdsStrategy.cs,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** FixedLevelOscillatorBiasedPVONoThresholdsStrategy.cs 27 Feb 2007 22:54:44 -0000 1.1 --- FixedLevelOscillatorBiasedPVONoThresholdsStrategy.cs 29 Aug 2007 09:43:35 -0000 1.2 *************** *** 47,57 **** public FixedLevelOscillatorBiasedPVONoThresholdsStrategy( Account accountPVO , ! string[,] tickers, ! double[,] tickersPortfolioWeights, int numOfDifferentGenomesToEvaluateOutOfSample, double maxAcceptableCloseToCloseDrawdown, double minimumAcceptableGain): base("", 0, ! tickers.GetUpperBound(1)+1, 0, accountPVO, 0, 0, "", numOfDifferentGenomesToEvaluateOutOfSample,0, PortfolioType.ShortAndLong,maxAcceptableCloseToCloseDrawdown, --- 47,56 ---- public FixedLevelOscillatorBiasedPVONoThresholdsStrategy( Account accountPVO , ! WeightedPositions[] weightedPositionsToEvaluateOutOfSample, int numOfDifferentGenomesToEvaluateOutOfSample, double maxAcceptableCloseToCloseDrawdown, double minimumAcceptableGain): base("", 0, ! weightedPositionsToEvaluateOutOfSample[0].Count, 0, accountPVO, 0, 0, "", numOfDifferentGenomesToEvaluateOutOfSample,0, PortfolioType.ShortAndLong,maxAcceptableCloseToCloseDrawdown, *************** *** 59,64 **** { ! this.chosenTickers = tickers; ! this.chosenTickersPortfolioWeights = tickersPortfolioWeights; } --- 58,62 ---- { ! this.weightedPositionsToEvaluateOutOfSample = weightedPositionsToEvaluateOutOfSample; } *************** *** 68,73 **** } ! protected override double getCurrentChosenTickersGainOrLoss(IndexBasedEndOfDayTimer timer, ! int indexForChosenTickers) { double returnValue = 999.0; --- 66,71 ---- } ! protected override double getCurrentWeightedPositionsGainOrLoss(IndexBasedEndOfDayTimer timer, ! int indexForChosenWeightedPositions) { double returnValue = 999.0; *************** *** 76,101 **** //that's why the method has been overriden { ! try ! { ! DateTime date = ! (DateTime)timer.IndexQuotes.Rows[timer.CurrentDateArrayPosition]["quDate"]; ! string[] tickers = new string[this.numberOfTickersToBeChosen]; ! double[] tickerWeights = new double[this.numberOfTickersToBeChosen]; ! for(int i = 0; i < this.numberOfTickersToBeChosen; i++) ! { ! tickers[i] = this.chosenTickers[indexForChosenTickers,i]; ! tickerWeights[i] = this.chosenTickersPortfolioWeights[indexForChosenTickers,i]; ! } ! returnValue = ! SignedTicker.GetCloseToClosePortfolioReturn( ! tickers, tickerWeights, ! date,date); ! } ! catch(MissingQuotesException ex) ! { ! ex = ex; ! } ! } ! return returnValue; } --- 74,93 ---- //that's why the method has been overriden { ! try ! { ! DateTime today = ! (DateTime)timer.IndexQuotes.Rows[timer.CurrentDateArrayPosition]["quDate"]; ! DateTime lastMarketDay = ! (DateTime)timer.IndexQuotes.Rows[timer.CurrentDateArrayPosition - 1]["quDate"]; ! returnValue = ! this.weightedPositionsToEvaluateOutOfSample[indexForChosenWeightedPositions].GetCloseToCloseReturn( ! lastMarketDay, today); ! } ! catch(MissingQuotesException ex) ! { ! ex = ex; ! } ! } ! return returnValue; } Index: OpenToCloseDailyStrategy.cs =================================================================== RCS file: /cvsroot/quantproject/QuantProject/b7_Scripts/WalkForwardTesting/LinearCombination/OpenToCloseDailyStrategy.cs,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** OpenToCloseDailyStrategy.cs 2 Jul 2006 19:24:33 -0000 1.2 --- OpenToCloseDailyStrategy.cs 29 Aug 2007 09:43:37 -0000 1.3 *************** *** 39,78 **** { private Account account; ! private string[] signedTickers; ! private double[] weightsForSignedTickers; public OpenToCloseDailyStrategy( Account account , ! string[] signedTickers, double[] weightsForSignedTickers) { this.account = account; ! this.signedTickers = signedTickers; ! this.weightsForSignedTickers = weightsForSignedTickers; ! } ! private long marketOpenEventHandler_addOrder_getQuantity( ! int indexForSignedTicker ) ! { ! double accountValue = this.account.GetMarketValue(); ! double currentTickerAsk = ! this.account.DataStreamer.GetCurrentAsk( SignedTicker.GetTicker(this.signedTickers[indexForSignedTicker]) ); ! double maxPositionValueForThisTicker = ! accountValue*this.weightsForSignedTickers[indexForSignedTicker]; ! long quantity = Convert.ToInt64( Math.Floor( ! maxPositionValueForThisTicker / currentTickerAsk ) ); ! return quantity; ! } ! private void marketOpenEventHandler_addOrder( int indexForSignedTicker ) ! { ! OrderType orderType = GenomeRepresentation.GetOrderType( this.signedTickers[indexForSignedTicker] ); ! string ticker = GenomeRepresentation.GetTicker( this.signedTickers[indexForSignedTicker] ); ! long quantity = marketOpenEventHandler_addOrder_getQuantity( indexForSignedTicker ); ! Order order = new Order( orderType , new Instrument( ticker ) , ! quantity ); ! this.account.AddOrder( order ); ! } ! private void marketOpenEventHandler_addOrders() ! { ! for(int i = 0; i<this.signedTickers.Length; i++) ! marketOpenEventHandler_addOrder( i ); } public void MarketOpenEventHandler( Object sender , EndOfDayTimingEventArgs endOfDayTimingEventArgs ) --- 39,51 ---- { private Account account; ! private WeightedPositions chosenWeightedPositions; public OpenToCloseDailyStrategy( Account account , ! WeightedPositions chosenWeightedPositions) { this.account = account; ! this.chosenWeightedPositions = chosenWeightedPositions; } + public void MarketOpenEventHandler( Object sender , EndOfDayTimingEventArgs endOfDayTimingEventArgs ) *************** *** 81,99 **** ( this.account.Transactions.Count == 0 ) ) // cash has not been added yet ! this.account.AddCash( 30000 ); ! marketOpenEventHandler_addOrders(); ! } ! private void fiveMinutesBeforeMarketCloseEventHandler_closePositions() ! { ! ArrayList tickers = new ArrayList(); ! foreach ( Position position in this.account.Portfolio.Positions ) ! tickers.Add( position.Instrument.Key ); ! foreach ( string ticker in tickers ) ! this.account.ClosePosition( ticker ); } public void FiveMinutesBeforeMarketCloseEventHandler( Object sender , EndOfDayTimingEventArgs endOfDayTimingEventArgs) { ! this.fiveMinutesBeforeMarketCloseEventHandler_closePositions(); } --- 54,65 ---- ( this.account.Transactions.Count == 0 ) ) // cash has not been added yet ! this.account.AddCash( 15000 ); ! AccountManager.OpenPositions(this.chosenWeightedPositions, this.account); } + public void FiveMinutesBeforeMarketCloseEventHandler( Object sender , EndOfDayTimingEventArgs endOfDayTimingEventArgs) { ! AccountManager.ClosePositions(this.account); } *************** *** 102,105 **** --- 68,72 ---- { } + public void OneHourAfterMarketCloseEventHandler( Object sender , EndOfDayTimingEventArgs endOfDayTimingEventArgs) Index: CloseToOpenDailyStrategy.cs =================================================================== RCS file: /cvsroot/quantproject/QuantProject/b7_Scripts/WalkForwardTesting/LinearCombination/CloseToOpenDailyStrategy.cs,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** CloseToOpenDailyStrategy.cs 8 Jan 2006 23:33:52 -0000 1.1 --- CloseToOpenDailyStrategy.cs 29 Aug 2007 09:43:35 -0000 1.2 *************** *** 39,88 **** { private Account account; ! private string[] signedTickers; public CloseToOpenDailyStrategy( Account account , ! string[] signedTickers) { this.account = account; ! this.signedTickers = signedTickers; ! } ! private long marketCloseEventHandler_addOrder_getQuantity( ! string ticker ) ! { ! double accountValue = this.account.GetMarketValue(); ! double currentTickerAsk = ! this.account.DataStreamer.GetCurrentAsk( ticker ); ! double maxPositionValueForThisTicker = ! accountValue/this.signedTickers.Length; ! long quantity = Convert.ToInt64( Math.Floor( ! maxPositionValueForThisTicker / currentTickerAsk ) ); ! return quantity; ! } ! private void marketCloseEventHandler_addOrder( string signedTicker ) ! { ! OrderType orderType = GenomeRepresentation.GetOrderType( signedTicker ); ! string ticker = GenomeRepresentation.GetTicker( signedTicker ); ! long quantity = marketCloseEventHandler_addOrder_getQuantity( ticker ); ! Order order = new Order( orderType , new Instrument( ticker ) , ! quantity ); ! this.account.AddOrder( order ); ! } ! private void marketCloseEventHandler_addOrders() ! { ! foreach ( string signedTicker in this.signedTickers ) ! marketCloseEventHandler_addOrder( signedTicker ); } public void MarketOpenEventHandler( Object sender , EndOfDayTimingEventArgs endOfDayTimingEventArgs ) { ! this.marketOpen_closePositions(); ! } ! private void marketOpen_closePositions() ! { ! ArrayList tickers = new ArrayList(); ! foreach ( Position position in this.account.Portfolio.Positions ) ! tickers.Add( position.Instrument.Key ); ! foreach ( string ticker in tickers ) ! this.account.ClosePosition( ticker ); } public void FiveMinutesBeforeMarketCloseEventHandler( Object sender , --- 39,55 ---- { private Account account; ! private WeightedPositions weightedPositions; public CloseToOpenDailyStrategy( Account account , ! WeightedPositions weightedPositions) { this.account = account; ! this.weightedPositions = weightedPositions; } + public void MarketOpenEventHandler( Object sender , EndOfDayTimingEventArgs endOfDayTimingEventArgs ) { ! AccountManager.ClosePositions(this.account); } public void FiveMinutesBeforeMarketCloseEventHandler( Object sender , *************** *** 90,94 **** { } - public void MarketCloseEventHandler( Object sender , EndOfDayTimingEventArgs endOfDayTimingEventArgs) --- 57,60 ---- *************** *** 97,102 **** ( this.account.Transactions.Count == 0 ) ) // cash has not been added yet ! this.account.AddCash( 30000 ); ! marketCloseEventHandler_addOrders(); } public void OneHourAfterMarketCloseEventHandler( Object sender , --- 63,68 ---- ( this.account.Transactions.Count == 0 ) ) // cash has not been added yet ! this.account.AddCash( 15000 ); ! AccountManager.OpenPositions(this.weightedPositions, this.account); } public void OneHourAfterMarketCloseEventHandler( Object sender , Index: OTC_CTODailyStrategy.cs =================================================================== RCS file: /cvsroot/quantproject/QuantProject/b7_Scripts/WalkForwardTesting/LinearCombination/OTC_CTODailyStrategy.cs,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** OTC_CTODailyStrategy.cs 2 Jul 2006 19:22:12 -0000 1.1 --- OTC_CTODailyStrategy.cs 29 Aug 2007 09:43:37 -0000 1.2 *************** *** 39,116 **** { private Account account; ! private string[] signedTickers; ! private double[] weightsForSignedTickers; public OTC_CTODailyStrategy( Account account , ! string[] signedTickers, double[] weightsForSignedTickers) { this.account = account; ! this.signedTickers = signedTickers; ! this.weightsForSignedTickers = weightsForSignedTickers; ! } ! private long addOrders_addOrder_getQuantity( ! int indexForSignedTicker ) ! { ! double accountValue = this.account.GetMarketValue(); ! double currentTickerAsk = ! this.account.DataStreamer.GetCurrentAsk( SignedTicker.GetTicker(this.signedTickers[indexForSignedTicker]) ); ! double maxPositionValueForThisTicker = ! accountValue*this.weightsForSignedTickers[indexForSignedTicker]; ! long quantity = Convert.ToInt64( Math.Floor( ! maxPositionValueForThisTicker / currentTickerAsk ) ); ! return quantity; ! } ! private void addOrders_addOrder( int indexForSignedTicker ) ! { ! OrderType orderType = GenomeRepresentation.GetOrderType( this.signedTickers[indexForSignedTicker] ); ! string ticker = GenomeRepresentation.GetTicker( this.signedTickers[indexForSignedTicker] ); ! long quantity = addOrders_addOrder_getQuantity( indexForSignedTicker ); ! Order order = new Order( orderType , new Instrument( ticker ) , ! quantity ); ! this.account.AddOrder( order ); ! } ! private void addOrders() ! { ! for(int i = 0; i<this.signedTickers.Length; i++) ! this.addOrders_addOrder( i ); } public void MarketOpenEventHandler( Object sender , EndOfDayTimingEventArgs endOfDayTimingEventArgs ) { ! this.closePositions(); if ( ( this.account.CashAmount == 0 ) && ( this.account.Transactions.Count == 0 ) ) // cash has not been added yet ! this.account.AddCash( 30000 ); ! this.addOrders(); ! } ! private void closePositions() ! { ! ArrayList tickers = new ArrayList(); ! foreach ( Position position in this.account.Portfolio.Positions ) ! tickers.Add( position.Instrument.Key ); ! foreach ( string ticker in tickers ) ! this.account.ClosePosition( ticker ); } public void FiveMinutesBeforeMarketCloseEventHandler( Object sender , EndOfDayTimingEventArgs endOfDayTimingEventArgs) { - } ! public void MarketCloseEventHandler( Object sender , EndOfDayTimingEventArgs endOfDayTimingEventArgs) { ! this.closePositions(); ! SignedTicker.ChangeSignOfEachTicker(this.signedTickers); ! this.addOrders(); ! SignedTicker.ChangeSignOfEachTicker(this.signedTickers); } ! ! public void OneHourAfterMarketCloseEventHandler( Object sender , EndOfDayTimingEventArgs endOfDayTimingEventArgs) { } - } } --- 39,77 ---- { private Account account; ! WeightedPositions weightedPositions; public OTC_CTODailyStrategy( Account account , ! WeightedPositions weightedPositions) { this.account = account; ! this.weightedPositions = weightedPositions; } + public void MarketOpenEventHandler( Object sender , EndOfDayTimingEventArgs endOfDayTimingEventArgs ) { ! AccountManager.ClosePositions(this.account); if ( ( this.account.CashAmount == 0 ) && ( this.account.Transactions.Count == 0 ) ) // cash has not been added yet ! this.account.AddCash( 15000 ); ! AccountManager.OpenPositions(this.weightedPositions, this.account); } + public void FiveMinutesBeforeMarketCloseEventHandler( Object sender , EndOfDayTimingEventArgs endOfDayTimingEventArgs) { } ! public void MarketCloseEventHandler( Object sender , EndOfDayTimingEventArgs endOfDayTimingEventArgs) { ! AccountManager.ReversePositions(this.account); } ! ! public void OneHourAfterMarketCloseEventHandler( Object sender , EndOfDayTimingEventArgs endOfDayTimingEventArgs) { } } } Index: FixedPeriodOscillatorStrategy.cs =================================================================== RCS file: /cvsroot/quantproject/QuantProject/b7_Scripts/WalkForwardTesting/LinearCombination/FixedPeriodOscillatorStrategy.cs,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** FixedPeriodOscillatorStrategy.cs 2 Jul 2006 19:22:12 -0000 1.2 --- FixedPeriodOscillatorStrategy.cs 29 Aug 2007 09:43:36 -0000 1.3 *************** *** 37,46 **** /// </summary> [Serializable] ! public class FixedPeriodOscillatorStrategy : IEndOfDayStrategy { ! private Account account; ! private string[] signedTickers; ! private double[] weightsForSignedTickers; ! private int daysForRightPeriod; private int daysForReversalPeriod; //length for movement upwards or downwards of the given tickers --- 37,43 ---- /// </summary> [Serializable] ! public class FixedPeriodOscillatorStrategy : EndOfDayTimerHandler, IEndOfDayStrategy { ! private int daysForRightPeriod; private int daysForReversalPeriod; //length for movement upwards or downwards of the given tickers *************** *** 52,127 **** public FixedPeriodOscillatorStrategy( Account account , ! string[] signedTickers, ! double[] weightsForSignedTickers, int daysForRightPeriod, ! int daysForReversalPeriod) { this.account = account; ! this.signedTickers = signedTickers; ! this.weightsForSignedTickers = weightsForSignedTickers; this.daysForRightPeriod = daysForRightPeriod; this.daysForReversalPeriod = daysForReversalPeriod; } ! private long marketCloseEventHandler_addOrder_getQuantity( ! int indexForSignedTicker) ! { ! double accountValue = this.account.GetMarketValue(); ! double currentTickerAsk = ! this.account.DataStreamer.GetCurrentAsk( SignedTicker.GetTicker(this.signedTickers[indexForSignedTicker]) ); ! double maxPositionValueForThisTicker = ! accountValue*this.weightsForSignedTickers[indexForSignedTicker]; ! long quantity = Convert.ToInt64( Math.Floor( ! maxPositionValueForThisTicker / currentTickerAsk ) ); ! return quantity; ! } ! private void marketCloseEventHandler_addOrder( int indexForSignedTicker ) ! { ! OrderType orderType = GenomeRepresentation.GetOrderType( this.signedTickers[indexForSignedTicker] ); ! string ticker = GenomeRepresentation.GetTicker( this.signedTickers[indexForSignedTicker] ); ! long quantity = marketCloseEventHandler_addOrder_getQuantity( indexForSignedTicker ); ! Order order = new Order( orderType , new Instrument( ticker ) , ! quantity ); ! this.account.AddOrder( order ); ! } ! private void marketCloseEventHandler_addOrders() ! { ! for(int i = 0; i<this.signedTickers.Length; i++) ! marketCloseEventHandler_addOrder( i ); ! } ! ! public void MarketOpenEventHandler( Object sender , EndOfDayTimingEventArgs endOfDayTimingEventArgs ) { } ! ! private void marketCloseEventHandler_closePositions() ! { ! ArrayList tickers = new ArrayList(); ! foreach ( Position position in this.account.Portfolio.Positions ) ! tickers.Add( position.Instrument.Key ); ! foreach ( string ticker in tickers ) ! this.account.ClosePosition( ticker ); ! } ! ! public void FiveMinutesBeforeMarketCloseEventHandler( Object sender , ! EndOfDayTimingEventArgs endOfDayTimingEventArgs) ! { ! } ! ! private void marketCloseEventHandler_reverseSignOfTickers() ! { ! for(int i = 0; i<this.signedTickers.Length; i++) ! { ! if(this.signedTickers[i] != null) ! { ! if(this.signedTickers[i].StartsWith("-")) ! this.signedTickers[i] = ! GenomeManagerForEfficientPortfolio.GetCleanTickerCode(this.signedTickers[i]); ! else ! this.signedTickers[i] = "-" + this.signedTickers[i]; ! } ! } ! } ! private void marketCloseEventHandler_updateCounters(bool isTheFirstClose) { --- 49,74 ---- public FixedPeriodOscillatorStrategy( Account account , ! WeightedPositions weightedPositions, int daysForRightPeriod, ! int daysForReversalPeriod): ! base("", 0, ! weightedPositions.Count, 0, account, ! 0, ! 0, ! "^GSPC", 0.0, ! PortfolioType.ShortAndLong) { this.account = account; ! this.chosenWeightedPositions = weightedPositions; this.daysForRightPeriod = daysForRightPeriod; this.daysForReversalPeriod = daysForReversalPeriod; } ! ! public override void MarketOpenEventHandler( Object sender , EndOfDayTimingEventArgs endOfDayTimingEventArgs ) { + } ! private void marketCloseEventHandler_updateCounters(bool isTheFirstClose) { *************** *** 135,139 **** } ! public void MarketCloseEventHandler( Object sender , EndOfDayTimingEventArgs endOfDayTimingEventArgs) { --- 82,86 ---- } ! public override void MarketCloseEventHandler( Object sender , EndOfDayTimingEventArgs endOfDayTimingEventArgs) { *************** *** 147,152 **** { firstClose = true; ! this.account.AddCash( 30000 ); ! this.marketCloseEventHandler_addOrders(); } --- 94,98 ---- { firstClose = true; ! this.openPositions(); } *************** *** 157,164 **** { ! this.marketCloseEventHandler_closePositions(); ! this.daysCounterWithRightPositions = 0; ! this.marketCloseEventHandler_reverseSignOfTickers(); ! this.marketCloseEventHandler_addOrders(); this.isReversalPeriodOn = true; } --- 103,107 ---- { ! AccountManager.ReversePositions(this.account); this.isReversalPeriodOn = true; } *************** *** 168,175 **** { ! this.marketCloseEventHandler_closePositions(); ! this.daysCounterWithReversalPositions = 0; ! this.marketCloseEventHandler_reverseSignOfTickers(); ! this.marketCloseEventHandler_addOrders(); this.isReversalPeriodOn = false; } --- 111,115 ---- { ! AccountManager.ReversePositions(this.account); this.isReversalPeriodOn = false; } *************** *** 180,184 **** } ! public void OneHourAfterMarketCloseEventHandler( Object sender , EndOfDayTimingEventArgs endOfDayTimingEventArgs) { --- 120,130 ---- } ! public override void OneHourAfterMarketCloseEventHandler( Object sender , ! EndOfDayTimingEventArgs endOfDayTimingEventArgs) ! { ! ! } ! ! public void FiveMinutesBeforeMarketCloseEventHandler( Object sender , EndOfDayTimingEventArgs endOfDayTimingEventArgs) { Index: FixedLevelOscillatorPVOStrategy.cs =================================================================== RCS file: /cvsroot/quantproject/QuantProject/b7_Scripts/WalkForwardTesting/LinearCombination/FixedLevelOscillatorPVOStrategy.cs,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** FixedLevelOscillatorPVOStrategy.cs 27 Feb 2007 23:07:44 -0000 1.4 --- FixedLevelOscillatorPVOStrategy.cs 29 Aug 2007 09:43:36 -0000 1.5 *************** *** 43,52 **** public FixedLevelOscillatorPVOStrategy( Account accountPVO , ! string[] tickers, ! double[] tickersPortfolioWeights, double oversoldThreshold, double overboughtThreshold, int numDaysForOscillatingPeriod): ! base("", 0, tickers.Length, 0, accountPVO, 0,0, --- 43,51 ---- public FixedLevelOscillatorPVOStrategy( Account accountPVO , ! WeightedPositions weightedPositions, double oversoldThreshold, double overboughtThreshold, int numDaysForOscillatingPeriod): ! base("", 0, weightedPositions.Count, 0, accountPVO, 0,0, *************** *** 55,60 **** PortfolioType.ShortAndLong, 0.5) { ! this.chosenTickers = tickers; ! this.chosenTickersPortfolioWeights = tickersPortfolioWeights; this.currentOversoldThreshold = oversoldThreshold; this.currentOverboughtThreshold = overboughtThreshold; --- 54,58 ---- PortfolioType.ShortAndLong, 0.5) { ! this.chosenWeightedPositions = chosenWeightedPositions; this.currentOversoldThreshold = oversoldThreshold; this.currentOverboughtThreshold = overboughtThreshold; *************** *** 72,76 **** } ! protected override double getCurrentChosenTickersValue(IndexBasedEndOfDayTimer timer) { double returnValue = 999.0; --- 70,74 ---- } ! protected override double getCurrentChosenWeightedPositionsValue(IndexBasedEndOfDayTimer timer) { double returnValue = 999.0; *************** *** 88,94 **** (DateTime)timer.IndexQuotes.Rows[timer.CurrentDateArrayPosition]["quDate"]; returnValue = ! SignedTicker.GetCloseToClosePortfolioReturn( ! this.chosenTickers, this.chosenTickersPortfolioWeights, ! initialDate,finalDate) + 1.0; } catch(Exception ex) --- 86,91 ---- (DateTime)timer.IndexQuotes.Rows[timer.CurrentDateArrayPosition]["quDate"]; returnValue = ! this.chosenWeightedPositions.GetCloseToCloseReturn(initialDate,finalDate) ! + 1.0; } catch(Exception ex) Index: LinearCombinationTest.cs =================================================================== RCS file: /cvsroot/quantproject/QuantProject/b7_Scripts/WalkForwardTesting/LinearCombination/LinearCombinationTest.cs,v retrieving revision 1.11 retrieving revision 1.12 diff -C2 -d -r1.11 -r1.12 *** LinearCombinationTest.cs 27 Feb 2007 23:02:41 -0000 1.11 --- LinearCombinationTest.cs 29 Aug 2007 09:43:36 -0000 1.12 *************** *** 117,138 **** private void run_setStrategy_setBiasedOTC_PVONoThresholdsStrategy() { ! int numberOfTickersToBeChosen = ! GenomeRepresentation.GetSignedTickers(this.genomeRepresentations[0].SignedTickers).Length; ! string[,] signedTickers = new string[this.genomeRepresentations.Length, numberOfTickersToBeChosen]; ! double[,] tickersPortfolioWeights = new double[this.genomeRepresentations.Length, numberOfTickersToBeChosen]; ! for(int i = 0; i < this.genomeRepresentations.Length; i++) { ! for(int j = 0; j < numberOfTickersToBeChosen; j++) ! { ! signedTickers[i,j] = ! GenomeRepresentation.GetSignedTickers( ! this.genomeRepresentations[i].SignedTickers)[j]; ! tickersPortfolioWeights[i,j] = ! GenomeRepresentation.GetWeightsArray( ! this.genomeRepresentations[i].WeightsForSignedTickers)[j]; ! } } this.endOfDayStrategy = new FixedLevelOscBiasedOTC_PVONoThresholdsStrategy( ! this.account , signedTickers , tickersPortfolioWeights, this.genomeRepresentations.Length); } --- 117,131 ---- private void run_setStrategy_setBiasedOTC_PVONoThresholdsStrategy() { ! WeightedPositions[] weightedPositions = new WeightedPositions[this.genomeRepresentations.Length]; ! for(int i = 0; i<this.genomeRepresentations.Length;i++) { ! weightedPositions[i] = ! new WeightedPositions(GenomeRepresentation.GetWeightsArray(this.genomeRepresentations[i].WeightsForSignedTickers), ! new SignedTickers(this.genomeRepresentations[i].SignedTickers)); ! } + this.endOfDayStrategy = new FixedLevelOscBiasedOTC_PVONoThresholdsStrategy( ! this.account , weightedPositions, this.genomeRepresentations.Length); } *************** *** 140,161 **** private void run_setStrategy_setBiasedPVONoThresholdsStrategy() { ! int numberOfTickersToBeChosen = ! GenomeRepresentation.GetSignedTickers(this.genomeRepresentations[0].SignedTickers).Length; ! string[,] signedTickers = new string[this.genomeRepresentations.Length, numberOfTickersToBeChosen]; ! double[,] tickersPortfolioWeights = new double[this.genomeRepresentations.Length, numberOfTickersToBeChosen]; ! for(int i = 0; i < this.genomeRepresentations.Length; i++) ! { ! for(int j = 0; j < numberOfTickersToBeChosen; j++) ! { ! signedTickers[i,j] = ! GenomeRepresentation.GetSignedTickers( ! this.genomeRepresentations[i].SignedTickers)[j]; ! tickersPortfolioWeights[i,j] = ! GenomeRepresentation.GetWeightsArray( ! this.genomeRepresentations[i].WeightsForSignedTickers)[j]; ! } ! } this.endOfDayStrategy = new FixedLevelOscillatorBiasedPVONoThresholdsStrategy( ! this.account , signedTickers , tickersPortfolioWeights, this.genomeRepresentations.Length, this.stopLoss, --- 133,146 ---- private void run_setStrategy_setBiasedPVONoThresholdsStrategy() { ! WeightedPositions[] weightedPositions = new WeightedPositions[this.genomeRepresentations.Length]; ! for(int i = 0; i<this.genomeRepresentations.Length;i++) ! { ! weightedPositions[i] = ! new WeightedPositions(GenomeRepresentation.GetWeightsArray(this.genomeRepresentations[i].WeightsForSignedTickers), ! new SignedTickers(this.genomeRepresentations[i].SignedTickers)); ! ! } this.endOfDayStrategy = new FixedLevelOscillatorBiasedPVONoThresholdsStrategy( ! this.account , weightedPositions, this.genomeRepresentations.Length, this.stopLoss, *************** *** 165,190 **** private void run_setStrategy_setBiasedPVOStrategy() { ! int numberOfTickersToBeChosen = ! GenomeRepresentation.GetSignedTickers(this.genomeRepresentations[0].SignedTickers).Length; ! string[,] signedTickers = new string[this.genomeRepresentations.Length, numberOfTickersToBeChosen]; ! double[,] tickersPortfolioWeights = new double[this.genomeRepresentations.Length, numberOfTickersToBeChosen]; double[] oversoldThresholds = new double[this.genomeRepresentations.Length]; double[] overboughtThresholds = new double[this.genomeRepresentations.Length]; ! for(int i = 0; i < this.genomeRepresentations.Length; i++) { ! for(int j = 0; j < numberOfTickersToBeChosen; j++) ! { ! signedTickers[i,j] = ! GenomeRepresentation.GetSignedTickers( ! this.genomeRepresentations[i].SignedTickers)[j]; ! tickersPortfolioWeights[i,j] = ! GenomeRepresentation.GetWeightsArray( ! this.genomeRepresentations[i].WeightsForSignedTickers)[j]; ! } oversoldThresholds[i] = this.genomeRepresentations[i].OversoldThreshold; overboughtThresholds[i] = this.genomeRepresentations[i].OverboughtThreshold; } ! this.endOfDayStrategy = new FixedLevelOscillatorBiasedPVOStrategy( ! this.account , signedTickers , tickersPortfolioWeights, oversoldThresholds, overboughtThresholds, overboughtThresholds.Length, --- 150,167 ---- private void run_setStrategy_setBiasedPVOStrategy() { ! WeightedPositions[] weightedPositions = new WeightedPositions[this.genomeRepresentations.Length]; double[] oversoldThresholds = new double[this.genomeRepresentations.Length]; double[] overboughtThresholds = new double[this.genomeRepresentations.Length]; ! for(int i = 0; i<this.genomeRepresentations.Length;i++) { ! weightedPositions[i] = ! new WeightedPositions(GenomeRepresentation.GetWeightsArray(this.genomeRepresentations[i].WeightsForSignedTickers), ! new SignedTickers(this.genomeRepresentations[i].SignedTickers)); oversoldThresholds[i] = this.genomeRepresentations[i].OversoldThreshold; overboughtThresholds[i] = this.genomeRepresentations[i].OverboughtThreshold; } ! ! this.endOfDayStrategy = new FixedLevelOscillatorBiasedPVOStrategy( ! this.account , weightedPositions, oversoldThresholds, overboughtThresholds, overboughtThresholds.Length, *************** *** 195,225 **** private void run_setStrategy() { ! string[] signedTickers = genomeRepresentations[0].SignedTickers.Split(";".ToCharArray()); ! double[] weightsForSignedTickers = ! GenomeRepresentation.GetWeightsArray(this.genomeRepresentations[0].WeightsForSignedTickers); ! switch (this.strategyType) { case StrategyType.OpenToCloseDaily: this.endOfDayStrategy = new OpenToCloseDailyStrategy( ! this.account , signedTickers, ! weightsForSignedTickers ); break; case StrategyType.OpenToCloseWeekly: this.endOfDayStrategy = new OpenToCloseWeeklyStrategy( ! this.account , signedTickers ); break; case StrategyType.CloseToOpenDaily: this.endOfDayStrategy = new CloseToOpenDailyStrategy( ! this.account , signedTickers ); break; case StrategyType.OpenToCloseCloseToOpenDaily: this.endOfDayStrategy = new OTC_CTODailyStrategy( ! this.account , signedTickers , weightsForSignedTickers); break; case StrategyType.FixedPeriodOscillator: this.endOfDayStrategy = new FixedPeriodOscillatorStrategy( ! this.account , signedTickers , weightsForSignedTickers, this.numDaysForOscillatorStrategy , this.numDaysForOscillatorStrategy ); --- 172,200 ---- private void run_setStrategy() { ! WeightedPositions weightedPositions = ! this.run_getWeightedPositions(this.genomeRepresentations[0]); ! switch (this.strategyType) { case StrategyType.OpenToCloseDaily: this.endOfDayStrategy = new OpenToCloseDailyStrategy( ! this.account , weightedPositions ); break; case StrategyType.OpenToCloseWeekly: this.endOfDayStrategy = new OpenToCloseWeeklyStrategy( ! this.account , weightedPositions ); break; case StrategyType.CloseToOpenDaily: this.endOfDayStrategy = new CloseToOpenDailyStrategy( ! this.account , weightedPositions ); break; case StrategyType.OpenToCloseCloseToOpenDaily: this.endOfDayStrategy = new OTC_CTODailyStrategy( ! this.account , weightedPositions); break; case StrategyType.FixedPeriodOscillator: this.endOfDayStrategy = new FixedPeriodOscillatorStrategy( ! this.account , weightedPositions, this.numDaysForOscillatorStrategy , this.numDaysForOscillatorStrategy ); *************** *** 228,232 **** case StrategyType.ExtremeCounterTrend: this.endOfDayStrategy = new ExtremeCounterTrendStrategy( ! this.account , signedTickers , weightsForSignedTickers, this.numDaysForOscillatorStrategy, this.portfolioType); break; --- 203,207 ---- case StrategyType.ExtremeCounterTrend: this.endOfDayStrategy = new ExtremeCounterTrendStrategy( ! this.account , weightedPositions, this.numDaysForOscillatorStrategy, this.portfolioType); break; *************** *** 234,243 **** case StrategyType.ImmediateTrendFollower: this.endOfDayStrategy = new ImmediateTrendFollowerStrategy( ! this.account , signedTickers , weightsForSignedTickers, this.numDaysForOscillatorStrategy ); break; case StrategyType.PortfolioValueOscillator: this.endOfDayStrategy = new FixedLevelOscillatorPVOStrategy( ! this.account , signedTickers , weightsForSignedTickers, this.genomeRepresentations[0].OversoldThreshold, this.genomeRepresentations[0].OverboughtThreshold, this.numDaysForOscillatorStrategy ); --- 209,218 ---- case StrategyType.ImmediateTrendFollower: this.endOfDayStrategy = new ImmediateTrendFollowerStrategy( ! this.account , weightedPositions, this.numDaysForOscillatorStrategy ); break; case StrategyType.PortfolioValueOscillator: this.endOfDayStrategy = new FixedLevelOscillatorPVOStrategy( ! this.account , weightedPositions, this.genomeRepresentations[0].OversoldThreshold, this.genomeRepresentations[0].OverboughtThreshold, this.numDaysForOscillatorStrategy ); *************** *** 282,286 **** EquityLine equityLineForWeightedPositions = weightedPositions.GetVirtualEquityLine( ! 30000 , report.AccountReport.EquityLine ); report.AddEquityLine( equityLineForWeightedPositions , color ); --- 257,261 ---- EquityLine equityLineForWeightedPositions = weightedPositions.GetVirtualEquityLine( ! 15000 , report.AccountReport.EquityLine ); report.AddEquityLine( equityLineForWeightedPositions , color ); Index: ImmediateTrendFollowerStrategy.cs =================================================================== RCS file: /cvsroot/q... [truncated message content] |