นี่คือต้นฉบับภาษาไทย:
Spring 1998 นักเรียน MBA หกคนที่ Cornell ใช้สมการเดียวกับตัวเลขทางการเงินของ Enron แล้วได้ค่า -1.89 กลับมา
ค่าตัดสินใจว่า "บริษัทนี้น่าจะทำบัญชีปลอม" คือ -2.22 Enron ผ่านจุดนั้นไปแล้ว และอีกครั้ง คนเหล่านี้เป็นนักเรียน ไม่ใช่บริษัทตรวจสอบทางนิติเวช

พวกเขาโพสต์รายงานบนเว็บไซต์ของโรงเรียน ในขณะนั้นทั้งถนนวอลล์สตรีทยังคงให้คะแนน Enron ว่า "ซื้อ" และส่วนใหญ่ยังคงให้คะแนนนั้นต่อไปจนกระทั่งไม่กี่สัปดาห์ก่อนที่หุ้นจะกลายเป็นศูนย์
มันเป็นเอกสารสาธารณะที่ใครก็สามารถดึงมาได้ และเป็นสูตรเดียวที่ใช้เวลาประมาณ 20 นาทีในการคำนวณด้วยมือ นั่นคือทั้งหมดที่ผมกำลังจะแนะนำให้คุณทำ ยกเว้นว่าคุณจะทำได้ภายในไม่กี่วินาที และคุณสามารถใช้มันกับบริษัทหรือโทเค็นใดๆ บนโลกนี้ก็ได้
ไม่ใช่คำแนะนำทางการเงิน โปรดทำวิจัยด้วยตัวเอง คะแนนนิติเวชเป็นตัวบ่งชี้ความน่าจะเป็น ไม่ใช่หลักฐาน และราคาทั้งหมดที่นี่เปลี่ยนแปลงได้ ดังนั้นโปรดตรวจสอบก่อนตัดสินใจ ผมสร้างเครื่องมือสำหรับเทรดเดอร์ในตลาดพยากรณ์มืออาชีพ @coldvisionXYZ
L0: ฐานข้อมูล
บริษัทมหาชนทุกแห่งในสหรัฐฯ ยื่นเอกสารต่อ SEC และ SEC ก็ส่งข้อมูลทั้งหมดผ่าน API ที่เรียกว่า EDGAR คุณเพียงแค่เรียก URL ก็จะได้รับตัวเลขทั้งหมดที่บริษัทเคยรายงานมา ซึ่งจัดโครงสร้างไว้แล้ว
2 สิ่งที่ทำให้ EDGAR เป็นอาวุธ:
- ค้นหาข้อความแบบเต็ม มันจัดทำดัชนีข้อความจริงของเอกสารทั้งหมดที่เคยยื่นไว้ ดังนั้นคุณสามารถค้นหาคำเช่น "จุดอ่อนที่มีสาระสำคัญ" ทั่วทั้งตลาด และดึงบริษัททั้งหมดที่เพิ่งยอมรับอย่างเงียบๆ ว่าการควบคุมบัญชีของตนมีปัญหา นั่นคือรายการเฝ้าระวังขายชอร์ตในเวลาแค่ประมาณหนึ่งวินาที
- ข้อมูลทางการเงินที่มีโครงสร้างทุกรายการ ทุกไตรมาส อ่านได้ด้วยเครื่อง ย้อนหลังหลายปี
edgartools คือสิ่งที่คุณต้องการ

ติดตั้งด้วย pip ไม่ต้องใช้คีย์ และมันแยกวิเคราะห์ 10-K, 8-K, แบบฟอร์ม 4 ของผู้บริหาร, การถือครองกองทุน 13F ทั้งหมดให้เป็น Python object ที่สะอาด
มันมาพร้อมกับ MCP server ด้วย ดังนั้นคุณสามารถชี้ Claude ไปที่มันแล้วพูดว่า "เปรียบเทียบการเติบโตของรายได้ของ Apple และ Microsoft ใน 3 ปี" และมันจะไปดึงเอกสารจริงมาแทนที่จะสร้างตัวเลขที่ฟังดูถูกต้อง
*sec-edgar-downloader คือสิ่งที่ทุกคนเจอเป็นอย่างแรก มันแค่ดาวน์โหลดเอกสารดิบแล้วโยนคุณเข้าไปในกอง HTML ให้คุณแยกวิเคราะห์เอง นั่นเป็นวิธีที่ใช้เมื่อไม่กี่ปีก่อน ตอนนี้มันแค่สร้างความลำบาก ให้ใช้ edgartools แทน*
BamSEC ถ้าคุณแค่อยากอ่านเอกสารโดยไม่ต้องใช้อินเทอร์เฟซของ EDGAR จากปี 1998 โปรแกรมอ่านที่สะอาด เปรียบเทียบแบบเคียงข้างกัน ฟรีสำหรับสิ่งที่คุณต้องการส่วนใหญ่ เหมาะสำหรับการดูคร่าวๆ

