5 Commits

Author SHA1 Message Date
d85a46ba19 Add Green to BollingerBandWithVIX and add additional pen widths 2026-03-12 21:19:36 -04:00
fcadf5438a Daily 2026-03-12 21:16:12 -04:00
0181e56f84 Cleanup 2026-03-11 20:59:19 -04:00
10e1c87ec1 Update GBPriceCache. 2026-03-11 20:58:51 -04:00
aa13085fd3 Daily 2026-03-11 20:28:53 -04:00
6 changed files with 128 additions and 65 deletions

View File

@@ -32,7 +32,7 @@ namespace MarketData.CNNProcessing
DataProcessor dataProcessor=new DataProcessor();
dataProcessor.Width=dimension;
dataProcessor.Height=dimension;
dataProcessor.PenWidthArray=new float[]{.75f,1.00f,1.12f};
dataProcessor.PenWidthArray=new float[]{.25f,.50f,.75f,1.00f,1.50f,2.00f};
if(!rootFolder.EndsWith(@"\"))rootFolder+=@"\";
// [0] Data - The avoid data

View File

@@ -25,6 +25,7 @@ namespace MarketData.CNNProcessing
PenWidth=2f;
DrawingBrush=new SolidBrush(Color.Black);
DrawingBrushRed=new SolidBrush(Color.Red);
DrawingBrushGreen=new SolidBrush(Color.Green);
FillBrush=new SolidBrush(Color.White);
DrawPrice=true;
UseGrayScale=false;
@@ -60,12 +61,19 @@ namespace MarketData.CNNProcessing
/// </summary>
///<param name="value">Gets/Sets the drawing brush brush</param>
public Brush DrawingBrush{get;set;}
/// <summary>
/// DrawingBrush
/// DrawingBrushRed
/// </summary>
///<param name="value">Gets/Sets the drawing brush brush</param>
public Brush DrawingBrushRed{get;set;}
/// <summary>
/// DrawingBrushGreen
/// </summary>
///<param name="value">Gets/Sets the drawing brush brush</param>
public Brush DrawingBrushGreen{get;set;}
/// <summary>
/// DrawBlack
/// </summary>
@@ -312,6 +320,7 @@ namespace MarketData.CNNProcessing
Pen pen=new Pen(DrawingBrush,penWidth);
Pen redPen=new Pen(DrawingBrushRed,penWidth);
Pen greenPen= new Pen(DrawingBrushGreen,penWidth);
ImageHelper imageHelper=new ImageHelper();
PointMapping pointMapping=new PointMapping(Width,Height,maxX,minX,maxY,minY);
@@ -319,7 +328,7 @@ namespace MarketData.CNNProcessing
imageHelper.Fill(FillBrush);
LineSegments lineSegments=new LineSegments();
// draw volatility
// draw volatility - red pen
for(int index=0;index<v.Length;index++)
{
if(0==index)continue;
@@ -329,7 +338,7 @@ namespace MarketData.CNNProcessing
}
imageHelper.DrawPath(redPen,lineSegments);
// draw prices
// draw prices - black pen
lineSegments.Clear();
for(int index=0;index<close.Length && DrawPrice;index++)
{
@@ -339,7 +348,7 @@ namespace MarketData.CNNProcessing
lineSegments.Add(p1,p2);
}
imageHelper.DrawPath(pen,lineSegments);
// draw k
// draw k - green pen
lineSegments.Clear();
for(int index=0;index<k.Length;index++)
{
@@ -348,9 +357,9 @@ namespace MarketData.CNNProcessing
Point p2=new Point(index,(int)k[index]);
lineSegments.Add(p1,p2);
}
imageHelper.DrawPath(pen,lineSegments);
imageHelper.DrawPath(greenPen,lineSegments);
// draw l
// draw l - green pen
lineSegments.Clear();
for(int index=0;index<l.Length;index++)
{
@@ -359,8 +368,7 @@ namespace MarketData.CNNProcessing
Point p2=new Point(index,(int)l[index]);
lineSegments.Add(p1,p2);
}
imageHelper.DrawPath(pen,lineSegments);
imageHelper.DrawPath(greenPen,lineSegments);
if(0.00!=noise)imageHelper.AddNoise(NoiseColor,noise);
if(testCase.TypeOutput.Equals(TestCase.OutputType.OutputFile))
@@ -369,12 +377,10 @@ namespace MarketData.CNNProcessing
if(File.Exists(testCase.LastPathFileName))File.Delete(testCase.LastPathFileName);
if(UseGrayScale)imageHelper.SaveGrayScaleJPG(testCase.LastPathFileName);
else imageHelper.Save(testCase.LastPathFileName);
// else imageHelper.SaveBlackAndWhiteJPG(testCase.LastPathFileName);
}
else
{
testCase.Streams.Add(imageHelper.ToStream());
// testCase.Streams.Add(imageHelper.SaveBlackAndWhiteJPG());
}
}

View File

