Files
marketdata/ModelHelper/MGMomentumHelper.cs
2026-02-19 09:13:15 -05:00

138 lines
5.9 KiB
C#

using MarketData.Generator.Momentum;
using System;
using System.Collections.Generic;
namespace MarketData.ModelHelper
{
public static class MGMomentumHelper
{
/// <summary>
/// RUNMOMENTUM /STARTDATE: /MAXPOSITIONS:
/// </summary>
/// <param name="commandArgs"></param>
public static void RunMomentum(CommandArgs commandArgs)
{
if (!commandArgs.Has("STARTDATE,MAXPOSITIONS")) return;
DateTime analysisDate = commandArgs.Coalesce<DateTime>("STARTDATE");
int maxPositions = commandArgs.Coalesce<int>("MAXPOSITIONS");
MGConfiguration config = new MGConfiguration();
MomentumCandidates momentumCandidates = MomentumGenerator.GenerateMomentum(analysisDate, config);
MDTrace.WriteLine(LogLevel.DEBUG, String.Format("{0}", MomentumCandidate.Header()));
for (int index = 0; index < momentumCandidates.Count; index++)
{
MomentumCandidate momentumCandidate = momentumCandidates[index];
MDTrace.WriteLine(LogLevel.DEBUG, String.Format("{0}", momentumCandidate.ToString()));
}
}
/// <summary>
/// MGLIQUIDATE /SESSIONFILE: /TRADEDATE:
/// </summary>
/// <param name="commandArgs"></param>
public static void RunMGLiquidate(CommandArgs commandArgs)
{
DateTime? tradeDate = null;
if (!commandArgs.Has("SESSIONFILE")) return;
if (commandArgs.Has("TRADEDATE")) tradeDate = commandArgs.Coalesce<DateTime>("TRADEDATE");
MomentumBacktest momentumBacktest = new MomentumBacktest();
momentumBacktest.MGLiquididate(commandArgs.Coalesce<String>("SESSIONFILE"), tradeDate);
}
/// <summary>
/// MGGAINLOSS /SESSIONFILE:{PATHSESSIONFILE} (i.e.) MGGAINLOSS /SESSIONFILE:C:\boneyard\marketdata\bin\Debug\saferun\MG20180131.txt");
/// </summary>
/// <param name="commandArgs"></param>
public static void RunMGGainLoss(CommandArgs commandArgs)
{
if(!commandArgs.Has("SESSIONFILE")) { MDTrace.WriteLine(LogLevel.DEBUG,"Missing SESSIONFILE"); return; }
MomentumBacktest momentumBacktest = new MomentumBacktest();
MomentumBacktest.DisplayGainLoss(commandArgs.Coalesce<String>("SESSIONFILE"));
}
/// <summary>
/// MGSESSION /SESSIONFILE:
/// </summary>
/// <param name="commandArgs"></param>
public static void RunMGSession(CommandArgs commandArgs)
{
if(!commandArgs.Has("SESSIONFILE")) { MDTrace.WriteLine(LogLevel.DEBUG,"Missing SESSIONFILE"); return; }
MomentumBacktest momentumBacktest = new MomentumBacktest();
momentumBacktest.DisplaySession(commandArgs.Coalesce<String>("SESSIONFILE"));
}
/// <summary>
/// RUNBACKTEST /STARTDATE: /MAXPOSITIONS: /INITIALCASH: /HOLDINGPERIOD: /{ENDDATE}: /{SESSIONFILE}:
/// </summary>
/// <param name="commandArgs"></param>
public static void RunBacktest(CommandArgs commandArgs)
{
MGConfiguration mgParams=new MGConfiguration();
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<int>("MAXPOSITIONS");
mgParams.InitialCash=commandArgs.Coalesce<int>("INITIALCASH");
mgParams.HoldingPeriod=commandArgs.Coalesce<int>("HOLDINGPERIOD");
if(commandArgs.Has("INCLUDETRADEMASTERFORSYMBOLSHELD"))
{
mgParams.IncludeTradeMasterForSymbolsHeld=commandArgs.Get<bool>("INCLUDETRADEMASTERFORSYMBOLSHELD");
}
if(commandArgs.Has("USESTOCHASTICS"))
{
mgParams.UseStochastics=commandArgs.Coalesce<bool>("USESTOCHASTICS",true);
}
if(commandArgs.Has("USECALCBETA"))
{
mgParams.UseCalcBeta=commandArgs.Coalesce<bool>("USECALCBETA",true);
}
// ** M A C D
if(commandArgs.Has("USEMACD"))
{
mgParams.UseMACD=commandArgs.Coalesce<bool>("USEMACD",true);
}
if(commandArgs.Has("MACDREJECTSTRONGSELLSIGNALS"))
{
mgParams.MACDRejectStrongSellSignals=commandArgs.Coalesce<bool>("MACDREJECTSTRONGSELLSIGNALS",true);
}
if(commandArgs.Has("MACDREJECTWEAKSELLSIGNALS"))
{
mgParams.MACDRejectWeakSellSignals=commandArgs.Coalesce<bool>("MACDREJECTWEAKSELLSIGNALS",true);
}
if(commandArgs.Has("MACDSIGNALDAYS"))
{
mgParams.MACDSignalDays=commandArgs.Coalesce<int>("MACDSIGNALDAYS",mgParams.MACDSignalDays);
}
if(commandArgs.Has("MACDSETUP"))
{
mgParams.MACDSetup=commandArgs.Coalesce<String>("MACDSETUP",mgParams.MACDSetup);
}
// **
QualityIndicator qualityIndicator=new QualityIndicator(QualityIndicator.QualityType.IDIndicator);
if(commandArgs.Has("QUALITYINDICATORTYPE")) qualityIndicator.Quality=QualityIndicator.ToQuality(commandArgs.Coalesce<String>("QUALITYINDICATORTYPE","IDINDICATOR"));
mgParams.QualityIndicatorType=qualityIndicator.ToString();
mgParams.UseLowSlopeBetaCheck=true;
if(commandArgs.Has("USELOWSLOPEBETACHECK")) mgParams.UseLowSlopeBetaCheck=commandArgs.Coalesce<bool>("USELOWSLOPEBETACHECK",true);
DateTime startDate = commandArgs.Coalesce<DateTime>("STARTDATE");
DateTime endDate=commandArgs.Coalesce<DateTime>("ENDDATE",new DateTime());
String pathSessionFileName = commandArgs.Coalesce<String>("SESSIONFILE", null);
if(null!=pathSessionFileName)pathSessionFileName=pathSessionFileName.Trim();
mgParams.DisplayHeader();
List<BacktestResult> results=new List<BacktestResult>();
MomentumBacktest backtestMomentum=new MomentumBacktest();
results.Add(backtestMomentum.PerformBacktest(startDate,endDate,pathSessionFileName,mgParams));
}
}
}