ตอนนี้คุณสามารถเข้าถึงข้อมูลโครงสร้างฟรีของบัญชีบริษัทมหาชนทุกแห่งได้แล้ว
L1 - จับคนโกหก
คุณมีตัวเลขแล้ว ก่อนที่คุณจะอ่านแม้แต่ประโยคเดียวที่ฝ่ายบริหารพูดถึง "ปีแห่งการเปลี่ยนแปลง" ของพวกเขา คุณใช้สูตรสองสามสูตรกับตัวเลขดิบเหล่านั้น
นักวิชาการสร้างสิ่งเหล่านี้จากคดีฉ้อโกงจริงๆ ที่เกิดขึ้นหลายทศวรรษ คุณแค่ต้องรู้ว่าสูตรแต่ละตัวนั้นกำลังดมกลิ่นอะไร
Beneish M-Score คือสูตรของ Enron
ปัจจัยนำเข้าแปดตัวถูกบดเป็นตัวเลขเดียว ปัจจัยที่หนักที่สุดคืออัตราส่วนของยอดคงค้างรวมต่อสินทรัพย์รวม เพราะวิธีที่เร็วที่สุดในการทำรายได้ปลอมคือการบันทึกรายได้ที่ไม่เคยปรากฏเป็นเงินสด สัญญาณต่อไปคือการเติบโตของยอดขายที่สะอาดเกินกว่าจะเป็นความจริง และนั่นคือสิ่งที่สว่างขึ้นที่ Enron เหนือ -2.22 ให้你去ตรวจสอบ Enron ได้ค่า -1.89

Altman Z-Score คือการอ่านค่าล้มละลาย
มันผสมความสามารถในการทำกำไร อัตราส่วนหนี้สิน และประสิทธิภาพในการใช้สินทรัพย์ เข้าเป็นคะแนนความทุกข์ทางการเงิน ค่า低于 1.81 คือเขตอันตราย

อัตราส่วนยอดคงค้างของ Sloan คือคุณภาพของรายได้
รายได้ที่เป็นเงินสดเป็นของจริง รายได้ที่เป็นยอดคงค้างจะกลับตัว เมื่อค่าเกินประมาณ 25% ไม่ว่าทางใดทางหนึ่ง รายได้นั้นก็เป็นภาพลวงตาทางบัญชีที่กำลังจะสลายไป

Piotroski F-Score มี 9 ข้อใช่/ไม่ใช่ ว่าบริษัทแข็งแกร่งขึ้นทางการเงินจริงหรือไม่ คะแนน 6 ขึ้นไปถือว่าสุขภาพดี

สิ่งที่เปลี่ยนสิ่งนี้จากการบ้านเป็นขั้นตอนการทำงานคือการรันทั้ง 4 ตัวพร้อมกันทั่วทั้งรายการเฝ้าดูของคุณ และอ่านเฉพาะชื่อที่ติดธง ซึ่งเป็นสิ่งที่สคริปต์ด้านล่างทำ
และโปรดอย่าไป implement สิ่งเหล่านี้จากบล็อกสุ่ม เพราะโค้ด M-Score ครึ่งหนึ่งบน GitHub นั้นผิดเล็กน้อย
คลัง FinanceToolkit มีอัตราส่วนมากกว่า 150 ตัว - Beneish, Altman, Piotroski, Sloan ทั้งหมด - โดยมีสูตรเขียนไว้อย่างเปิดเผยเพื่อให้คุณตรวจสอบตัวเลขได้เมื่อคุณไม่เชื่อถือ
จับคู่กับคีย์ FMP สำหรับข้อมูลแล้วคุณก็พร้อม จริงๆ แล้วมันเป็นหนึ่งในคลังการเงินที่ถูกมองข้ามมากที่สุดบน GitHub ที่โปร่งใสและได้รับการดูแลจริงๆ

