From a88cdf262d7aae18ba64c09e8d7696bba29ade22 Mon Sep 17 00:00:00 2001 From: Sean Date: Wed, 16 Apr 2025 11:51:23 -0400 Subject: [PATCH 1/2] Add CalcSticker --- MarketData/MarketData/Services/MainService.cs | 40 ++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-) diff --git a/MarketData/MarketData/Services/MainService.cs b/MarketData/MarketData/Services/MainService.cs index 467a161..2325bf0 100755 --- a/MarketData/MarketData/Services/MainService.cs +++ b/MarketData/MarketData/Services/MainService.cs @@ -8,6 +8,7 @@ using MarketData.MarketDataModel; using MarketData.Helper; using MarketData.Integration; using MarketData.Cache; +using MarketData.Generator; namespace MarketData.Services { @@ -36,12 +37,13 @@ namespace MarketData.Services MDTrace.WriteLine(LogLevel.DEBUG,"UPDATEFINANCIALSTATEMENTS"); MDTrace.WriteLine(LogLevel.DEBUG,"UPDATEFUNDAMENTALS"); MDTrace.WriteLine(LogLevel.DEBUG,"UPDATEHISTORICAL"); - MDTrace.WriteLine(LogLevel.DEBUG,"ECHO {param1} {param2} {param(n)"); + MDTrace.WriteLine(LogLevel.DEBUG,"CALCSTICKER"); MDTrace.WriteLine(LogLevel.DEBUG,"MGSHSESSION /SESSIONFILE:"); MDTrace.WriteLine(LogLevel.DEBUG,"MGSHRUNBACKTEST /USEHEDGING: /HEDGEINITIALCASH: /USESTOPLIMITS: /KEEPSLOTPOSITIONS: /STARTDATE: /MAXPOSITIONS: /INITIALCASH: /HOLDINGPERIOD: /{ENDDATE}: /SESSIONFILE: "); MDTrace.WriteLine(LogLevel.DEBUG,"MGSHRUNDAILY /SESSIONFILE: /TRADEDATE:"); MDTrace.WriteLine(LogLevel.DEBUG,"RUNCMTREND /MODE:DAILY|BACKTEST|RUNTRENDTEMPLATE|ENTRYTEST /SYMBOL:{for mode ANALYZE,ENTRYTEST} /TRADEDATE:{for mode DAILY,RUNTRENDTEMPLATE) /STARTDATE:(for mode BACKTEST,ENTRYTEST) /ENDDATE:(for mode BACKTEST) /INITIALCASH: /SESSIONFILE: /MAXOPENPOSITIONS: /MAXDAILYPOSITIONS: Runs Mark Minervini trend"); MDTrace.WriteLine(LogLevel.DEBUG,"CMTSESSION /SESSIONFILE:{pathfilename} Runs Mark Minervini trend display session"); + MDTrace.WriteLine(LogLevel.DEBUG,"ECHO {param1} {param2} {param(n)"); } /// @@ -69,6 +71,7 @@ namespace MarketData.Services tasks.Add("UPDATEFINANCIALSTATEMENTS",TaskUpdateFinancialStatements); tasks.Add("UPDATEFUNDAMENTALS",TaskUpdateFundamentals); tasks.Add("UPDATEHISTORICAL",TaskUpdateHistorical); + tasks.Add("CALCSTICKER",TaskCalcSticker); tasks.Add("MGSHSESSION",TaskMGSHSession); tasks.Add("MGSHRUNBACKTEST",TaskMGSHRunBacktest); tasks.Add("MGSHRUNDAILY",TaskMGSHRunDaily); @@ -129,6 +132,11 @@ namespace MarketData.Services // ********************************************************************************************************************************************************** // ********************************************************* T A S K S ************************************************************************************* // ********************************************************************************************************************************************************** + public async Task TaskCalcSticker(CommandArgs commandArgs) + { + CalcSticker(); + } + public async Task TaskUpdateHistorical(CommandArgs commandArgs) { UpdateHistorical(); @@ -1058,6 +1066,36 @@ namespace MarketData.Services } } + public static void CalcSticker() + { + try + { + MDTrace.WriteLine(LogLevel.DEBUG,"Generating valuations.."); + Valuations valuations = ValuationGenerator.GenerateValuations(new ValuationGenerator.OnItemCompleteHandler + ((valuation) => + { + MDTrace.WriteLine(LogLevel.DEBUG,$"Completed '{valuation?.Symbol}' '{valuation?.Company}'",3); + return true; + } + ), + new ValuationGenerator.OnErrorItemHandler((symbol,message)=> + { + MDTrace.WriteLine(LogLevel.DEBUG,$"Error generating valuation for {symbol} {message}",3); + } + )); + MDTrace.WriteLine(LogLevel.DEBUG,"Updating database."); + if (!ValuationDA.AddValuations(valuations)) + { + MDTrace.WriteLine(LogLevel.DEBUG,"Error adding valuations to database"); + } + MDTrace.WriteLine(LogLevel.DEBUG,"Done."); + } + catch (Exception exception) + { + MDTrace.WriteLine(LogLevel.DEBUG,exception.ToString()); + } + } + public static void UpdateHistorical() { HistoricalMarketDataHelper historicalMarketDataHelper=new HistoricalMarketDataHelper(); From f835b0dfd157ce8ef446b02d721193bf5d7aefcd Mon Sep 17 00:00:00 2001 From: Sean Date: Wed, 16 Apr 2025 11:57:54 -0400 Subject: [PATCH 2/2] Update the readme with the new crontab entry for calcsticker --- README.md | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index a2f8cf2..b33c052 100644 --- a/README.md +++ b/README.md @@ -106,7 +106,7 @@ CRON_DIR=/opt/MarketData/MarketData 0 19 * * 1-5 cd $CRON_DIR ; /opt/MarketData/MarketData/mk UPDATEDAILY2 /DATE:$(date -d"-0 days" +\%m-\%d-\%Y) > /dev/null 2>&1 -Here is the latest crontab. Adding the monthly jobs to run on the 17th + DOTNET_ROOT=/opt/dotnet CRON_DIR=/opt/MarketData/MarketData @@ -118,3 +118,20 @@ CRON_DIR=/opt/MarketData/MarketData 0 0 17 * * cd $CRON_DIR ; /opt/MarketData/MarketData/mk UPDATEFINANCIALSTATEMENTS > /dev/null 2>&1 0 0 17 * * cd $CRON_DIR ; /opt/MarketData/MarketData/mk UPDATEFUNDAMENTALS > /dev/null 2>&1 0 0 17 * * cd $CRON_DIR ; /opt/MarketData/MarketData/mk UPDATEHISTORICAL > /dev/null 2>&1 + +Here is the official latest crontab. Adding the monthly jobs to run on the 17th +Notice that ther calcsticker job will run the day after the monthly update jobs. +If you move the processing date of the monthly update jobs then update calcsticker +to the following day. For example if monthly updates run on the 15th then schedule calcsticker to run on the 16th + +DOTNET_ROOT=/opt/dotnet +CRON_DIR=/opt/MarketData/MarketData +*/15 6-16 * * 1-5 cd $CRON_DIR ; /opt/MarketData/MarketData/mk LOADHEADLINESWATCHLIST /WATCHLIST:Valuations > /dev/null 2>&1 +*/5 5-16 * * 1-5 cd $CRON_DIR ; /opt/MarketData/MarketData/mk LOADPREMARKETDATA > /dev/null 2>&1 +*/5 9-16 * * 1-5 cd $CRON_DIR ; /opt/MarketData/MarketData/mk UPDATEINTRADAYPRICING > /dev/null 2>&1 +*/30 9-16 * * 1-5 cd $CRON_DIR ; /opt/MarketData/MarketData/mk UPDATELATESTANALYSTRATINGS > /dev/null 2>&1 +0 19 * * 1-5 cd $CRON_DIR ; /opt/MarketData/MarketData/mk UPDATEDAILY2 /DATE:$(date -d"-0 days" +\%m-\%d-\%Y) > /dev/null 2>&1 +0 0 17 * * cd $CRON_DIR ; /opt/MarketData/MarketData/mk UPDATEFINANCIALSTATEMENTS > /dev/null 2>&1 +0 0 17 * * cd $CRON_DIR ; /opt/MarketData/MarketData/mk UPDATEFUNDAMENTALS > /dev/null 2>&1 +0 0 17 * * cd $CRON_DIR ; /opt/MarketData/MarketData/mk UPDATEHISTORICAL > /dev/null 2>&1 +0 0 18 * * cd $CRON_DIR ; /opt/MarketData/MarketData/mk CALCSTICKER > /dev/null 2>&1 \ No newline at end of file