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 4cece2b..1f68a26 100644 Binary files a/MarketData.v12.suo and b/MarketData.v12.suo differ 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();