Beneish ใช้ข้อมูลของปีที่แล้ว ดังนั้นการจัดการอาจจะคลี่คลายไปแล้วเมื่อคุณเห็น มันพลาดการฉ้อโกงจริงบางอย่าง และแจ้งเตือนผิดกับบางบริษัทที่สะอาด คะแนนที่ไม่ดีหมายความว่าให้เปิดเอกสาร มันไม่ใช่เหตุผลในการชอร์ตเพียงลำพัง
L2: ให้ AI อ่านข้อความให้คุณ
คุณคัดกรองแล้ว มีบางอย่างติดธง ตอนนี้คุณเปิด 10-K ซึ่งมีมากกว่า 100 หน้าที่เต็มไปด้วยภาษากฎหมายที่ออกแบบมาให้อ่านไม่รู้เรื่องโดยเฉพาะ
ปล่อยให้ AI ทำงานนั้น
วิธีที่ผิดคือ:
การวางเอกสารทั้งหมดลงในกล่องแชทแล้วถามว่า "นี่เป็นบริษัทที่ดีไหม" มันจะจมน้ำและบอกสิ่งที่คุณอยากได้ยิน
วิธีที่ถูกคือ:
ให้มันเปรียบเทียบปีนี้กับปีก่อน
ดึงส่วนปัจจัยเสี่ยงออกจาก 10-K ของปีนี้และปีก่อน ส่งทั้งสองให้โมเดลและให้งานเดียว
บอกฉันเฉพาะสิ่งที่ใหม่ในปีนี้หรือสิ่งที่ถูกตัดออก อ้างอิงภาษาที่ใหม่ ไม่สนใจข้อความมาตรฐานที่อยู่ในทั้งสอง
บริษัทที่แทรกย่อหน้าเกี่ยวกับการกระจุกตัวของลูกค้าอย่างเงียบๆ เพิ่งบอกคุณว่าลูกค้ารายใหญ่กำลังมีปัญหา บริษัทที่ลบบรรทัดเกี่ยวกับซัพพลายเออร์หลักเพิ่งบอกคุณว่าความสัมพันธ์สิ้นสุดลง ไม่มีสิ่งใดเลยที่เคยปรากฏในข่าวประชาสัมพันธ์ ทนายความเขียนประโยคเหล่านั้นเพราะพวกเขากลัวถูกฟ้อง และความกลัวคือข้อมูลที่อยู่ในข้อความธรรมดาที่ไม่มีใครอ่านซ้ำ
การเปรียบเทียบเดียวกันนี้ใช้ได้กับ MD&A (เรื่องราวของฝ่ายบริหารเอง) และเชิงอรรถ การฉ้อโกงทั้งหมดของ Enron อาศัยอยู่ในเชิงอรรถเกี่ยวกับหน่วยงานนอกงบดุล เรื่องราวเป็นเรื่องโกหก แต่เชิงอรรถไม่ใช่
คลัง edgar-crawler มีอยู่เพียงเพื่อดึงส่วนรายการเหล่านั้น ปัจจัยเสี่ยงและ MD&A ออกมาเป็น JSON ที่สะอาด เพื่อให้คุณไม่ต้องใช้ regex ผ่าน HTML เพื่อให้ได้มา นั่นคืองานทั้งหมดของมัน และมันทำได้ดี ป้อนผลลัพธ์เข้าไปในการเปรียบเทียบของคุณ
ถ้าคุณอยากจ่ายเงินแทนที่จะสร้างเอง นี่คือแผนที่ที่ตรงไปตรงมาของใครที่ทำสิ่งนี้ให้คุณ
Hudson Labs (เดิมคือ Bedrock AI)
มันเป็นตัวเลือกที่ซ่อนอยู่และเป็นตัวที่ผมจะจ่ายจริงๆ มันทำการสกัดธงแดงข้ามปีโดยอัตโนมัติ แสดงภาษาที่เกี่ยวกับความกังวลเรื่องการดำเนินงานต่อเนื่อง จุดอ่อนที่มีสาระสำคัญ ความเสี่ยงจากรายการที่เกี่ยวข้องกันโดยไม่ต้องถาม เริ่มต้นประมาณ $100/เดือน ถ้าคุณอ่านเอกสารอย่างจริงจัง นี่คือคุณค่าที่ดีที่สุดต่อเงินในรายการนี้

AlphaSense
ค่าเริ่มต้นของสถาบัน ราคาประมาณ 15,000-20,000 ดอลลาร์ต่อที่นั่ง ดังนั้นจริงๆ แล้วเฉพาะเมื่อบริษัทของคุณเป็นคนจ่าย มันเป็นเจ้าของ Tegus ซึ่งเป็นคลังสัมภาษณ์นับพันครั้งที่จ่ายเงินกับอดีตผู้บริหารและลูกค้า ใกล้เคียงกับความรู้ภายในที่ถูกกฎหมายที่สุดเท่าที่คุณจะได้ และคุณไม่สามารถสร้างขึ้นมาใหม่ได้ฟรี

Daloopa
ดึงข้อมูลทางการเงินที่พร้อมสำหรับโมเดล โดยทุกตัวเลขมีลิงก์ย้อนกลับไปยังตำแหน่งที่แน่นอนในเอกสาร ร่องรอยการตรวจสอบนั้นคือเหตุผลที่คนที่สร้าง DCF อย่างจริงจังใช้มัน ราคาระดับองค์กร มากเกินไปเว้นแต่การสร้างโมเดลคืองานจริงของคุณ

