diff --git a/CMTrendHelper.cs b/CMTrendHelper.cs new file mode 100644 index 0000000..72fe11f --- /dev/null +++ b/CMTrendHelper.cs @@ -0,0 +1,185 @@ +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/MarketData.csproj b/MarketData.csproj index f67cf9b..8aff78b 100644 --- a/MarketData.csproj +++ b/MarketData.csproj @@ -71,6 +71,7 @@ + diff --git a/Program.cs b/Program.cs index c118376..0fa7d23 100644 --- a/Program.cs +++ b/Program.cs @@ -894,8 +894,7 @@ namespace MarketData sessionParams.HedgePositions= new MGSHPositions(); sessionParams.Cycle = 0; - MGSHSessionManager mgSession = new MGSHSessionManager(); - mgSession.SaveSession(sessionParams,"MGSH_PROTO_20250128_2.TXT"); + MGSHSessionManager.SaveSession(sessionParams,"MGSH_PROTO_20250128_2.TXT"); MDTrace.WriteLine(LogLevel.DEBUG,String.Format($"Total Gain/Loss:{Utility.FormatCurrency(totalGainLoss)}")); MDTrace.WriteLine(LogLevel.DEBUG,String.Format($"Cash:{Utility.FormatCurrency(cash)}")); MDTrace.WriteLine(LogLevel.DEBUG,String.Format($"Open:{hedgeOn}")); @@ -1031,6 +1030,8 @@ namespace MarketData Trace.Listeners.Add(new TextWriterTraceListener(strLogFile)); DateTime currentDate=DateTime.Now; + Environment.OSVersion.VersionString; + // CheckPricesForHoldings(); // Price price = MarketDataHelper.GetLatestPriceBigCharts("NVDA"); @@ -1705,11 +1706,11 @@ namespace MarketData // ************************************************************************************************************************************************************************************************************************* else if(arg.Equals("RUNCMTREND")) { - Program.RunCMTrend(args); + CMTrendHelper.HandleRunCMTrend(new CommandArgs(args)); } else if(arg.Equals("CMTSESSION")) { - Program.HandleCMTSession(args); + CMTrendHelper.HandleCMTSession(new CommandArgs(args)); } // ************************************************************************************************************************************************************************************************************************* // ************************************************************************************************** M G S H M O M E N T U M ************************************************************************************************* @@ -4292,184 +4293,5 @@ namespace MarketData List results=new List(); results.Add(backtestMomentum.PerformBacktest(cmParams.AnalysisDate,endDate,pathSessionFileName,cmParams)); } -// ****************************************************************************************************************************************************************************************** -// ********************************************************************** C M T T R E N D M O D E L R U N N E R A N D C M T T R E N D R E L A T E D *********************************** -// ****************************************************************************************************************************************************************************************** -//CMTSESSION /SESSIONFILE: - public static void HandleCMTSession(String[] args) - { - CommandArgs commandArgs=new CommandArgs(args); - - if (!commandArgs.Has("SESSIONFILE")) {MDTrace.WriteLine(LogLevel.DEBUG,String.Format("Missing SESSIONFILE"));return;} - CMTTrendModel trendModel=new CMTTrendModel(); - trendModel.DisplaySession(commandArgs.Coalesce("SESSIONFILE")); - } - public static int RunCMTrend(String[] args) - { - CommandArgs commandArgs=new CommandArgs(args); - 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 0; - } - 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 0; - } - 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 0; - } - 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 0; - } - 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 0; - } - 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 0; - } - - 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 0; - } - 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 0; } - 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 0; - } - 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 0; - } } }