Sync up with changes from ARM64

This commit is contained in:
2025-05-01 14:08:33 -04:00
parent 148c236af2
commit c0384feb95
40 changed files with 494 additions and 365 deletions

View File

@@ -16,17 +16,26 @@ namespace MarketData.Generator.CMTrend
public CMTCandidateGenerator()
{
}
// *******************************************************************************************************************************************************************************
// ******************************************************************* G E N E R A T E C A N D I D A T E - M A R C M I N E R V I N I ****************************************
// *******************************************************************************************************************************************************************************
public static CMTCandidate GenerateCandidate(String symbol,DateTime tradeDate,CMTParams cmtParams,List<String> symbolsHeld=null)
public static CMTCandidate GenerateCandidate(
String symbol,
DateTime tradeDate,
CMTParams cmtParams,
FundamentalV2 fundamental,
CompanyProfile companyProfile,
List<DateTime> historicalDates,
TimeSeriesCollection epsTimeSeries,
TimeSeriesCollection profitMarginTimeSeries,
List<String> symbolsHeld=null)
{
CMTCandidate cmtCandidate=new CMTCandidate();
try
{
// Check MarketCap
Fundamental fundamental=FundamentalDA.GetFundamentalMaxDate(symbol,tradeDate);
if(null==fundamental)
{
cmtCandidate.Violation=true;
@@ -54,7 +63,6 @@ namespace MarketData.Generator.CMTrend
return cmtCandidate;
}
// Equity check
CompanyProfile companyProfile=CompanyProfileDA.GetCompanyProfile(symbol);
if(null==companyProfile)
{
cmtCandidate.Violation=true;
@@ -93,7 +101,7 @@ namespace MarketData.Generator.CMTrend
cmtCandidate.Reason=String.Format("Insufficient pricing history, {0} days required.",PRICING_DAYS);
return cmtCandidate;
}
// Current Price Check
// Current Price Check. The current price must be equal to the trade date
Price currentPrice=prices[0];
if(currentPrice.Date.Date!=tradeDate.Date)
{
@@ -205,10 +213,7 @@ namespace MarketData.Generator.CMTrend
// generate a 14 day standard RSI with 30 days of pricing data
Prices rsiPrices=GBPriceCache.GetInstance().GetPrices(symbol,currentPrice.Date,30);
RSICollection rsiCollection=RSIGenerator.GenerateRSI(rsiPrices);
double rsi=rsiCollection[rsiCollection.Count-1].RSI;
// RSICollection rsiCollection=RSIGenerator.GenerateRSI(symbol,currentPrice.Date,30);
// double rsi=rsiCollection[rsiCollection.Count-1].RSI;
double rsi=rsiCollection[rsiCollection.Count-1].RSI;
if(null==rsiCollection||0==rsiCollection.Count||rsi<cmtParams.MinRSI)
{
cmtCandidate.Violation=true;
@@ -220,8 +225,6 @@ namespace MarketData.Generator.CMTrend
// Trend #3 check : check required days of increasing 200 day moving averages
DateGenerator dateGenerator=new DateGenerator();
List<double> dma200List=new List<double>();
DateTime historicalDate=dateGenerator.GenerateHistoricalDate(currentPrice.Date,cmtParams.DMA200Horizon+10);
List<DateTime> historicalDates=PricingDA.GetPricingDatesBetween(historicalDate,currentPrice.Date);
historicalDates=historicalDates.Take(cmtParams.DMA200Horizon).ToList();
if(historicalDates.Count<cmtParams.DMA200Horizon)
{
@@ -324,7 +327,6 @@ namespace MarketData.Generator.CMTrend
double epsSlope=double.NaN;
if(companyProfile.IsEquity&&cmtParams.EPSCheck)
{
TimeSeriesCollection epsTimeSeries=FundamentalDA.GetEPS(symbol,currentPrice.Date);
if(null==epsTimeSeries||epsTimeSeries.Count<3)
{
cmtCandidate.Violation=true;
@@ -350,7 +352,6 @@ namespace MarketData.Generator.CMTrend
// Trend#10 - My check - Increasing profit margin
if(companyProfile.IsEquity&&cmtParams.ProfitMarginCheck)
{
TimeSeriesCollection profitMarginTimeSeries=IncomeStatementDA.GetProfitMarginMaxAsOf(symbol,currentPrice.Date,IncomeStatement.PeriodType.Quarterly);
if(null==profitMarginTimeSeries||profitMarginTimeSeries.Count<3)
{
cmtCandidate.Violation=true;
@@ -362,7 +363,7 @@ namespace MarketData.Generator.CMTrend
minDate=profitMarginTimeSeries.Min(x => x.AsOf);
maxDate=profitMarginTimeSeries.Max(x => x.AsOf);
values=profitMarginTimeSeries.ToFloat();
values=Numerics.Reverse(ref values);
values=Numerics.Reverse(ref values); // because most recent date is in the lowest valued index bucket.
profitMarginSlope=Numerics.Slope(values);
if(profitMarginSlope<=0)
{