Fintool เป็น AI-first สร้างสำหรับหุ้นสหรัฐฯ มีการอ้างอิงทุกอย่าง พร้อมการแจ้งเตือนแบบยืน เช่น "ส่ง Ping ให้ฉันเมื่อใดก็ตามที่บริษัทใดกล่าวถึงปัญหาห่วงโซ่อุปทานใหม่"
เป็นจุดกึ่งกลางที่ดีถ้า Hudson ดูเป็นนิติเวชเกินไปและ AlphaSense แพงเกินไป

L3: คริปโต
พลิกไปที่โทเค็น แนวคิดเดียวกันทุกประการ
ในหุ้น การฉ้อโกงซ่อนอยู่ในยอดคงค้างและเชิงอรรถ
ในคริปโต มันซ่อนอยู่ในตารางการปล่อยโทเค็นและการกระจุกตัวของผู้ถือ และทั้งสองอย่างนั้นอยู่ในเชนสาธารณะที่คุณสามารถอ่านได้ฟรี
EDGAR เทียบเท่าของคุณที่นี่คือ DefiLlama

API ฟรี ไม่ต้องใช้คีย์ ครอบคลุม TVL ค่าธรรมเนียม รายได้ และตารางการปลดล็อกของโปรโตคอลส่วนใหญ่
โปรโตคอลมีตัวเลข 3 ตัวที่จับคู่โดยตรงกับบริษัทปกติ
- ค่าธรรมเนียม = ทุกอย่างที่ผู้ใช้จ่าย นั่นคือรายได้รวม
- รายได้ = ส่วนที่โปรโตคอลเก็บไว้จริงๆ นั่นคือรายได้สุทธิ
- กำไร = รายได้ลบด้วยโทเค็นที่พิมพ์เพื่อติดสินบนผู้ใช้ให้มาเข้าร่วมตั้งแต่แรก
Token Terminal ทำให้ตัวเลขเหล่านี้เป็นมาตรฐาน ค่าธรรมเนียม รายได้ กำไร ค่า P/E เทียบเท่าคริปโต ทุกเชนหลัก
เป็น Bloomberg-of-crypto อย่างแท้จริง และการทำให้เป็นมาตรฐานเป็นงานจริงที่คุณเกลียดการทำด้วยมือ แต่มันประมาณ 350 ดอลลาร์/เดือน ซึ่งมากสำหรับคนคนเดียว และระดับฟรีรวมกับ DefiLlama ก็พาคุณไปได้เกือบทั้งหมด

