[Quantproject-developers] QuantProject/b7_Scripts/WalkForwardTesting/PairsTrading/Strategies Pairs
Brought to you by:
glauco_1
|
From: Glauco S. <gla...@us...> - 2009-02-28 18:41:39
|
Update of /cvsroot/quantproject/QuantProject/b7_Scripts/WalkForwardTesting/PairsTrading/Strategies In directory ddv4jf1.ch3.sourceforge.com:/tmp/cvs-serv24044/b7_Scripts/WalkForwardTesting/PairsTrading/Strategies Modified Files: PairsTradingIntradayStrategy.cs Log Message: The signature for the OutOfSampleChooser has been changed to this.outOfSampleChooser.GetPositionsToBeOpened( this.bestTestingPositionsInSample , currentDateTime ) and the code has been changed accordingly Index: PairsTradingIntradayStrategy.cs =================================================================== RCS file: /cvsroot/quantproject/QuantProject/b7_Scripts/WalkForwardTesting/PairsTrading/Strategies/PairsTradingIntradayStrategy.cs,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** PairsTradingIntradayStrategy.cs 18 Feb 2009 20:05:34 -0000 1.4 --- PairsTradingIntradayStrategy.cs 28 Feb 2009 18:41:30 -0000 1.5 *************** *** 30,33 **** --- 30,34 ---- using QuantProject.Business.Strategies.Logging; using QuantProject.Business.Strategies.ReturnsManagement.Time.IntervalsSelectors; + using QuantProject.Business.Timing; namespace QuantProject.Scripts.WalkForwardTesting.PairsTrading *************** *** 45,48 **** --- 46,52 ---- historicalMarketValueProviderForChosingPositionsOutOfSample; private OutOfSampleChooser outOfSampleChooser; + private IExitStrategy exitStrategy; + private Time timeToBeginToTryToOpenPositions; + private Time timeToStopToTryToOpenPositions; public PairsTradingIntradayStrategy( *************** *** 50,54 **** int numDaysForInSampleOptimization , IIntervalsSelector intervalsSelectorForInSample , - // IIntervalsSelector intervalsSelectorForOutOfSample , Time firstTimeToTestInefficiency , Time lastTimeToTestInefficiency , --- 54,57 ---- *************** *** 59,63 **** HistoricalMarketValueProvider historicalMarketValueProviderForChosingPositionsOutOfSample , ! OutOfSampleChooser outOfSampleChooser ) : base( numDaysBeetweenEachOtpimization , --- 62,70 ---- HistoricalMarketValueProvider historicalMarketValueProviderForChosingPositionsOutOfSample , ! OutOfSampleChooser outOfSampleChooser , ! IExitStrategy exitStrategy , ! Time timeToBeginToTryToOpenPositions , ! Time timeToStopToTryToOpenPositions ! ) : base( numDaysBeetweenEachOtpimization , *************** *** 70,76 **** { this.checkParameters( ! firstTimeToTestInefficiency , ! lastTimeToTestInefficiency , ! timeToClosePositions ); this.firstTimeToTestInefficiency = firstTimeToTestInefficiency; this.lastTimeToTestInefficiency = lastTimeToTestInefficiency; --- 77,82 ---- { this.checkParameters( ! timeToBeginToTryToOpenPositions , ! timeToStopToTryToOpenPositions ); this.firstTimeToTestInefficiency = firstTimeToTestInefficiency; this.lastTimeToTestInefficiency = lastTimeToTestInefficiency; *************** *** 79,95 **** historicalMarketValueProviderForChosingPositionsOutOfSample; this.outOfSampleChooser = outOfSampleChooser; } private void checkParameters( ! Time firstTimeToTestInefficiency , ! Time lastTimeToTestInefficiency , ! Time timeToClosePositions ) { ! if ( firstTimeToTestInefficiency >= lastTimeToTestInefficiency ) ! throw new Exception( ! "firstTimeToTestInefficiency must come before lastTimeToTestInefficiency" ); ! if ( lastTimeToTestInefficiency >= timeToClosePositions ) throw new Exception( ! "lastTimeToTestInefficiency must come before timeToClosePositions" ); } --- 85,100 ---- historicalMarketValueProviderForChosingPositionsOutOfSample; this.outOfSampleChooser = outOfSampleChooser; + this.exitStrategy = exitStrategy; + this.timeToBeginToTryToOpenPositions = timeToBeginToTryToOpenPositions; + this.timeToStopToTryToOpenPositions = timeToStopToTryToOpenPositions; } private void checkParameters( ! Time timeToBeginToTryToOpenPositions , ! Time timeToStopToTryToOpenPositions ) { ! if ( timeToBeginToTryToOpenPositions >= timeToStopToTryToOpenPositions ) throw new Exception( ! "timeToBeginToTryToOpenPositions come before timeToStopToTryToOpenPositions" ); } *************** *** 109,130 **** } protected override bool arePositionsToBeClosed() { bool areToBeClosed = ! ( this.Account.Portfolio.Count > 1 ); areToBeClosed = ( areToBeClosed && ! ( this.time() == this.timeToClosePositions ) ); return ( areToBeClosed ); } - - protected override bool arePositionsToBeOpened() - { - bool areToBeOpened = ( this.time() == this.lastTimeToTestInefficiency ); - areToBeOpened = - ( areToBeOpened && - ( this.bestTestingPositionsInSample != null ) ); - return ( areToBeOpened ); - } #region getPositionsToBeOpened --- 114,149 ---- } + + #region arePositionsToBeOpened + private bool isAValidTimeToTryToOpenPositins() + { + Time currentTime = this.time(); + bool isAValidTimeToTryToOpen = + ( + ( currentTime >= this.timeToBeginToTryToOpenPositions ) && + ( currentTime <= this.timeToStopToTryToOpenPositions ) + ); + return isAValidTimeToTryToOpen; + } + protected override bool arePositionsToBeOpened() + { + bool areToBeOpened = ( this.Account.Portfolio.Count == 0 ); + areToBeOpened = ( areToBeOpened && ( this.bestTestingPositionsInSample != null ) ); + areToBeOpened = ( areToBeOpened && this.isAValidTimeToTryToOpenPositins() ); + return areToBeOpened; + } + #endregion arePositionsToBeOpened + protected override bool arePositionsToBeClosed() { bool areToBeClosed = ! ( this.Account.Portfolio.Count > 0 ); areToBeClosed = ( areToBeClosed && ! this.exitStrategy.ArePositionsToBeClosed( ! this.now() , this.Account ) ); ! // ( this.time() == this.timeToClosePositions ) ); return ( areToBeClosed ); } #region getPositionsToBeOpened *************** *** 137,186 **** return dateTimeForCurrentDate; } ! private DateTime getFirstDateTimeToTestInefficiency() ! { ! // DateTime now = this.now(); ! // DateTime firstDateTimeToTestInefficiency = new DateTime( ! // now.Year , now.Month , now.Day , ! // this.firstTimeToTestInefficiency.Hour , ! // this.firstTimeToTestInefficiency.Minute , ! // this.firstTimeToTestInefficiency.Second ); ! DateTime firstDateTimeToTestInefficiency = ! this.getDateTimeForCurrentDate( this.firstTimeToTestInefficiency ); ! return firstDateTimeToTestInefficiency; ! } ! private DateTime getLastDateTimeToTestInefficiency() ! { ! // DateTime now = this.now(); ! // DateTime lastDateTimeToTestInefficiency = new DateTime( ! // now.Year , now.Month , now.Day , ! // this.lastTimeToTestInefficiency.Hour , ! // this.lastTimeToTestInefficiency.Minute , ! // this.lastTimeToTestInefficiency.Second ); ! DateTime lastDateTimeToTestInefficiency = ! this.getDateTimeForCurrentDate( this.lastTimeToTestInefficiency ); ! return lastDateTimeToTestInefficiency; ! } ! private DateTime getDateTimeToClosePositions() ! { ! DateTime dateTimeToClosePositions = ! this.getDateTimeForCurrentDate( this.timeToClosePositions ); ! return dateTimeToClosePositions; ! } protected override WeightedPositions getPositionsToBeOpened() { // DateTime firstDateTimeToTestInefficiency = // this.getFirstDateTimeToTestInefficiency(); ! DateTime lastDateTimeToTestInefficiency = ! this.getLastDateTimeToTestInefficiency(); // attention! we are looking in the future here, but we do it // just to avoid picking a ticker for which we don't have // the market value when we will close the positions ! DateTime dateTimeToClosePositions = ! this.getDateTimeToClosePositions(); WeightedPositions weightedPositions = this.outOfSampleChooser.GetPositionsToBeOpened( this.bestTestingPositionsInSample , // firstDateTimeToTestInefficiency , ! lastDateTimeToTestInefficiency , // dateTimeToClosePositions , this.historicalMarketValueProviderForChosingPositionsOutOfSample , --- 156,206 ---- return dateTimeForCurrentDate; } ! // private DateTime getFirstDateTimeToTestInefficiency() ! // { ! //// DateTime now = this.now(); ! //// DateTime firstDateTimeToTestInefficiency = new DateTime( ! //// now.Year , now.Month , now.Day , ! //// this.firstTimeToTestInefficiency.Hour , ! //// this.firstTimeToTestInefficiency.Minute , ! //// this.firstTimeToTestInefficiency.Second ); ! // DateTime firstDateTimeToTestInefficiency = ! // this.getDateTimeForCurrentDate( this.firstTimeToTestInefficiency ); ! // return firstDateTimeToTestInefficiency; ! // } ! // private DateTime getLastDateTimeToTestInefficiency() ! // { ! //// DateTime now = this.now(); ! //// DateTime lastDateTimeToTestInefficiency = new DateTime( ! //// now.Year , now.Month , now.Day , ! //// this.lastTimeToTestInefficiency.Hour , ! //// this.lastTimeToTestInefficiency.Minute , ! //// this.lastTimeToTestInefficiency.Second ); ! // DateTime lastDateTimeToTestInefficiency = ! // this.getDateTimeForCurrentDate( this.lastTimeToTestInefficiency ); ! // return lastDateTimeToTestInefficiency; ! // } ! // private DateTime getDateTimeToClosePositions() ! // { ! // DateTime dateTimeToClosePositions = ! // this.getDateTimeForCurrentDate( this.timeToClosePositions ); ! // return dateTimeToClosePositions; ! // } protected override WeightedPositions getPositionsToBeOpened() { // DateTime firstDateTimeToTestInefficiency = // this.getFirstDateTimeToTestInefficiency(); ! // DateTime lastDateTimeToTestInefficiency = ! // this.getLastDateTimeToTestInefficiency(); // attention! we are looking in the future here, but we do it // just to avoid picking a ticker for which we don't have // the market value when we will close the positions ! // DateTime dateTimeToClosePositions = ! // this.getDateTimeToClosePositions(); ! DateTime currentDateTime = this.now(); WeightedPositions weightedPositions = this.outOfSampleChooser.GetPositionsToBeOpened( this.bestTestingPositionsInSample , // firstDateTimeToTestInefficiency , ! currentDateTime , // dateTimeToClosePositions , this.historicalMarketValueProviderForChosingPositionsOutOfSample , |