Sync up with changes from ARM64
This commit is contained in:
@@ -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)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user