จากนั้น 2 ตัวร้ายแรง เวอร์ชันคริปโตของการคัดกรองนิติเวช
ก่อนอื่น ตารางการปลดล็อก
โทเค็นไม่ได้มีอยู่ทั้งหมดตั้งแต่เริ่มต้น การจัดสรรให้ทีมและ VC จะทยอยได้สิทธิ์ในช่วงหลายปี และเมื่อพวกเขาปลดล็อก คนที่ได้มาใกล้ศูนย์ก็จะได้ทิ้งให้คุณรับช่วง กฎคร่าวๆ การปลดล็อกครั้งเดียวที่มากกว่า 5% ของอุปทานหมุนเวียนคือธงแดง เพื่อให้เห็นภาพจริง การปลดล็อกหน้าผาใหญ่ครั้งแรกของ Arbitrum ปลดล็อกในวันเดียว ปริมาณ ARB ที่ประมาณเท่ากับอุปทานหมุนเวียนทั้งหมดในขณะนั้น วาฬที่ถือตั้งแต่เริ่มต้นได้ออกไปหารายย่อย และวันที่อยู่ในปฏิทินล่วงหน้าหลายเดือน
รู้จัก 3 รูปแบบ
- หน้าผา - ปล่อยก้อนใหญ่ในวันเดียว (รุนแรง)
- ทยอยให้แบบเส้นตรง - หยดทุกวัน (เลือดไหลช้าๆ ที่บางครั้งคุณสามารถถือต่อไปได้)
- การปล่อยตามกิจกรรม หน้าผาเข้าสู่กระเป๋า VC คือตัวที่ทำให้พอร์ตล่มสลาย
ที่สอง การกระจุกตัวของผู้ถือ ใครเป็นเจ้าของจริงๆ ถ้ากระเป๋าเงินไม่กี่ใบถือครองอุปทานส่วนใหญ่และพวกมันถูกระบุว่าเป็นทีมหรือกองทุน VC ระยะแรก ยินดีด้วย คุณคือสภาพคล่องทางออกตามการออกแบบ
นี่คือจุดที่เครื่องมือติดป้ายกระเป๋าเงินมีค่ามาก เพราะข้อมูลเชนดิบเป็นแค่ 0xxxxxxx... จนกว่าจะมีคนบอกคุณว่ามันคือ Jump Trading หรือสัญญา vesting ของทีม
Arkham
เริ่มที่นี่เพราะมันฟรีสำหรับบุคคล ซึ่งไม่มีแพลตฟอร์มจริงจังอื่นใดทำได้ เอ็นจิ้น de-anon เป็นของจริง มันเป็นบริษัทที่ติดตามเงิน Bitcoin ที่ถูกขโมยมูลค่าหลายพันล้านดอลลาร์ไปยังการแฮ็กต่อสาธารณะ คุณสามารถรันการติดตามเอนทิตีเดียวกันนั้นกับโทเค็นใดก็ได้ที่คุณกำลังดู ฟรีคือฟีเจอร์หลัก แค่ใช้มัน
Nansen
ติดตาม "เงินฉลาด" กระเป๋าเงินที่มีประวัติเข้ามาก่อนและถูกต้อง ครอบคลุมหลายเชน เพิ่งลดราคา Pro ลงมากเหลือประมาณ 49 ดอลลาร์/เดือน ป้ายคือผลิตภัณฑ์ทั้งหมดและพวกมันดี แต่ร่องรอยจะหายไปทันทีที่เงินไปถึง exchange แบบรวมศูนย์ คุ้มค่าถ้าคุณเทรดบนเชนอย่างจริงจัง
Dune
แดชบอร์ด SQL ของชุมชนมากกว่า 100,000 รายการที่คุณสามารถ fork ได้โดยไม่ต้องเขียน SQL ด้วยตัวเอง ระดับฟรีก็เพียงพอสำหรับเกือบทุกคน และมีคนสร้างแดชบอร์ดที่คุณต้องการแล้ว ดังนั้นไปหาให้เจอก่อนที่จะสร้างของคุณเอง
Messari งานวิจัยเชิงคุณภาพและการจัดอันดับที่แข็งแกร่ง ราคาไม่โปร่งใสและเน้นองค์กร งานวิจัยฟรีก็คุ้มค่าที่จะอ่าน แต่อย่าคาดหวังของดีโดยไม่ต้องโทรขาย
Tokenomist (เดิมคือ Token Unlocks) เป็นปฏิทินการปลดล็อกโดยเฉพาะ DefiLlama ก็ครอบคลุมการปลดล็อกด้วย แต่ถ้าการซื้อขายปลดล็อกคือสิ่งที่คุณทำทั้งหมด นี่คือผู้เชี่ยวชาญ
L4: ระบบเดียว
ตอนนี้คุณมีส่วนประกอบแล้ว ข้อมูลฟรีทั้งสองฝั่ง คณิตศาสตร์นิติเวช การเปรียบเทียบเอกสาร การคัดกรองบนเชน ชั้นสุดท้ายคือทำให้มันทำงานเป็นเครื่องเดียวแทนที่คุณจะคัดลอกวางข้าม 15 แท็บ
virattt/ai-hedge-fund คือทีมของ AI agent แต่ละตัวจำลองตามปรัชญาของนักลงทุนชื่อดัง ที่โต้เถียงกันเรื่องหุ้นแล้วสรุปการตัดสิน แนวคิดบุคลิกนักลงทุนจริงๆ แล้วเป็นกลเม็ด และคุณไม่ควรใช้มันเทรดจริงด้วยเงินจริง
แต่ในฐานะบทเรียนฟรีเกี่ยวกับวิธีจัดการ agent การวิเคราะห์ วิธีเชื่อมต่อตัวดึงข้อมูลเข้ากับตัวคัดกรองเข้ากับตัวให้เหตุผล มันเป็นครูที่ดีที่สุดบน GitHub ในตอนนี้

OpenBB คือเทอร์มินัล Bloomberg แบบโอเพนซอร์ส เชื่อมต่อผู้ให้บริการข้อมูลของคุณครั้งเดียว ใช้ได้ทุกที่ พร้อม MCP server เพื่อให้ agent ขับเคลื่อนทุกอย่างทั้งหมด มีประสิทธิภาพแต่หนัก การตั้งค่าเป็นงานจริง และคุณภาพข้อมูลขึ้นอยู่กับผู้ให้บริการฟรีที่คุณเชื่อมต่อทั้งหมด คุ้มค่าถ้าคุณต้องการห้องนักบินเดียวสำหรับทุกอย่าง มากเกินไปถ้าคุณแค่อยากคัดกรองชื่อสองสามชื่อ

FinGPT / FinRobot เป็น LLM ทางการเงินแบบโอเพนซอร์สที่คุณสามารถ fine-tune ได้ถูก โดดเด่นทางวิชาการ และใช่ การ fine-tune ถูกกว่าที่คนคิด
แต่สำหรับเกือบทุกคน คุณไม่จำเป็นต้อง fine-tune อะไรเลย โมเดลชั้นนำพร้อมกับ prompt ข้างต้นก็ทำงานได้

