Educational 13F Holdings Snapshot Tool

This tool is for educational purposes to analyze a *manually entered subset* of a 13F filing. It does NOT build a clonable portfolio and is NOT investment advice.

Understanding 13F Filings & Their Limitations

What are 13F Filings?
Institutional investment managers in the U.S. with over $100 million in qualifying assets under management are required to file Form 13F with the Securities and Exchange Commission (SEC). This form discloses their U.S. exchange-traded equity holdings (long positions), as well as certain other securities, at the end of each calendar quarter.

Key Uses of 13F Filings:

  • Gain insight into what large, influential investors are holding (their long US equity positions).
  • Identify investment trends or popular stocks among institutional managers.
  • Generate investment ideas for further research (with heavy caveats).

CRITICAL Limitations of 13F Filings for "Cloning":

While 13Fs provide some transparency, they have significant limitations if one were to attempt to "clone" a hedge fund's portfolio:

  • Delayed Information: Filings are made within 45 days *after* the end of a quarter. The disclosed positions are already old and may have changed significantly.
  • Long Positions Only: 13Fs only show long positions in specific types of securities (mainly US equities). They do **not** show short positions, which are critical to many hedge fund strategies.
  • Limited Asset Classes: They do not disclose holdings in cash, bonds, commodities, currencies, private equity, real estate, or most derivatives.
  • No International Holdings: Generally, only US exchange-traded securities are reported. Holdings in international markets are not included.
  • Snapshot in Time: The filing represents holdings on a single day (the end of the quarter). It doesn't show intra-quarter trading activity, entry/exit prices, or the rationale behind positions.
  • Window Dressing: Some managers might adjust positions shortly before the reporting date.
  • Complexity of Actual Strategy: A few top holdings from a 13F do not represent the entirety or complexity of a hedge fund's strategy, risk management, or use of leverage.
IMPORTANT: This tool is designed to help you analyze a *small, manually entered subset* of a 13F filing for educational purposes. It CANNOT and SHOULD NOT be used to attempt to replicate or "clone" a hedge fund's portfolio or performance. Doing so based on 13F data alone is highly unreliable and risky.

You can find 13F filings on the SEC's EDGAR database: SEC EDGAR Search.

Input Top Holdings from a 13F Filing

Manually find a 13F filing for a fund and quarter you are interested in. Then, enter details for a few of its top reported holdings below.

13F Holdings Snapshot Analysis

Please input holding details on the previous tab and click "Analyze Snapshot".

Reminder of Limitations:
  • This analysis reflects only the *small subset of holdings you manually entered* from a specific, historical 13F filing.
  • It is NOT a complete picture of the fund's portfolio or its current positions.
  • 13F data is delayed and only shows long US equity positions. It excludes shorts, international assets, derivatives, cash, and other crucial parts of a hedge fund's strategy.
  • **This tool is for educational purposes only to understand the composition of selected reported holdings and should NOT be used to attempt to clone portfolios or make investment decisions.**

Number of Holdings Analyzed in this Subset: ${inputs.numHoldingsAnalyzed}

User-Entered Holdings Subset:
${holdingsTableHtml}
CRITICAL DISCLAIMER: ${disclaimer_pdf}
`; document.body.appendChild(pdfContentEl); html2canvas(pdfContentEl, { scale: 2, useCORS: true, logging:true, windowWidth: pdfContentEl.scrollWidth, windowHeight: pdfContentEl.scrollHeight }).then(canvas => { const imgData = canvas.toDataURL('image/png'); const pdfWidth = pdf.internal.pageSize.getWidth(); const pdfHeight = pdf.internal.pageSize.getHeight(); let numPages = Math.ceil(canvas.height / ( (pdfHeight - 40) * (canvas.width / (pdfWidth - 40)) ) ); let pageCanvasHeight = (pdfHeight - 40) * (canvas.width / (pdfWidth - 40)); for (let i = 0; i < numPages; i++) { if (i > 0) pdf.addPage(); let sourceY = i * pageCanvasHeight; let sourceHeight = Math.min(pageCanvasHeight, canvas.height - sourceY); const tempCanvas = document.createElement('canvas'); tempCanvas.width = canvas.width; tempCanvas.height = sourceHeight; const ctx = tempCanvas.getContext('2d'); ctx.drawImage(canvas, 0, sourceY, canvas.width, sourceHeight, 0, 0, canvas.width, sourceHeight); const pageImgData = tempCanvas.toDataURL('image/png'); const pageImgHeight = (sourceHeight * (pdfWidth - 40)) / canvas.width; pdf.addImage(pageImgData, 'PNG', 20, 20, pdfWidth - 40, pageImgHeight, undefined, 'FAST'); } pdf.save(`${(inputs.fundName || "13F_Snapshot").replace(/[^a-z0-9]/gi, '_')}.pdf`); if(document.body.contains(pdfContentEl)) document.body.removeChild(pdfContentEl); }).catch(err => { console.error("13F Snapshot PDF Error:", err); alert("Error generating PDF. See console."); if(document.body.contains(pdfContentEl)) document.body.removeChild(pdfContentEl); }); } document.addEventListener('DOMContentLoaded', function() { hfc_generateHoldingInputs(); // Initialize with default number of holding inputs hfc_openTab({}, 'hfc_tab_intro'); if (!document.getElementById('hfc_fundName')) { console.error("Critical input 'hfc_fundName' not found."); } // Add event listener to the select for number of holdings const numHoldingsSelect = document.getElementById('hfc_numHoldings'); if (numHoldingsSelect) { // No need to call hfc_generateHoldingInputs here again, it's called on DOMContentLoaded // and its onchange calls it too. } // Ensure "Add Another Holding" button is managed correctly const addBtn = document.getElementById('hfc_addHoldingButton'); if(addBtn) { const numSelected = parseInt(document.getElementById('hfc_numHoldings').value); addBtn.style.display = numSelected < 10 ? 'inline-block' : 'none'; // The select's onchange now calls hfc_generateHoldingInputs, which will also manage this button. // The hfc_addHoldingRowDynamic function adds one by one if select is not used initially. } });
Scroll to Top