diff --git a/CMTrendHelper.cs b/CMTrendHelper.cs deleted file mode 100644 index 72fe11f..0000000 --- a/CMTrendHelper.cs +++ /dev/null @@ -1,185 +0,0 @@ -using MarketData.Generator.CMTrend; -using MarketData.Utils; -using System; -using System.Collections.Generic; -using System.Linq; - -namespace MarketData -{ - public static class CMTrendHelper - { - public static void HandleCMTSession(CommandArgs commandArgs) - { - if (!commandArgs.Has("SESSIONFILE")) {MDTrace.WriteLine(LogLevel.DEBUG,String.Format("Missing SESSIONFILE"));return;} - CMTTrendModel trendModel=new CMTTrendModel(); - trendModel.DisplaySession(commandArgs.Coalesce("SESSIONFILE")); - } - - public static void HandleRunCMTrend(CommandArgs commandArgs) - { - String mode; - - if(!commandArgs.Has("MODE")) - { - if(!commandArgs.Has("MODE")) MDTrace.WriteLine(LogLevel.DEBUG,"MODE is a required paramater."); - MDTrace.WriteLine(LogLevel.DEBUG,"RUNMMTREND /MODE:DAILY|BACKTEST|RUNTRENDTEMPLATE|ANALYZE|DISPLAY|CLOSEPOSITION /SELLDATE:{CLOSEPOSITION} /PRICE:{CLOSEPOSITION} /SYMBOL:{for mode ANALYZE,CLOSEPOSITION} /TRADEDATE:{for mode DAILY,RUNTRENDTEMPLATE,ANALYZE,CLOSEPOSITION) /STARTDATE:(for mode BACKTEST) /ENDDATE:(for mode BACKTEST) /INITIALCASH: /SESSIONFILE: MAXOPENPOSITIONS: /MAXDAILYPOSITIONS: Runs Mark Minervini trend"); - return; - } - mode=commandArgs.Get("MODE"); - if("ENTRYTEST".Equals(mode)) - { - CMTParams cmtParams=new CMTParams(); - if(!commandArgs.Has("SYMBOL")||!commandArgs.Has("STARTDATE")) - { - if(!commandArgs.Contains("SYMBOL")) MDTrace.WriteLine(LogLevel.DEBUG,"SYMBOL is a required parameter when MODE=ENTRYTEST"); - if(!commandArgs.Contains("STARTDATE")) MDTrace.WriteLine(LogLevel.DEBUG,"STARTDATE is a required parameter when MODE=ENTRYTEST"); - return; - } - CMTTrendModel trendModel=new CMTTrendModel(); - trendModel.EntryTest(commandArgs.Get("SYMBOL"),commandArgs.Get("STARTDATE")); - } - else if("CLOSEPOSITION".Equals(mode)) - { - CMTParams cmtParams=new CMTParams(); - if(!commandArgs.Has("PURCHASEDATE,SYMBOL,SESSIONFILE,PRICE,SELLDATE")) - { - if(!commandArgs.Contains("PURCHASEDATE")) MDTrace.WriteLine(LogLevel.DEBUG,"PURCHASEDATE is a required parameter when MODE=CLOSEPOSITION"); - if(!commandArgs.Contains("SYMBOL")) MDTrace.WriteLine(LogLevel.DEBUG,"SYMBOL is a required parameter when MODE=CLOSEPOSITION"); - if(!commandArgs.Contains("SESSIONFILE")) MDTrace.WriteLine(LogLevel.DEBUG,"SESSIONFILE is a required parameter when MODE=CLOSEPOSITION"); - if(!commandArgs.Contains("PRICE")) MDTrace.WriteLine(LogLevel.DEBUG,"PRICE is a required parameter when MODE=CLOSEPOSITION"); - if(!commandArgs.Contains("SELLDATE")) MDTrace.WriteLine(LogLevel.DEBUG,"SELLDATE is a required parameter when MODE=CLOSEPOSITION"); - return; - } - CMTTrendModel trendModel=new CMTTrendModel(); - trendModel.ClosePosition(commandArgs.Get("SYMBOL"),commandArgs.Get("PURCHASEDATE"),commandArgs.Get("SELLDATE"),commandArgs.Get("PRICE"),commandArgs.Get("SESSIONFILE")); - } - else if("DAILY".Equals(mode)) - { - CMTParams cmtParams=new CMTParams(); - if(!commandArgs.Has("TRADEDATE,SESSIONFILE")) - { - if(!commandArgs.Contains("TRADEDATE")) MDTrace.WriteLine(LogLevel.DEBUG,"TRADEDATE is a required parameter when MODE=DAILY"); - if(!commandArgs.Contains("SESSIONFILE")) MDTrace.WriteLine(LogLevel.DEBUG,"SESSIONFILE is a required parameter when MODE=DAILY"); - return; - } - if(commandArgs.Contains("INITIALCASH")) cmtParams.InitialCash=commandArgs.Get("INITIALCASH"); - if(commandArgs.Contains("MAXDAILYPOSITIONS")) cmtParams.MaxDailyPositions=commandArgs.Get("MAXDAILYPOSITIONS"); - if(commandArgs.Contains("MAXOPENPOSITIONS")) cmtParams.MaxOpenPositions=commandArgs.Get("MAXOPENPOSITIONS"); - - if(commandArgs.Has("ONLYTRADESYMBOLS")) cmtParams.OnlyTradeSymbols=commandArgs.Get("ONLYTRADESYMBOLS"); - - if(commandArgs.Contains("POSITIONRISKPERCENTDECIMAL")) - { - cmtParams.PositionRiskPercentDecimal=commandArgs.Get("POSITIONRISKPERCENTDECIMAL"); - } - - if(commandArgs.Contains("ENTRYTYPE")) - { - List entryTypes=Utility.ToList(commandArgs.Get("ENTRYTYPE")); - List constraints=new List { "OVEREXTENDED","MVP","NARROWRANGE","MACD","PRICETREND","VOLUMETREND" }; - bool results=entryTypes.All(i => constraints.ContainsIgnoreCase(i)); - if(!results) - { - MDTrace.WriteLine(LogLevel.DEBUG,"ENTRYTYPE must consist of one or more OVEREXTENDED, MVP, NarrowRange, MACD, PriceTrend, VolumeTrend"); - return; - } - cmtParams.EntryType=commandArgs.Get("ENTRYTYPE"); - } - CMTTrendModel trendModel=new CMTTrendModel(); - - if(commandArgs.Contains("USETRADEONLYSECTORS")) - { - cmtParams.UseTradeOnlySectors=commandArgs.Get("USETRADEONLYSECTORS"); - if(cmtParams.UseTradeOnlySectors) - { - cmtParams.UseTradeOnlySectorsSectors=commandArgs.Get("USETRADEONLYSECTORSSECTORS"); - } - } - CMTTrendModelResult result=trendModel.RunDaily(commandArgs.Get("TRADEDATE"),commandArgs.Get("SESSIONFILE"),cmtParams); - } - else if("BACKTEST".Equals(mode)) - { - CMTParams cmtParams=new CMTParams(); - bool sellAtEndOfSimulation=true; - if(!commandArgs.Has("STARTDATE,ENDDATE,SESSIONFILE")) - { - if(!commandArgs.Contains("STARTDATE")) MDTrace.WriteLine(LogLevel.DEBUG,"STARTDATE is a required parameter"); - if(!commandArgs.Contains("ENDDATE")) MDTrace.WriteLine(LogLevel.DEBUG,"ENDDATE is a required parameter"); - if(!commandArgs.Contains("SESSIONFILE")) MDTrace.WriteLine(LogLevel.DEBUG,"SESSIONFILE is a required parameter"); - return; - } - - CMTTrendModel trendModel=new CMTTrendModel(); - - if(commandArgs.Contains("USETRADEONLYSECTORS")) - { - cmtParams.UseTradeOnlySectors=commandArgs.Get("USETRADEONLYSECTORS"); - if(cmtParams.UseTradeOnlySectors) - { - cmtParams.UseTradeOnlySectorsSectors=commandArgs.Get("USETRADEONLYSECTORSSECTORS"); - } - } - - if(commandArgs.Contains("USEPROFITMAXIMIZATION")) - { - cmtParams.UseProfitMaximization=commandArgs.Get("USEPROFITMAXIMIZATION"); - if(commandArgs.Contains("USEPROFITMAXIMIZATIONEXPRESSION")) - { - cmtParams.UseProfitMaximizationExpression=commandArgs.Get("USEPROFITMAXIMIZATIONEXPRESSION"); - } - } - - if(commandArgs.Contains("MAXDAILYPOSITIONS")) cmtParams.MaxDailyPositions=commandArgs.Get("MAXDAILYPOSITIONS"); - if(commandArgs.Contains("MAXOPENPOSITIONS")) cmtParams.MaxOpenPositions=commandArgs.Get("MAXOPENPOSITIONS"); - if(commandArgs.Contains("BENCHMARKMOVINGAVERAGEDAYS")) cmtParams.BenchmarkMovingAverageDays=commandArgs.Get("BENCHMARKMOVINGAVERAGEDAYS"); - if(commandArgs.Contains("BENCHMARKMOVINGAVERAGEHORIZON")) cmtParams.BenchmarkMovingAverageHorizon=commandArgs.Get("BENCHMARKMOVINGAVERAGEHORIZON"); - - if(commandArgs.Has("ONLYTRADESYMBOLS")) cmtParams.OnlyTradeSymbols=commandArgs.Get("ONLYTRADESYMBOLS"); - - if(commandArgs.Contains("POSITIONRISKPERCENTDECIMAL")) - { - cmtParams.PositionRiskPercentDecimal=commandArgs.Get("POSITIONRISKPERCENTDECIMAL"); - } - - if(commandArgs.Contains("ENTRYTYPE")) - { - List entryTypes=Utility.ToList(commandArgs.Get("ENTRYTYPE")); - List constraints=new List { "OVEREXTENDED","MVP","NARROWRANGE","MACD","PRICETREND","VOLUMETREND" }; - bool results=entryTypes.All(i => constraints.ContainsIgnoreCase(i)); - if(!results) - { - MDTrace.WriteLine(LogLevel.DEBUG,"ENTRYTYPE must consist of one or more OVEREXTENDED, MVP, NarrowRange, MACD, PriceTrend, VolumeTrend"); - return; - } - cmtParams.EntryType=commandArgs.Get("ENTRYTYPE"); - } - if(commandArgs.Contains("SELLATENDOFSIMULATION")) - { - sellAtEndOfSimulation=commandArgs.Get("SELLATENDOFSIMULATION"); - } - CMTTrendModelResult result=trendModel.RunBacktestMode(commandArgs.Get("STARTDATE"),commandArgs.Get("ENDDATE"),sellAtEndOfSimulation,commandArgs.Get("SESSIONFILE"),cmtParams); - } - else if("DISPLAY".Equals(mode)) - { - if(!commandArgs.Contains("SESSIONFILE")) { MDTrace.WriteLine(LogLevel.DEBUG,"SESSIONFILE is a required parameter"); return; } - CMTTrendModel trendModel=new CMTTrendModel(); - trendModel.DisplaySession(commandArgs.Get("SESSIONFILE")); - } - else if("RUNTRENDTEMPLATE".Equals(mode)) - { - if(!commandArgs.Contains("TRADEDATE")) - { - MDTrace.WriteLine(LogLevel.DEBUG,"TRADEDATE is a required parameter when MODE=DAILY"); - return; - } - CMTTrendModel trendModel=new CMTTrendModel(); - trendModel.RunTrendTemplate(commandArgs.Get("TRADEDATE")); - } - else - { - MDTrace.WriteLine(LogLevel.DEBUG,"RUNCMTREND /MODE:DAILY|BACKTEST /TRADEDATE:{for mode DAILY) /STARTDATE:(for mode BACKTEST) /ENDDATE:(for mode BACKTEST) /INITIALCASH: /SESSIONFILE: /MAXPOSITIONS Runs Mark Minervini trend"); - } - return; - } - } -} diff --git a/MGSHMomentumHelper.cs b/MGSHMomentumHelper.cs deleted file mode 100644 index e065f45..0000000 --- a/MGSHMomentumHelper.cs +++ /dev/null @@ -1,170 +0,0 @@ -using MarketData.Generator.MGSHMomentum; -using MarketData.Utils; -using System; -using System.Collections.Generic; -using System.IO; - -namespace MarketData -{ - public static class MGSHMomentumHelper - { - public static void HandleMGSHSession(String[] args) - { - CommandArgs commandArgs = new CommandArgs(args); - if(!commandArgs.Has("SESSIONFILE")) - { - MDTrace.WriteLine(LogLevel.DEBUG,"Missing SESSIONFILE"); - return; - } - MGSHMomentumBacktest momentumBacktest = new MGSHMomentumBacktest(); - momentumBacktest.DisplaySession(commandArgs.Coalesce("SESSIONFILE")); - } - - public static void HandleMGSHRunDaily(String[] args) - { - DateGenerator dateGenerator = new DateGenerator(); - CommandArgs commandArgs = new CommandArgs(args); - if(!commandArgs.Has("SESSIONFILE,TRADEDATE")) - { - MDTrace.WriteLine(LogLevel.DEBUG,"SESSIONFILE and TRADEDATE are required parameters."); - return; - } - DateTime tradeDate = commandArgs.Get("TRADEDATE"); - - if(!dateGenerator.IsMarketOpen(tradeDate)) - { - MDTrace.WriteLine(LogLevel.DEBUG,$"TRADEDATE {tradeDate.ToShortDateString()} is not a trading date."); - return; - } - - DateTime endDate = dateGenerator.FindNextBusinessDay(tradeDate); // UpdateDaily will not process the endDate (i.e.) while(tradeDate("SESSIONFILE"); - pathSessionFile = pathSessionFile.Trim(); - if(!File.Exists(pathSessionFile)) - { - MDTrace.WriteLine(LogLevel.DEBUG,$"The specified file '{pathSessionFile}' does not exist."); - return; - } - - MGSHMomentumBacktest momentumBacktest = new MGSHMomentumBacktest(); - - if(!dateGenerator.IsMarketOpen(tradeDate)) - { - Console.WriteLine(String.Format("The market is closed today, please confirm Y/N:{0}?",tradeDate.ToShortDateString())); - String result=Console.ReadLine(); - if(null==result||!(result.ToUpper().Equals("Y")||result.ToUpper().Equals("YES")))return; - } - - MGSHBacktestResult backtestResult = momentumBacktest.UpdateDaily(tradeDate, endDate, DateTime.Now, pathSessionFile); - } - - public static void HandleMGSHRunBacktest(String[] args) - { - CommandArgs commandArgs = new CommandArgs(args); - MGSHConfiguration mgParams=new MGSHConfiguration(); - if (!commandArgs.Has("STARTDATE,MAXPOSITIONS,INITIALCASH,HOLDINGPERIOD")) - { - if (!commandArgs.Has("STARTDATE")) MDTrace.WriteLine(LogLevel.DEBUG, "Missing STARTDATE"); - if (!commandArgs.Has("MAXPOSITIONS")) MDTrace.WriteLine(LogLevel.DEBUG, "Missing MAXPOSITIONS"); - if (!commandArgs.Has("INITIALCASH")) MDTrace.WriteLine(LogLevel.DEBUG, "Missing INITIALCASH"); - if (!commandArgs.Has("HOLDINGPERIOD")) MDTrace.WriteLine(LogLevel.DEBUG, "Missing HOLDINGPERIOD"); - return; - } - mgParams.MaxPositions=commandArgs.Coalesce("MAXPOSITIONS"); - mgParams.InitialCash=commandArgs.Coalesce("INITIALCASH"); - mgParams.HoldingPeriod=commandArgs.Coalesce("HOLDINGPERIOD"); - - if(commandArgs.Has("INCLUDETRADEMASTERFORSYMBOLSHELD")) - { - mgParams.IncludeTradeMasterForSymbolsHeld=commandArgs.Get("INCLUDETRADEMASTERFORSYMBOLSHELD"); - } - - if(commandArgs.Has("USESTOCHASTICS")) - { - mgParams.UseStochastics=commandArgs.Coalesce("USESTOCHASTICS",true); - } - - if(commandArgs.Has("USESTOPLIMITS")) - { - mgParams.UseStopLimits=commandArgs.Coalesce("USESTOPLIMITS",false); - } - - if(commandArgs.Has("STOPLIMITRISKPERCENTDECIMAL")) - { - mgParams.StopLimitRiskPercentDecimal=commandArgs.Coalesce("STOPLIMITRISKPERCENTDECIMAL",.12); - } - - if(commandArgs.Has("USEHEDGING")) - { - mgParams.UseHedging=commandArgs.Coalesce("USEHEDGING",false); - if(commandArgs.Has("INITIALHEDGECASH")) - { - mgParams.HedgeInitialCash=commandArgs.Get("INITIALHEDGECASH"); - } - } - - if(commandArgs.Has("KEEPSLOTPOSITIONS")) - { - mgParams.KeepSlotPositions=commandArgs.Get("KEEPSLOTPOSITIONS"); - } - -// ** M A C D - if(commandArgs.Has("USEMACD")) - { - mgParams.UseMACD=commandArgs.Coalesce("USEMACD",true); - } - if(commandArgs.Has("MACDREJECTSTRONGSELLSIGNALS")) - { - mgParams.MACDRejectStrongSellSignals=commandArgs.Coalesce("MACDREJECTSTRONGSELLSIGNALS",true); - } - if(commandArgs.Has("MACDREJECTWEAKSELLSIGNALS")) - { - mgParams.MACDRejectWeakSellSignals=commandArgs.Coalesce("MACDREJECTWEAKSELLSIGNALS",true); - } - if(commandArgs.Has("MACDSIGNALDAYS")) - { - mgParams.MACDSignalDays=commandArgs.Coalesce("MACDSIGNALDAYS",mgParams.MACDSignalDays); - } - if(commandArgs.Has("MACDSETUP")) - { - mgParams.MACDSetup=commandArgs.Coalesce("MACDSETUP",mgParams.MACDSetup); - } -// ** - MGSHQualityIndicator qualityIndicator=new MGSHQualityIndicator(MGSHQualityIndicator.QualityType.IDIndicator); - if(commandArgs.Has("QUALITYINDICATORTYPE")) qualityIndicator.Quality=MGSHQualityIndicator.ToQuality(commandArgs.Coalesce("QUALITYINDICATORTYPE","IDINDICATOR")); - mgParams.QualityIndicatorType=qualityIndicator.ToString(); - - mgParams.UseLowSlopeBetaCheck=true; - if(commandArgs.Has("USELOWSLOPEBETACHECK")) mgParams.UseLowSlopeBetaCheck=commandArgs.Coalesce("USELOWSLOPEBETACHECK",true); - - DateTime startDate = commandArgs.Coalesce("STARTDATE"); - DateTime endDate=commandArgs.Coalesce("ENDDATE",new DateTime()); - - DateGenerator dateGenerator = new DateGenerator(); - if(!dateGenerator.IsMarketOpen(startDate)) - { - MDTrace.WriteLine(LogLevel.DEBUG,$"STARTDATE {startDate.ToShortDateString()} is not a trading date."); - return; - } - if(!dateGenerator.IsMarketOpen(endDate)) - { - MDTrace.WriteLine(LogLevel.DEBUG,$"ENDDATE {endDate.ToShortDateString()} is not a trading date."); - return; - } - - if(!commandArgs.Has("SESSIONFILE")) - { - MDTrace.WriteLine(LogLevel.DEBUG,$"SESSIONFILE is a required parameter."); - return; - } - - String pathSessionFile = commandArgs.Get("SESSIONFILE"); - pathSessionFile = pathSessionFile.Trim(); - - List results=new List(); - MGSHMomentumBacktest backtestMomentum=new MGSHMomentumBacktest(); - results.Add(backtestMomentum.PerformBacktest(startDate, endDate, pathSessionFile, mgParams)); - } - } -} diff --git a/MarketData.csproj b/MarketData.csproj index 06c198f..37dea51 100644 --- a/MarketData.csproj +++ b/MarketData.csproj @@ -71,10 +71,10 @@ - - - + + + @@ -94,6 +94,7 @@ Designer + editbin /largeaddressaware $(targetpath) diff --git a/Program.cs b/Program.cs index 13507b8..4cc2f2b 100644 --- a/Program.cs +++ b/Program.cs @@ -19,6 +19,7 @@ using MarketData.Generator.Momentum; using MarketData.MarketDataModel.GainLoss; using MarketData.Cache; using MarketData.Generator.CMTrend; +using MarketData.ModelHelper; using Axiom.Interpreter; using System.Data; using MarketData.Generator.MovingAverage;