[Quantproject-developers] QuantProject/b7_Scripts/TechnicalAnalysisTesting/TrendFollowing/BestAndWo
Brought to you by:
glauco_1
|
From: Glauco S. <gla...@us...> - 2008-09-29 21:20:16
|
Update of /cvsroot/quantproject/QuantProject/b7_Scripts/TechnicalAnalysisTesting/TrendFollowing/BestAndWorst In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv17462/TrendFollowing/BestAndWorst Modified Files: EndOfDayTimerHandlerBWFollower.cs RunBestAndWorstFollower.cs Log Message: The new revision moves toward an intraday enabled framework. EndOfDayDate time has been removed, DateTime is used now. The code has been changed accordingly. Index: EndOfDayTimerHandlerBWFollower.cs =================================================================== RCS file: /cvsroot/quantproject/QuantProject/b7_Scripts/TechnicalAnalysisTesting/TrendFollowing/BestAndWorst/EndOfDayTimerHandlerBWFollower.cs,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** EndOfDayTimerHandlerBWFollower.cs 19 Aug 2008 17:11:26 -0000 1.2 --- EndOfDayTimerHandlerBWFollower.cs 29 Sep 2008 21:19:23 -0000 1.3 *************** *** 43,47 **** /// </summary> [Serializable] ! public class EndOfDayTimerHandlerBWFollower { private string tickerGroupID; --- 43,47 ---- /// </summary> [Serializable] ! public class EndOfDayTimerHandlerBWFollower : EndOfDayTimerHandler { private string tickerGroupID; *************** *** 87,91 **** } ! #region MarketOpenEventHandler private void addOrderForTicker(string[] tickers, --- 87,91 ---- } ! #region marketOpenEventHandler private void addOrderForTicker(string[] tickers, *************** *** 161,166 **** /// <param name="sender"></param> /// <param name="eventArgs"></param> ! public void MarketOpenEventHandler( ! Object sender , EndOfDayTimingEventArgs endOfDayTimingEventArgs ) { if(this.orders.Count == 0 && this.account.Transactions.Count == 0) --- 161,166 ---- /// <param name="sender"></param> /// <param name="eventArgs"></param> ! protected override void marketOpenEventHandler( ! Object sender , DateTime dateTime ) { if(this.orders.Count == 0 && this.account.Transactions.Count == 0) *************** *** 179,183 **** #endregion ! #region MarketCloseEventHandler private void closePosition( string ticker ) --- 179,183 ---- #endregion ! #region marketCloseEventHandler private void closePosition( string ticker ) *************** *** 195,200 **** } ! public void MarketCloseEventHandler( ! Object sender , EndOfDayTimingEventArgs endOfDayTimingEventArgs ) { if(this.account.Portfolio.Count > 0) --- 195,200 ---- } ! protected override void marketCloseEventHandler( ! Object sender , DateTime dateTime ) { if(this.account.Portfolio.Count > 0) *************** *** 204,209 **** { this.closePositions(); ! this.OneHourAfterMarketCloseEventHandler(sender,endOfDayTimingEventArgs); ! this.MarketOpenEventHandler(sender, endOfDayTimingEventArgs); this.closesElapsedWithSomeOpenPosition = 0; } --- 204,209 ---- { this.closePositions(); ! this.oneHourAfterMarketCloseEventHandler(sender,dateTime); ! this.marketOpenEventHandler(sender, dateTime); this.closesElapsedWithSomeOpenPosition = 0; } *************** *** 213,218 **** if( ((IndexBasedEndOfDayTimer)sender).CurrentDateArrayPosition >= this.lengthInDaysForPerformance ) { ! this.OneHourAfterMarketCloseEventHandler(sender,endOfDayTimingEventArgs); ! this.MarketOpenEventHandler(sender, endOfDayTimingEventArgs); } } --- 213,218 ---- if( ((IndexBasedEndOfDayTimer)sender).CurrentDateArrayPosition >= this.lengthInDaysForPerformance ) { ! this.oneHourAfterMarketCloseEventHandler(sender,dateTime); ! this.marketOpenEventHandler(sender, dateTime); } } *************** *** 221,225 **** #endregion ! #region OneHourAfterMarketCloseEventHandler private void oneHourAfterMarketCloseEventHandler_clear() --- 221,225 ---- #endregion ! #region oneHourAfterMarketCloseEventHandler private void oneHourAfterMarketCloseEventHandler_clear() *************** *** 239,247 **** /// <param name="sender"></param> /// <param name="eventArgs"></param> ! public void OneHourAfterMarketCloseEventHandler( ! Object sender , EndOfDayTimingEventArgs endOfDayTimingEventArgs ) { this.oneHourAfterMarketCloseEventHandler_clear(); ! DateTime currentDate = endOfDayTimingEventArgs.EndOfDayDateTime.DateTime; int currentDateArrayPositionInTimer = ((IndexBasedEndOfDayTimer)sender).CurrentDateArrayPosition; DateTime firstDateForPerformanceComputation = --- 239,247 ---- /// <param name="sender"></param> /// <param name="eventArgs"></param> ! protected override void oneHourAfterMarketCloseEventHandler( ! Object sender , DateTime dateTime ) { this.oneHourAfterMarketCloseEventHandler_clear(); ! DateTime currentDate = dateTime; int currentDateArrayPositionInTimer = ((IndexBasedEndOfDayTimer)sender).CurrentDateArrayPosition; DateTime firstDateForPerformanceComputation = Index: RunBestAndWorstFollower.cs =================================================================== RCS file: /cvsroot/quantproject/QuantProject/b7_Scripts/TechnicalAnalysisTesting/TrendFollowing/BestAndWorst/RunBestAndWorstFollower.cs,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** RunBestAndWorstFollower.cs 19 Aug 2008 17:13:03 -0000 1.3 --- RunBestAndWorstFollower.cs 29 Sep 2008 21:19:23 -0000 1.4 *************** *** 19,23 **** along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ! */ using System; --- 19,23 ---- along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ! */ using System; *************** *** 39,176 **** /// buying and shorting, accordingly, the l best tickers /// and the s worst tickers. ! /// For chosing the best and worst tickers just the /// previous close to close ratio is considered. ! /// The fundamental of the strategy should be the fact (to be verified ...) ! /// that great moves are confirmed the next days /// (just the reversal of simpleOHTest) /// At each close, open positions are closed. /// </summary> ! [Serializable] ! public class RunBestAndWorstFollower ! { ! private string scriptName; ! private string tickerGroupID; ! private string benchmark; ! private int numberOfEligibleTickers; private int lengthInDaysForPerformance; ! private int numOfBestTickers; ! private int numOfWorstTickers; ! private int numOfTickersForBuying; ! private int numOfTickersForShortSelling; ! private DateTime startDate; ! private DateTime endDate; ! private double maxRunningHours; ! private DateTime startingTimeForScript; ! private Account account; ! private IHistoricalQuoteProvider historicalQuoteProvider; ! private IEndOfDayTimer endOfDayTimer; ! public RunBestAndWorstFollower(string tickerGroupID, string benchmark, ! int numberOfEligibleTickers, int lengthInDaysForPerformance, ! int numOfBestTickers, ! int numOfWorstTickers, int numOfTickersForBuying, ! int numOfTickersForShortSelling, ! DateTime startDate, DateTime endDate, ! double maxRunningHours) ! { ! this.tickerGroupID = tickerGroupID; ! this.benchmark = benchmark; ! this.numberOfEligibleTickers = numberOfEligibleTickers; this.lengthInDaysForPerformance = lengthInDaysForPerformance; ! this.numOfBestTickers = numOfBestTickers; ! this.numOfWorstTickers = numOfWorstTickers; ! this.numOfTickersForBuying = numOfTickersForBuying; ! this.numOfTickersForShortSelling = numOfTickersForShortSelling; ! this.startDate = startDate; ! this.endDate = endDate; ! this.maxRunningHours = maxRunningHours; ! this.scriptName = "BWFollower"; ! // this.historicalQuoteProvider = new HistoricalRawQuoteProvider(); ! this.historicalQuoteProvider = new HistoricalAdjustedQuoteProvider(); ! this.endOfDayTimer = new IndexBasedEndOfDayTimer( ! new EndOfDayDateTime( this.startDate , ! EndOfDaySpecificTime.MarketOpen ) , this.benchmark ); ! } ! public void Run() ! { ! this.startingTimeForScript = DateTime.Now; ! this.account = new Account( "BestAndWorstFollower" , this.endOfDayTimer , ! new HistoricalEndOfDayDataStreamer( this.endOfDayTimer , ! this.historicalQuoteProvider ) , ! new HistoricalEndOfDayOrderExecutor( this.endOfDayTimer , ! this.historicalQuoteProvider ) ); ! EndOfDayTimerHandlerBWFollower endOfDayTimerHandler = ! new EndOfDayTimerHandlerBWFollower(this.tickerGroupID, this.numberOfEligibleTickers, ! this.lengthInDaysForPerformance, this.numOfBestTickers, this.numOfWorstTickers, ! this.numOfTickersForBuying, this.numOfTickersForShortSelling, ! this.account, this.benchmark); ! // this.endOfDayTimer.MarketOpen += new MarketOpenEventHandler( ! // endOfDayTimerHandler.MarketOpenEventHandler ); ! this.endOfDayTimer.MarketClose += new MarketCloseEventHandler( ! endOfDayTimerHandler.MarketCloseEventHandler ); ! this.endOfDayTimer.MarketClose += new MarketCloseEventHandler( ! this.checkDateForReport); ! // this.endOfDayTimer.OneHourAfterMarketClose += new OneHourAfterMarketCloseEventHandler( ! // endOfDayTimerHandler.OneHourAfterMarketCloseEventHandler ); ! ! this.endOfDayTimer.Start(); ! } ! private void checkDateForReport(Object sender , EndOfDayTimingEventArgs endOfDayTimingEventArgs) ! { ! if(endOfDayTimingEventArgs.EndOfDayDateTime.DateTime>=this.endDate || ! DateTime.Now >= this.startingTimeForScript.AddHours(this.maxRunningHours)) ! //last date is reached by the timer or maxRunning hours ! //are elapsed from the time script started ! this.SaveScriptResults(); ! } ! private void checkDateForReport_createDirIfNotPresent(string dirPath) ! { ! if(!Directory.Exists(dirPath)) ! Directory.CreateDirectory(dirPath); ! } ! public void SaveScriptResults() ! { ! TimeSpan span; span = DateTime.Now.Subtract(this.startingTimeForScript); int secondsElapsed = span.Hours * 3600 + span.Minutes * 60 + span.Seconds; ! string fileName = ! "SecondsElapsed_" + secondsElapsed.ToString() + "_" + ! DateTime.Now.Hour.ToString().PadLeft(2,'0') + "_" + ! DateTime.Now.Minute.ToString().PadLeft(2,'0') + "_" + ! this.scriptName + "_From_" + this.tickerGroupID + ! "_elig_" + this.numberOfEligibleTickers + ! "_best_" + this.numOfBestTickers + ! "_worst_" + this.numOfWorstTickers + ! "_Long_" + this.numOfTickersForBuying + ! "_Short_" + this.numOfTickersForShortSelling + "_lenInDays_" + this.lengthInDaysForPerformance; ! string dirNameWhereToSaveReports = ! System.Configuration.ConfigurationManager.AppSettings["ReportsArchive"] + ! "\\" + this.scriptName + "\\"; ! ! //default report with numIntervalDays = 1 ! AccountReport accountReport = this.account.CreateReport(fileName,1, ! this.endOfDayTimer.GetCurrentTime(), ! this.benchmark, ! // new HistoricalRawQuoteProvider() ); ! new HistoricalAdjustedQuoteProvider()); ! this.checkDateForReport_createDirIfNotPresent(dirNameWhereToSaveReports); ! ObjectArchiver.Archive(accountReport, ! dirNameWhereToSaveReports + ! fileName + ".qPr"); ! ! this.endOfDayTimer.Stop(); ! } ! } } --- 39,183 ---- /// buying and shorting, accordingly, the l best tickers /// and the s worst tickers. ! /// For chosing the best and worst tickers just the /// previous close to close ratio is considered. ! /// The fundamental of the strategy should be the fact (to be verified ...) ! /// that great moves are confirmed the next days /// (just the reversal of simpleOHTest) /// At each close, open positions are closed. /// </summary> ! [Serializable] ! public class RunBestAndWorstFollower ! { ! private string scriptName; ! private string tickerGroupID; ! private string benchmark; ! private int numberOfEligibleTickers; private int lengthInDaysForPerformance; ! private int numOfBestTickers; ! private int numOfWorstTickers; ! private int numOfTickersForBuying; ! private int numOfTickersForShortSelling; ! private DateTime startDate; ! private DateTime endDate; ! private double maxRunningHours; ! private DateTime startingTimeForScript; ! private Account account; ! private HistoricalMarketValueProvider historicalMarketValueProvider; ! private Timer endOfDayTimer; ! public RunBestAndWorstFollower(string tickerGroupID, string benchmark, ! int numberOfEligibleTickers, int lengthInDaysForPerformance, ! int numOfBestTickers, ! int numOfWorstTickers, int numOfTickersForBuying, ! int numOfTickersForShortSelling, ! DateTime startDate, DateTime endDate, ! double maxRunningHours) ! { ! this.tickerGroupID = tickerGroupID; ! this.benchmark = benchmark; ! this.numberOfEligibleTickers = numberOfEligibleTickers; this.lengthInDaysForPerformance = lengthInDaysForPerformance; ! this.numOfBestTickers = numOfBestTickers; ! this.numOfWorstTickers = numOfWorstTickers; ! this.numOfTickersForBuying = numOfTickersForBuying; ! this.numOfTickersForShortSelling = numOfTickersForShortSelling; ! this.startDate = startDate; ! this.endDate = endDate; ! this.maxRunningHours = maxRunningHours; ! this.scriptName = "BWFollower"; ! // this.historicalQuoteProvider = new HistoricalRawQuoteProvider(); ! this.historicalMarketValueProvider = new HistoricalAdjustedQuoteProvider(); ! this.endOfDayTimer = new IndexBasedEndOfDayTimer( ! HistoricalEndOfDayTimer.GetMarketOpen( this.startDate ) , ! // new EndOfDayDateTime( this.startDate , ! // EndOfDaySpecificTime.MarketOpen ) , ! this.benchmark ); ! } ! public void Run() ! { ! this.startingTimeForScript = DateTime.Now; ! this.account = new Account( "BestAndWorstFollower" , this.endOfDayTimer , ! new HistoricalEndOfDayDataStreamer( this.endOfDayTimer , ! this.historicalMarketValueProvider ) , ! new HistoricalEndOfDayOrderExecutor( this.endOfDayTimer , ! this.historicalMarketValueProvider ) ); ! EndOfDayTimerHandlerBWFollower endOfDayTimerHandler = ! new EndOfDayTimerHandlerBWFollower(this.tickerGroupID, this.numberOfEligibleTickers, ! this.lengthInDaysForPerformance, this.numOfBestTickers, this.numOfWorstTickers, ! this.numOfTickersForBuying, this.numOfTickersForShortSelling, ! this.account, this.benchmark); ! // this.endOfDayTimer.MarketOpen += new MarketOpenEventHandler( ! // endOfDayTimerHandler.MarketOpenEventHandler ); ! this.endOfDayTimer.NewDateTime += ! new NewDateTimeEventHandler( endOfDayTimerHandler.NewDateTimeEventHandler ); ! this.endOfDayTimer.NewDateTime += ! new NewDateTimeEventHandler( this.checkDateForReport ); ! // this.endOfDayTimer.MarketClose += new MarketCloseEventHandler( ! // endOfDayTimerHandler.MarketCloseEventHandler ); ! // ! // this.endOfDayTimer.MarketClose += new MarketCloseEventHandler( ! // this.checkDateForReport); ! // this.endOfDayTimer.OneHourAfterMarketClose += new OneHourAfterMarketCloseEventHandler( ! // endOfDayTimerHandler.OneHourAfterMarketCloseEventHandler ); ! ! this.endOfDayTimer.Start(); ! } ! private void checkDateForReport(Object sender , DateTime dateTime) ! { ! if(dateTime>=this.endDate || ! DateTime.Now >= this.startingTimeForScript.AddHours(this.maxRunningHours)) ! //last date is reached by the timer or maxRunning hours ! //are elapsed from the time script started ! this.SaveScriptResults(); ! } ! private void checkDateForReport_createDirIfNotPresent(string dirPath) ! { ! if(!Directory.Exists(dirPath)) ! Directory.CreateDirectory(dirPath); ! } ! public void SaveScriptResults() ! { ! TimeSpan span; span = DateTime.Now.Subtract(this.startingTimeForScript); int secondsElapsed = span.Hours * 3600 + span.Minutes * 60 + span.Seconds; ! string fileName = ! "SecondsElapsed_" + secondsElapsed.ToString() + "_" + ! DateTime.Now.Hour.ToString().PadLeft(2,'0') + "_" + ! DateTime.Now.Minute.ToString().PadLeft(2,'0') + "_" + ! this.scriptName + "_From_" + this.tickerGroupID + ! "_elig_" + this.numberOfEligibleTickers + ! "_best_" + this.numOfBestTickers + ! "_worst_" + this.numOfWorstTickers + ! "_Long_" + this.numOfTickersForBuying + ! "_Short_" + this.numOfTickersForShortSelling + "_lenInDays_" + this.lengthInDaysForPerformance; ! string dirNameWhereToSaveReports = ! System.Configuration.ConfigurationManager.AppSettings["ReportsArchive"] + ! "\\" + this.scriptName + "\\"; ! ! //default report with numIntervalDays = 1 ! AccountReport accountReport = this.account.CreateReport(fileName,1, ! this.endOfDayTimer.GetCurrentDateTime(), ! this.benchmark, ! // new HistoricalRawQuoteProvider() ); ! new HistoricalAdjustedQuoteProvider()); ! this.checkDateForReport_createDirIfNotPresent(dirNameWhereToSaveReports); ! ObjectArchiver.Archive(accountReport, ! dirNameWhereToSaveReports + ! fileName + ".qPr"); ! ! this.endOfDayTimer.Stop(); ! } ! } } |