diff --git a/.vs/MarketData/v16/.suo b/.vs/MarketData/v16/.suo index 83ea03e..291380b 100644 Binary files a/.vs/MarketData/v16/.suo and b/.vs/MarketData/v16/.suo differ diff --git a/MarketData.v12.suo b/MarketData.v12.suo index 1f68a26..2d336ca 100644 Binary files a/MarketData.v12.suo and b/MarketData.v12.suo differ diff --git a/MarketDataLib/DataAccess/InsiderTransactionDA.cs b/MarketDataLib/DataAccess/InsiderTransactionDA.cs index 0c4df01..b9cafb1 100644 --- a/MarketDataLib/DataAccess/InsiderTransactionDA.cs +++ b/MarketDataLib/DataAccess/InsiderTransactionDA.cs @@ -106,7 +106,7 @@ namespace MarketData.DataAccess if (null != sqlConnection) sqlConnection.Close(); } } -// Add NumberOrValueAcquiredDisposed to key + public static bool InsertInsiderTransactions(InsiderTransactions insiderTransactions) { MySqlConnection sqlConnection = null; @@ -125,13 +125,23 @@ namespace MarketData.DataAccess String insiderTransactionKey = insiderTransaction.Form + insiderTransaction.SECAccessionNumber + insiderTransaction.FormRowNumber; if (insiderTransactionsUniqueKey.ContainsKey(insiderTransactionKey)) { + MDTrace.WriteLine(LogLevel.DEBUG,"*********************************************************************************************************"); + MDTrace.WriteLine(LogLevel.DEBUG,String.Format("Collection already contains a value for Form:{0} SECAccessionNumber:{1} FormRowNumber:{2}", insiderTransaction.Form,insiderTransaction.SECAccessionNumber,insiderTransaction.FormRowNumber)); - MDTrace.WriteLine(LogLevel.DEBUG,String.Format("InsiderName:{0} OwnershipType:{1} Securities:{2} NatureOfTransaction:{3} NumberOrValueAcquiredDisposed:{4} Price:{5} FilingDate:{6} TransactionDate:{7}", + + MDTrace.WriteLine(LogLevel.DEBUG,String.Format("Item attempting to add: InsiderName:{0} OwnershipType:{1} Securities:{2} NatureOfTransaction:{3} NumberOrValueAcquiredDisposed:{4} Price:{5} FilingDate:{6} TransactionDate:{7}", insiderTransaction.InsiderName,insiderTransaction.OwnershipType,insiderTransaction.Securities,insiderTransaction.NatureOfTransaction,insiderTransaction.NumberOrValueAcquiredDisposed,insiderTransaction.Price, Utility.DateTimeToStringMMHDDHYYYY(insiderTransaction.FilingDate),Utility.DateTimeToStringMMSDDSYYYY(insiderTransaction.TransactionDate))); + + MDTrace.WriteLine(LogLevel.DEBUG,String.Format("Item already in collection: InsiderName:{0} OwnershipType:{1} Securities:{2} NatureOfTransaction:{3} NumberOrValueAcquiredDisposed:{4} Price:{5} FilingDate:{6} TransactionDate:{7}", + insiderTransaction.InsiderName,insiderTransaction.OwnershipType,insiderTransaction.Securities,insiderTransaction.NatureOfTransaction,insiderTransaction.NumberOrValueAcquiredDisposed,insiderTransaction.Price, + Utility.DateTimeToStringMMHDDHYYYY(insiderTransaction.FilingDate),Utility.DateTimeToStringMMSDDSYYYY(insiderTransaction.TransactionDate))); + + MDTrace.WriteLine(LogLevel.DEBUG,"*********************************************************************************************************"); + continue; - } + } StringBuilder sb = new StringBuilder(); sb.Append("insert into InsiderTransaction (symbol,filing_date,transaction_date,insider_name,ownership_type,securities,nature_of_transaction,number_or_value_acquired_disposed,price,form,sec_accession_number,form_row_number,modified) "); sb.Append("values("); diff --git a/MarketDataLib/Helper/InsiderTransactionsParser.cs b/MarketDataLib/Helper/InsiderTransactionsParser.cs index 2d6087c..ae4cc15 100644 --- a/MarketDataLib/Helper/InsiderTransactionsParser.cs +++ b/MarketDataLib/Helper/InsiderTransactionsParser.cs @@ -103,6 +103,7 @@ namespace MarketData.Helper } } + int sequenceNumber=0; foreach(Dictionary dictionary in dictionaryList) { String strItem=null; @@ -120,7 +121,8 @@ namespace MarketData.Helper insiderTransaction.TransactionDate=Utility.ParseDate(strItem); insiderTransaction.NatureOfTransaction=transactionCodes.ContainsKey(GetFirstSection(Sections.GetSections(dictionary["Transaction Code"])))?transactionCodes[GetFirstSection(Sections.GetSections(dictionary["Transaction Code"]))]:Constants.CONST_QUESTION; insiderTransaction.NumberOrValueAcquiredDisposed=FeedParser.ParseValue(GetFirstSection(Sections.GetSections(dictionary["Securities Acquired or Disposed"]))); - insiderTransaction.FormRowNumber=((decimal)insiderTransaction.NumberOrValueAcquiredDisposed).ToString(); +// insiderTransaction.FormRowNumber=((decimal)insiderTransaction.NumberOrValueAcquiredDisposed).ToString(); + insiderTransaction.FormRowNumber=(++sequenceNumber).ToString(); insiderTransaction.Price=FeedParser.ParseValue(CombineSections(Sections.GetSections(dictionary["Price"]))); String acquiredOrDisposed=GetAcquiredOrDisposed(dictionary); if(null==acquiredOrDisposed) diff --git a/MarketDataLib/Utility/UpdateManager.cs b/MarketDataLib/Utility/UpdateManager.cs index ec50ac8..f948118 100644 --- a/MarketDataLib/Utility/UpdateManager.cs +++ b/MarketDataLib/Utility/UpdateManager.cs @@ -60,10 +60,10 @@ namespace MarketData.Utils DateGenerator dateGenerator=new DateGenerator(); DateTime creationTime=File.GetCreationTime(strPathFileName); int daysElapsed=Math.Abs(dateGenerator.DaysBetweenActual(creationTime,DateTime.Now)); - MDTrace.WriteLine(LogLevel.DEBUG,String.Format("{0} is {1} days(s) old.",strPathFileName,daysElapsed)); + MDTrace.WriteLine(LogLevel.DEBUG,String.Format("Ok. {0} is {1} days(s) old. MaxAge:{2} days",strPathFileName,daysElapsed,maxAgeDays)); if(daysElapsed>maxAgeDays) { - MDTrace.WriteLine(LogLevel.DEBUG,String.Format("{0} is expired. {1} days old.",strPathFileName,daysElapsed)); + MDTrace.WriteLine(LogLevel.DEBUG,String.Format("{0} is expired. {1} days old. MaxAge:{2} days",strPathFileName,daysElapsed,maxAgeDays)); return true; } return false; diff --git a/Program.cs b/Program.cs index 26d7dda..57c49cd 100644 --- a/Program.cs +++ b/Program.cs @@ -594,37 +594,21 @@ namespace MarketData // sessionParams.Candidates = new CMTCandidates(sessionParams.Candidates.Except(candidatesToRemove).ToList()); // CMTSessionManager.SaveSession(sessionParams,@"C:\boneyard\marketdata\bin\Debug\CMT20200817.txt"); //} - - -// ****************************************************************************************************************************************************************************************** -// ****************************************************************************************************************************************************************************************** -// **********************************************************************************************************************************************.ToString()******************************************** - - -// ********************************************************************************************************** - static int Main(string[] args) + private static void InsiderTransactionsTest() { - try - { - MDTrace.LogLevel = LogLevel.DEBUG; - String strLogFile = "marketdata.log"; - Utility.DeleteFile(strLogFile); - Trace.Listeners.Add(new TextWriterTraceListener(strLogFile)); - DateTime currentDate=DateTime.Now; - -// InsiderTransactionMarketDataHelper.LoadInsiderTransactionsYearGreaterEqualEx("COIN",2023); - +// Run the Year loader + // InsiderTransactionMarketDataHelper.LoadInsiderTransactionsYearGreaterEqualEx("COIN",2023); +// Run Insider Transactions //InsiderTransactions insiderTransactions =MarketDataHelper.GetInsiderTransactionsYear("COIN",2023); //InsiderTransactionDA.InsertInsiderTransactions(insiderTransactions); //Console.WriteLine("Done"); //Console.ReadLine(); - // Trying to figure out in Form 4 and Form 5 - // How to tell if acquiring or disposing - //String symbol = "COIN"; + // Query Symbol and save files + //String symbol = "AAPL"; //String[] descFilter = new String[] { "Form 4", "Form 5" }; - //SECFilings secFilings = MarketDataHelper.GetSECFilings(symbol, 7); + //SECFilings secFilings = MarketDataHelper.GetSECFilings(symbol,120); //secFilings = new SECFilings(secFilings.Where(x => descFilter.Any(y => x.Description.StartsWith(y))).ToList()); //foreach (SECFiling secFiling in secFilings) //{ @@ -644,20 +628,64 @@ namespace MarketData //Console.Read(); //return 0; + +// Load 1 file + //String symbol="AAPL"; + //String fileName="c:\\2\\AAPL-0000320193-23-000111.html"; + //String secAccessionNumber=Utility.BetweenString(fileName,"-",".html"); + //FileStream inStream = new FileStream(fileName, FileMode.Open); + //StreamReader streamReader = new StreamReader(inStream); + //String html = streamReader.ReadToEnd(); + //streamReader.Close(); + //streamReader.Dispose(); + //InsiderTransactions insiderTransactions = InsiderTransactionsParser.GetInstance().Parse(html, symbol, secAccessionNumber, "4", DateTime.Now); - //String[] fileNames=Directory.GetFiles("c:\\2","*.html"); - //foreach(String fileName in fileNames) + +// Load Files + //InsiderTransactions mainList=new InsiderTransactions(); + //String symbol = "AAPL"; + //String[] fileNames = Directory.GetFiles("c:\\2", "*.html"); + //foreach (String fileName in fileNames) //{ - // FileStream inStream=new FileStream(fileName,FileMode.Open); - // StreamReader streamReader=new StreamReader(inStream); - // String html=streamReader.ReadToEnd(); + // String secAccessionNumber=Utility.BetweenString(fileName,"-",".html"); + // FileStream inStream = new FileStream(fileName, FileMode.Open); + // StreamReader streamReader = new StreamReader(inStream); + // String html = streamReader.ReadToEnd(); // streamReader.Close(); // streamReader.Dispose(); - // InsiderTransactions insiderTransactions=InsiderTransactionsParser.GetInstance().Parse(html,"LEG","001","1","1",DateTime.Now); + // InsiderTransactions insiderTransactions = InsiderTransactionsParser.GetInstance().Parse(html, symbol, secAccessionNumber, "4", DateTime.Now); + // if(null!=insiderTransactions)mainList.AddRange(insiderTransactions); + //} + + //Dictionary dictionary=new Dictionary(); + //foreach(InsiderTransaction insiderTransaction in mainList) + //{ + // String insiderTransactionKey = insiderTransaction.Form + insiderTransaction.SECAccessionNumber + insiderTransaction.FormRowNumber; + // if(dictionary.ContainsKey(insiderTransactionKey)) + // { + // Console.WriteLine(String.Format("Key exists {0}",insiderTransactionKey)); + // } + // dictionary.Add(insiderTransactionKey,insiderTransaction); //} //Console.WriteLine("Done"); //Console.Read(); //return 0; + } + +// ********************************************************************************************************** + static int Main(string[] args) + { + try + { + MDTrace.LogLevel = LogLevel.DEBUG; + String strLogFile = "marketdata.log"; + Utility.DeleteFile(strLogFile); + Trace.Listeners.Add(new TextWriterTraceListener(strLogFile)); + DateTime currentDate=DateTime.Now; + + + String insiderName=@"Deutsche Bank Ag\"; + insiderName=SqlUtils.SqlString(insiderName); DateTime maxHolidayDate=HolidayDA.GetMaxHolidayDate(); @@ -1879,7 +1907,7 @@ namespace MarketData ThreadPool.QueueUserWorkItem(delegate { - LoadInsiderTransactions(); // InsiderTracking stopped working so this source is now going directly to SEC.GOV. www.insidertracking.com + LoadInsiderTransactions(); resetEvents[STAGE_6].Set(); }); diff --git a/bin/Debug/Axiom.Core.dll b/bin/Debug/Axiom.Core.dll index fed7fe8..1cfdb72 100644 Binary files a/bin/Debug/Axiom.Core.dll and b/bin/Debug/Axiom.Core.dll differ diff --git a/bin/Debug/Axiom.Core.dll.config b/bin/Debug/Axiom.Core.dll.config deleted file mode 100644 index 43ee139..0000000 --- a/bin/Debug/Axiom.Core.dll.config +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/bin/Debug/Axiom.Core.pdb b/bin/Debug/Axiom.Core.pdb index 851b8e7..1d90c66 100644 Binary files a/bin/Debug/Axiom.Core.pdb and b/bin/Debug/Axiom.Core.pdb differ diff --git a/bin/Debug/MarketDataLib.dll b/bin/Debug/MarketDataLib.dll index 5a2ee43..71e5f03 100644 Binary files a/bin/Debug/MarketDataLib.dll and b/bin/Debug/MarketDataLib.dll differ diff --git a/bin/Debug/MarketDataLib.pdb b/bin/Debug/MarketDataLib.pdb index 12f5c82..76156cd 100644 Binary files a/bin/Debug/MarketDataLib.pdb and b/bin/Debug/MarketDataLib.pdb differ diff --git a/bin/Debug/MySql.Data.dll b/bin/Debug/MySql.Data.dll deleted file mode 100644 index 2fd44b9..0000000 Binary files a/bin/Debug/MySql.Data.dll and /dev/null differ diff --git a/bin/Debug/mk.exe b/bin/Debug/mk.exe index e072b8d..6f7317e 100644 Binary files a/bin/Debug/mk.exe and b/bin/Debug/mk.exe differ diff --git a/bin/Debug/mk.pdb b/bin/Debug/mk.pdb index a367b25..eb101f2 100644 Binary files a/bin/Debug/mk.pdb and b/bin/Debug/mk.pdb differ diff --git a/bin/Debug/saferun/Axiom.Core.dll b/bin/Debug/saferun/Axiom.Core.dll index fed7fe8..1cfdb72 100644 Binary files a/bin/Debug/saferun/Axiom.Core.dll and b/bin/Debug/saferun/Axiom.Core.dll differ diff --git a/bin/Debug/saferun/CMT20200817.txt b/bin/Debug/saferun/CMT20200817.txt index 9c9bf45..ed13ba7 100644 --- a/bin/Debug/saferun/CMT20200817.txt +++ b/bin/Debug/saferun/CMT20200817.txt @@ -1,19 +1,19 @@ CMTSESSIONv1.00 -LastUpdated=2/23/2024 09:03:11 PM -TradeDate=2/23/2024 +LastUpdated=2/27/2024 08:12:45 PM +TradeDate=2/27/2024 StartDate=1/1/0001 -AnalysisDate=2/23/2024 +AnalysisDate=2/27/2024 CashBalance=935.52 NonTradeableCash=6121.73 -SuspendTrading=False|UsePriceSlopeIndicator=True|UsePriceSlopeIndicatorDays=252|AnalysisDate=2/23/2024|BetaMonths=6|TradeDate=2/23/2024|MarketCapLowerLimit=500000000|SidewaysDetection=False|SidewaysAfterDays=30|PriceTrendDays=20|CheckOutliersInReturnStream=True|DailyReturnLimit=0.25|MaxDailyPositions=3|MaxOpenPositions=6|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=True|UseTradeOnlySectorsSectors=Healthcare,Technology,Basic Materials,Consumer Defensive,Industrials +SuspendTrading=False|UsePriceSlopeIndicator=True|UsePriceSlopeIndicatorDays=252|AnalysisDate=2/27/2024|BetaMonths=6|TradeDate=2/27/2024|MarketCapLowerLimit=500000000|SidewaysDetection=False|SidewaysAfterDays=30|PriceTrendDays=20|CheckOutliersInReturnStream=True|DailyReturnLimit=0.25|MaxDailyPositions=3|MaxOpenPositions=6|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=True|UseTradeOnlySectorsSectors=Healthcare,Technology,Basic Materials,Consumer Defensive,Industrials PricingExceptions=0 TotalActivePositions=6 -Symbol=AVGO|PurchaseDate=10/13/2023 12:00:00 AM|SellDate=1/1/0001 12:00:00 AM|Shares=1|PurchasePrice=890.97|CurrentPrice=1296.37|Exposure=890.97|MarketValue=1296.37|GainLoss=405.4|GainLossPcnt=0.455009708519928|PositionRiskDecimal=0.12|R=105.9816|C=109.885485794067|P=1.0368355053525|InitialStopLimit=784.05|TrailingStopLimit=1182.1635710907|TotalRiskExposure=105.9816|RMultiple=3.83R|Volatility=19.4005393981934|Volume=0|LastStopAdjustment=2/22/2024 12:00:00 AM|Comment=Price changed on 10/16/2023 from $883.18 to $890.97 -Symbol=APG|PurchaseDate=11/8/2023 12:00:00 AM|SellDate=1/1/0001 12:00:00 AM|Shares=77|PurchasePrice=27.08|CurrentPrice=35.27|Exposure=2085.16|MarketValue=2715.79|GainLoss=630.630000000001|GainLossPcnt=0.302437223042836|PositionRiskDecimal=0.12|R=3.2304|C=250.186|P=77.4473749380882|InitialStopLimit=23.83|TrailingStopLimit=29.8718571519852|TotalRiskExposure=248.7408|RMultiple=2.54R|Volatility=1.05591440200806|Volume=0|LastStopAdjustment=1/30/2024 12:00:00 AM|Comment=Price changed on 11/9/2023 from $26.92 to $27.08 -Symbol=CLS|PurchaseDate=1/4/2024 12:00:00 AM|SellDate=1/1/0001 12:00:00 AM|Shares=32|PurchasePrice=27.92|CurrentPrice=40.43|Exposure=893.44|MarketValue=1293.76|GainLoss=400.32|GainLossPcnt=0.448065902578796|PositionRiskDecimal=0.12|R=3.3504|C=107.5275|P=32.0939290830946|InitialStopLimit=24.5696|TrailingStopLimit=32.95149995327|TotalRiskExposure=107.2128|RMultiple=3.73R|Volatility=0.907680511474609|Volume=0|LastStopAdjustment=2/8/2024 12:00:00 AM -Symbol=FTAI|PurchaseDate=1/23/2024 12:00:00 AM|SellDate=1/1/0001 12:00:00 AM|Shares=14|PurchasePrice=51|CurrentPrice=57.9|Exposure=714|MarketValue=810.6|GainLoss=96.6|GainLossPcnt=0.135294117647059|PositionRiskDecimal=0.12|R=6.036|C=85.6855|P=14.1957422133863|InitialStopLimit=44.88|TrailingStopLimit=48.3208568096161|TotalRiskExposure=84.504|RMultiple=1.14R|Volatility=1.01389157772064|Volume=0|LastStopAdjustment=1/29/2024 12:00:00 AM|Comment=Price changed on 1/24/2024 from $50.30 to $51.00 -Symbol=NEU|PurchaseDate=2/20/2024 12:00:00 AM|SellDate=1/1/0001 12:00:00 AM|Shares=1|PurchasePrice=609.01|CurrentPrice=631.88|Exposure=609.01|MarketValue=631.88|GainLoss=22.87|GainLossPcnt=0.0375527495443425|PositionRiskDecimal=0.12|R=73.0956|C=73.588|P=1.00673638358533|InitialStopLimit=535.93|TrailingStopLimit=535.93|TotalRiskExposure=73.0956|RMultiple=0.31R|Volatility=10.5676956176758|Volume=0|LastStopAdjustment=1/1/0001 12:00:00 AM|Comment=Price changed on 2/21/2024 from $609.13 to $609.01 -Symbol=KTOS|PurchaseDate=2/23/2024 12:00:00 AM|SellDate=1/1/0001 12:00:00 AM|Shares=30|PurchasePrice=17.94|CurrentPrice=18.05|Exposure=538.2|MarketValue=541.5|GainLoss=3.29999999999995|GainLossPcnt=0.00613154960981039|PositionRiskDecimal=0.12|R=2.4216|C=73.686|P=30.4286422200198|InitialStopLimit=15.79|TrailingStopLimit=15.79|TotalRiskExposure=72.648|RMultiple=0.05R|Volatility=0.288610696792603|Volume=0|LastStopAdjustment=1/1/0001 12:00:00 AM|Comment=Price changed on 2/23/2024 from $20.18 to $17.94 +Symbol=AVGO|PurchaseDate=10/13/2023 12:00:00 AM|SellDate=1/1/0001 12:00:00 AM|Shares=1|PurchasePrice=890.97|CurrentPrice=1296.23|Exposure=890.97|MarketValue=1296.23|GainLoss=405.26|GainLossPcnt=0.454852576405491|PositionRiskDecimal=0.12|R=105.9816|C=109.885485794067|P=1.0368355053525|InitialStopLimit=784.05|TrailingStopLimit=1182.1635710907|TotalRiskExposure=105.9816|RMultiple=3.82R|Volatility=19.4005393981934|Volume=0|LastStopAdjustment=2/22/2024 12:00:00 AM|Comment=Price changed on 10/16/2023 from $883.18 to $890.97 +Symbol=APG|PurchaseDate=11/8/2023 12:00:00 AM|SellDate=1/1/0001 12:00:00 AM|Shares=77|PurchasePrice=27.08|CurrentPrice=35.72|Exposure=2085.16|MarketValue=2750.44|GainLoss=665.28|GainLossPcnt=0.319054652880355|PositionRiskDecimal=0.12|R=3.2304|C=250.186|P=77.4473749380882|InitialStopLimit=23.83|TrailingStopLimit=29.8718571519852|TotalRiskExposure=248.7408|RMultiple=2.67R|Volatility=1.05591440200806|Volume=0|LastStopAdjustment=1/30/2024 12:00:00 AM|Comment=Price changed on 11/9/2023 from $26.92 to $27.08 +Symbol=CLS|PurchaseDate=1/4/2024 12:00:00 AM|SellDate=1/1/0001 12:00:00 AM|Shares=32|PurchasePrice=27.92|CurrentPrice=41.76|Exposure=893.44|MarketValue=1336.32|GainLoss=442.88|GainLossPcnt=0.495702005730659|PositionRiskDecimal=0.12|R=3.3504|C=107.5275|P=32.0939290830946|InitialStopLimit=24.5696|TrailingStopLimit=32.95149995327|TotalRiskExposure=107.2128|RMultiple=4.13R|Volatility=0.907680511474609|Volume=0|LastStopAdjustment=2/8/2024 12:00:00 AM +Symbol=FTAI|PurchaseDate=1/23/2024 12:00:00 AM|SellDate=1/1/0001 12:00:00 AM|Shares=14|PurchasePrice=51|CurrentPrice=56.64|Exposure=714|MarketValue=792.96|GainLoss=78.96|GainLossPcnt=0.110588235294118|PositionRiskDecimal=0.12|R=6.036|C=85.6855|P=14.1957422133863|InitialStopLimit=44.88|TrailingStopLimit=48.3208568096161|TotalRiskExposure=84.504|RMultiple=0.93R|Volatility=1.01389157772064|Volume=0|LastStopAdjustment=1/29/2024 12:00:00 AM|Comment=Price changed on 1/24/2024 from $50.30 to $51.00 +Symbol=NEU|PurchaseDate=2/20/2024 12:00:00 AM|SellDate=1/1/0001 12:00:00 AM|Shares=1|PurchasePrice=609.01|CurrentPrice=636.31|Exposure=609.01|MarketValue=636.31|GainLoss=27.3|GainLossPcnt=0.0448268501338237|PositionRiskDecimal=0.12|R=73.0956|C=73.588|P=1.00673638358533|InitialStopLimit=535.93|TrailingStopLimit=584.230923309326|TotalRiskExposure=73.0956|RMultiple=0.37R|Volatility=10.5676956176758|Volume=0|LastStopAdjustment=2/26/2024 12:00:00 AM|Comment=Price changed on 2/21/2024 from $609.13 to $609.01 +Symbol=KTOS|PurchaseDate=2/23/2024 12:00:00 AM|SellDate=1/1/0001 12:00:00 AM|Shares=30|PurchasePrice=17.94|CurrentPrice=18.68|Exposure=538.2|MarketValue=560.4|GainLoss=22.1999999999999|GainLossPcnt=0.0412486064659976|PositionRiskDecimal=0.12|R=2.4216|C=73.686|P=30.4286422200198|InitialStopLimit=15.79|TrailingStopLimit=15.79|TotalRiskExposure=72.648|RMultiple=0.31R|Volatility=0.288610696792603|Volume=0|LastStopAdjustment=1/1/0001 12:00:00 AM|Comment=Price changed on 2/23/2024 from $20.18 to $17.94 TotalPositions=93 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. @@ -124,7 +124,6 @@ Symbol=PANW|AnalysisDate=11/30/2023 12:00:00 AM|EPSSlope=0.25|ProfitMarginSlope= Symbol=ANET|AnalysisDate=12/8/2023 12:00:00 AM|EPSSlope=0.295000076293945|ProfitMarginSlope=1.45040702819824|PriceSlope=0.00225355321928034|Volatility=2.62224912643433|Volume=0|Violation=False|Slope=0.00225355321928034|Score=1.504074038628|AnnualizedReturn=1.76454948984694|SharpeRatio=-0.131296720296389|RSquared=0.852384162236483|BetaMonths=6|Beta=0.381395178878628 Symbol=SNPS|AnalysisDate=12/13/2023 12:00:00 AM|EPSSlope=0.0799999237060547|ProfitMarginSlope=0.106899261474609|PriceSlope=0.00193019467966363|Volatility=11.9729852676392|Volume=0|Violation=False|Slope=0.00193019467966363|Score=1.49372200992909|AnnualizedReturn=1.62646518082017|SharpeRatio=-0.153186503118447|RSquared=0.918385482544332|BetaMonths=6|Beta=0.0832684423681687 Symbol=SSD|AnalysisDate=11/21/2023 12:00:00 AM|EPSSlope=0.184999942779541|ProfitMarginSlope=2.95830535888672|PriceSlope=0.00227087825283497|Volatility=7.70265865325928|Volume=0|Violation=False|Slope=0.00227087825283497|Score=1.46707813655858|AnnualizedReturn=1.77227019306316|SharpeRatio=-0.12144364192519|RSquared=0.827795977329453|BetaMonths=6|Beta=2.2027356700604 -Symbol=CRS|AnalysisDate=8/30/2023 12:00:00 AM|EPSSlope=0.365000009536743|ProfitMarginSlope=1.52712726593018|PriceSlope=0.0021979111222871|Volatility=1.54457581043243|Volume=0|Violation=False|Slope=0.0021979111222871|Score=1.45622984596095|AnnualizedReturn=1.73997997200175|SharpeRatio=0.037174817773601|RSquared=0.836923337850632|BetaMonths=6|Beta=2.67659975297287 Symbol=PGTI|AnalysisDate=12/13/2023 12:00:00 AM|EPSSlope=0.0699999928474426|ProfitMarginSlope=0.424097061157227|PriceSlope=0.00206934291782257|Volatility=0.689634144306183|Volume=0|Violation=False|Slope=0.00206934291782257|Score=1.43626962987798|AnnualizedReturn=1.68450948616521|SharpeRatio=-0.056807517146353|RSquared=0.852633743931982|BetaMonths=6|Beta=1.28415886682616 Symbol=GE|AnalysisDate=11/30/2023 12:00:00 AM|EPSSlope=0.189999580383301|ProfitMarginSlope=0.144966125488281|PriceSlope=0.00222670491780087|Volatility=2.35912609100342|Volume=0|Violation=False|Slope=0.00222670491780087|Score=1.43577997878423|AnnualizedReturn=1.75265124615312|SharpeRatio=-0.0645451634428008|RSquared=0.8192046089806|BetaMonths=6|Beta=0.872023000752983 Symbol=OMAB|AnalysisDate=9/12/2023 12:00:00 AM|EPSSlope=0.210000038146973|ProfitMarginSlope=4.17186164855957|PriceSlope=0.00210614802223795|Volatility=3.22932982444763|Volume=0|Violation=False|Slope=0.00210614802223795|Score=1.42174995510639|AnnualizedReturn=1.7002057983768|SharpeRatio=-0.036974325164875|RSquared=0.836222271717779|BetaMonths=6|Beta=0.243820685910976 @@ -135,7 +134,6 @@ Symbol=VNT|AnalysisDate=12/1/2023 12:00:00 AM|EPSSlope=0.130000054836273|ProfitM Symbol=ESAB|AnalysisDate=12/14/2023 12:00:00 AM|EPSSlope=0.0349999666213989|ProfitMarginSlope=0.250476837158203|PriceSlope=0.00162973715895437|Volatility=2.4698178768158|Volume=0|Violation=False|Slope=0.00162973715895437|Score=1.25966101728851|AnnualizedReturn=1.50786352383785|SharpeRatio=-0.100133068197843|RSquared=0.835394581389165|BetaMonths=6|Beta=1.70094773557852 Symbol=ABCM|AnalysisDate=11/17/2023 12:00:00 AM|EPSSlope=0.00499999988824129|ProfitMarginSlope=1.44848251342773|PriceSlope=0.00232276095376242|Volatility=0.233694449067116|Volume=0|Violation=False|Slope=0.00232276095376242|Score=1.22131918367872|AnnualizedReturn=1.79559377362862|SharpeRatio=-0.0549351115359085|RSquared=0.68017566200991|BetaMonths=6|Beta=3.49938189140572 Symbol=APG|AnalysisDate=12/14/2023 12:00:00 AM|EPSSlope=0.0449999868869781|ProfitMarginSlope=1.15570163726807|PriceSlope=0.00170191488677901|Volatility=0.87805587053299|Volume=0|Violation=False|Slope=0.00170191488677901|Score=1.21852374395096|AnnualizedReturn=1.53554067680832|SharpeRatio=-0.0881450433955766|RSquared=0.79354703027712|BetaMonths=6|Beta=2.64943052027669 -Symbol=ROCK|AnalysisDate=8/30/2023 12:00:00 AM|EPSSlope=0.0549999475479126|ProfitMarginSlope=2.25924968719482|PriceSlope=0.00180736292425266|Volatility=1.31475150585175|Volume=0|Violation=False|Slope=0.00180736292425266|Score=1.15956810364738|AnnualizedReturn=1.57689142560162|SharpeRatio=-0.170880152608771|RSquared=0.73535063024709|BetaMonths=6|Beta=1.54089145655045 Symbol=AMAT|AnalysisDate=2/16/2024 12:00:00 AM|EPSSlope=0.264999866485596|ProfitMarginSlope=0.235013961791992|PriceSlope=0.00151750491416847|Volatility=10.4882020950317|Volume=0|Violation=False|Slope=0.00151750491416847|Score=1.13374489144559|AnnualizedReturn=1.46581476047634|SharpeRatio=-0.276889339897599|RSquared=0.773457139343559|BetaMonths=6|Beta=1.4673190349198 Symbol=RDNT|AnalysisDate=12/14/2023 12:00:00 AM|EPSSlope=0.120000004768372|ProfitMarginSlope=0.18272876739502|PriceSlope=0.00205618872045596|Volatility=1.74087750911713|Volume=0|Violation=False|Slope=0.00205618872045596|Score=1.12887502203638|AnnualizedReturn=1.67893482157767|SharpeRatio=-0.00993619798026283|RSquared=0.672375727472011|BetaMonths=6|Beta=2.09207410217203 Symbol=AMD|AnalysisDate=12/7/2023 12:00:00 AM|EPSSlope=0.0749999955296516|ProfitMarginSlope=1.64666175842285|PriceSlope=0.00207910648359061|Volatility=2.73382687568665|Volume=0|Violation=False|Slope=0.00207910648359061|Score=1.09735936961719|AnnualizedReturn=1.68865918749998|SharpeRatio=-0.0275721429225287|RSquared=0.649840641462894|BetaMonths=6|Beta=0.944397430142836 @@ -165,7 +163,9 @@ Symbol=CLS|AnalysisDate=2/22/2024 12:00:00 AM|EPSSlope=0.180000007152557|ProfitM Symbol=LLY|AnalysisDate=2/22/2024 12:00:00 AM|EPSSlope=0.190000057220459|ProfitMarginSlope=1.89461898803711|PriceSlope=0.00301157364528411|Volatility=34.7464294433594|Volume=0|Violation=False|Slope=0.00301157364528411|Score=1.96038312012648|AnnualizedReturn=2.13596077808923|SharpeRatio=0.0605736551264204|RSquared=0.917799212530567|BetaMonths=6|Beta=0.0119333172260655 Symbol=ETN|AnalysisDate=2/22/2024 12:00:00 AM|EPSSlope=0.275000333786011|ProfitMarginSlope=1.49309349060059|PriceSlope=0.00189315566217503|Volatility=4.61157941818237|Volume=0|Violation=False|Slope=0.00189315566217503|Score=1.38612519558705|AnnualizedReturn=1.61135465665921|SharpeRatio=-0.18392193629868|RSquared=0.860223532950143|BetaMonths=6|Beta=1.06183413594968 Symbol=EXP|AnalysisDate=2/22/2024 12:00:00 AM|EPSSlope=0.255000114440918|ProfitMarginSlope=1.53201389312744|PriceSlope=0.00162244868614764|Volatility=5.16628265380859|Volume=0|Violation=False|Slope=0.00162244868614764|Score=0.993788834520374|AnnualizedReturn=1.5050965800149|SharpeRatio=-0.121092992910934|RSquared=0.660282434839188|BetaMonths=6|Beta=2.09896610697018 -TotalStopLimits=134 +Symbol=SAIA|AnalysisDate=2/26/2024 12:00:00 AM|EPSSlope=0.335000038146973|ProfitMarginSlope=0.0959281921386719|PriceSlope=0.00260843242341365|Volatility=14.1582889556885|Volume=0|Violation=False|Slope=0.00260843242341365|Score=1.58033003145278|AnnualizedReturn=1.92962362452591|SharpeRatio=-0.105201071463255|RSquared=0.818983563098246|BetaMonths=6|Beta=1.5879090131986 +Symbol=TEVA|AnalysisDate=2/26/2024 12:00:00 AM|EPSSlope=0.740000009536743|ProfitMarginSlope=3.93594932556152|PriceSlope=0.00134426338576597|Volatility=0.448272973299026|Volume=0|Violation=False|Slope=0.00134426338576597|Score=0.636468265347231|AnnualizedReturn=1.40319863970666|SharpeRatio=-0.286626985020246|RSquared=0.453583867128239|BetaMonths=6|Beta=0.799773787663302 +TotalStopLimits=135 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 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 Symbol=MASI|AnalysisDate=10/23/2020 12:00:00 AM|PreviousStop=213.34|NewStop=223.030285377502|CurrentPriceLow=240.68|CurrentPriceClose=244.77|PriceTrendIndicatorSlope=0.191601455211639 @@ -300,3 +300,4 @@ Symbol=APG|AnalysisDate=1/30/2024 12:00:00 AM|PreviousStop=29.3914284753799|NewS Symbol=PLAB|AnalysisDate=2/8/2024 12:00:00 AM|PreviousStop=27.6232857298851|NewStop=29.0321999263763|CurrentPriceLow=30.47|CurrentPriceClose=31.62|PriceTrendIndicatorSlope=0.0766842067241669 Symbol=CLS|AnalysisDate=2/8/2024 12:00:00 AM|PreviousStop=24.7737137699127|NewStop=32.95149995327|CurrentPriceLow=36.39|CurrentPriceClose=37.54|PriceTrendIndicatorSlope=0.513090252876282 Symbol=AVGO|AnalysisDate=2/22/2024 12:00:00 AM|PreviousStop=1123.28627082825|NewStop=1182.1635710907|CurrentPriceLow=1276.47|CurrentPriceClose=1304.9|PriceTrendIndicatorSlope=2.54035210609436 +Symbol=NEU|AnalysisDate=2/26/2024 12:00:00 AM|PreviousStop=535.93|NewStop=584.230923309326|CurrentPriceLow=619.39|CurrentPriceClose=631.48|PriceTrendIndicatorSlope=3.21256494522095 diff --git a/bin/Debug/saferun/MarketDataLib.dll b/bin/Debug/saferun/MarketDataLib.dll index 5a2ee43..71e5f03 100644 Binary files a/bin/Debug/saferun/MarketDataLib.dll and b/bin/Debug/saferun/MarketDataLib.dll differ diff --git a/bin/Debug/saferun/mk.exe b/bin/Debug/saferun/mk.exe index e072b8d..6f7317e 100644 Binary files a/bin/Debug/saferun/mk.exe and b/bin/Debug/saferun/mk.exe differ