ตามลำดับ
ชั้นเครื่องมือก่อน, function calling หรือ MCP server ที่ครอบ EDGAR, FMP, DefiLlama เพื่อให้โมเดลดึงข้อมูลจริงและไม่สร้างขึ้นมา ไม่มีข้อตกลง การที่ AI อ้างตัวเลขทางการเงินโดยไม่มีแหล่งที่มาถือเป็นความรับผิด ไม่ใช่นักวิเคราะห์
ชั้นคัดกรอง คะแนนนิติเวชและการตรวจสอบบนเชนทำงานอัตโนมัติกับทุกสิ่งที่เข้ามาในจักรวาลของคุณ
ชั้นอ่าน การเปรียบเทียบปีต่อปีของสิ่งที่รอดจากการคัดกรอง
ชั้นสังเคราะห์ โมเดลเขียนบันทึกพร้อมการอ้างอิงทุกข้อความ และคุณอ่านบันทึกแทนที่จะอ่าน 200 หน้า
ในเรื่องโมเดล Claude หรือ GPT ก็ใช้ได้ทั้งคู่ ถ้าคุณจัดการข้อมูลที่ละเอียดอ่อนและไม่ต้องการให้เอกสารออกจากเครื่องของคุณ ให้รันโมเดลโอเพนซอร์สในเครื่องผ่าน Ollama โมเดลไม่เคยเป็นอุปสรรค อุปสรรคคือการเชื่อมโยงมันกับข้อมูลที่สะอาด ตรวจสอบแล้ว และมีแหล่งที่มา และชี้คณิตศาสตร์ที่มีวินัยไปที่มัน
L5: สร้าง L1
ส่งรหัสหุ้นให้มัน มันดึงเอกสารจริงจาก EDGAR คำนวณ Beneish, Altman, Piotroski และอัตราส่วนยอดคงค้าง และถ้าคุณให้คีย์ มันจะรันการเปรียบเทียบปัจจัยเสี่ยงปีต่อปีและเขียนข้อสรุปย่อหนึ่งย่อหน้าให้คุณ
1#!/usr/bin/env python32"""3forensic_screener.py - อ่านบริษัทใดๆ เหมือนนักวิเคราะห์ ด้วยคำสั่งเดียว45การติดตั้ง:6 pip install edgartools anthropic7 export SEC_IDENTITY="ชื่อคุณ อีเมลคุณ@example.com" # SEC ต้องใช้ header นี้8 export ANTHROPIC_API_KEY="sk-..." # ไม่บังคับ, ใช้สำหรับการเปรียบเทียบเท่านั้น910การใช้งาน:11 python forensic_screener.py AAPL12 python forensic_screener.py TSLA NVDA SMCI # คัดกรองหลายตัวพร้อมกัน13 python forensic_screener.py SMCI --diff # เพิ่มการเปรียบเทียบปัจจัยเสี่ยง14"""1516import os, sys, argparse17from dataclasses import dataclass1819# ค่าเขตอันตราย - เส้นแบ่งที่เปลี่ยนท่าทีของคุณ ปรับเปลี่ยนได้ตามความเหมาะสม20M_FLAG = -1.78 # Beneish สูงกว่าค่านี้ -> ความเสี่ยงการจัดการ (ค่ามาตรฐาน -2.22)21Z_DISTRESS = 1.81 # Altman ต่ำกว่าค่านี้ -> โซนทุกข์ทางการเงิน22Z_SAFE = 2.99 # Altman สูงกว่าค่านี้ -> โซนปลอดภัย23ACCRUAL_BAD = 0.25 # |ยอดคงค้าง/สินทรัพย์| สูงกว่าค่านี้ -> ธงแดงคุณภาพรายได้24F_STRONG = 6 # Piotroski อย่างน้อยค่านี้ -> แข็งแกร่งขึ้น2526@dataclass27class YearData:28 sales: float; cogs: float; sga: float; net_income: float; cfo: float29 receivables: float; current_assets: float; current_liabilities: float30 ppe_net: float; depreciation: float; total_assets: float31 total_liabilities: float; long_term_debt: float; retained_earnings: float32 ebit: float; market_cap: float; shares: float3334def load_two_years(ticker: str):35 """ส่งคืน (ปีปัจจุบัน, ปีที่แล้ว). เรียก SEC EDGAR ผ่านเครือข่าย."""36 from edgar import Company, set_identity37 identity = os.environ.get("SEC_IDENTITY")38 if not identity:39 sys.exit("ตั้งค่า SEC_IDENTITY='ชื่อคุณ อีเมลคุณ@example.com' - SEC ต้องการค่านี้")40 set_identity(identity)4142 company = Company(ticker)43 fin = company.get_financials()44 inc, bal, cfs = fin.income_statement(periods=2), fin.balance_sheet(periods=2), fin.cash_flow(periods=2)4546 def g(stmt, col, *aliases):47 # การค้นหาแถวแบบพยายามเต็มที่; บริษัทต่างๆ ติดป้ายแนวคิดเดียวกันต่างกัน48 for a in aliases:49 try:50 row = stmt.loc[stmt.index.str.contains(a, case=False, na=False)]51 if not row.empty:52 return float(row.iloc[0, col])53 except Exception:54 continue55 return 0.05657 def build(col):58 return YearData(59 sales=g(inc, col, "RevenueFromContractWithCustomerExcludingAssessedTax", "Revenues", "SalesRevenueNet"),60 cogs=g(inc, col, "CostOfGoodsAndServicesSold", "CostOfRevenue"),61 sga=g(inc, col, "SellingGeneralAndAdministrativeExpense"),62 net_income=g(inc, col, "NetIncomeLoss"),63 cfo=g(cfs, col, "NetCashProvidedByUsedInOperatingActivities"),64 receivables=g(bal, col, "AccountsReceivableNetCurrent", "ReceivablesNetCurrent"),65 current_assets=g(bal, col, "AssetsCurrent"),66 current_liabilities=g(bal, col, "LiabilitiesCurrent"),67 ppe_net=g(bal, col, "PropertyPlantAndEquipmentNet"),68 depreciation=g(cfs, col, "DepreciationDepletionAndAmortization", "DepreciationAmortizationAndAccretionNet"),69 total_assets=g(bal, col, "Assets"),70 total_liabilities=g(bal, col, "Liabilities"),71 long_term_debt=g(bal, col, "LongTermDebtNoncurrent", "LongTermDebt"),72 retained_earnings=g(bal, col, "RetainedEarningsAccumulatedDeficit"),73 ebit=g(inc, col, "OperatingIncomeLoss"),74 market_cap=getattr(company, "market_cap", 0.0) or 0.0,75 shares=g(bal, col, "CommonStockSharesOutstanding"),76 )7778 # col 0 = ปีล่าสุด, col 1 = ปีก่อนหน้า (edgartools จัดลำดับล่าสุดก่อน)79 return build(0), build(1)8081def d(a, b): return a / b if b else 0.0 # การหารอย่างปลอดภัย8283def beneish_m_score(t, p):84 DSRI = d(d(t.receivables, t.sales), d(p.receivables, p.sales))85 GMI = d((p.sales - p.cogs)/p.sales if p.sales else 0, (t.sales - t.cogs)/t.sales if t.sales else 0)86 AQI = d(1 - d(t.current_assets + t.ppe_net, t.total_assets), 1 - d(p.current_assets + p.ppe_net, p.total_assets))87 SGI = d(t.sales, p.sales)88 DEPI = d(d(p.depreciation, p.depreciation + p.ppe_net), d(t.depreciation, t.depreciation + t.ppe_net))89 SGAI = d(d(t.sga, t.sales), d(p.sga, p.sales))90 TATA = d(t.net_income - t.cfo, t.total_assets)91 LVGI = d(d(t.total_liabilities, t.total_assets), d(p.total_liabilities, p.total_assets))92 return (-4.84 + 0.92*DSRI + 0.528*GMI + 0.404*AQI + 0.892*SGI93 + 0.115*DEPI - 0.172*SGAI + 4.679*TATA - 0.327*LVGI)9495def altman_z_score(t):96 wc = t.current_assets - t.current_liabilities97 return (1.2*d(wc, t.total_assets) + 1.4*d(t.retained_earnings, t.total_assets)98 + 3.3*d(t.ebit, t.total_assets) + 0.6*d(t.market_cap, t.total_liabilities)99 + 1.0*d(t.sales, t.total_assets))100101def piotroski_f_score(t, p):102 s = 0103 s += t.net_income > 0104 s += t.cfo > 0105 s += d(t.net_income, t.total_assets) > d(p.net_income, p.total_assets)106 s += t.cfo > t.net_income # เงินสดดีกว่ายอดคงค้าง107 s += t.long_term_debt < p.long_term_debt108 s += d(t.current_assets, t.current_liabilities) > d(p.current_assets, p.current_liabilities)109 s += t.shares <= p.shares # ไม่มีการเจือจาง110 s += d(t.sales - t.cogs, t.sales) > d(p.sales - p.cogs, p.sales)111 s += d(t.sales, t.total_assets) > d(p.sales, p.total_assets)112 return int(s)113114def sloan_accruals(t): return d(t.net_income - t.cfo, t.total_assets)115116def risk_factor_diff(ticker):117 """เปรียบเทียบปัจจัยเสี่ยงปีนี้กับปีที่แล้ว ซึ่งเป็นการอ่านที่ดีที่สุดในระบบ"""118 key = os.environ.get("ANTHROPIC_API_KEY")119 if not key:120 return "(ข้าม - ตั้งค่า ANTHROPIC_API_KEY เพื่อเปิดใช้งานการเปรียบเทียบ)"121 from edgar import Company122 import anthropic123 f = Company(ticker).get_filings(form="10-K").latest(2)124 this_rf = getattr(f[0].obj(), "risk_factors", str(f[0]))125 last_rf = getattr(f[1].obj(), "risk_factors", str(f[1]))126 client = anthropic.Anthropic(api_key=key)127 msg = client.messages.create(128 model="claude-opus-4-8", max_tokens=1024,129 messages=[{"role": "user", "content": (130 "เปรียบเทียบสองส่วนปัจจัยเสี่ยงจากเอกสารประจำปีที่ติดต่อกัน "131 "รายงานเฉพาะสิ่งที่ใหม่ในปีนี้หรือสิ่งที่ถูกลบออก อ้างอิงภาษาที่ใหม่ "132 "ไม่สนใจข้อความมาตรฐานที่อยู่ในทั้งสอง ปิดท้ายด้วยหนึ่งประโยค: มีอะไรที่เปลี่ยนความเสี่ยงหรือไม่?\n\n"133 f"ปีที่แล้ว:\n{last_rf[:40000]}\n\nปีนี้:\n{this_rf[:40000]}")}],134 )135 return msg.content[0].text136137def screen(ticker, do_diff=False):138 print(f"\n{'='*60}\n {ticker.upper()}\n{'='*60}")139 try:140 t, p = load_two_years(ticker)141 except Exception as e:142 print(f" ไม่สามารถโหลดเอกสาร: {e}"); return143144 m, z, f, a = beneish_m_score(t, p), altman_z_score(t), piotroski_f_score(t, p), sloan_accruals(t)145 flags = []146 if m > M_FLAG: flags.append(f"M-Score {m:+.2f} - ความเสี่ยงการจัดการรายได้")147 if z < Z_DISTRESS: flags.append(f"Z-Score {z:.2f} - โซนทุกข์ทางการเงิน")148 if abs(a) > ACCRUAL_BAD: flags.append(f"ยอดคงค้าง {a:+.1%} - ธงแดงคุณภาพรายได้")149 if f < F_STRONG: flags.append(f"F-Score {f}/9 - ไม่แข็งแกร่งขึ้น")150151 print(f" Beneish M : {m:+.2f} (> {M_FLAG} = ตรวจสอบ)")152 print(f" Altman Z : {z:.2f} (< {Z_DISTRESS} ทุกข์, > {Z_SAFE} ปลอดภัย)")153 print(f" Piotroski F: {f}/9 (>= {F_STRONG} แข็งแกร่ง)")154 print(f" Sloan Accr : {a:+.1%} (|x| > {ACCRUAL_BAD:.0%} ธงแดง)")155 print(f"\n คำตัดสิน: {'ตรวจสอบ' if flags else 'สะอาด'}")156 for fl in flags: print(f" - {fl}")157 if do_diff:158 print("\n การเปรียบเทียบปัจจัยเสี่ยง (ปีต่อปี):")159 print(" " + risk_factor_diff(ticker).replace("\n", "\n "))160161def main():162 ap = argparse.ArgumentParser(description="ตัวคัดกรองนิติเวชสำหรับบริษัทมหาชนสหรัฐฯ")163 ap.add_argument("tickers", nargs="+")164 ap.add_argument("--diff", action="store_true", help="รันการเปรียบเทียบปัจจัยเสี่ยงด้วย")165 args = ap.parse_args()166 for tk in args.tickers:167 screen(tk, do_diff=args.diff)168 print("\nเตือน: ธงความน่าจะเป็น ไม่ใช่หลักฐาน Beneish ใช้ข้อมูลปีที่แล้ว "169 "ดังนั้นการจัดการอาจคลี่คลายไปแล้ว คะแนนไม่ดีหมายถึงเปิดเอกสาร "170 "อย่าชอร์ตโดยใช้ตัวเลขเพียงอย่างเดียว\n")171172if __name__ == "__main__":173 main()
ผมตรวจสอบคณิตศาสตร์ก่อนส่ง ป้อนชุดตัวเลขที่ดีเข้าไป มันจะพิมพ์ M สะอาดประมาณ -2.24, Z ในโซนปลอดภัย, F ที่ 9/9, ยอดคงค้างใกล้ศูนย์ ตรงตามที่คุณต้องการ
สิ่งเดียวที่ต้องใช้เครื่องของคุณคือการเชื่อมต่อ SEC สดและคีย์สำหรับการเปรียบเทียบ ชื่ออื่นสำหรับแท็กครอบคลุมผู้ยื่นเอกสารมาตรฐาน ผู้ยื่นเอกสารผิดปกติอาจต้องเพิ่มบรรทัด และผมทำเครื่องหมายไว้ที่ไหน





