diff --git a/MarketData/MarketData/Models/CMT20200817.TXT b/MarketData/MarketData/Models/CMT20200817.TXT index 20f4436..e5206f1 100755 --- a/MarketData/MarketData/Models/CMT20200817.TXT +++ b/MarketData/MarketData/Models/CMT20200817.TXT @@ -1,11 +1,11 @@ CMTSESSIONv1.00 -LastUpdated=3/31/2026 8:09:06 PM -TradeDate=3/31/2026 +LastUpdated=4/1/2026 9:14:43 PM +TradeDate=4/1/2026 StartDate=1/1/0001 -AnalysisDate=3/31/2026 +AnalysisDate=4/1/2026 CashBalance=9449.67 NonTradeableCash=6456.42 -SuspendTrading=False|UsePriceSlopeIndicator=True|UsePriceSlopeIndicatorDays=252|AnalysisDate=3/31/2026|BetaMonths=6|TradeDate=3/31/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=4/1/2026|BetaMonths=6|TradeDate=4/1/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=0 TotalPositions=135 @@ -144,8 +144,7 @@ Symbol=NFLX|PurchaseDate=10/21/2025 12:00:00 AM|SellDate=11/20/2025 12:00:00 Symbol=CX|PurchaseDate=10/20/2025 12:00:00 AM|SellDate=2/5/2026 12:00:00 AM|Shares=144|PurchasePrice=9.54|CurrentPrice=11.74|Exposure=1373.7599999999998|MarketValue=1690.56|GainLoss=316.8000000000002|GainLossPcnt=0.23060796645702322|PositionRiskDecimal=0.12|R=1.1472|C=166.14399999999998|P=144.82566248256623|InitialStopLimit=8.4|TrailingStopLimit=12.033928567171097|TotalRiskExposure=165.1968|RMultiple=1.92R|Volatility=0.16408906877040863|Volume=0|LastStopAdjustment=1/28/2026 12:00:00 AM|Comment=Manual close. Symbol=FTI|PurchaseDate=11/20/2025 12:00:00 AM|SellDate=3/6/2026 12:00:00 AM|Shares=41|PurchasePrice=43.23|CurrentPrice=62.83|Exposure=1772.4299999999998|MarketValue=2576.0299999999997|GainLoss=803.5999999999999|GainLossPcnt=0.4533888503354152|PositionRiskDecimal=0.12|R=5.2188|C=218.45950000000005|P=41.86010193914311|InitialStopLimit=38.04|TrailingStopLimit=62.83571408271789|TotalRiskExposure=213.9708|RMultiple=3.76R|Volatility=0.825829267501831|Volume=0|LastStopAdjustment=2/25/2026 12:00:00 AM|Comment=Manual close. Symbol=HWM|PurchaseDate=11/17/2025 12:00:00 AM|SellDate=3/13/2026 12:00:00 AM|Shares=11|PurchasePrice=200.81|CurrentPrice=235.12|Exposure=2208.91|MarketValue=2586.32|GainLoss=377.4100000000003|GainLossPcnt=0.1708580249987552|PositionRiskDecimal=0.12|R=24.0336|C=276.15000000000003|P=11.490163770720992|InitialStopLimit=176.71|TrailingStopLimit=235.233001537323|TotalRiskExposure=264.3696|RMultiple=1.43R|Volatility=3.682325839996338|Volume=0|LastStopAdjustment=2/25/2026 12:00:00 AM|Comment=Manual close. -TotalCandidates=115 -Symbol=FINMY|AnalysisDate=10/2/2025 12:00:00 AM|EPSSlope=0.034999996423721313|ProfitMarginSlope=2.260866165161133|PriceSlope=0.0044867993617732855|Volatility=1.0326875448226929|Volume=0|Violation=False|Slope=0.0044867993617732855|Score=2.6625531836683844|AnnualizedReturn=3.0977419385881366|SharpeRatio=0.3357187697383774|RSquared=0.8595141998438711|BetaMonths=6|Beta=0.8249354197843893 +TotalCandidates=114 Symbol=SANM|AnalysisDate=10/6/2025 12:00:00 AM|EPSSlope=0.17499995231628418|ProfitMarginSlope=0.24951171875|PriceSlope=0.0020823921870819274|Volatility=6.522579669952393|Volume=0|Violation=False|Slope=0.0020823921870819274|Score=1.2404476041886014|AnnualizedReturn=1.6900579717285966|SharpeRatio=0.13315785713170303|RSquared=0.7339674880618845|BetaMonths=6|Beta=1.1208093254003801 Symbol=FN|AnalysisDate=11/4/2025 12:00:00 AM|EPSSlope=0.09999990463256836|ProfitMarginSlope=0.06801414489746094|PriceSlope=0.002548681464617965|Volatility=18.239673614501953|Volume=0|Violation=False|Slope=0.002548681464617965|Score=1.1239501014519349|AnnualizedReturn=1.900786464256634|SharpeRatio=0.15670695179226582|RSquared=0.5913079257387773|BetaMonths=6|Beta=1.0711460119912435 Symbol=LRCX|AnalysisDate=10/6/2025 12:00:00 AM|EPSSlope=0.2849999666213989|ProfitMarginSlope=1.3532524108886719|PriceSlope=0.0018171246616002163|Volatility=9.071016311645508|Volume=0|Violation=False|Slope=0.0018171246616002163|Score=0.8978742858003759|AnnualizedReturn=1.580775287091166|SharpeRatio=-0.161869015355145|RSquared=0.5679961555146668|BetaMonths=6|Beta=2.1503821821201172 diff --git a/MarketData/MarketData/Models/MGSH20250331.TXT b/MarketData/MarketData/Models/MGSH20250331.TXT index eb477c3..430635b 100644 --- a/MarketData/MarketData/Models/MGSH20250331.TXT +++ b/MarketData/MarketData/Models/MGSH20250331.TXT @@ -1,20 +1,20 @@ MGSHSESSIONv2.00 -LastUpdated=4/1/2026 10:10:56 AM -TradeDate=4/1/2026 +LastUpdated=4/1/2026 9:13:46 PM +TradeDate=4/2/2026 StartDate=3/31/2025 -AnalysisDate=3/31/2026 +AnalysisDate=4/1/2026 Cycle=13 CashBalance=1883.4900000000005 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=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=86.65|Volume=6046285|Return1D=0|CumReturn252=0|IDIndicator=-10.35856573705179|Score=0.518428403011861|Velocity=0.8652931854199681|PE=26.67|Beta=0.37428296833055014|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.96|Volume=236813|Return1D=0|CumReturn252=0|IDIndicator=-9.561752988047807|Score=1.4787437525170677|Velocity=0.6585998271391531|PE=31.63|Beta=0.04430253825297578|InitialStopLimit=65.96000000000001|TrailingStopLimit=85.48514305591583|LastStopAdjustment=3/2/2026 12:00:00 AM|PositionRiskPercentDecimal=0.2|R=16.490000000000002|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=53.22|Volume=468654|Return1D=0|CumReturn252=0|IDIndicator=-17.13147410358566|Score=0.6615960312468072|Velocity=1.0000000000000002|PE=20.04|Beta=-0.020855636842840336|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.29|Volume=483322|Return1D=0|CumReturn252=0|IDIndicator=-7.5697211155378525|Score=1.0921592452357611|Velocity=0.6599496221662469|PE=24.3|Beta=0.32621889255450337|InitialStopLimit=128.7|TrailingStopLimit=128.7|LastStopAdjustment=1/1/0001 12:00:00 AM|PositionRiskPercentDecimal=0.2|R=32.230000000000004|Comment=Price changed on 3/2/2026 from $161.15 to $160.87 -Slot=0|Symbol=NYT|PurchaseDate=3/31/2026 12:00:00 AM|SellDate=1/1/0001 12:00:00 AM|Shares=21|PurchasePrice=83.55|CurrentPrice=83.73|Volume=1771479|Return1D=0|CumReturn252=0|IDIndicator=-13.545816733067738|Score=1.1825972924224726|Velocity=0.9759277833500504|PE=37.88|Beta=0.26107650690592754|InitialStopLimit=66.84|TrailingStopLimit=66.84|LastStopAdjustment=1/1/0001 12:00:00 AM|PositionRiskPercentDecimal=0.2|R=16.746000000000002|Comment=Price changed on 4/1/2026 from $83.73 to $83.55 -Slot=0|Symbol=PTGX|PurchaseDate=3/31/2026 12:00:00 AM|SellDate=1/1/0001 12:00:00 AM|Shares=16|PurchasePrice=105.51|CurrentPrice=105.4|Volume=781528|Return1D=0|CumReturn252=0|IDIndicator=-6.374501992031874|Score=2.1434347022647025|Velocity=0.9681908548707753|PE=128.65|Beta=0.6968595191825934|InitialStopLimit=84.41|TrailingStopLimit=84.41|LastStopAdjustment=1/1/0001 12:00:00 AM|PositionRiskPercentDecimal=0.2|R=21.080000000000002|Comment=Price changed on 4/1/2026 from $105.40 to $105.51 +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=86.06|Volume=6046285|Return1D=0|CumReturn252=0|IDIndicator=-10.35856573705179|Score=0.518428403011861|Velocity=0.8652931854199681|PE=26.67|Beta=0.37428296833055014|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=92.87|Volume=236813|Return1D=0|CumReturn252=0|IDIndicator=-9.561752988047807|Score=1.4787437525170677|Velocity=0.6585998271391531|PE=31.63|Beta=0.04430253825297578|InitialStopLimit=65.96000000000001|TrailingStopLimit=86.54649946212768|LastStopAdjustment=4/1/2026 12:00:00 AM|PositionRiskPercentDecimal=0.2|R=16.490000000000002|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=53.7|Volume=468654|Return1D=0|CumReturn252=0|IDIndicator=-17.13147410358566|Score=0.6615960312468072|Velocity=1.0000000000000002|PE=20.04|Beta=-0.020855636842840336|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=144.16|Volume=483322|Return1D=0|CumReturn252=0|IDIndicator=-7.5697211155378525|Score=1.0921592452357611|Velocity=0.6599496221662469|PE=24.3|Beta=0.32621889255450337|InitialStopLimit=128.7|TrailingStopLimit=128.7|LastStopAdjustment=1/1/0001 12:00:00 AM|PositionRiskPercentDecimal=0.2|R=32.230000000000004|Comment=Price changed on 3/2/2026 from $161.15 to $160.87 +Slot=0|Symbol=NYT|PurchaseDate=3/31/2026 12:00:00 AM|SellDate=1/1/0001 12:00:00 AM|Shares=21|PurchasePrice=83.55|CurrentPrice=85.39|Volume=1771479|Return1D=0|CumReturn252=0|IDIndicator=-13.545816733067738|Score=1.1825972924224726|Velocity=0.9759277833500504|PE=37.88|Beta=0.26107650690592754|InitialStopLimit=66.84|TrailingStopLimit=66.84|LastStopAdjustment=1/1/0001 12:00:00 AM|PositionRiskPercentDecimal=0.2|R=16.746000000000002|Comment=Price changed on 4/1/2026 from $83.73 to $83.55 +Slot=0|Symbol=PTGX|PurchaseDate=3/31/2026 12:00:00 AM|SellDate=1/1/0001 12:00:00 AM|Shares=16|PurchasePrice=105.51|CurrentPrice=103.67|Volume=781528|Return1D=0|CumReturn252=0|IDIndicator=-6.374501992031874|Score=2.1434347022647025|Velocity=0.9681908548707753|PE=128.65|Beta=0.6968595191825934|InitialStopLimit=84.41|TrailingStopLimit=84.41|LastStopAdjustment=1/1/0001 12:00:00 AM|PositionRiskPercentDecimal=0.2|R=21.080000000000002|Comment=Price changed on 4/1/2026 from $105.40 to $105.51 TotalPositions=22 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.15650033473968|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. @@ -38,7 +38,7 @@ Symbol=USFD|PurchaseDate=9/30/2025 12:00:00 AM|SellDate=3/6/2026 12:00:00 AM Symbol=ALHC|PurchaseDate=1/30/2026 12:00:00 AM|SellDate=3/9/2026 12:00:00 AM|Shares=64|PurchasePrice=22.45|CurrentPrice=17.96|Volume=2524769|Return1D=0|CumReturn252=0|IDIndicator=-8.366533864541836|Score=0.34132758522688106|Velocity=0.908249807247494|PE=0|Beta=-0.01980437364536009|InitialStopLimit=17.96|TrailingStopLimit=17.96|LastStopAdjustment=1/1/0001 12:00:00 AM|PositionRiskPercentDecimal=0.2|R=4.506|Comment=Manual close. Symbol=CAH|PurchaseDate=9/30/2025 12:00:00 AM|SellDate=3/18/2026 12:00:00 AM|Shares=5|PurchasePrice=155.81|CurrentPrice=210.5|Volume=2414935|Return1D=0|CumReturn252=0|IDIndicator=-17.928286852589643|Score=1.457053776101358|Velocity=0.7794289530806477|PE=23.64|Beta=0.6282261227850008|InitialStopLimit=124.65|TrailingStopLimit=210.48593053817748|LastStopAdjustment=3/2/2026 12:00:00 AM|PositionRiskPercentDecimal=0.2|R=31.392000000000003|Comment=Manual close. Symbol=XEL|PurchaseDate=10/31/2025 12:00:00 AM|SellDate=3/20/2026 12:00:00 AM|Shares=5|PurchasePrice=81.17|CurrentPrice=77.53|Volume=6202750|Return1D=0|CumReturn252=0|IDIndicator=-11.553784860557762|Score=0.6026973776815487|Velocity=0.9448035803083044|PE=22.43|Beta=-0.19231796112849286|InitialStopLimit=64.936|TrailingStopLimit=77.54414251327515|LastStopAdjustment=2/23/2026 12:00:00 AM|PositionRiskPercentDecimal=0.2|R=16.234|Comment=Manual close. -TotalStopLimits=40 +TotalStopLimits=41 Symbol=EXC|AnalysisDate=4/30/2025 12:00:00 AM|PreviousStop=36.61|NewStop=42.7107857322693|CurrentPriceLow=42.6|CurrentPriceClose=46.9|PriceTrendIndicatorSlope=0.0870828032493591|StopLimitId=EXC20250331120000AM Symbol=SXT|AnalysisDate=4/30/2025 12:00:00 AM|PreviousStop=59.18|NewStop=85.4177850723267|CurrentPriceLow=92.4|CurrentPriceClose=93.95|PriceTrendIndicatorSlope=0.931879639625549|StopLimitId=SXT20250331120000AM Symbol=MO|AnalysisDate=5/7/2025 12:00:00 AM|PreviousStop=47.93|NewStop=56.15650033473968|CurrentPriceLow=56.16|CurrentPriceClose=60.91|PriceTrendIndicatorSlope=0.21730078756809235|StopLimitId=MO20250331120000AM @@ -79,5 +79,6 @@ Symbol=USFD|AnalysisDate=2/17/2026 12:00:00 AM|PreviousStop=77.93871447563171| Symbol=XEL|AnalysisDate=2/23/2026 12:00:00 AM|PreviousStop=64.936|NewStop=77.54414251327515|CurrentPriceLow=81.78|CurrentPriceClose=83.35|PriceTrendIndicatorSlope=0.34472182393074036|StopLimitId=XEL20251031120000AM Symbol=CAH|AnalysisDate=3/2/2026 12:00:00 AM|PreviousStop=198.93721462249755|NewStop=210.48593053817748|CurrentPriceLow=228.1|CurrentPriceClose=229.88|PriceTrendIndicatorSlope=0.6618042588233948|StopLimitId=CAH20250930120000AM Symbol=NFG|AnalysisDate=3/2/2026 12:00:00 AM|PreviousStop=77.9947861814499|NewStop=85.48514305591583|CurrentPriceLow=90.74|CurrentPriceClose=92.66|PriceTrendIndicatorSlope=0.33545854687690735|StopLimitId=NFG20251128120000AM +Symbol=NFG|AnalysisDate=4/1/2026 12:00:00 AM|PreviousStop=85.48514305591583|NewStop=86.54649946212768|CurrentPriceLow=92.47|CurrentPriceClose=92.87|PriceTrendIndicatorSlope=0.09361664950847626|StopLimitId=NFG20251128120000AM TotalHedgePositions=0 TotalPricingExceptions=0 diff --git a/MarketData/MarketData/Services/MainService.cs b/MarketData/MarketData/Services/MainService.cs index 6c97d62..87d7cf5 100755 --- a/MarketData/MarketData/Services/MainService.cs +++ b/MarketData/MarketData/Services/MainService.cs @@ -726,9 +726,11 @@ namespace MarketData.Services // Here is the start of the real workers ThreadPool.QueueUserWorkItem(delegate { - UpdatePricesYahooSweep(startDate); // This was a sweep but now it is the main price feed since the BigCharts feed issue. Robinhood runs to fill the gaps anbd then BarChart - UpdatePricesRobinhoodSweep(startDate); // This the new Robinhood price feed. It will only pull current day prices for items that have not been pulled from above feed. - UpdatePricesBarChartSweep(startDate); // barchart. This sweep will pull any prices we failed to retrieve from Yahoo and Robinhood. + UpdatePricesYahooSweep(startDate); // This was a sweep but now it is the main price feed since the BigCharts feed issue. Robinhood runs to fill the gaps anbd then BarChart + UpdatePricesRobinhoodSweep(startDate); // This the new Robinhood price feed. It will only pull current day prices for items that have not been pulled from above feed. + UpdatePricesBarChartSweep(startDate); // barchart. This sweep will pull any prices we failed to retrieve from Yahoo and Robinhood. + UpdatePricesSweepOpenPositions(startDate); // This is a final pass sweep to check if any open positions remain price-less + EnsurePricingForOpenPositions(startDate, smsUserName, smsRecipients, smsSMTPAddress, smsPassword); // This will send an email if we are missing prices for tghe current trade date for any open positions resetEvents[STAGE_1].Set(); SMSClient.SendSMSEmail("UPDATEDAILY2 STAGE_1 UPDATEPRICES YAHOO/ROBINHOOD/BARCHART done.", smsUserName, smsRecipients, smsSMTPAddress, smsUserName, smsPassword); MDTrace.WriteLine(LogLevel.DEBUG,$"STAGE_1 complete."); @@ -835,6 +837,70 @@ namespace MarketData.Services pricingMarketDataHelper.UpdatePricesBarChartSweep(startDate); } + /// + /// This method will be called by UPDATEDAILY2 as a final step to ensure that we have pricing for open positions on the current date. + /// If we do not then it will attempt to get prices from BarChart. + /// + /// + public static void UpdatePricesSweepOpenPositions(DateTime startDate) + { + try + { + List fetchSymbolList = new List(); + List openSymbols = PortfolioDA.GetOpenSymbols(); + Dictionary latestDates = PricingDA.GetLatestDates(openSymbols); + foreach(String openSymbol in openSymbols) + { + if(!latestDates.ContainsKey(openSymbol) || !latestDates[openSymbol].Date.Equals(startDate.Date)) + { + fetchSymbolList.Add(openSymbol); + } + } + if(0==fetchSymbolList.Count)return; + PricingMarketDataHelper pricingMarketDataHelper = new PricingMarketDataHelper(); + pricingMarketDataHelper.UpdatePricesBarChartSweepOpenPositions(fetchSymbolList, startDate); + } + catch(Exception exception) + { + MDTrace.WriteLine(LogLevel.DEBUG,$"[UpdatePricesSweepOpenPositions] Exception: {exception.ToString()}"); + } + } + + /// + /// This method checks if we have current pricing for open positions and sends an email if we do not. + /// + /// Usuallly the current trade date since this will be called from UPDATEDAILY2 + /// + /// + /// + /// + public static void EnsurePricingForOpenPositions(DateTime startDate,String smsUserName, String[] smsRecipients, String smsSMTPAddress, String smsPassword) + { + try + { + List fetchSymbolList = new List(); + List openSymbols = PortfolioDA.GetOpenSymbols(); + Dictionary latestDates = PricingDA.GetLatestDates(openSymbols); + foreach(String openSymbol in openSymbols) + { + if(!latestDates.ContainsKey(openSymbol) || !latestDates[openSymbol].Date.Equals(startDate.Date)) + { + fetchSymbolList.Add(openSymbol); + } + } + if(0==fetchSymbolList.Count) + { + return; + } + String missingSymbols = String.Join(",", fetchSymbolList); + SMSClient.SendSMSEmail($"UPDATEDAILY2 STAGE_1 UPDATEPRICES Missing prices for {missingSymbols}.", smsUserName, smsRecipients, smsSMTPAddress, smsUserName, smsPassword); + } + catch(Exception exception) + { + MDTrace.WriteLine(LogLevel.DEBUG,$"[EnsurePricingForOpenPositions] Exception: {exception.ToString()}"); + } + } + public static void DeletePriceWatchList(String watchListName, String strDate) { try diff --git a/MarketData/MarketDataLib/Helper/PricingMarketDataHelper.cs b/MarketData/MarketDataLib/Helper/PricingMarketDataHelper.cs index 9528373..6e0eac3 100755 --- a/MarketData/MarketDataLib/Helper/PricingMarketDataHelper.cs +++ b/MarketData/MarketDataLib/Helper/PricingMarketDataHelper.cs @@ -249,8 +249,6 @@ namespace MarketData.Helper // ******************************************************************************************************************************************** // ********************************************************************** B A R C H A R T *************************************************** // ******************************************************************************************************************************************** - - /// /// UpdatePricesBarChartSweep - This feed is intended to supplement BigCharts nightly price feed in UPDATEDAILY2 by filling any gaps that may occur /// in that feed. This feed will only pull a price for which we had a price yesterday (findprevbusinessday) and for which do not have @@ -313,6 +311,56 @@ namespace MarketData.Helper MDTrace.WriteLine(LogLevel.DEBUG, String.Format("[UpdatePricesBarChartSweep]End, total took {0}(ms)", profiler.End())); } } + + /// + /// UpdatePricesBarChart - This feed is used by UPDATEDAILY2 as a final sweep for open positions. + /// If we already have the price for the given date then it will not be fetched. + /// + /// The symbols to fetch. This should be a list of symbols for which we need pricing for startDate + /// The date we are requesting + /// + public bool UpdatePricesBarChartSweepOpenPositions(List symbolsToFetch, DateTime? startDate = null) + { + Profiler profiler = new Profiler(); + try + { + MDTrace.WriteLine(LogLevel.DEBUG, "[UpdatePricesBarChartSweepOpenPositions]Enter"); + DateGenerator dateGenerator = new DateGenerator(); + if(null == symbols || 0==symbols.Count) + { + MDTrace.WriteLine(LogLevel.DEBUG, $"[UpdatePricesBarChartSweepOpenPositions] No symbols provided, nothing to do"); + return false; + } + if (null == startDate) startDate = DateTime.Now; + symbols = symbolsToFetch; + MDTrace.WriteLine(LogLevel.DEBUG, $"[UpdatePricesBarChartSweepOpenPositions] Preparing to supplement {symbolsToFetch.Count} prices for pricing date {startDate.Value.ToShortDateString()} ."); + currentIndex = 0; + while (true) + { + List queueSymbols = GetQueueSymbols(); + if (null == queueSymbols || 0 == queueSymbols.Count) break; + ManualResetEvent[] resetEvents = new ManualResetEvent[queueSymbols.Count]; + for (int eventIndex = 0; eventIndex < resetEvents.Length; eventIndex++) + { + resetEvents[eventIndex] = new ManualResetEvent(false); + } + for (int index = 0; index < queueSymbols.Count; index++) + { + PricingThreadHelper pricingThreadHelper = new PricingThreadHelper(queueSymbols[index], startDate.Value, resetEvents[index]); + ThreadPool.QueueUserWorkItem(ThreadPoolCallbackUpdatePricesBarChartSweep, pricingThreadHelper); + try { Thread.Sleep(WaitBetweenRequests); } catch (Exception) {; } + } + MDTrace.WriteLine(LogLevel.DEBUG, "UpdatePricesBarChartSweepOpenPositions, waiting for queued items to complete."); + WaitHandle.WaitAll(resetEvents); + } + return true; + } + finally + { + MDTrace.WriteLine(LogLevel.DEBUG, String.Format("[UpdatePricesBarChartSweepOpenPositions]End, total took {0}(ms)", profiler.End())); + } + } + // ******************************************************************************************************************************************** // ********************************************************************** E N D B A R C H A R T *************************************************** // ********************************************************************************************************************************************