diff --git a/.gitignore b/.gitignore index 3dbe0f1..70d16ea 100644 --- a/.gitignore +++ b/.gitignore @@ -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 diff --git a/MarketData/MarketData/Services/MainService.cs b/MarketData/MarketData/Services/MainService.cs index 1b18ef3..e1af3f1 100755 --- a/MarketData/MarketData/Services/MainService.cs +++ b/MarketData/MarketData/Services/MainService.cs @@ -63,6 +63,38 @@ namespace MarketData.Services if(!commandArgs.Has("DATE")){Console.WriteLine("UPDATEDAILY2 MISSING DATE");return;} UpdateDaily2(commandArgs.Coalesce("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("WATCHLIST")); + } + else if (arg.Equals("UPDATELATESTANALYSTRATINGS")) + { + CommandArgs commandArgs = new CommandArgs(args); + if (commandArgs.Has("UPDATESECURITYMASTER")) UpdateLatestAnalystRatings(commandArgs.Coalesce("UPDATESECURITYMASTER")); + else UpdateLatestAnalystRatings(); + } + else if (arg.Equals("UPDATEANALYSTRATINGS")) + { + CommandArgs commandArgs = new CommandArgs(args); + if (commandArgs.Has("SYMBOL") && commandArgs.Has("MINDATE")) UpdateAnalystRatings(commandArgs.Coalesce("SYMBOL"), commandArgs.Coalesce("MINDATE")); + else if (commandArgs.Has("SYMBOL") ) UpdateAnalystRatings(commandArgs.Coalesce("SYMBOL")); + else if (commandArgs.Has("MINDATE")) UpdateAnalystRatings(null,commandArgs.Coalesce("MINDATE")); + else UpdateAnalystRatings(); + } + else if(arg.Equals("ECHO")) + { + MDTrace.WriteLine(LogLevel.DEBUG,$"ECHO"); + for(int index =0; index symbols = new List(); + 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 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 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 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 x.EndsWith(".log",StringComparison.InvariantCultureIgnoreCase) && - !x.Equals(exceptFile,StringComparison.InvariantCultureIgnoreCase)).ToArray(); - + !x.EndsWith(exceptFile,StringComparison.InvariantCultureIgnoreCase)).ToArray(); + if(null==logFiles || 0==logFiles.Length)return; foreach(String logFile in logFiles) { diff --git a/README.md b/README.md index 07c93ca..db5d7ce 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,18 @@ # ARM64 -ARM version of marketdata libraries. \ No newline at end of file +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 + +