using MarketData.Generator.CMMomentum; using MarketData.Utils; using System; using System.Collections.Generic; namespace MarketData.ModelHelper { public static class CMMomentumHelper { /// /// CMCANDIDATELASTRESORT /TRADEDATE: /// /// public static void RunCMCandidateLastResort(String[] args) { CMParams cmParams = new CMParams(); List candidates = Utility.ToList(cmParams.FallbackCandidateBestOf); CommandArgs commandArgs = new CommandArgs(args); if (!commandArgs.Has("TRADEDATE")) { MDTrace.WriteLine(LogLevel.DEBUG, "TRADEDATE required"); return; } CMCandidate cmCandidate = CMCandidateGenerator.GetFallbackCandidateOfLastResort(candidates, commandArgs.Coalesce("TRADEDATE"), commandArgs.Coalesce("TRADEDATE"), cmParams); if (null == cmCandidate) { MDTrace.WriteLine(LogLevel.DEBUG, "Unable to determine candidate of last resort."); return; } foreach (String candidate in candidates) { MDTrace.WriteLine(LogLevel.DEBUG, String.Format("Candidate examined..{0}", candidate)); } MDTrace.WriteLine(LogLevel.DEBUG, String.Format("Best candidate is {0}", cmCandidate.Symbol)); } /// /// CMGAINLOSS /SESSIONFILE:{PATHSESSIONFILE} (i.e.) CMGAINLOSS /SESSIONFILE:C:\boneyard\marketdata\bin\Debug\saferun\CM20191031.txt"); /// /// public static void RunCMGainLoss(String[] args) { CommandArgs commandArgs=new CommandArgs(args); if(!commandArgs.Has("SESSIONFILE")) { MDTrace.WriteLine(LogLevel.DEBUG,String.Format("Missing SESSIONFILE")); return; } CMMomentumBacktest cmBacktest=new CMMomentumBacktest(); cmBacktest.DisplayGainLoss(commandArgs.Coalesce("SESSIONFILE")); } /// /// CMSESSION /SESSIONFILE: /// /// public static void RunCMSession(String[] args) { CommandArgs commandArgs = new CommandArgs(args); if (!commandArgs.Has("SESSIONFILE")) { MDTrace.WriteLine(LogLevel.DEBUG,String.Format("Missing SESSIONFILE")); return; } CMMomentumBacktest cmBacktest = new CMMomentumBacktest(); cmBacktest.DisplaySession(commandArgs.Coalesce("SESSIONFILE")); } /// /// RUNCMBACKTEST /STARTDATE: /MAXPOSITIONS: /INITIALCASH: /HOLDINGPERIOD: /{USEBINBASEDPOSITIONSIZING}: /{USEBINBASEDPOSITIONSIZINGNUMBINS}: /{TARGETBETA}: /{ENDDATE}: /SESSIONFILE: /{USECNN}: /{USECNNHOST}: /{USECNNDAYCOUNT}: /// /// public static void RunCMMomentum(String[] args) { CommandArgs commandArgs=new CommandArgs(args); 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; } CMParams cmParams=new CMParams(); cmParams.AnalysisDate=commandArgs.Get("STARTDATE"); cmParams.MaxPositions=commandArgs.Get("MAXPOSITIONS"); cmParams.InitialCash=commandArgs.Get("INITIALCASH"); cmParams.HoldingPeriod=commandArgs.Get("HOLDINGPERIOD"); if(commandArgs.Has("USECNN")) { if(!commandArgs.Has("USECNNCLIENT,USECNNDAYCOUNT")) { MDTrace.WriteLine(LogLevel.DEBUG,"Missing USECNNCLIENT, USECNNDAYCOUNT"); return; } cmParams.UseCNN=true; cmParams.UseCNNHost=commandArgs.Get("USECNNHOST"); cmParams.UseCNNDayCount=commandArgs.Get("USECNNDAYCOUNT"); if(commandArgs.Has("USECNNREWARDPERCENTDECIMAL"))cmParams.UseCNNRewardPercentDecimal=commandArgs.Get("USECNNREWARDPERCENTDECIMAL"); } if(commandArgs.Has("USEOVEREXTENDEDINDICATOR")) { if(!commandArgs.Has("USEOVEREXTENDEDINDICATORDAYS,USEOVEREXTENDEDINDICATORVIOLATIONTHRESHHOLD,USEOVEREXTENDEDINDICATORMARGINPERCENT")) { MDTrace.WriteLine(LogLevel.DEBUG,"Missing USEOVEREXTENDEDINDICATORDAYS, USEOVEREXTENDEDINDICATORVIOLATIONTHRESHHOLD, USEOVEREXTENDEDINDICATORMARGINPERCENT"); return; } cmParams.UseOverExtendedIndicator=commandArgs.Get("USEOVEREXTENDEDINDICATOR"); cmParams.UseOverExtendedIndicatorDays=commandArgs.Get("USEOVEREXTENDEDINDICATORDAYS"); cmParams.UseOverExtendedIndicatorViolationThreshhold=commandArgs.Get("USEOVEREXTENDEDINDICATORVIOLATIONTHRESHHOLD"); cmParams.UseOverExtendedIndicatorMarginPercent=commandArgs.Get("USEOVEREXTENDEDINDICATORMARGINPERCENT"); } if(commandArgs.Has("USEMAXPOSITIONBUCKETWEIGHT")) // UseMaxPositionBucketWeight { if(!commandArgs.Has("USEMAXPOSITIONBUCKETWEIGHTMAXWEIGHT")) // UseMaxPositionBucketWeightMaxWeight { MDTrace.WriteLine(LogLevel.DEBUG,"Missing USEMAXPOSITIONBUCKETWEIGHTMAXWEIGHT"); return; } cmParams.UseMaxPositionBucketWeight=commandArgs.Get("USEMAXPOSITIONBUCKETWEIGHT"); cmParams.UseMaxPositionBucketWeightMaxWeight=commandArgs.Get("USEMAXPOSITIONBUCKETWEIGHTMAXWEIGHT"); } else { cmParams.UseMaxPositionBucketWeight=false; cmParams.UseMaxPositionBucketWeightMaxWeight=0; } if(commandArgs.Has("TARGETBETA"))cmParams.TargetBeta=commandArgs.Get("TARGETBETA"); else cmParams.TargetBeta=1.00; DateTime endDate=DateTime.Now; String pathSessionFileName=commandArgs.Coalesce("SESSIONFILE",null); if(null!=pathSessionFileName) pathSessionFileName=pathSessionFileName.Trim(); cmParams.DisplayHeader(); CMMomentumBacktest backtestMomentum=new CMMomentumBacktest(); List results=new List(); results.Add(backtestMomentum.PerformBacktest(cmParams.AnalysisDate,endDate,pathSessionFileName,cmParams)); } } }