Add CMTrendHelper
This commit is contained in:
185
CMTrendHelper.cs
Normal file
185
CMTrendHelper.cs
Normal file
@@ -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<String>("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<String>("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<String>("SYMBOL"),commandArgs.Get<DateTime>("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<String>("SYMBOL"),commandArgs.Get<DateTime>("PURCHASEDATE"),commandArgs.Get<DateTime>("SELLDATE"),commandArgs.Get<double>("PRICE"),commandArgs.Get<String>("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<double>("INITIALCASH");
|
||||
if(commandArgs.Contains("MAXDAILYPOSITIONS")) cmtParams.MaxDailyPositions=commandArgs.Get<int>("MAXDAILYPOSITIONS");
|
||||
if(commandArgs.Contains("MAXOPENPOSITIONS")) cmtParams.MaxOpenPositions=commandArgs.Get<int>("MAXOPENPOSITIONS");
|
||||
|
||||
if(commandArgs.Has("ONLYTRADESYMBOLS")) cmtParams.OnlyTradeSymbols=commandArgs.Get<String>("ONLYTRADESYMBOLS");
|
||||
|
||||
if(commandArgs.Contains("POSITIONRISKPERCENTDECIMAL"))
|
||||
{
|
||||
cmtParams.PositionRiskPercentDecimal=commandArgs.Get<double>("POSITIONRISKPERCENTDECIMAL");
|
||||
}
|
||||
|
||||
if(commandArgs.Contains("ENTRYTYPE"))
|
||||
{
|
||||
List<String> entryTypes=Utility.ToList(commandArgs.Get<String>("ENTRYTYPE"));
|
||||
List<String> constraints=new List<String> { "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<String>("ENTRYTYPE");
|
||||
}
|
||||
CMTTrendModel trendModel=new CMTTrendModel();
|
||||
|
||||
if(commandArgs.Contains("USETRADEONLYSECTORS"))
|
||||
{
|
||||
cmtParams.UseTradeOnlySectors=commandArgs.Get<bool>("USETRADEONLYSECTORS");
|
||||
if(cmtParams.UseTradeOnlySectors)
|
||||
{
|
||||
cmtParams.UseTradeOnlySectorsSectors=commandArgs.Get<String>("USETRADEONLYSECTORSSECTORS");
|
||||
}
|
||||
}
|
||||
CMTTrendModelResult result=trendModel.RunDaily(commandArgs.Get<DateTime>("TRADEDATE"),commandArgs.Get<String>("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<bool>("USETRADEONLYSECTORS");
|
||||
if(cmtParams.UseTradeOnlySectors)
|
||||
{
|
||||
cmtParams.UseTradeOnlySectorsSectors=commandArgs.Get<String>("USETRADEONLYSECTORSSECTORS");
|
||||
}
|
||||
}
|
||||
|
||||
if(commandArgs.Contains("USEPROFITMAXIMIZATION"))
|
||||
{
|
||||
cmtParams.UseProfitMaximization=commandArgs.Get<bool>("USEPROFITMAXIMIZATION");
|
||||
if(commandArgs.Contains("USEPROFITMAXIMIZATIONEXPRESSION"))
|
||||
{
|
||||
cmtParams.UseProfitMaximizationExpression=commandArgs.Get<String>("USEPROFITMAXIMIZATIONEXPRESSION");
|
||||
}
|
||||
}
|
||||
|
||||
if(commandArgs.Contains("MAXDAILYPOSITIONS")) cmtParams.MaxDailyPositions=commandArgs.Get<int>("MAXDAILYPOSITIONS");
|
||||
if(commandArgs.Contains("MAXOPENPOSITIONS")) cmtParams.MaxOpenPositions=commandArgs.Get<int>("MAXOPENPOSITIONS");
|
||||
if(commandArgs.Contains("BENCHMARKMOVINGAVERAGEDAYS")) cmtParams.BenchmarkMovingAverageDays=commandArgs.Get<int>("BENCHMARKMOVINGAVERAGEDAYS");
|
||||
if(commandArgs.Contains("BENCHMARKMOVINGAVERAGEHORIZON")) cmtParams.BenchmarkMovingAverageHorizon=commandArgs.Get<int>("BENCHMARKMOVINGAVERAGEHORIZON");
|
||||
|
||||
if(commandArgs.Has("ONLYTRADESYMBOLS")) cmtParams.OnlyTradeSymbols=commandArgs.Get<String>("ONLYTRADESYMBOLS");
|
||||
|
||||
if(commandArgs.Contains("POSITIONRISKPERCENTDECIMAL"))
|
||||
{
|
||||
cmtParams.PositionRiskPercentDecimal=commandArgs.Get<double>("POSITIONRISKPERCENTDECIMAL");
|
||||
}
|
||||
|
||||
if(commandArgs.Contains("ENTRYTYPE"))
|
||||
{
|
||||
List<String> entryTypes=Utility.ToList(commandArgs.Get<String>("ENTRYTYPE"));
|
||||
List<String> constraints=new List<String> { "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<String>("ENTRYTYPE");
|
||||
}
|
||||
if(commandArgs.Contains("SELLATENDOFSIMULATION"))
|
||||
{
|
||||
sellAtEndOfSimulation=commandArgs.Get<bool>("SELLATENDOFSIMULATION");
|
||||
}
|
||||
CMTTrendModelResult result=trendModel.RunBacktestMode(commandArgs.Get<DateTime>("STARTDATE"),commandArgs.Get<DateTime>("ENDDATE"),sellAtEndOfSimulation,commandArgs.Get<String>("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<String>("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<DateTime>("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;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -71,6 +71,7 @@
|
||||
<Reference Include="System.Xml" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="CMTrendHelper.cs" />
|
||||
<Compile Include="CommandArgs.cs" />
|
||||
<Compile Include="MGSHMomentumHelper.cs" />
|
||||
<Compile Include="Program.cs" />
|
||||
|
||||
188
Program.cs
188
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<CMBacktestResult> results=new List<CMBacktestResult>();
|
||||
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<String>("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<String>("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<String>("SYMBOL"),commandArgs.Get<DateTime>("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<String>("SYMBOL"),commandArgs.Get<DateTime>("PURCHASEDATE"),commandArgs.Get<DateTime>("SELLDATE"),commandArgs.Get<double>("PRICE"),commandArgs.Get<String>("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<double>("INITIALCASH");
|
||||
if(commandArgs.Contains("MAXDAILYPOSITIONS")) cmtParams.MaxDailyPositions=commandArgs.Get<int>("MAXDAILYPOSITIONS");
|
||||
if(commandArgs.Contains("MAXOPENPOSITIONS")) cmtParams.MaxOpenPositions=commandArgs.Get<int>("MAXOPENPOSITIONS");
|
||||
|
||||
if(commandArgs.Has("ONLYTRADESYMBOLS")) cmtParams.OnlyTradeSymbols=commandArgs.Get<String>("ONLYTRADESYMBOLS");
|
||||
|
||||
if(commandArgs.Contains("POSITIONRISKPERCENTDECIMAL"))
|
||||
{
|
||||
cmtParams.PositionRiskPercentDecimal=commandArgs.Get<double>("POSITIONRISKPERCENTDECIMAL");
|
||||
}
|
||||
|
||||
if(commandArgs.Contains("ENTRYTYPE"))
|
||||
{
|
||||
List<String> entryTypes=Utility.ToList(commandArgs.Get<String>("ENTRYTYPE"));
|
||||
List<String> constraints=new List<String> { "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<String>("ENTRYTYPE");
|
||||
}
|
||||
CMTTrendModel trendModel=new CMTTrendModel();
|
||||
|
||||
if(commandArgs.Contains("USETRADEONLYSECTORS"))
|
||||
{
|
||||
cmtParams.UseTradeOnlySectors=commandArgs.Get<bool>("USETRADEONLYSECTORS");
|
||||
if(cmtParams.UseTradeOnlySectors)
|
||||
{
|
||||
cmtParams.UseTradeOnlySectorsSectors=commandArgs.Get<String>("USETRADEONLYSECTORSSECTORS");
|
||||
}
|
||||
}
|
||||
CMTTrendModelResult result=trendModel.RunDaily(commandArgs.Get<DateTime>("TRADEDATE"),commandArgs.Get<String>("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<bool>("USETRADEONLYSECTORS");
|
||||
if(cmtParams.UseTradeOnlySectors)
|
||||
{
|
||||
cmtParams.UseTradeOnlySectorsSectors=commandArgs.Get<String>("USETRADEONLYSECTORSSECTORS");
|
||||
}
|
||||
}
|
||||
|
||||
if(commandArgs.Contains("USEPROFITMAXIMIZATION"))
|
||||
{
|
||||
cmtParams.UseProfitMaximization=commandArgs.Get<bool>("USEPROFITMAXIMIZATION");
|
||||
if(commandArgs.Contains("USEPROFITMAXIMIZATIONEXPRESSION"))
|
||||
{
|
||||
cmtParams.UseProfitMaximizationExpression=commandArgs.Get<String>("USEPROFITMAXIMIZATIONEXPRESSION");
|
||||
}
|
||||
}
|
||||
|
||||
if(commandArgs.Contains("MAXDAILYPOSITIONS")) cmtParams.MaxDailyPositions=commandArgs.Get<int>("MAXDAILYPOSITIONS");
|
||||
if(commandArgs.Contains("MAXOPENPOSITIONS")) cmtParams.MaxOpenPositions=commandArgs.Get<int>("MAXOPENPOSITIONS");
|
||||
if(commandArgs.Contains("BENCHMARKMOVINGAVERAGEDAYS")) cmtParams.BenchmarkMovingAverageDays=commandArgs.Get<int>("BENCHMARKMOVINGAVERAGEDAYS");
|
||||
if(commandArgs.Contains("BENCHMARKMOVINGAVERAGEHORIZON")) cmtParams.BenchmarkMovingAverageHorizon=commandArgs.Get<int>("BENCHMARKMOVINGAVERAGEHORIZON");
|
||||
|
||||
if(commandArgs.Has("ONLYTRADESYMBOLS")) cmtParams.OnlyTradeSymbols=commandArgs.Get<String>("ONLYTRADESYMBOLS");
|
||||
|
||||
if(commandArgs.Contains("POSITIONRISKPERCENTDECIMAL"))
|
||||
{
|
||||
cmtParams.PositionRiskPercentDecimal=commandArgs.Get<double>("POSITIONRISKPERCENTDECIMAL");
|
||||
}
|
||||
|
||||
if(commandArgs.Contains("ENTRYTYPE"))
|
||||
{
|
||||
List<String> entryTypes=Utility.ToList(commandArgs.Get<String>("ENTRYTYPE"));
|
||||
List<String> constraints=new List<String> { "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<String>("ENTRYTYPE");
|
||||
}
|
||||
if(commandArgs.Contains("SELLATENDOFSIMULATION"))
|
||||
{
|
||||
sellAtEndOfSimulation=commandArgs.Get<bool>("SELLATENDOFSIMULATION");
|
||||
}
|
||||
CMTTrendModelResult result=trendModel.RunBacktestMode(commandArgs.Get<DateTime>("STARTDATE"),commandArgs.Get<DateTime>("ENDDATE"),sellAtEndOfSimulation,commandArgs.Get<String>("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<String>("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<DateTime>("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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user