Add methods to support intraday
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -152,3 +152,4 @@ MarketData/MarketDataLib/obj/MarketDataLib.csproj.nuget.g.targets
|
||||
MarketData/MarketDataLib/obj/project.assets.json
|
||||
MarketData/MarketDataLib/obj/project.nuget.cache
|
||||
MarketData/MarketData/*.log
|
||||
MarketData/MarketData/marketdata.log
|
||||
|
||||
@@ -63,6 +63,38 @@ namespace MarketData.Services
|
||||
if(!commandArgs.Has("DATE")){Console.WriteLine("UPDATEDAILY2 MISSING DATE");return;}
|
||||
UpdateDaily2(commandArgs.Coalesce<DateTime>("DATE"));
|
||||
}
|
||||
else if (arg.Equals("UPDATELATESTPRICEOPENPOSITIONS"))
|
||||
{
|
||||
UpdateLatestPriceOpenPositions();
|
||||
}
|
||||
else if (arg.Equals("UPDATELATESTPRICEWATCHLIST"))
|
||||
{
|
||||
CommandArgs commandArgs=new CommandArgs(args);
|
||||
if(!commandArgs.Has("WATCHLIST")){Console.WriteLine("UPDATELATESTPRICEWATCHLIST MISSING WATCHLIST");return;}
|
||||
UpdateLatestPriceWatchList(commandArgs.Coalesce<String>("WATCHLIST"));
|
||||
}
|
||||
else if (arg.Equals("UPDATELATESTANALYSTRATINGS"))
|
||||
{
|
||||
CommandArgs commandArgs = new CommandArgs(args);
|
||||
if (commandArgs.Has("UPDATESECURITYMASTER")) UpdateLatestAnalystRatings(commandArgs.Coalesce<Boolean>("UPDATESECURITYMASTER"));
|
||||
else UpdateLatestAnalystRatings();
|
||||
}
|
||||
else if (arg.Equals("UPDATEANALYSTRATINGS"))
|
||||
{
|
||||
CommandArgs commandArgs = new CommandArgs(args);
|
||||
if (commandArgs.Has("SYMBOL") && commandArgs.Has("MINDATE")) UpdateAnalystRatings(commandArgs.Coalesce<String>("SYMBOL"), commandArgs.Coalesce<DateTime>("MINDATE"));
|
||||
else if (commandArgs.Has("SYMBOL") ) UpdateAnalystRatings(commandArgs.Coalesce<String>("SYMBOL"));
|
||||
else if (commandArgs.Has("MINDATE")) UpdateAnalystRatings(null,commandArgs.Coalesce<DateTime>("MINDATE"));
|
||||
else UpdateAnalystRatings();
|
||||
}
|
||||
else if(arg.Equals("ECHO"))
|
||||
{
|
||||
MDTrace.WriteLine(LogLevel.DEBUG,$"ECHO");
|
||||
for(int index =0; index<args.Length;index++)
|
||||
{
|
||||
MDTrace.WriteLine(LogLevel.DEBUG,$"ARG[{index}]:{args[index]}");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
DisplayUsage();
|
||||
@@ -91,6 +123,10 @@ namespace MarketData.Services
|
||||
MDTrace.WriteLine(LogLevel.DEBUG,$"LOADHEADLINESWATCHLIST");
|
||||
MDTrace.WriteLine(LogLevel.DEBUG,$"LOADPREMARKETDATA");
|
||||
MDTrace.WriteLine(LogLevel.DEBUG,"UPDATEDAILY2 /DATE: - updates prices, yields, and ratings");
|
||||
MDTrace.WriteLine(LogLevel.DEBUG,"UPDATEANALYSTRATINGS");
|
||||
MDTrace.WriteLine(LogLevel.DEBUG,"UPDATELATESTPRICEWATCHLIST /WATCHLIST:");
|
||||
MDTrace.WriteLine(LogLevel.DEBUG,"UPDATELATESTPRICEOPENPOSITIONS");
|
||||
MDTrace.WriteLine(LogLevel.DEBUG,"UPDATELATESTPRICEOPENPOSITIONS");
|
||||
}
|
||||
|
||||
// **********************************************************************************************************************************************
|
||||
@@ -129,6 +165,7 @@ namespace MarketData.Services
|
||||
String result=Console.ReadLine();
|
||||
if(null==result||!(result.ToUpper().Equals("Y")||result.ToUpper().Equals("YES")))return;
|
||||
}
|
||||
MDTrace.WriteLine(LogLevel.DEBUG,$"UPDATEDAILY2 DATE:{startDate.ToShortDateString()}");
|
||||
Utility.RemoveLogFilesExcept("marketdata.log"); // don't remove the current log file
|
||||
int STAGE_1=0,STAGE_2=1,STAGE_3=2,STAGE_4=3,STAGE_5=4,STAGE_6=5,STAGE_7=6,STAGE_8=7,STAGE_9=8,STAGE_10=9,STAGE_11=10,STAGE_12=11,STAGE_FINAL=12;
|
||||
DeletePriceWatchList("valuations",startDate.ToShortDateString());
|
||||
@@ -543,13 +580,95 @@ namespace MarketData.Services
|
||||
// **********************************************************************************************************************************************
|
||||
// ******************************************* E N D U P D A T E D A I L Y 2 M E T H O D S ***************************************************
|
||||
// **********************************************************************************************************************************************
|
||||
public static void UpdateAnalystRatings(String paramSymbol = null,DateTime? minDate=null)
|
||||
{
|
||||
try
|
||||
{
|
||||
MDTrace.WriteLine(LogLevel.DEBUG, "[UPDATEANALYSTRATINGS]");
|
||||
List<String> symbols = new List<String>();
|
||||
if (paramSymbol == null) symbols = PricingDA.GetSymbols();
|
||||
else symbols.Add(paramSymbol);
|
||||
foreach (String symbol in symbols)
|
||||
{
|
||||
AnalystRatings analystRatings = MarketDataHelper.GetAnalystRatingsMarketBeat(symbol);
|
||||
if (null == analystRatings || 0 == analystRatings.Count)
|
||||
{
|
||||
MDTrace.WriteLine(LogLevel.DEBUG, String.Format("No analyst ratings for {0}", symbol));
|
||||
continue;
|
||||
}
|
||||
AnalystRatings duplicateList = new AnalystRatings();
|
||||
if (null != minDate)
|
||||
{
|
||||
MDTrace.WriteLine(LogLevel.DEBUG, String.Format("Minimum Rating Date of {0} is specified.", minDate.Value.ToShortDateString()));
|
||||
analystRatings = new AnalystRatings((from AnalystRating analystRating in analystRatings where analystRating.Date >= minDate.Value select analystRating).ToList());
|
||||
}
|
||||
foreach (AnalystRating analystRating in analystRatings)
|
||||
{
|
||||
if (AnalystRatingsDA.ContainsAnalystRating(analystRating))
|
||||
{
|
||||
MDTrace.WriteLine(LogLevel.DEBUG, String.Format("Already have analyst rating for {0} on {1} from brokerage firm {2}", analystRating.Symbol, analystRating.Date.ToShortDateString(), analystRating.BrokerageFirm));
|
||||
duplicateList.Add(analystRating);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
analystRatings = new AnalystRatings(analystRatings.Except(duplicateList).ToList());
|
||||
foreach (AnalystRating analystRating in analystRatings)
|
||||
{
|
||||
MDTrace.WriteLine(LogLevel.DEBUG, String.Format("Inserting Analyst Rating for {0} on {1} from brokerage firm {2}", analystRating.Symbol, analystRating.Date.ToShortDateString(), analystRating.BrokerageFirm));
|
||||
}
|
||||
AnalystRatingsDA.InsertAnalystRatings(analystRatings);
|
||||
}
|
||||
}
|
||||
catch (Exception exception)
|
||||
{
|
||||
MDTrace.WriteLine(LogLevel.DEBUG, exception);
|
||||
}
|
||||
finally
|
||||
{
|
||||
MDTrace.WriteLine(LogLevel.DEBUG, "[UPDATEANALYSTRATINGS]");
|
||||
}
|
||||
}
|
||||
|
||||
public static void UpdateLatestPriceWatchList(String watchListName)
|
||||
{
|
||||
try
|
||||
{
|
||||
if(!CheckRunCriteria())return;
|
||||
MDTrace.WriteLine(LogLevel.DEBUG,$"UPDATELATESTPRICEWATCHLIST WATCHLIST:{watchListName}");
|
||||
List<String> symbols = WatchListDA.GetWatchList(watchListName);
|
||||
PricingMarketDataHelper pricingMarketDataHelper=new PricingMarketDataHelper();
|
||||
pricingMarketDataHelper.UpdateLatestPrices(symbols);
|
||||
}
|
||||
catch (Exception exception)
|
||||
{
|
||||
MDTrace.WriteLine(LogLevel.DEBUG,exception);
|
||||
}
|
||||
}
|
||||
|
||||
public static void UpdateLatestPriceOpenPositions()
|
||||
{
|
||||
try
|
||||
{
|
||||
if(!CheckRunCriteria())return;
|
||||
MDTrace.WriteLine(LogLevel.DEBUG,$"UPDATELATESTPRICEOPENPOSITIONS");
|
||||
PortfolioTrades portfolioTrades=PortfolioDA.GetOpenTrades();
|
||||
List<String> symbols=(from PortfolioTrade portfolioTrade in portfolioTrades select portfolioTrade.Symbol).Distinct().ToList();
|
||||
if(symbols.Any(x=>x.Equals("SPY")))symbols.Add("SH");
|
||||
PricingMarketDataHelper pricingMarketDataHelper=new PricingMarketDataHelper();
|
||||
pricingMarketDataHelper.UpdateLatestPrices(symbols);
|
||||
}
|
||||
catch (Exception exception)
|
||||
{
|
||||
MDTrace.WriteLine(LogLevel.DEBUG,exception);
|
||||
}
|
||||
}
|
||||
|
||||
// **********************************************************************************************************************************************
|
||||
|
||||
public static void LoadHeadlinesWatchList(String watchList)
|
||||
{
|
||||
if(!CheckRunCriteria())return;
|
||||
MDTrace.WriteLine(LogLevel.DEBUG,String.Format("LoadHeadlinesWatchList {0}",watchList));
|
||||
MDTrace.WriteLine(LogLevel.DEBUG,String.Format("LOADHEADLINESWATCHLIST {0}",watchList));
|
||||
List<String> symbols = WatchListDA.GetWatchList(watchList);
|
||||
HeadlinesMarketDataHelper headlinesMarketDataHelper= new HeadlinesMarketDataHelper();
|
||||
headlinesMarketDataHelper.LoadHeadlines(symbols);
|
||||
@@ -562,6 +681,7 @@ namespace MarketData.Services
|
||||
PremarketElements premarketElements=null;
|
||||
|
||||
if(!CheckRunCriteria())return;
|
||||
MDTrace.WriteLine(LogLevel.DEBUG,String.Format("LOADPREMARKETDATA"));
|
||||
for(int retry=0;retry<retries && (null==premarketElements || 0==premarketElements.Count);retry++,Thread.Sleep(sleepTime))
|
||||
{
|
||||
premarketElements=MarketDataHelper.GetPremarketData();
|
||||
|
||||
@@ -1,5 +1,12 @@
|
||||
[LOCAL][Thread=1][TRACE.DEBUG][3/25/2025 10:24:56 PM] [MarketData.Services.MainService::RunService(args,configuration)][RunService] Started @ 2025-03-25 10:24:56 PM
|
||||
[LOCAL][Thread=1][TRACE.DEBUG][3/25/2025 10:24:56 PM] [MarketData.Services.MainService::DisplayUsage()]USAGE
|
||||
[LOCAL][Thread=1][TRACE.DEBUG][3/25/2025 10:24:56 PM] [MarketData.Services.MainService::DisplayUsage()]LOADHEADLINESWATCHLIST
|
||||
[LOCAL][Thread=1][TRACE.DEBUG][3/25/2025 10:24:56 PM] [MarketData.Services.MainService::DisplayUsage()]LOADPREMARKETDATA
|
||||
[LOCAL][Thread=1][TRACE.DEBUG][3/25/2025 10:24:56 PM] [MarketData.Services.MainService::DisplayUsage()]UPDATEDAILY2 /DATE: - updates prices, yields, and ratings
|
||||
[LOCAL][Thread=1][TRACE.DEBUG][3/26/2025 12:43:18 PM] [MarketData.Services.MainService::RunService(args,configuration)][RunService] Started @ 2025-03-26 12:43:18 PM
|
||||
[LOCAL][Thread=1][TRACE.DEBUG][3/26/2025 12:43:19 PM] [MarketData.Services.MainService::RunService(args,configuration)][RunService] Argument ECHO
|
||||
[LOCAL][Thread=1][TRACE.DEBUG][3/26/2025 12:43:19 PM] [MarketData.Services.MainService::RunService(args,configuration)]ECHO
|
||||
[LOCAL][Thread=1][TRACE.DEBUG][3/26/2025 12:43:19 PM] [MarketData.Services.MainService::RunService(args,configuration)]ARG[0]:ECHO
|
||||
[LOCAL][Thread=1][TRACE.DEBUG][3/26/2025 12:43:19 PM] [MarketData.Services.MainService::RunService(args,configuration)]ARG[1]:/DATE:03-25-2025
|
||||
[LOCAL][Thread=1][TRACE.DEBUG][3/26/2025 12:43:19 PM] [MarketData.Cache.LocalPriceCache::Dispose()][LocalPriceCache:Dispose]Thread state is 'Running'. Joining main thread...
|
||||
[LOCAL][Thread=11][TRACE.DEBUG][3/26/2025 12:43:19 PM] [MarketData.Cache.LocalPriceCache::ThreadProc()][LocalPriceCache:ThreadProc]Thread ended. Items in cache:0
|
||||
[LOCAL][Thread=1][TRACE.DEBUG][3/26/2025 12:43:19 PM] [MarketData.Cache.LocalPriceCache::Dispose()][LocalPriceCache:Dispose] End
|
||||
[LOCAL][Thread=1][TRACE.DEBUG][3/26/2025 12:43:19 PM] [MarketData.Cache.GBPriceCache::Dispose()][GBPriceCache:Dispose]Thread state is 'WaitSleepJoin'. Joining main thread...
|
||||
[LOCAL][Thread=12][TRACE.DEBUG][3/26/2025 12:43:20 PM] [MarketData.Cache.GBPriceCache::ThreadProc()][GBPriceCache:ThreadProc]Thread ended.
|
||||
[LOCAL][Thread=1][TRACE.DEBUG][3/26/2025 12:43:20 PM] [MarketData.Cache.GBPriceCache::Dispose()][GBPriceCache:Dispose] End.
|
||||
[LOCAL][Thread=1][TRACE.DEBUG][3/26/2025 12:43:20 PM] [MarketData.Services.MainService::RunService(args,configuration)][RunService] Done, total took 1961(ms)
|
||||
|
||||
@@ -1,9 +1,4 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading;
|
||||
using MarketData.MarketDataModel;
|
||||
using MarketData.MarketDataModel;
|
||||
using MarketData.DataAccess;
|
||||
using MarketData.Utils;
|
||||
using System.Net;
|
||||
|
||||
@@ -99,12 +99,12 @@ namespace MarketData.Utils
|
||||
public static void RemoveLogFilesExcept(String exceptFile,String strFolder=null)
|
||||
{
|
||||
if(null==strFolder)strFolder=Directory.GetCurrentDirectory();
|
||||
String[] logFiles=Directory.GetFiles(strFolder);
|
||||
String[] logFiles=Directory.GetFiles(strFolder,"*.log");
|
||||
if(null==logFiles || 0==logFiles.Length)return;
|
||||
logFiles=logFiles
|
||||
.Where(x => x.EndsWith(".log",StringComparison.InvariantCultureIgnoreCase) &&
|
||||
!x.Equals(exceptFile,StringComparison.InvariantCultureIgnoreCase)).ToArray<String>();
|
||||
|
||||
!x.EndsWith(exceptFile,StringComparison.InvariantCultureIgnoreCase)).ToArray<String>();
|
||||
|
||||
if(null==logFiles || 0==logFiles.Length)return;
|
||||
foreach(String logFile in logFiles)
|
||||
{
|
||||
|
||||
17
README.md
17
README.md
@@ -1,3 +1,18 @@
|
||||
# ARM64
|
||||
|
||||
ARM version of marketdata libraries.
|
||||
ARM version of marketdata libraries.
|
||||
sudo truncate syslog -- size 0
|
||||
|
||||
|
||||
CRON SCHEDULE
|
||||
# sudo service cron reload , sudo service cron restart
|
||||
# cron helper app here -> https://cron.help/#*/5_9-17_*_*_1-5
|
||||
DOTNET_ROOT=/opt/dotnet
|
||||
*/15 6-16 * * 1-5 /opt/MarketData/MarketData/mk LOADHEADLINESWATCHLIST /WATCHLIST:Valuations 2>&1 | logger -t headlines
|
||||
*/5 5-16 * * 1-5 /opt/MarketData/MarketData/mk LOADPREMARKETDATA 2>&1 | logger -t premarket
|
||||
*/5 9-16 * * 1-5 /opt/MarketData/MarketData/mk UPDATELATESTPRICEOPENPOSITIONS 2>&1 | logger -t priceopenpositions
|
||||
*/5 9-16 * * 1-5 /opt/MarketData/MarketData/mk UPDATELATESTPRICEWATCHLIST /WATCHLIST:Valuations 2>&1 | logger -t pricewatchlist
|
||||
*/30 9-16 * * 1-5 /opt/MarketData/MarketData/mk UPDATELATESTANALYSTRATINGS 2>&1 | logger -t analystratings
|
||||
0 19 * * 1-5 /opt/MarketData/MarketData/mk UPDATEDAILY2 /DATE:$(date -d"-0 days" +\%m-\%d-\%Y) 2>&1 | logger -t updatedaily2
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user