From 0545fad2564a749231fd5bb9dcc07192880dcc13 Mon Sep 17 00:00:00 2001 From: Sean Kessler Date: Mon, 26 Feb 2024 19:49:37 -0500 Subject: [PATCH] InsiderTransactions refactorings. --- .gitignore | 1 + MarketData.v12.suo | Bin 633856 -> 627200 bytes Program.cs | 95 +++++++++++++++++++++++++++------------------ 3 files changed, 59 insertions(+), 37 deletions(-) diff --git a/.gitignore b/.gitignore index 0298241..b47728b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ obj /MarketDataLib/obj +/bin/Debug/SR2 diff --git a/MarketData.v12.suo b/MarketData.v12.suo index 4cece2b5ccbfca2728b26479cc37a8dd12f3df4f..1f68a26ebcd29f86288c277ff96c77966b06e047 100644 GIT binary patch delta 11074 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 delta 20986 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 M)hU(zU!L-R0m?Hp4*&oF diff --git a/Program.cs b/Program.cs index e96718f..26d7dda 100644 --- a/Program.cs +++ b/Program.cs @@ -92,6 +92,7 @@ namespace MarketData MDTrace.WriteLine(LogLevel.DEBUG,"*************************************I N S I D E R T R A N S A C T I O N S**********************************"); MDTrace.WriteLine(LogLevel.DEBUG," LOADINSIDERTRANSACTIONSSYMBOL /SYMBOL:"); MDTrace.WriteLine(LogLevel.DEBUG," LOADINSIDERTRANSACTIONS"); + MDTrace.WriteLine(LogLevel.DEBUG," LOADINSIDERTRANSACTIONSYEAR"); MDTrace.WriteLine(LogLevel.DEBUG," LOADINSIDERTRANSACTIONSWATCHLISTS"); MDTrace.WriteLine(LogLevel.DEBUG,"*******B A L A N C E S H E E T A N D I N C O M E (Y A H O O F I N A N C E)*****"); MDTrace.WriteLine(LogLevel.DEBUG," LOADFINANCIALSTATEMENTSSYMBOL /SYMBOL: - load balance sheet, income statement, and cashflow statement for symbol"); @@ -611,48 +612,52 @@ namespace MarketData Trace.Listeners.Add(new TextWriterTraceListener(strLogFile)); DateTime currentDate=DateTime.Now; - - //SECFilings secFilings=new SECFilings(); - //SECFiling secFiling = new SECFiling(); - //secFiling.Symbol="UFPT"; - //secFiling.SECAccessionNumber="0001062993-24-002532"; - //secFiling.FormText="SEC FORM 4SEC Form 4
FORM 4UNITED STATES SECURITIES AND EXCHANGE COMMISSION
Washington, D.C. 20549

STATEMENT OF CHANGES IN BENEFICIAL OWNERSHIP

Filed pursuant to Section 16(a) of the Securities Exchange Act of 1934
or Section 30(h) of the Investment Company Act of 1940
OMB APPROVAL
OMB Number:3235-0287
Estimated average burden
hours per response:0.5
????
Check this box if no longer subject to Section 16. Form 4 or Form 5 obligations may continue. See Instruction 1(b).
????
Check this box to indicate that a transaction was made pursuant to a contract, instruction or written plan for the purchase or sale of equity securities of the issuer that is intended to satisfy the affirmative defense conditions of Rule 10b5-1(c). See Instruction 10.
1. Name and Address of Reporting Person*
Holt Jason

(Last)(First)(Middle)
C/O UFP TECHNOLOGIES, INC.
100 HALE STREET

(Street)
NEWBURYPORTMA01950

(City)(State)(Zip)
2. Issuer Name and Ticker or Trading Symbol
UFP TECHNOLOGIES INC [ UFPT ]
5. Relationship of Reporting Person(s) to Issuer
(Check all applicable)
Director10% Owner
XOfficer (give title below)Other (specify below)
Vice President
3. Date of Earliest Transaction (Month/Day/Year)
02/06/2024
4. If Amendment, Date of Original Filed (Month/Day/Year)
6. Individual or Joint/Group Filing (Check Applicable Line)
XForm filed by One Reporting Person
Form filed by More than One Reporting Person
Table I - Non-Derivative Securities Acquired, Disposed of, or Beneficially Owned
1. Title of Security (Instr. 3) 2. Transaction Date (Month/Day/Year)2A. Deemed Execution Date, if any (Month/Day/Year)3. Transaction Code (Instr. 8) 4. Securities Acquired (A) or Disposed Of (D) (Instr. 3, 4 and 5) 5. Amount of Securities Beneficially Owned Following Reported Transaction(s) (Instr. 3 and 4) 6. Ownership Form: Direct (D) or Indirect (I) (Instr. 4) 7. Nature of Indirect Beneficial Ownership (Instr. 4)
CodeVAmount(A) or (D)Price
Common Stock, $.01 Par Value02/06/2024A807(1)A$06,932D
Common Stock, $.01 Par Value02/06/2024A584(2)A$07,516D
Table II - Derivative Securities Acquired, Disposed of, or Beneficially Owned
(e.g., puts, calls, warrants, options, convertible securities)
1. Title of Derivative Security (Instr. 3) 2. Conversion or Exercise Price of Derivative Security 3. Transaction Date (Month/Day/Year)3A. Deemed Execution Date, if any (Month/Day/Year)4. Transaction Code (Instr. 8) 5. Number of Derivative Securities Acquired (A) or Disposed of (D) (Instr. 3, 4 and 5) 6. Date Exercisable and Expiration Date (Month/Day/Year)7. Title and Amount of Securities Underlying Derivative Security (Instr. 3 and 4) 8. Price of Derivative Security (Instr. 5) 9. Number of derivative Securities Beneficially Owned Following Reported Transaction(s) (Instr. 4) 10. Ownership Form: Direct (D) or Indirect (I) (Instr. 4) 11. Nature of Indirect Beneficial Ownership (Instr. 4)
CodeV(A)(D)Date ExercisableExpiration DateTitleAmount or Number of Shares
Explanation of Responses:
1. Represents restricted stock units granted on February 6, 2023, under the Issuer's 2003 Incentive Plan subject to satisfaction of performance targets that are to be settled solely in shares of common stock. The transaction date represents the date on which the Issuer's Compensation Committee determined the performance targets were achieved. The units vest with respect to one-third of the shares on March 1, 2024 and with respect to an additional one-third on each of March 1, 2025 and 2026, so long as the recipient is in the continuous employ of the Issuer through each such respective vesting date.
2. Represents stock unit awards granted on February 6, 2024, under the Issuer's 2003 Incentive Plan the vesting under which is solely time-based, that are to be settled solely in shares of common stock. The units vest with respect to one-third of the shares on March 1, 2025 and with respect to an additional one-third on each of March 1, 2026 and 2027, so long as the recipient is in the continuous employ of the Issuer through each such respective vesting date.
Patrick J. Kinney, Jr. as attorney-in-fact for Jason Holt02/08/2024
** Signature of Reporting PersonDate
Reminder: Report on a separate line for each class of securities beneficially owned directly or indirectly.
* If the form is filed by more than one reporting person, see Instruction 4 (b)(v).
** Intentional misstatements or omissions of facts constitute Federal Criminal Violations See 18 U.S.C. 1001 and 15 U.S.C. 78ff(a).
Note: File three copies of this Form, one of which must be manually signed. If space is insufficient, see Instruction 6 for procedure.
Persons who respond to the collection of information contained in this form are not required to respond unless the form displays a currently valid OMB Number.
"; - //secFilings.Add(secFiling); - - //InsiderTransactionsParser.GetInstance().Parse(secFilings); +// InsiderTransactionMarketDataHelper.LoadInsiderTransactionsYearGreaterEqualEx("COIN",2023); - //String symbol = "UFPT"; - //InsiderTransactions insiderTransactions = MarketDataHelper.GetInsiderTransactions(symbol, 30); + //InsiderTransactions insiderTransactions =MarketDataHelper.GetInsiderTransactionsYear("COIN",2023); + //InsiderTransactionDA.InsertInsiderTransactions(insiderTransactions); + //Console.WriteLine("Done"); + //Console.ReadLine(); - // Fundamental fundamental = MarketDataHelper.GetFundamentalFinViz("MIDD"); - - // AxiomTest(); - - //// List indices = ConsumerPriceIndexDA.GetDistinctIndices(); - // Headlines headlines=MarketDataHelper.GetCompanyHeadlinesMarketWatch("GE"); - // foreach(Headline headline in headlines) - // { - // Console.WriteLine(headline.Entry); - // } + // Trying to figure out in Form 4 and Form 5 + // How to tell if acquiring or disposing + //String symbol = "COIN"; + //String[] descFilter = new String[] { "Form 4", "Form 5" }; + //SECFilings secFilings = MarketDataHelper.GetSECFilings(symbol, 7); + //secFilings = new SECFilings(secFilings.Where(x => descFilter.Any(y => x.Description.StartsWith(y))).ToList()); + //foreach (SECFiling secFiling in secFilings) + //{ + // String fileName = secFiling.Symbol + "-" + secFiling.SECAccessionNumber; + // fileName = "c:\\2\\" + fileName + ".html"; + // String html = Utility.BetweenString(secFiling.FormText, "", ""); + // html = "" + html + ""; + // MDTrace.WriteLine(String.Format("Writing {0}", fileName)); + // FileStream outStream = new FileStream(fileName, FileMode.Create); + // StreamWriter streamWriter = new StreamWriter(outStream); + // streamWriter.Write(html); + // streamWriter.Flush(); + // streamWriter.Close(); + // streamWriter.Dispose(); + //} + //Console.WriteLine("Done"); + //Console.Read(); + //return 0; - - - // Need to run this and look at the duration .. because it will pull 1,000 equities. - // GetSECFilings(); // www.sec.gov This version retrives for watchlist and also coninues to retrieve filings for symbols already in SEC Filings table - - // PriceIndices priceIndices=ConsumerPriceIndexDA.GetConsumerPriceIndex("cpi-u"); - //ConsumerPriceIndexDA.InsertUpdatePriceIndices(priceIndices); - - - // DividendHistory dividendHistory = MarketDataHelper.GetDividendHistory("CSPI"); - - - // AnalystRatings analystRatings = MarketDataHelper.GetAnalystRatingsMarketBeat("MIDD"); - - //AnalystPriceTarget analystPriceTarget =MarketDataHelper.GetAnalystPriceTargetMarketBeat("ACRE"); - //analystPriceTarget =MarketDataHelper.GetAnalystPriceTargetMarketBeat("MIDD"); + //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(); + // streamReader.Close(); + // streamReader.Dispose(); + // InsiderTransactions insiderTransactions=InsiderTransactionsParser.GetInstance().Parse(html,"LEG","001","1","1",DateTime.Now); + //} + //Console.WriteLine("Done"); + //Console.Read(); + //return 0; DateTime maxHolidayDate=HolidayDA.GetMaxHolidayDate(); @@ -1086,6 +1091,16 @@ namespace MarketData { Program.LoadInsiderTransactions(); } + else if (arg.Equals("LOADINSIDERTRANSACTIONSYEAR")) + { + CommandArgs commandArgs=new CommandArgs(args); + if(!commandArgs.Has("YEAR")) + { + Console.WriteLine("LOADINSIDERTRANSACTIONSYEAR REQUIRES YEAR"); + return 0; + } + Program.LoadInsiderTransactionsYear(commandArgs.Coalesce("YEAR")); + } else if (arg.Equals("LOADINSIDERTRANSACTIONSSYMBOL")) { CommandArgs commandArgs=new CommandArgs(args); @@ -3578,6 +3593,12 @@ namespace MarketData InsiderTransactionMarketDataHelper insiderTransactionMarketDataHelper = new InsiderTransactionMarketDataHelper(); insiderTransactionMarketDataHelper.LoadInsiderTransactions(symbols); } + public static void LoadInsiderTransactionsYear(int year) + { + List symbols = PricingDA.GetSymbols(); + InsiderTransactionMarketDataHelper insiderTransactionMarketDataHelper = new InsiderTransactionMarketDataHelper(); + insiderTransactionMarketDataHelper.LoadInsiderTransactionsYear(symbols,year); + } public static void LoadInsiderTransactionsSymbol(String symbol) { InsiderTransactionMarketDataHelper insiderTransactionMarketDataHelper = new InsiderTransactionMarketDataHelper();