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.assets.json
|
||||||
MarketData/MarketDataLib/obj/project.nuget.cache
|
MarketData/MarketDataLib/obj/project.nuget.cache
|
||||||
MarketData/MarketData/*.log
|
MarketData/MarketData/*.log
|
||||||
|
MarketData/MarketData/marketdata.log
|
||||||
|
|||||||
@@ -63,6 +63,38 @@ namespace MarketData.Services
|
|||||||
if(!commandArgs.Has("DATE")){Console.WriteLine("UPDATEDAILY2 MISSING DATE");return;}
|
if(!commandArgs.Has("DATE")){Console.WriteLine("UPDATEDAILY2 MISSING DATE");return;}
|
||||||
UpdateDaily2(commandArgs.Coalesce<DateTime>("DATE"));
|
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
|
else
|
||||||
{
|
{
|
||||||
DisplayUsage();
|
DisplayUsage();
|
||||||
@@ -91,6 +123,10 @@ namespace MarketData.Services
|
|||||||
MDTrace.WriteLine(LogLevel.DEBUG,$"LOADHEADLINESWATCHLIST");
|
MDTrace.WriteLine(LogLevel.DEBUG,$"LOADHEADLINESWATCHLIST");
|
||||||
MDTrace.WriteLine(LogLevel.DEBUG,$"LOADPREMARKETDATA");
|
MDTrace.WriteLine(LogLevel.DEBUG,$"LOADPREMARKETDATA");
|
||||||
MDTrace.WriteLine(LogLevel.DEBUG,"UPDATEDAILY2 /DATE: - updates prices, yields, and ratings");
|
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();
|
String result=Console.ReadLine();
|
||||||
if(null==result||!(result.ToUpper().Equals("Y")||result.ToUpper().Equals("YES")))return;
|
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
|
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;
|
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());
|
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 ***************************************************
|
// ******************************************* 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)
|
public static void LoadHeadlinesWatchList(String watchList)
|
||||||
{
|
{
|
||||||
if(!CheckRunCriteria())return;
|
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);
|
List<String> symbols = WatchListDA.GetWatchList(watchList);
|
||||||
HeadlinesMarketDataHelper headlinesMarketDataHelper= new HeadlinesMarketDataHelper();
|
HeadlinesMarketDataHelper headlinesMarketDataHelper= new HeadlinesMarketDataHelper();
|
||||||
headlinesMarketDataHelper.LoadHeadlines(symbols);
|
headlinesMarketDataHelper.LoadHeadlines(symbols);
|
||||||
@@ -562,6 +681,7 @@ namespace MarketData.Services
|
|||||||
PremarketElements premarketElements=null;
|
PremarketElements premarketElements=null;
|
||||||
|
|
||||||
if(!CheckRunCriteria())return;
|
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))
|
for(int retry=0;retry<retries && (null==premarketElements || 0==premarketElements.Count);retry++,Thread.Sleep(sleepTime))
|
||||||
{
|
{
|
||||||
premarketElements=MarketDataHelper.GetPremarketData();
|
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/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/25/2025 10:24:56 PM] [MarketData.Services.MainService::DisplayUsage()]USAGE
|
[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/25/2025 10:24:56 PM] [MarketData.Services.MainService::DisplayUsage()]LOADHEADLINESWATCHLIST
|
[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/25/2025 10:24:56 PM] [MarketData.Services.MainService::DisplayUsage()]LOADPREMARKETDATA
|
[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/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: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 MarketData.MarketDataModel;
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading;
|
|
||||||
using MarketData.MarketDataModel;
|
|
||||||
using MarketData.DataAccess;
|
using MarketData.DataAccess;
|
||||||
using MarketData.Utils;
|
using MarketData.Utils;
|
||||||
using System.Net;
|
using System.Net;
|
||||||
|
|||||||
@@ -99,12 +99,12 @@ namespace MarketData.Utils
|
|||||||
public static void RemoveLogFilesExcept(String exceptFile,String strFolder=null)
|
public static void RemoveLogFilesExcept(String exceptFile,String strFolder=null)
|
||||||
{
|
{
|
||||||
if(null==strFolder)strFolder=Directory.GetCurrentDirectory();
|
if(null==strFolder)strFolder=Directory.GetCurrentDirectory();
|
||||||
String[] logFiles=Directory.GetFiles(strFolder);
|
String[] logFiles=Directory.GetFiles(strFolder,"*.log");
|
||||||
if(null==logFiles || 0==logFiles.Length)return;
|
if(null==logFiles || 0==logFiles.Length)return;
|
||||||
logFiles=logFiles
|
logFiles=logFiles
|
||||||
.Where(x => x.EndsWith(".log",StringComparison.InvariantCultureIgnoreCase) &&
|
.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;
|
if(null==logFiles || 0==logFiles.Length)return;
|
||||||
foreach(String logFile in logFiles)
|
foreach(String logFile in logFiles)
|
||||||
{
|
{
|
||||||
|
|||||||
17
README.md
17
README.md
@@ -1,3 +1,18 @@
|
|||||||
# ARM64
|
# 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