From b87dea34738bc106350ef600d603a4e9253c8d55 Mon Sep 17 00:00:00 2001 From: Sean Date: Fri, 13 Mar 2026 15:05:05 -0400 Subject: [PATCH] Code cleanup. --- .../ModelHelper/CMMomentumHelper.cs | 2 + .../Models/runcmmomentumbacktest.sh | 7 +- .../MarketDataLib/Numerics/BetaGenerator.cs | 109 ------------------ .../MarketDataLib/Numerics/BlackScholes.cs | 3 +- 4 files changed, 9 insertions(+), 112 deletions(-) diff --git a/MarketData/MarketData/ModelHelper/CMMomentumHelper.cs b/MarketData/MarketData/ModelHelper/CMMomentumHelper.cs index ccd723f..9882807 100755 --- a/MarketData/MarketData/ModelHelper/CMMomentumHelper.cs +++ b/MarketData/MarketData/ModelHelper/CMMomentumHelper.cs @@ -119,6 +119,8 @@ namespace MarketData else cmParams.TargetBeta=1.00; DateTime endDate=DateTime.Now; + if(commandArgs.Has("ENDDATE"))endDate=commandArgs.Get("ENDDATE"); + String pathSessionFileName=commandArgs.Coalesce("SESSIONFILE",null); if(null!=pathSessionFileName) pathSessionFileName=pathSessionFileName.Trim(); cmParams.DisplayHeader(); diff --git a/MarketData/MarketData/Models/runcmmomentumbacktest.sh b/MarketData/MarketData/Models/runcmmomentumbacktest.sh index 502d53a..546b658 100755 --- a/MarketData/MarketData/Models/runcmmomentumbacktest.sh +++ b/MarketData/MarketData/Models/runcmmomentumbacktest.sh @@ -10,7 +10,8 @@ export DOTNET_ROOT=/opt/dotnet CNNDAYCOUNT=90 #VERSION=05 -VERSION=06 +#VERSION=06 +VERSION=07 USEMAXPOSITIONBUCKETWEIGHT=TRUE USEMAXPOSITIONBUCKETWEIGHTMAXWEIGHT=.65 USEOVEREXTENDEDINDICATOR=TRUE @@ -18,6 +19,7 @@ DAYS=10 VIOLATIONS=1 MARGINPERCENT=1.00 STARTDATE=10-31-2019 +ENDDATE=12-31-2025 CNNREWARD=.25 PATHSESSIONFILE="CM${STARTDATE}_OI_${DAYS}_${VIOLATIONS}_MPBW_65_USEOV${USEOVEREXTENDEDINDICATOR}_V${VERSION}.TXT" @@ -28,7 +30,7 @@ else echo "Session file not found, proceeding: $PATHSESSIONFILE" fi -# echo "RUNCMBACKTEST /USECNN:TRUE /USECNNCLIENT:TRUE /USECNNDAYCOUNT:${CNNDAYCOUNT} /USECNNHOST:127.0.0.1:5000 /USECNNREWARDPERCENTDECIMAL:${CNNREWARD} /USEMAXPOSITIONBUCKETWEIGHT:${USEMAXPOSITIONBUCKETWEIGHT} /USEMAXPOSITIONBUCKETWEIGHTMAXWEIGHT:${USEMAXPOSITIONBUCKETWEIGHTMAXWEIGHT} /STARTDATE:${STARTDATE} /MAXPOSITIONS:3 /INITIALCASH:10000 /HOLDINGPERIOD:3 /TARGETBETA:1 /SESSIONFILE:${PATHSESSIONFILE} /USEOVEREXTENDEDINDICATOR:${USEOVEREXTENDEDINDICATOR} /USEOVEREXTENDEDINDICATORDAYS:${DAYS} /USEOVEREXTENDEDINDICATORVIOLATIONTHRESHHOLD:${VIOLATIONS} /USEOVEREXTENDEDINDICATORMARGINPERCENT:${MARGINPERCENT}" +echo "RUNCMBACKTEST /USECNN:TRUE /USECNNCLIENT:TRUE /USECNNDAYCOUNT:${CNNDAYCOUNT} /USECNNHOST:127.0.0.1:5000 /USECNNREWARDPERCENTDECIMAL:${CNNREWARD} /USEMAXPOSITIONBUCKETWEIGHT:${USEMAXPOSITIONBUCKETWEIGHT} /USEMAXPOSITIONBUCKETWEIGHTMAXWEIGHT:${USEMAXPOSITIONBUCKETWEIGHTMAXWEIGHT} /STARTDATE:${STARTDATE} /ENDDATE:${ENDDATE} /MAXPOSITIONS:3 /INITIALCASH:10000 /HOLDINGPERIOD:3 /TARGETBETA:1 /SESSIONFILE:${PATHSESSIONFILE} /USEOVEREXTENDEDINDICATOR:${USEOVEREXTENDEDINDICATOR} /USEOVEREXTENDEDINDICATORDAYS:${DAYS} /USEOVEREXTENDEDINDICATORVIOLATIONTHRESHHOLD:${VIOLATIONS} /USEOVEREXTENDEDINDICATORMARGINPERCENT:${MARGINPERCENT}" /home/pi/ARM64/MarketData/MarketData/bin/Debug/net8.0/mk RUNCMBACKTEST \ /USECNN:TRUE \ @@ -39,6 +41,7 @@ fi /USEMAXPOSITIONBUCKETWEIGHT:${USEMAXPOSITIONBUCKETWEIGHT} \ /USEMAXPOSITIONBUCKETWEIGHTMAXWEIGHT:${USEMAXPOSITIONBUCKETWEIGHTMAXWEIGHT} \ /STARTDATE:${STARTDATE} \ + /ENDDATE:${ENDDATE} \ /MAXPOSITIONS:3 \ /INITIALCASH:10000 \ /HOLDINGPERIOD:3 \ diff --git a/MarketData/MarketDataLib/Numerics/BetaGenerator.cs b/MarketData/MarketDataLib/Numerics/BetaGenerator.cs index ffe8ef3..48a6b64 100755 --- a/MarketData/MarketDataLib/Numerics/BetaGenerator.cs +++ b/MarketData/MarketDataLib/Numerics/BetaGenerator.cs @@ -175,115 +175,6 @@ namespace MarketData.Numerical } return default; } - -// assuming that the list is in descending date order - - - - /// - /// Fetch the first price of the month for both the asset and the benchmark, allowing both to walk forward in the month by up to 10 days until we get a good price - /// - /// - /// - /// - /// - /// - /// - //private static BetaPrice GetPrice(String symbol, String benchmark, DateTime requestedDate, Dictionary symbolPricesByDate, Dictionary benchmarkPricesByDate) - //{ - // try - // { - // int maxAdvanceDays = 10; - // Price symbolPrice = default; - // Price benchmarkPrice = default; - - // for (int advanceDays = 0; advanceDays < maxAdvanceDays; advanceDays++) - // { - // if (!symbolPricesByDate.ContainsKey(requestedDate)) - // { - // requestedDate = requestedDate.AddDays(1); - // continue; - // } - // symbolPrice = symbolPricesByDate[requestedDate]; - - // if (!benchmarkPricesByDate.ContainsKey(requestedDate)) - // { - // requestedDate = requestedDate.AddDays(1); - // continue; - // } - // benchmarkPrice = benchmarkPricesByDate[requestedDate]; - // if(null != symbolPrice && null != benchmarkPrice)break; - // } - - // if (null == symbolPrice || null == benchmarkPrice) return null; - - // symbolPrice.Date = requestedDate.Date; - // benchmarkPrice.Date = requestedDate.Date; - // return new BetaPrice(symbol, benchmark, symbolPrice, benchmarkPrice, requestedDate); - // } - // catch (Exception exception) - // { - // MDTrace.WriteLine(LogLevel.DEBUG, String.Format("Exception:{0}", exception.ToString())); - // return null; - // } - //} - - - //public static double Beta(String symbol,DateTime asof,int months=36) - //{ - // try - // { - // String benchmark = "SPY"; - // DateGenerator dateGenerator = new DateGenerator(); - - // BetaPrices betaPrices = new BetaPrices(); - // DateTime startDate = dateGenerator.GetPrevMonthStart(asof); - // DateTime minPricingDate = PricingDA.GetEarliestDate(symbol); - // Dictionary symbolPricesByDate = new Dictionary(); - // Dictionary benchmarkPricesByDate = new Dictionary(); - // List historicalDates = new List(); - - // while (historicalDates.Count < (months + 1)) - // { - // historicalDates.Add(startDate); - // startDate = dateGenerator.GetPrevMonthStart(startDate); - // } - // DateTime earliestDate = historicalDates[historicalDates.Count - 1]; - - // Prices symbolPrices = PricingDA.GetPrices(symbol, asof, earliestDate); - // Prices benchmarkPrices = PricingDA.GetPrices(benchmark, asof, earliestDate); - - // foreach (Price price in symbolPrices) symbolPricesByDate.Add(price.Date, price); - // foreach (Price price in benchmarkPrices) benchmarkPricesByDate.Add(price.Date, price); - - // startDate = dateGenerator.GetPrevMonthStart(asof); - - // while (betaPrices.Count < (months + 1)) - // { - // BetaPrice betaPrice = GetPrice(symbol, benchmark, startDate, symbolPricesByDate, benchmarkPricesByDate); - // if (null == betaPrice) - // { - // MDTrace.WriteLine(LogLevel.DEBUG,String.Format("Beta({0},{1}).. Cannot calculate Beta. Missing price on {2}",symbol,Utility.DateTimeToStringMMHDDHYYYY(asof),Utility.DateTimeToStringMMHDDHYYYY(startDate))); - // return double.NaN; - // } - // betaPrices.Add(betaPrice); - // startDate = dateGenerator.GetPrevMonthStart(startDate); - // if (startDate < minPricingDate) break; - // } - - // double[] returnsSymbol = betaPrices.ReturnsSymbol(); - // double[] returnsBenchmark = betaPrices.ReturnsBenchmark(); - // double beta = Numerics.Beta(ref returnsSymbol, ref returnsBenchmark); - // return beta; - // } - // catch (Exception exception) - // { - // MDTrace.WriteLine(LogLevel.DEBUG,String.Format("Exception:{0}",exception.ToString())); - // return double.NaN; - // } - //} - - } } diff --git a/MarketData/MarketDataLib/Numerics/BlackScholes.cs b/MarketData/MarketDataLib/Numerics/BlackScholes.cs index 57aaca8..3f06e0b 100755 --- a/MarketData/MarketDataLib/Numerics/BlackScholes.cs +++ b/MarketData/MarketDataLib/Numerics/BlackScholes.cs @@ -5,7 +5,8 @@ using MarketData.MarketDataModel; namespace MarketData.Numerical { /// - /// Black Sholes Option Pricing Model for simplest scenario + /// Black Sholes Option Pricing Model for simplest scenario. + /// This is an adoption of the Abramowitz Stegun approximation for the cumulative normal distribution /// public class BlackScholesOptionPricingModel {