@@ -5,7 +5,6 @@ using System.Threading;
using MarketData.MarketDataModel;
using MarketData.Utils;
using MarketData.Helper;
using MarketData.Numerical;
using MarketData.DataAccess;
namespace MarketData.Cache
@@ -43,6 +42,7 @@ namespace MarketData.Cache
public class GBPriceCache : IDisposable
{
private static readonly int EVICTION_DAYCOUNT=252; // upon eviction trigger remove all data older than maxdate - evictionPolicyThreshholdDays
private Thread cacheMonitorThread = null;
private volatile bool threadRun = true;
private Object thisLock = new Object();
@@ -61,6 +61,11 @@ namespace MarketData.Cache
cacheMonitorThread.Start();
}
/// <summary>
/// GetInstance
/// </summary>
/// <returns></returns>
/// <exception cref="ObjectDisposedException"></exception>
public static GBPriceCache GetInstance()
{
lock (typeof(GBPriceCache))
@@ -81,6 +86,11 @@ namespace MarketData.Cache
}
}
/// <summary>
/// Shuts down the cache and stops the monitor thread. This is a full application-level
/// shutdown. Callers should always access the cache via GetInstance() and not hold
/// long-lived references to the instance.
/// </summary>
public void Dispose()
{
lock (thisLock)
@@ -97,40 +107,15 @@ namespace MarketData.Cache
}
}
public void ClearCacheOnOrBefore(DateTime onOrBeforeDate, bool collect = false)
{
lock (thisLock)
{
Dictionary<String, PricesByDate> newPriceCache = new Dictionary<String, PricesByDate>();
foreach (KeyValuePair<String, PricesByDate> entry in snapshot.PriceCache)
{
String symbol = entry.Key;
PricesByDate filteredPrices = new PricesByDate();
PricesByDate existingPrices = entry.Value;
foreach (KeyValuePair<DateTime, Price> kvp in existingPrices)
{
if (kvp.Key >= onOrBeforeDate)
{
filteredPrices.Add(kvp.Key, kvp.Value);
}
}
if (filteredPrices.Count > 0)
{
newPriceCache.Add(symbol, filteredPrices);
}
}
UpdateSnapshot(newPriceCache, snapshot.RealTimePriceCache, snapshot.NullCache);
if (collect) GC.Collect();
}
}
public Price GetPriceOrLatestAvailable(String symbol, DateTime date)
{
Price price = GetPrice(symbol, date);
if (null != price) return price;
DateTime latestPricingDate = PricingDataAccess.GetLatestDateOnOrBefore(symbol, date);
price = GetPrice(symbol, latestPricingDate);
if (null != price) return price;
fetchSemaphore.Wait();
try
{
@@ -140,7 +125,8 @@ namespace MarketData.Cache
{
fetchSemaphore.Release();
}
if (null !=price) AddPrice(price);
if (null != price) AddPrice(price);
return price;
}
@@ -152,27 +138,33 @@ namespace MarketData.Cache
}
Price price = MarketDataHelper.GetLatestPrice(symbol);
if (null != price)
{
Dictionary<String, Price> newRealtime = new Dictionary<String, Price>(snapshot.RealTimePriceCache);
newRealtime.Add(symbol, price);
UpdateSnapshot(snapshot.PriceCache, newRealtime, snapshot.NullCache);
}
return price;
}
public Price GetPrice(String symbol, DateTime date)
{
date = date.Date;
if (!ContainsPrice(symbol, date))
{
String key = symbol + Utility.DateTimeToStringMMHDDHYYYY(date);
if (snapshot.NullCache.ContainsKey(key))
{
return null;
}
fetchSemaphore.Wait();
Price price;
try
{
price = PricingDataAccess.GetPrice(symbol, date);
@@ -181,7 +173,8 @@ namespace MarketData.Cache
{
fetchSemaphore.Release();
}
if (null ==price)
if (null == price)
{
Dictionary<String, bool> newNullCache = new Dictionary<String, bool>(snapshot.NullCache);
newNullCache.Add(key, true);
@@ -191,23 +184,29 @@ namespace MarketData.Cache
AddPrice(price);
}
if (!snapshot.PriceCache.ContainsKey(symbol)) return null;
PricesByDate pricesByDate = snapshot.PriceCache[symbol];
if (!pricesByDate.ContainsKey(date)) return null;
return pricesByDate[date];
}
public Prices GetPrices(String symbol, DateTime earlierDate, DateTime laterDate)
{
DateGenerator localDateGenerator = new DateGenerator();
if (laterDate < earlierDate)
{
DateTime tempDate = earlierDate;
earlierDate = laterDate;
laterDate = tempDate;
}
List<DateTime> datesList = localDateGenerator.GenerateHistoricalDates(earlierDate, laterDate);
datesList = datesList.Where(x => x >= earlierDate).ToList();
return GetPrices(symbol, laterDate, datesList.Count);
}
@@ -215,17 +214,20 @@ namespace MarketData.Cache
{
List<DateTime> historicalDates = dateGenerator.GenerateHistoricalDates(startDate, dayCount + 60);
List<DateTime> missingDates = new List<DateTime>();
foreach (DateTime historicalDate in historicalDates)
{
if (!ContainsPrice(symbol, historicalDate))
{
String key = symbol + Utility.DateTimeToStringMMHDDHYYYY(historicalDate);
if (!snapshot.NullCache.ContainsKey(key))
{
missingDates.Add(historicalDate);
}
}
}
if (missingDates.Count > 0)
{
DateTime minDate = missingDates.Min();
@@ -233,6 +235,7 @@ namespace MarketData.Cache
fetchSemaphore.Wait();
Prices loadedPrices;
try
{
loadedPrices = PricingDataAccess.GetPrices(symbol, maxDate, minDate);
@@ -249,11 +252,14 @@ namespace MarketData.Cache
}
Prices prices = new Prices();
foreach (DateTime historicalDate in historicalDates)
{
if (!snapshot.PriceCache.ContainsKey(symbol)) continue;
PricesByDate pricesByDate = snapshot.PriceCache[symbol];
if (!pricesByDate.ContainsKey(historicalDate)) continue;
prices.Add(pricesByDate[historicalDate]);
}
@@ -268,17 +274,21 @@ namespace MarketData.Cache
lock (thisLock)
{
PricesByDate pricesByDate;
if (!snapshot.PriceCache.ContainsKey(price.Symbol))
{
pricesByDate = new PricesByDate();
pricesByDate.Add(price.Date, price);
Dictionary<String, PricesByDate> newCache = new Dictionary<String, PricesByDate>(snapshot.PriceCache);
newCache.Add(price.Symbol, pricesByDate);
UpdateSnapshot(newCache, snapshot.RealTimePriceCache, snapshot.NullCache);
}
else
{
pricesByDate = snapshot.PriceCache[price.Symbol];
if (!pricesByDate.ContainsKey(price.Date))
{
pricesByDate.Add(price.Date, price);
@@ -290,10 +300,47 @@ namespace MarketData.Cache
public bool ContainsPrice(String symbol, DateTime date)
{
if (!snapshot.PriceCache.ContainsKey(symbol)) return false;
PricesByDate pricesByDate = snapshot.PriceCache[symbol];
return pricesByDate.ContainsKey(date);
}
public void ClearCacheOnOrBefore(DateTime onOrBeforeDate, bool collect = false)
{
lock (thisLock)
{
UpdateSnapshot(BuildEvictedPriceCache(onOrBeforeDate), snapshot.RealTimePriceCache, new Dictionary<String, bool>());
if (collect) GC.Collect();
}
}
private Dictionary<String, PricesByDate> BuildEvictedPriceCache(DateTime onOrBeforeDate)
{
Dictionary<String, PricesByDate> newPriceCache = new Dictionary<String, PricesByDate>();
foreach (KeyValuePair<String, PricesByDate> entry in snapshot.PriceCache)
{
String symbol = entry.Key;
PricesByDate filteredPrices = new PricesByDate();
PricesByDate existingPrices = entry.Value;
foreach (KeyValuePair<DateTime, Price> kvp in existingPrices)
{
if (kvp.Key >= onOrBeforeDate)
{
filteredPrices.Add(kvp.Key, kvp.Value);
}
}
if (filteredPrices.Count > 0)
{
newPriceCache.Add(symbol, filteredPrices);
}
}
return newPriceCache;
}
private void ThreadProc()
{
int quantums = 0;
@@ -302,22 +349,37 @@ namespace MarketData.Cache
while (threadRun)
{
Thread.Sleep(quantumInterval);
if(!threadRun)break;
if (!threadRun) break;
quantums += quantumInterval;
if (quantums > cacheRefreshAfter)
{
quantums = 0;
lock (thisLock)
{
UpdateSnapshot(snapshot.PriceCache, new Dictionary<String, Price>(), snapshot.NullCache);
DateTime maxDate = snapshot.PriceCache.Values.SelectMany(p => p.Keys).DefaultIfEmpty(DateTime.MinValue).Max();
if (maxDate != DateTime.MinValue)
{
DateTime evictBefore = dateGenerator.GenerateHistoricalDates(maxDate, EVICTION_DAYCOUNT).Min();
int beforeCount = snapshot.PriceCache.Values.Sum(p => p.Count);
Dictionary<String, PricesByDate> newCache = BuildEvictedPriceCache(evictBefore);
int afterCount = newCache.Values.Sum(p => p.Count);
int removed = beforeCount - afterCount;
MDTrace.WriteLine(LogLevel.DEBUG, $"GBPriceCache eviction: removed {removed} prices (before={beforeCount}, after={afterCount}) on or before {evictBefore.ToShortDateString()}");
UpdateSnapshot(newCache, new Dictionary<String, Price>(), new Dictionary<String, bool>());
GC.Collect();
}
}
}
}
}
private void UpdateSnapshot(Dictionary<String, PricesByDate> newPriceCache,Dictionary<String, Price> newRealtimePriceCache, Dictionary<String, bool> newNullCache)
private void UpdateSnapshot(Dictionary<String, PricesByDate> newPriceCache, Dictionary<String, Price> newRealtimePriceCache, Dictionary<String, bool> newNullCache)
{
snapshot = new CacheSnapshot(newPriceCache, newRealtimePriceCache, newNullCache);
}
}
}
}

View File

@@ -1029,11 +1029,6 @@ namespace MarketData
Trace.Listeners.Add(new TextWriterTraceListener(strLogFile));
DateTime currentDate=DateTime.Now;
// CheckPricesForHoldings();
// Price price = MarketDataHelper.GetLatestPriceBigCharts("NVDA");
//List<CashflowStatement> cashflowStatements = MarketDataHelper.GetCashflowStatement("AAPL",CashflowStatement.PeriodType.Annual);
DateTime maxHolidayDate =HolidayDA.GetMaxHolidayDate();
if(currentDate>maxHolidayDate)
{

View File

@@ -1,14 +1,14 @@
CMTSESSIONv1.00
LastUpdated=3/10/2026 9:30:20 PM
TradeDate=3/10/2026
LastUpdated=3/12/2026 8:58:25 PM
TradeDate=3/12/2026
StartDate=1/1/0001
AnalysisDate=3/10/2026
AnalysisDate=3/12/2026
CashBalance=6863.35
NonTradeableCash=6456.42
SuspendTrading=False|UsePriceSlopeIndicator=True|UsePriceSlopeIndicatorDays=252|AnalysisDate=3/10/2026|BetaMonths=6|TradeDate=3/10/2026|MarketCapLowerLimit=500000000|SidewaysDetection=False|SidewaysAfterDays=30|PriceTrendDays=20|CheckOutliersInReturnStream=True|DailyReturnLimit=0.25|MaxDailyPositions=3|MaxOpenPositions=3|NoTradeSymbols=CODYY,MARUY,CSTM,CS,NATI,QADA,CRTO,GTBIF,CLCT,PRSC,CMD,STAY,GBTC,YOKU,PNY,RFMD,ASAZY,USMO,VNR,STB,XIV,SYNT,DFP|OnlyTradeSymbols=|MinRSI=70|InitialCash=10000|TotalRiskPercentDecimal=0.05|PositionRiskPercentDecimal=0.12|EquityOnly=False|MinPercentReturnProximityTo52WeekHigh=30|MinPercentReturnOver52WeekLow=80|ProfitMarginCheck=True|EPSCheck=True|MinDaysBetweenReholding=30|LiquidityCheck=True|MinVolume=1000|DMA200Horizon=15|MinDaysBetweenStopAdjustments=30|MinDaysBetweenInitialStopAdjustment=5|MaxPricingExceptions=3|MACDSetup=(12,26,9)|MACDSignalDays=5|MACDRejectStrongSells=True|MACDRejectWeakSells=True|UseMarketIndicator=True|Benchmark=SPY|BenchmarkMovingAverageDays=200|BenchmarkMovingAverageHorizon=5|UseMarketIndicatorVolatility=True|UseMarketIndicatorVolatilityHorizon=60|UseMarketIndicatorVolatilityBenchmark=^VIX|UseStopLimitScaling=True|StopLimitScalingType=AverageTrueRange|StopLimitScalingVolatilityDays=30|SellOnDMABreak=True|DMABreakValues=200|DMABreakForceBreak=False|EntryType=OverExtended,MVP,PriceTrend,VolumeTrend|EntryHorizon=30|CandidateExpiryDays=180|VolumeTrendDays=10|ChannelBreakoutHorizon=40|UseOverExtendedIndicatorDays=45|UseOverExtendedIndicatorViolationThreshhold=1|UseOverExtendedIndicatorMarginPercent=1|MaxBeta=10|UseMaxBeta=False|UseProfitMaximization=True|UseProfitMaximizationExpression=R_THRESSHOLD=4;MAX_ATR=3;MULTIPLIER=MAX_ATR;IF(RMultiple>=R_THRESSHOLD){MULTIPLIER=1.2;}|UseTradeOnlySectors=False|UseTradeOnlySectorsSectors=Healthcare,Technology,Basic Materials,Consumer Defensive,Industrials|EvaluateStopOnUpTrend=False
SuspendTrading=False|UsePriceSlopeIndicator=True|UsePriceSlopeIndicatorDays=252|AnalysisDate=3/12/2026|BetaMonths=6|TradeDate=3/12/2026|MarketCapLowerLimit=500000000|SidewaysDetection=False|SidewaysAfterDays=30|PriceTrendDays=20|CheckOutliersInReturnStream=True|DailyReturnLimit=0.25|MaxDailyPositions=3|MaxOpenPositions=3|NoTradeSymbols=CODYY,MARUY,CSTM,CS,NATI,QADA,CRTO,GTBIF,CLCT,PRSC,CMD,STAY,GBTC,YOKU,PNY,RFMD,ASAZY,USMO,VNR,STB,XIV,SYNT,DFP|OnlyTradeSymbols=|MinRSI=70|InitialCash=10000|TotalRiskPercentDecimal=0.05|PositionRiskPercentDecimal=0.12|EquityOnly=False|MinPercentReturnProximityTo52WeekHigh=30|MinPercentReturnOver52WeekLow=80|ProfitMarginCheck=True|EPSCheck=True|MinDaysBetweenReholding=30|LiquidityCheck=True|MinVolume=1000|DMA200Horizon=15|MinDaysBetweenStopAdjustments=30|MinDaysBetweenInitialStopAdjustment=5|MaxPricingExceptions=3|MACDSetup=(12,26,9)|MACDSignalDays=5|MACDRejectStrongSells=True|MACDRejectWeakSells=True|UseMarketIndicator=True|Benchmark=SPY|BenchmarkMovingAverageDays=200|BenchmarkMovingAverageHorizon=5|UseMarketIndicatorVolatility=True|UseMarketIndicatorVolatilityHorizon=60|UseMarketIndicatorVolatilityBenchmark=^VIX|UseStopLimitScaling=True|StopLimitScalingType=AverageTrueRange|StopLimitScalingVolatilityDays=30|SellOnDMABreak=True|DMABreakValues=200|DMABreakForceBreak=False|EntryType=OverExtended,MVP,PriceTrend,VolumeTrend|EntryHorizon=30|CandidateExpiryDays=180|VolumeTrendDays=10|ChannelBreakoutHorizon=40|UseOverExtendedIndicatorDays=45|UseOverExtendedIndicatorViolationThreshhold=1|UseOverExtendedIndicatorMarginPercent=1|MaxBeta=10|UseMaxBeta=False|UseProfitMaximization=True|UseProfitMaximizationExpression=R_THRESSHOLD=4;MAX_ATR=3;MULTIPLIER=MAX_ATR;IF(RMultiple>=R_THRESSHOLD){MULTIPLIER=1.2;}|UseTradeOnlySectors=False|UseTradeOnlySectorsSectors=Healthcare,Technology,Basic Materials,Consumer Defensive,Industrials|EvaluateStopOnUpTrend=False
PricingExceptions=0
TotalActivePositions=1
Symbol=HWM|PurchaseDate=11/17/2025 12:00:00 AM|SellDate=1/1/0001 12:00:00 AM|Shares=11|PurchasePrice=200.81|CurrentPrice=253.91|Exposure=2208.91|MarketValue=2793.01|GainLoss=584.1|GainLossPcnt=0.264429062297694|PositionRiskDecimal=0.12|R=24.0336|C=276.15|P=11.490163770721|InitialStopLimit=176.71|TrailingStopLimit=235.233001537323|TotalRiskExposure=264.3696|RMultiple=2.21R|Volatility=3.68232583999634|Volume=0|LastStopAdjustment=2/25/2026 12:00:00 AM|Comment=Price changed on 11/18/2025 from $200.28 to $200.81
Symbol=HWM|PurchaseDate=11/17/2025 12:00:00 AM|SellDate=1/1/0001 12:00:00 AM|Shares=11|PurchasePrice=200.81|CurrentPrice=243.82|Exposure=2208.91|MarketValue=2682.02|GainLoss=473.11|GainLossPcnt=0.214182560629451|PositionRiskDecimal=0.12|R=24.0336|C=276.15|P=11.490163770721|InitialStopLimit=176.71|TrailingStopLimit=235.233001537323|TotalRiskExposure=264.3696|RMultiple=1.79R|Volatility=3.68232583999634|Volume=0|LastStopAdjustment=2/25/2026 12:00:00 AM|Comment=Price changed on 11/18/2025 from $200.28 to $200.81
TotalPositions=134
Symbol=CDNS|PurchaseDate=8/25/2020 12:00:00 AM|SellDate=9/3/2020 12:00:00 AM|Shares=16|PurchasePrice=111.82|CurrentPrice=109.57|Exposure=1789.12|MarketValue=1753.12|GainLoss=-36|GainLossPcnt=-0.0201216240386335|PositionRiskDecimal=0.12|R=13.3512|C=225.6365|P=16.9000913775541|InitialStopLimit=97.9088|TrailingStopLimit=109.599856939316|TotalRiskExposure=213.6192|RMultiple=-0.17R|Volatility=2.3209912776947|Volume=1767980|LastStopAdjustment=9/2/2020 12:00:00 AM|Comment=Manual close.
Symbol=LULU|PurchaseDate=8/28/2020 12:00:00 AM|SellDate=9/4/2020 12:00:00 AM|Shares=3|PurchasePrice=377.5|CurrentPrice=370.23|Exposure=1132.5|MarketValue=1110.69|GainLoss=-21.8099999999999|GainLossPcnt=-0.0192582781456953|PositionRiskDecimal=0.12|R=45.2976|C=136.6285|P=3.01624147857723|InitialStopLimit=332.1824|TrailingStopLimit=372.562428512573|TotalRiskExposure=135.8928|RMultiple=-0.16R|Volatility=25.858959197998|Volume=2871665|LastStopAdjustment=9/2/2020 12:00:00 AM|Comment=Manual close.
@@ -162,7 +162,6 @@ Symbol=BABA|AnalysisDate=10/1/2025 12:00:00 AM|EPSSlope=0.559999942779541|Profit
Symbol=ROAD|AnalysisDate=9/19/2025 12:00:00 AM|EPSSlope=0.105000019073486|ProfitMarginSlope=1.63973665237427|PriceSlope=0.00164434603625479|Volatility=4.52940130233765|Volume=0|Violation=False|Slope=0.00164434603625479|Score=0.70518000814682|AnnualizedReturn=1.51342485909754|SharpeRatio=0.167706499018902|RSquared=0.465949798503588|BetaMonths=6|Beta=1.37811621633073
Symbol=KLAC|AnalysisDate=9/18/2025 12:00:00 AM|EPSSlope=1.4399995803833|ProfitMarginSlope=0.835277557373047|PriceSlope=0.00129829771983195|Volatility=59.6670112609863|Volume=0|Violation=False|Slope=0.00129829771983195|Score=0.696746546682062|AnnualizedReturn=1.38703867573729|SharpeRatio=-0.294672655364879|RSquared=0.502326689853622|BetaMonths=6|Beta=2.15562693702778
Symbol=NVMI|AnalysisDate=9/30/2025 12:00:00 AM|EPSSlope=0.365000009536743|ProfitMarginSlope=0.701305389404297|PriceSlope=0.00151116356921204|Volatility=11.0952587127686|Volume=0|Violation=False|Slope=0.00151116356921204|Score=0.634761720023267|AnnualizedReturn=1.46347423134568|SharpeRatio=-0.17068064618604|RSquared=0.433736178217226|BetaMonths=6|Beta=3.21645112867293
Symbol=PTCT|AnalysisDate=9/11/2025 12:00:00 AM|EPSSlope=0.229999780654907|ProfitMarginSlope=0.267559051513672|PriceSlope=0.00114877088928268|Volatility=4.3342490196228|Volume=0|Violation=False|Slope=0.00114877088928268|Score=0.606345820774638|AnnualizedReturn=1.33574643654898|SharpeRatio=0.0125861708714166|RSquared=0.453937816477493|BetaMonths=6|Beta=0.276668916101194
Symbol=LGND|AnalysisDate=9/30/2025 12:00:00 AM|EPSSlope=1.55999994277954|ProfitMarginSlope=0.261482238769531|PriceSlope=0.00131115840818318|Volatility=3.33523750305176|Volume=0|Violation=False|Slope=0.00131115840818318|Score=0.566445116927072|AnnualizedReturn=1.3915412124965|SharpeRatio=0.0375984436300414|RSquared=0.407063126726114|BetaMonths=6|Beta=0.429603430352865
Symbol=PRIM|AnalysisDate=9/19/2025 12:00:00 AM|EPSSlope=0.315000057220459|ProfitMarginSlope=0.827674865722656|PriceSlope=0.00174915986971411|Volatility=4.4852933883667|Volume=0|Violation=False|Slope=0.00174915986971411|Score=0.560411044122823|AnnualizedReturn=1.55393168023759|SharpeRatio=0.261359856273027|RSquared=0.360640722658502|BetaMonths=6|Beta=2.63821547738842
Symbol=BWXT|AnalysisDate=10/1/2025 12:00:00 AM|EPSSlope=0.0299999713897705|ProfitMarginSlope=0.842325210571289|PriceSlope=0.00148142098327814|Volatility=5.46874237060547|Volume=0|Violation=False|Slope=0.00148142098327814|Score=0.535519927511107|AnnualizedReturn=1.45254630359425|SharpeRatio=0.0847391180072971|RSquared=0.368676665374447|BetaMonths=6|Beta=1.20408002256826
@@ -271,6 +270,7 @@ Symbol=NSSC|AnalysisDate=2/25/2026 12:00:00 AM|EPSSlope=0.0450000166893005|Profi
Symbol=LPG|AnalysisDate=2/25/2026 12:00:00 AM|EPSSlope=0.299999952316284|ProfitMarginSlope=3.59709167480469|PriceSlope=0.0014348486652486|Volatility=2.03607726097107|Volume=0|Violation=False|Slope=0.0014348486652486|Score=0.646725439489726|AnnualizedReturn=1.43559854049989|SharpeRatio=-0.0995953229975915|RSquared=0.450491847995702|BetaMonths=6|Beta=1.7235174113368
Symbol=MPC|AnalysisDate=3/4/2026 12:00:00 AM|EPSSlope=1.98000001907349|ProfitMarginSlope=1.7620415687561|PriceSlope=0.00139964028977894|Volatility=7.6709098815918|Volume=0|Violation=False|Slope=0.00139964028977894|Score=0.906034636922709|AnnualizedReturn=1.42291751665396|SharpeRatio=-0.0262963567920841|RSquared=0.636744313228555|BetaMonths=6|Beta=3.22659752171988
Symbol=GPRE|AnalysisDate=3/5/2026 12:00:00 AM|EPSSlope=0.51500004529953|ProfitMarginSlope=0.921499490737915|PriceSlope=0.00507912376904452|Volatility=0.632249653339386|Volume=0|Violation=False|Slope=0.00507912376904452|Score=2.91691129240431|AnnualizedReturn=3.59642101983529|SharpeRatio=0.294963134062473|RSquared=0.811059460590603|BetaMonths=6|Beta=0.39196687303021
Symbol=PSX|AnalysisDate=3/11/2026 12:00:00 AM|EPSSlope=3.57999992370605|ProfitMarginSlope=2.175705909729|PriceSlope=0.00131596457111678|Volatility=5.67953681945801|Volume=0|Violation=False|Slope=0.00131596457111678|Score=0.96795803446649|AnnualizedReturn=1.39322760292548|SharpeRatio=-0.148191340472672|RSquared=0.69475944377931|BetaMonths=6|Beta=1.36221654601515
TotalStopLimits=213
Symbol=CDNS|AnalysisDate=9/2/2020 12:00:00 AM|PreviousStop=97.9088|NewStop=109.599856939316|CurrentPriceLow=113.59|CurrentPriceClose=117.09|PriceTrendIndicatorSlope=0.310654103755951|StopLimitId=
Symbol=LULU|AnalysisDate=9/2/2020 12:00:00 AM|PreviousStop=332.1824|NewStop=372.562428512573|CurrentPriceLow=387.08|CurrentPriceClose=398.29|PriceTrendIndicatorSlope=2.77707505226135|StopLimitId=

View File

@@ -1,20 +1,20 @@
MGSHSESSIONv2.00
LastUpdated=3/10/2026 9:29:44 PM
TradeDate=3/11/2026
LastUpdated=3/12/2026 8:57:36 PM
TradeDate=3/13/2026
StartDate=3/31/2025
AnalysisDate=3/10/2026
AnalysisDate=3/12/2026
Cycle=12
CashBalance=3886.05
NonTradeableCash=0
HedgeCashBalance=3000
Verbose=True|KeepSlotPositions=True|BenchmarkMode=False|BenchmarkModeSymbol=SPY|HoldingPeriod=3|MaxPositions=3|NoTradeSymbols=OSB,IBDRY,GBTC,YOKU,PNY,RFMD,ASAZY|NoTradeFinancialSymbols=U.S. Private Equity,U.S. Financials,U.S. Financial Services,U.S. Banking and Investment Services,Trading-Miscellaneous,Trading--Miscellaneous,Trading--Leveraged Equity,Trading--Leveraged Debt,Trading--Leveraged Commodities,Trading--Inverse Equity,Trading--Inverse Commodities,Tactical Allocation,Specialty Finance,Japan Financials,Savings & Cooperative Banks,Option Writing,Insurance Brokers,Insurance - Specialty,Insurance - Reinsurance,Insurance - Property & Casualty,Insurance - Life,Insurance - Diversified,Global Private Equity,Global Financials,Financial Services,Financial Exchanges,Financial,China Financials,Banks - Regional - US,Banks - Regional - Latin America,Banks - Global,Asset Management,Credit Services|Benchmark=SPY|MarketCapLowerLimit=1000000000|UsePEScreen=False|UseEBITDAScreen=True|UseRevenuePerShareScreen=True|UseLowSlopeBetaCheck=True|LowSlopeBetaDays=15|LowSlopeBetaThreshhold=1|UseMACD=True|MACDSetup=(12,26,9)|MACDSignalDays=12|MACDRejectStrongSellSignals=False|MACDRejectWeakSellSignals=True|UseStochastics=True|StochasticsSignalDays=3|StochasticsRejectStrongSells=True|StochasticsRejectWeakSells=True|UseFallbackCandidate=True|FallbackCandidate=SHV|FallbackCandidateBestOf=SHV,NEAR,BIL,GSY,AGG,ACWX,GSY,SCHF,IXUS,DBEF,IEFA,TLT|UseMaxPEScreen=True|MaxPE=40|StrictMaxPE=False|QualityIndicatorType=IDINDICATOR|IncludeTradeMasterForSymbolsHeld=True|UseStopLimits=True|StopLimitRiskPercentDecimal=0.2|StopLimitScalingVolatilityDays=30|MinDaysBetweenInitialStopAdjustment=30|MinDaysBetweenStopAdjustments=30|StopLimitPriceTrendDays=20|StopLimitATRMultiplier=3|UseHedging=True|HedgeBenchmarkSymbol=SPY|HedgeShortSymbol=SH|HedgeRiskPercentDecimal=0.12|HedgeMinDaysBetweenStopAdjustments=1|HedgeInitialCash=3000|HedgeCloseAboveSMANDays=10|HedgeBandBreakCheckDays=3|HedgeATRMultiplier=1|MaxPricingExceptions=3|UseBetaGenerator=True|UseBetaGeneratorMonths=24
TotalActivePositions=6
Slot=0|Symbol=CAH|PurchaseDate=9/30/2025 12:00:00 AM|SellDate=1/1/0001 12:00:00 AM|Shares=5|PurchasePrice=155.81|CurrentPrice=217.04|Volume=2414935|Return1D=0|CumReturn252=0|IDIndicator=-17.9282868525896|Score=1.45705377610136|Velocity=0.779428953080648|PE=23.64|Beta=0.628226122785001|InitialStopLimit=124.65|TrailingStopLimit=210.485930538177|LastStopAdjustment=3/2/2026 12:00:00 AM|PositionRiskPercentDecimal=0.2|R=31.392|Comment=Price changed on 10/1/2025 from $156.96 to $155.81
Slot=1|Symbol=XEL|PurchaseDate=10/31/2025 12:00:00 AM|SellDate=1/1/0001 12:00:00 AM|Shares=5|PurchasePrice=81.17|CurrentPrice=81.88|Volume=6202750|Return1D=0|CumReturn252=0|IDIndicator=-11.5537848605578|Score=0.602697377681549|Velocity=0.944803580308304|PE=22.43|Beta=-0.192317961128493|InitialStopLimit=64.936|TrailingStopLimit=77.5441425132751|LastStopAdjustment=2/23/2026 12:00:00 AM|PositionRiskPercentDecimal=0.2|R=16.234|Comment=
Slot=1|Symbol=MDT|PurchaseDate=1/30/2026 12:00:00 AM|SellDate=1/1/0001 12:00:00 AM|Shares=14|PurchasePrice=102.85|CurrentPrice=89.89|Volume=6046285|Return1D=0|CumReturn252=0|IDIndicator=-10.3585657370518|Score=0.518428403011861|Velocity=0.865293185419968|PE=26.67|Beta=0.37428296833055|InitialStopLimit=82.28|TrailingStopLimit=82.28|LastStopAdjustment=1/1/0001 12:00:00 AM|PositionRiskPercentDecimal=0.2|R=20.592|Comment=Price changed on 2/2/2026 from $102.96 to $102.85
Slot=2|Symbol=NFG|PurchaseDate=11/28/2025 12:00:00 AM|SellDate=1/1/0001 12:00:00 AM|Shares=12|PurchasePrice=82.45|CurrentPrice=91.17|Volume=236813|Return1D=0|CumReturn252=0|IDIndicator=-9.56175298804781|Score=1.47874375251707|Velocity=0.658599827139153|PE=31.63|Beta=0.0443025382529758|InitialStopLimit=65.96|TrailingStopLimit=85.4851430559158|LastStopAdjustment=3/2/2026 12:00:00 AM|PositionRiskPercentDecimal=0.2|R=16.49|Comment=
Slot=2|Symbol=NWN|PurchaseDate=2/27/2026 12:00:00 AM|SellDate=1/1/0001 12:00:00 AM|Shares=18|PurchasePrice=53|CurrentPrice=51.62|Volume=468654|Return1D=0|CumReturn252=0|IDIndicator=-17.1314741035857|Score=0.661596031246807|Velocity=1|PE=20.04|Beta=-0.0208556368428403|InitialStopLimit=42.4|TrailingStopLimit=42.4|LastStopAdjustment=1/1/0001 12:00:00 AM|PositionRiskPercentDecimal=0.2|R=10.608|Comment=Price changed on 3/2/2026 from $53.04 to $53.00
Slot=2|Symbol=ALLE|PurchaseDate=2/27/2026 12:00:00 AM|SellDate=1/1/0001 12:00:00 AM|Shares=6|PurchasePrice=160.87|CurrentPrice=147.53|Volume=483322|Return1D=0|CumReturn252=0|IDIndicator=-7.56972111553785|Score=1.09215924523576|Velocity=0.659949622166247|PE=24.3|Beta=0.326218892554503|InitialStopLimit=128.7|TrailingStopLimit=128.7|LastStopAdjustment=1/1/0001 12:00:00 AM|PositionRiskPercentDecimal=0.2|R=32.23|Comment=Price changed on 3/2/2026 from $161.15 to $160.87
Slot=0|Symbol=CAH|PurchaseDate=9/30/2025 12:00:00 AM|SellDate=1/1/0001 12:00:00 AM|Shares=5|PurchasePrice=155.81|CurrentPrice=219.09|Volume=2414935|Return1D=0|CumReturn252=0|IDIndicator=-17.9282868525896|Score=1.45705377610136|Velocity=0.779428953080648|PE=23.64|Beta=0.628226122785001|InitialStopLimit=124.65|TrailingStopLimit=210.485930538177|LastStopAdjustment=3/2/2026 12:00:00 AM|PositionRiskPercentDecimal=0.2|R=31.392|Comment=Price changed on 10/1/2025 from $156.96 to $155.81
Slot=1|Symbol=XEL|PurchaseDate=10/31/2025 12:00:00 AM|SellDate=1/1/0001 12:00:00 AM|Shares=5|PurchasePrice=81.17|CurrentPrice=80.82|Volume=6202750|Return1D=0|CumReturn252=0|IDIndicator=-11.5537848605578|Score=0.602697377681549|Velocity=0.944803580308304|PE=22.43|Beta=-0.192317961128493|InitialStopLimit=64.936|TrailingStopLimit=77.5441425132751|LastStopAdjustment=2/23/2026 12:00:00 AM|PositionRiskPercentDecimal=0.2|R=16.234|Comment=
Slot=1|Symbol=MDT|PurchaseDate=1/30/2026 12:00:00 AM|SellDate=1/1/0001 12:00:00 AM|Shares=14|PurchasePrice=102.85|CurrentPrice=87.38|Volume=6046285|Return1D=0|CumReturn252=0|IDIndicator=-10.3585657370518|Score=0.518428403011861|Velocity=0.865293185419968|PE=26.67|Beta=0.37428296833055|InitialStopLimit=82.28|TrailingStopLimit=82.28|LastStopAdjustment=1/1/0001 12:00:00 AM|PositionRiskPercentDecimal=0.2|R=20.592|Comment=Price changed on 2/2/2026 from $102.96 to $102.85
Slot=2|Symbol=NFG|PurchaseDate=11/28/2025 12:00:00 AM|SellDate=1/1/0001 12:00:00 AM|Shares=12|PurchasePrice=82.45|CurrentPrice=93.74|Volume=236813|Return1D=0|CumReturn252=0|IDIndicator=-9.56175298804781|Score=1.47874375251707|Velocity=0.658599827139153|PE=31.63|Beta=0.0443025382529758|InitialStopLimit=65.96|TrailingStopLimit=85.4851430559158|LastStopAdjustment=3/2/2026 12:00:00 AM|PositionRiskPercentDecimal=0.2|R=16.49|Comment=
Slot=2|Symbol=NWN|PurchaseDate=2/27/2026 12:00:00 AM|SellDate=1/1/0001 12:00:00 AM|Shares=18|PurchasePrice=53|CurrentPrice=51.94|Volume=468654|Return1D=0|CumReturn252=0|IDIndicator=-17.1314741035857|Score=0.661596031246807|Velocity=1|PE=20.04|Beta=-0.0208556368428403|InitialStopLimit=42.4|TrailingStopLimit=42.4|LastStopAdjustment=1/1/0001 12:00:00 AM|PositionRiskPercentDecimal=0.2|R=10.608|Comment=Price changed on 3/2/2026 from $53.04 to $53.00
Slot=2|Symbol=ALLE|PurchaseDate=2/27/2026 12:00:00 AM|SellDate=1/1/0001 12:00:00 AM|Shares=6|PurchasePrice=160.87|CurrentPrice=145.85|Volume=483322|Return1D=0|CumReturn252=0|IDIndicator=-7.56972111553785|Score=1.09215924523576|Velocity=0.659949622166247|PE=24.3|Beta=0.326218892554503|InitialStopLimit=128.7|TrailingStopLimit=128.7|LastStopAdjustment=1/1/0001 12:00:00 AM|PositionRiskPercentDecimal=0.2|R=32.23|Comment=Price changed on 3/2/2026 from $161.15 to $160.87
TotalPositions=20
Symbol=MO|PurchaseDate=3/31/2025 12:00:00 AM|SellDate=5/14/2025 12:00:00 AM|Shares=18|PurchasePrice=59.91|CurrentPrice=56.15|Volume=17335180|Return1D=0|CumReturn252=0|IDIndicator=-15.9362549800797|Score=1.14749269300042|Velocity=0.967136150234742|PE=9|Beta=0.572465642401382|InitialStopLimit=47.93|TrailingStopLimit=56.1565003347397|LastStopAdjustment=5/7/2025 12:00:00 AM|PositionRiskPercentDecimal=0.2|R=12.004|Comment=Closed due to trailing stop.
Symbol=EXC|PurchaseDate=3/31/2025 12:00:00 AM|SellDate=5/14/2025 12:00:00 AM|Shares=24|PurchasePrice=45.76|CurrentPrice=42.6|Volume=14993121|Return1D=0|CumReturn252=0|IDIndicator=-8.76494023904382|Score=0.405636492837393|Velocity=1|PE=18.02|Beta=0.248374476251328|InitialStopLimit=36.61|TrailingStopLimit=42.7107857322693|LastStopAdjustment=4/30/2025 12:00:00 AM|PositionRiskPercentDecimal=0.2|R=9.216|Comment=Closed due to trailing stop.