Optimize CMTTrend model

This commit is contained in:
2025-04-09 23:02:30 -04:00
parent e83cf3d34b
commit c3729551a8
5 changed files with 49 additions and 5 deletions

View File

@@ -285,7 +285,6 @@ namespace MarketData.DataAccess
if(null!=sqlConnection) sqlConnection.Close();
}
}
public static Dictionary<String,DateTime> GetLatestDates(List<String> symbols)
{
MySqlConnection sqlConnection = null;

View File

@@ -95,7 +95,7 @@ namespace MarketData.Generator.CMTrend
}
// Current Price Check
Price currentPrice=prices[0];
if(currentPrice.Date!=tradeDate)
if(currentPrice.Date.Date!=tradeDate.Date)
{
cmtCandidate.Violation=true;
cmtCandidate.Symbol=symbol;
@@ -203,8 +203,13 @@ namespace MarketData.Generator.CMTrend
// Trend #8 check. Evaluate the RSI
// generate a 14 day standard RSI with 30 days of pricing data
RSICollection rsiCollection=RSIGenerator.GenerateRSI(symbol,currentPrice.Date,30);
if(null==rsiCollection||0==rsiCollection.Count||rsiCollection[rsiCollection.Count-1].RSI<cmtParams.MinRSI)
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;
if(null==rsiCollection||0==rsiCollection.Count||rsi<cmtParams.MinRSI)
{
cmtCandidate.Violation=true;
cmtCandidate.Symbol=symbol;

View File

@@ -1,4 +1,5 @@
using MarketData.DataAccess;
using Axiom.Interpreter;
using MarketData.DataAccess;
using MarketData.MarketDataModel;
using MarketData.Utils;
using System;
@@ -20,6 +21,8 @@ namespace MarketData.Generator.CMTrend
try
{
List<String> symbols=PricingDA.GetSymbols();
Dictionary<String,DateTime> latestDates = PricingDA.GetLatestDates(symbols);
symbols=symbols.Where(x => latestDates.ContainsKey(x) && latestDates[x].Date>=tradeDate.Date).ToList();
for(int index=0;index<symbols.Count;index++)
{
String symbol=symbols[index];

View File

@@ -67,11 +67,18 @@ namespace MarketData.Generator
rsiCollection=new RSICollection(rsiCollection.Skip(rsiDayCount).ToList());
return rsiCollection;
}
public static RSICollection GenerateRSI(String symbol,DateTime analysisDate,int priceCount,int rsiDayCount=14)
{
if(priceCount<rsiDayCount)priceCount=(rsiDayCount*2)+1;
Prices prices=PricingDA.GetPrices(symbol,analysisDate,priceCount);
if(null==prices||priceCount!=prices.Count)return null;
return GenerateRSI(prices, rsiDayCount);
}
public static RSICollection GenerateRSI(Prices prices,int rsiDayCount=14)
{
if(null==prices || prices.Count<(rsiDayCount*2))return null;
RSICollection rsiCollection=new RSICollection();
for(int index=prices.Count-1;index>=0;index--)
{