FinForge - Complete User Guide
Welcome to FinForge! This comprehensive guide covers everything you need to know to use the application effectively.
Table of Contents
- Getting Started
- Ticker Management
- Importing Data to Excel
- Creating Financial Ratios
- Assigning Ratios to Excel
- Advanced Ratio Features
- Quick Reference
- Available Data Reference
- Color Reference
- Data Cleanup System
- Troubleshooting
- Ranking Tab
1. Getting Started
What is FinForge?
FinForge is a financial analysis tool that:
- Fetches real-time stock data from Yahoo Finance
- Stores data efficiently in Parquet format
- Imports financial statements into Excel
- Lets you create custom financial ratios
- Calculates and displays ratios for multiple tickers
Quick Start
Step 1: Launch the Application
Option A - Using the Batch File (Recommended)
- Double-click
launch_finforge.batin the main folder - The FinForge window will open
Step 2: Open the Workspace
- In the launcher, click Open terminal
- The main workspace opens with a collapsible sidebar: Overview (Home, Search), Data (Statement Lines, Metrics, Rates), Models (Visualize, Ranking, DCF) and System (Templates, Settings)
Step 3: Add Your First Ticker
- Go to the Search tab
- Type a ticker symbol (e.g.,
AAPL) in the search bar - Select the ticker from search results and add it to the import list
- Data fetching starts automatically in the background
Step 4: Import Financial Data to Excel
- In the Statement Lines tab, choose Balance sheet or Income statement scope
- Select the line items you want to print
- Click Import to send data to Excel
System Requirements
- Windows 10 or later
- Microsoft Excel (with macros enabled)
- Python 3.10+ (included in .venv)
- Node.js 18+ (for Electron, auto-installed by setup)
- Internet connection (for data fetching)
First-Time Setup
If this is your first time using the app:
- Run
setup.batto install all dependencies - Enable Excel Macros
- Open Excel, go to File > Options > Trust Center
- Click Trust Center Settings > Macro Settings
- Select “Enable all macros”
Folder Structure
FinForge/
FinForge.xlsm <- Main Excel workbook
launch_finforge.bat <- Quick launcher
setup.bat <- First-time setup
data/ <- All fetched data stored here
fundamentals/ <- Financial statements
holders/ <- Holder information
metadata/ <- Company info
prices/ <- Price history
ElectronHome/ <- Electron desktop UI
Guides/ <- Documentation
User/ <- User guides
Developer/ <- Technical docs
Importing/ <- Import scripts
Internal/ <- Core modules
Ticker_management/ <- Ticker CRUD
data_management/ <- Data persistence
2. Ticker Management
Learn how to add, edit, and manage stock tickers in your portfolio.
Opening the Ticker Manager
The ticker management is built into FinForge. Launch it by:
- Double-clicking
launch_finforge.bat, or - Running from command line (see Getting Started)
Adding Tickers
Single Ticker
- Type the ticker symbol in the input field (e.g.,
MSFT) - Click Add or press Enter
- The ticker appears in the list
- Data fetching starts automatically in the background
Example:
Input: AAPL
Result: Apple Inc. added to list, data fetching begins
Validation Rules
- Tickers must be 1-5 letters only
- No numbers or special characters
- Duplicates are not allowed
Removing Tickers
Delete a Single Ticker
- Find the ticker in the list
- Click the X (delete) button next to it
- Confirm the deletion
What Happens to the Data?
When you remove a ticker:
- The ticker is removed from your list immediately
- The data is scheduled for deletion in 3 days
- If you re-add the ticker within 3 days, the data is preserved
- After 3 days, data is permanently deleted on next app launch
Editing Tickers
- Find the ticker in the list
- Click the Edit button
- Enter the new ticker symbol
- Click OK
Note: Editing a ticker schedules the old ticker’s data for deletion.
Selecting Tickers for Launch
When launching the Excel dashboard:
- Click on tickers to select/deselect them
- Selected tickers will be highlighted
- Click Launch Dashboard to open Excel with selected tickers
Fetching Data
Automatic Fetching
Data is fetched automatically when you:
- Add a new ticker
- Launch the dashboard with tickers that need updates
What Data is Fetched?
For each ticker, the app fetches:
| Category | Data Types |
|---|---|
| Financials | Income statement, balance sheet, cash flow (annual and quarterly) |
| Analyst | Earnings estimates, revenue estimates, price targets, recommendations |
| Holders | Major, institutional, mutual fund holders, insider roster |
| Insider | Transactions, purchases summary |
| Historical | Dividends, splits, price history |
| Other | News, SEC filings, calendar, company info |
Where is Ticker Data Stored?
Tickers are saved in: data/tickers.json
{
"tickers": ["MSFT", "AAPL", "GOOGL"]
}
Stock data is stored in: data/ folder as Parquet files
3. Importing Data to Excel
Learn how to import financial statement data from your stored Parquet files into Excel.
Overview
The import system transfers data from Parquet files to your Excel workbook:
- Balance sheet data goes to the “balance sheets” sheet
- Income statement data goes to the “income statements” sheet
Prerequisites
Before importing:
- Have tickers with fetched data (see Ticker Management)
- Have Excel workbook open (
FinForge.xlsm) - Tickers should be listed in Row 4 of the respective sheet
Importing Balance Sheets
From Excel (VBA Macro)
- Open
FinForge.xlsm - Go to the “balance sheets” sheet
- Run the macro:
ImportBalanceSheets()- Press
Alt + F8 - Select
ImportBalanceSheets - Click Run
- Press
From Python
cd <your-finforge-folder>
.\.venv\Scripts\Activate.ps1
python -c "from Importing.import_balance_sheets import main; main()"
What Gets Imported
| Row | Content |
|---|---|
| 4 | Ticker symbols (you place these) |
| 5 | Most recent date |
| 6 | Second most recent date |
| 7+ | Financial line items |
Example Layout:
A B C D
4 INDEX MSFT AAPL GOOGL
5 2024-06-30 2024-06-30 2024-06-30
6 2024-03-31 2024-03-31 2024-03-31
7 Total Assets $411.9B $352.5B $402.3B
8 Cash $18.3B $28.4B $24.0B
...
Importing Income Statements
From Excel (VBA Macro)
- Open
FinForge.xlsm - Go to the “income statements” sheet
- Run the macro:
ImportIncomeStatements()- Press
Alt + F8 - Select
ImportIncomeStatements - Click Run
- Press
From Python
cd <your-finforge-folder>
.\.venv\Scripts\Activate.ps1
python -c "from Importing.import_income_statements import main; main()"
Customizing Which Items to Import
Using the Settings Sheet
- Go to the “Settings” sheet in Excel
- Find the section for Balance Sheet or Income Statement items
- List the items you want to import (one per row)
- Run the import again
Example Settings:
Balance Sheet Items:
Total Assets
Total Liabilities
Stockholders Equity
Cash And Cash Equivalents
Total Debt
Understanding Color Codes
After importing, cells are color-coded:
| Color | Meaning |
|---|---|
| Orange text | Data found and imported successfully |
| Red text | Data not available for this ticker |
| White text | Empty/no value |
Tips for Successful Imports
Setting Up Tickers
- In the import sheet (balance sheets or income statements)
- Go to Row 4
- Column A should say “INDEX”
- Enter ticker symbols in columns B, C, D, etc.
Example:
Row 4: INDEX | MSFT | AAPL | GOOGL | AMZN
After Adding New Tickers
- First, fetch data using the launcher or fetch script
- Then run the import macro
- Data will populate for the new tickers
Refreshing Data
To update with latest data:
- Run the fetch script to get new data from Yahoo Finance
- Run the import macro to update Excel
4. Creating Financial Ratios
Learn how to create custom financial ratios using the Ratio Maker tool.
What are Financial Ratios?
Financial ratios are calculations that use financial statement data to measure:
- Profitability (e.g., Profit Margin, ROE)
- Liquidity (e.g., Current Ratio, Quick Ratio)
- Leverage (e.g., Debt-to-Equity)
- Efficiency (e.g., Asset Turnover)
- Valuation (e.g., P/E Ratio, P/B Ratio)
Opening the Ratio Maker
From Excel
- Open
FinForge.xlsm - Run the macro:
OpenRatioMaker()- Press
Alt + F8 - Select
OpenRatioMaker - Click Run
- Press
From Python
cd <your-finforge-folder>
.\.venv\Scripts\Activate.ps1
python Importing/ratio_maker.py
Built-in Ratios
FinForge ships with a ready-made set of the most widely used financial ratios, so you do not have to build them yourself before you can analyse a company.
They live inside the built-in Beginning Template. Open the Templates tab and the Beginning Template is listed with a lock icon. Select it and click Load template to copy its ratios into your workspace. The Metrics tab then lists all of them, grouped by category:
| Category | Examples |
|---|---|
| Liquidity | Current Ratio, Quick Ratio, Cash Ratio, Working Capital, Operating Cash Flow Ratio |
| Profitability | Gross Margin, Operating Margin, Net Profit Margin, EBITDA Margin, Return on Assets, Return on Equity, Return on Invested Capital, Return on Capital Employed |
| Efficiency | Asset Turnover, Inventory Turnover, Receivables Turnover, Days Sales Outstanding, Cash Conversion Cycle |
| Leverage and Solvency | Debt to Equity, Debt to Assets, Net Debt to EBITDA, Interest Coverage, Equity Multiplier |
| Cash Flow | Operating Cash Flow Margin, Free Cash Flow Margin, Cash Flow to Net Income, Dividend Payout Ratio |
| Valuation | P/E Ratio, PEG Ratio, Price to Book, EV/EBITDA, EV/Revenue, Dividend Yield |
| Growth and Per Share | Revenue Growth YoY, EPS Growth YoY, Book Value per Share, Free Cash Flow per Share |
Notes on how they behave:
- Most ratios are calculated from the financial statements, so they follow the statement periods and produce a history you can chart.
- The Valuation ratios come from live market data and show a single current value rather than a history. That is a limit of the data provider, not of the ratio.
- Growth ratios report percentages, so
12.5means twelve and a half percent. All other ratios report a decimal fraction, so0.125means twelve and a half percent. - Each ratio carries a short note explaining what it measures.
The Beginning Template itself cannot be edited or deleted. You can still change any of its ratios after loading it, and you can add, rename or delete your own ratios as usual.
Creating Your First Ratio
Step 1: Click “New Ratio”
The Create Ratio dialog opens.
Step 2: Enter Ratio Name
Give your ratio a descriptive name:
- “Gross Margin”
- “Current Ratio”
- “Debt to Equity”
Step 3: Build the Formula
Use the field selector and operators to build your formula.
Available Data Sources:
| Prefix | Source | Example Fields |
|---|---|---|
IS: |
Income Statement | Total Revenue, Net Income, EBITDA |
BS: |
Balance Sheet | Total Assets, Total Debt, Cash |
CF: |
Cash Flow | Operating Cash Flow, Free Cash Flow |
RATIO: |
Other Ratios | Use your previously created ratios |
Available Operators:
| Button | Operation |
|---|---|
+ |
Addition |
- |
Subtraction |
* |
Multiplication |
/ |
Division |
( |
Open parenthesis |
) |
Close parenthesis |
Step 4: Add Notes (Optional)
Add a description or notes about the ratio:
- What it measures
- How to interpret it
- Reference ranges
Step 5: Save
Click Save to store the ratio in ratio_config.json.
Formula Examples
Profitability Ratios
Gross Margin
(IS: Total Revenue - IS: Cost Of Revenue) / IS: Total Revenue
Operating Margin
IS: Operating Income / IS: Total Revenue
Net Profit Margin
IS: Net Income / IS: Total Revenue
Return on Assets (ROA)
IS: Net Income / BS: Total Assets
Return on Equity (ROE)
IS: Net Income / BS: Stockholders Equity
Liquidity Ratios
Current Ratio
BS: Current Assets / BS: Current Liabilities
Quick Ratio
(BS: Current Assets - BS: Inventory) / BS: Current Liabilities
Leverage Ratios
Debt to Equity
BS: Total Debt / BS: Stockholders Equity
Debt to Assets
BS: Total Debt / BS: Total Assets
Efficiency Ratios
Asset Turnover
IS: Total Revenue / BS: Total Assets
Using Other Ratios
ROE using DuPont Analysis
RATIO: Net Profit Margin * RATIO: Asset Turnover * RATIO: Equity Multiplier
Understanding Syntax Highlighting
As you type, the formula is color-coded:
| Color | Meaning |
|---|---|
| Green | Income Statement fields (IS:) |
| Light Blue | Balance Sheet fields (BS:) |
| Purple | Price/Cash Flow fields |
| Orange | Operators (+, -, *, /) |
| Yellow | Parentheses |
| Gold | Other Ratios (RATIO:) |
| Light Blue | Numbers |
| Red + Wavy | Errors (typos, invalid fields) |
Editing Existing Ratios
- Select the ratio in the list
- Click Edit
- Modify the name, formula, or notes
- Click Save
Note: If the ratio is assigned to an Excel column, the column header is automatically updated with the new name.
Deleting Ratios
- Select the ratio in the list
- Click Delete
- Confirm the deletion
Warning: If the ratio is assigned to an Excel column, unassign it first.
Where are Ratios Stored?
Ratios are saved in: Importing/ratio_config.json
The file is a flat map of ratio name to definition:
{
"Gross Margin": {
"formula": "(IS: Total Revenue - IS: Cost Of Revenue) / IS: Total Revenue",
"notes": "Measures profitability after direct costs",
"row": "",
"folder": "Profitability"
},
"Current Ratio": {
"formula": "BS: Current Assets / BS: Current Liabilities",
"notes": "Measures short-term liquidity",
"row": "",
"folder": "Liquidity"
}
}
| Field | Meaning |
|---|---|
formula |
The calculation. Uses BS:, IS:, CF:, P:, M: and other references. |
notes |
Optional description shown in the Metrics tab. |
row |
Optional fixed row in the Excel Metrics sheet. Leave empty to auto-assign from row 7. |
folder |
Category used by the folder filter and the Folders subtab. Leave empty for ungrouped. |
Tips for Creating Good Ratios
- Use descriptive names - “Gross Margin” not “GM1”
- Add notes - Document what the ratio measures
- Test with known values - Verify calculations are correct
- Use parentheses - Ensure correct order of operations
- Check field names - Use exact field names from the data
5. Assigning Ratios to Excel
Learn how to assign your created metrics to rows in Excel for automatic calculation.
Key Features
What You Can Do:
- Assign Metrics: Give any saved metric a row in Column A of the Metrics sheet
- View Status: See every metric and whether it has a row yet
- View Notes: Read the notes saved with a metric
- Calculate Metrics: Compute every assigned metric for every ticker using Parquet data
- Tickers: Tickers come from Row 4, so the ones you imported in the Statement Lines tab are used automatically
Benefits:
- Fast: Uses Parquet data for quick calculations
- Reliable: Minimal VBA, all logic in Python
- Simple: Clean UI with clear feedback
- Flexible: Any metric can sit in any free row
Excel Layout (Metrics Sheet)
The Metrics sheet is a grid: metric names run down Column A, and one column per ticker runs across Row 4.
Row 4: ticker symbols in row 4
A4: empty, B4: AAPL, C4: MSFT, D4: GOOGL
Row 5: reserved, left empty
Row 6: reserved, left empty
Row 7: A7: Current Ratio, B7: 1.2500, C7: 1.3000, D7: 1.1800
Row 8: A8: Quick Ratio, B8: 0.8500, C8: 0.9200, D8: 0.7800
Row 9: A9: Debt to Equity, B9: 0.4500, C9: 0.3800, D9: 0.5200
Column Structure:
- Column A: Metric names, written by FinForge from Row 7 onwards
- Columns B onwards: Ticker symbols in Row 4, calculated values below
Row Functions:
- Row 4: Ticker symbols, plus the special
INDEXandCUSTOMcolumn types - Rows 5 and 6: Reserved and left empty
- Row 7+: Metric names in Column A and their calculated values per ticker
A column marked INDEX in Row 4 is filled with the metric names, mirroring the
balance sheet and income statement sheets. A column marked CUSTOM is never
touched by FinForge, so your own formulas there stay intact.
How to Use
Step 1: Create Your Metrics
Metrics are created in the Metrics tab of the FinForge workspace, or loaded from the built-in Beginning Template (see Creating Ratios).
Step 2: Assign a Row to Each Metric
- Open the FinForge workspace
- Go to the Metrics tab
- Click the Assignments subtab
- Every saved metric is listed with a row box on the right
- Type the row it should occupy in Column A (7 or higher) and press Enter
Rules:
- Rows must be 7 or higher - the earlier rows are reserved for headers
- Two metrics cannot share a row - a duplicate row is flagged in red
- Leave a row box empty to keep a metric out of the sheet (shown as
N/A) - Metrics are written to Column A in row order, so gaps are allowed
Step 3: View Metric Notes
Notes are stored with each metric. Open the metric in the Metrics tab, or
read its notes field in Importing/ratio_config.json.
Step 4: Set the Tickers
Tickers are read from Row 4 of the Metrics sheet, columns B onwards. They come from the tickers you imported in the Statement Lines tab, so there is normally nothing to type.
Step 5: Calculate the Metrics
From the FinForge Workspace:
- Go to the Metrics tab
- Click Refresh metrics sheet in the Actions panel
From Python:
python -c "from Internal.Ratios.ratio_calculator import calculate_ratios; calculate_ratios()"
What Happens:
- The system reads the tickers from Row 4 and the metric names from Column A
- Loads financial data from the Parquet files
- Calculates each assigned metric for each ticker
- Writes the results into the matching cells
- Reports progress while it runs
Step 6: Update an Assignment
- Go back to the Assignments subtab
- Change the row number for the metric, or clear it to remove it
- Click Refresh metrics sheet so the sheet is rewritten for the new layout
Excel Ribbon
The FinForge add-in adds a FinForge tab with two groups:
- Dashboard > Dashboard opens the FinForge app
- Formulas > Refresh Custom Formulas regenerates the
FF.*worksheet functions from your saved metrics
The sheet refresh itself is driven from the workspace, so there is no separate macro to run in Excel.
Example Workflow
Complete Example:
-
Create the metrics in the Metrics tab
- Current Ratio:
BS: Current Assets / BS: Current Liabilities - Quick Ratio:
BS: Cash / BS: Current Liabilities
- Current Ratio:
-
Assign rows in the Assignments subtab
- Current Ratio > row 7
- Quick Ratio > row 8
-
Check the tickers in Row 4 of the Metrics sheet
B4: AAPL C4: MSFT D4: GOOGL -
Calculate
- Click Refresh metrics sheet in the Metrics tab
- See results:
B7: 1.2500 C7: 1.3000 D7: 1.1800 B8: 0.8500 C8: 0.9200 D8: 0.7800 -
Update if Needed
- Change a row number in the Assignments subtab, then refresh again
Best Practices
- Create metrics first before trying to assign rows
- Import tickers before calculating, so Row 4 is populated
- Use meaningful metric names for easy identification
- Add notes to metrics to remember what they do
- Refresh data regularly to keep metrics up to date
- Save the workbook after a refresh
6. Advanced Ratio Features
Horizontal Operator Layout
All operators and buttons are arranged left-to-right for an intuitive workflow.
Operator Buttons:
+Addition-Subtraction*Multiplication/or division sign Division (toggleable)(Opening parenthesis)Closing parenthesis
Real-Time Syntax Highlighting
As you type or insert items, the formula is immediately color-coded:
| Element | Color | Example |
|---|---|---|
| Operators | Orange (#FF9800) | +, -, *, / |
| Brackets | Yellow (#FFD700) | (, ) |
| Income Statement | Green (#81C784) | IS: Revenue, IS: Net Income |
| Balance Sheet | Light Blue (#81D4FA) | BS: Total Assets, BS: Cash |
| Price Data | Purple (#CE93D8) | P: Closing Price |
| Functions | Yellow-Orange (#FFC107) | AVERAGE, SUM, MAX |
| Numbers | Light Blue (#90CAF9) | 100, 1.5, 0.25 |
| Errors | Red (#F44336) | Invalid fields, typos |
Error Detection and Highlighting
Invalid tokens are automatically detected and marked with:
- Red text color
- Wavy red underline
Examples of errors:
- Typos:
IS: Reveneu(misspelled) - Invalid fields:
XYZ: Unknown - Incomplete operators:
IS: Revenue +(missing right operand)
Advanced Functions
Advanced functions are coming soon. Currently supported features include:
- Basic price data (Close, Open, High, Low, Volume)
- Historical price offsets using
[-XD]syntax - Calculated fields (Change, Change Percent)
Color Legend
A built-in color legend appears above the formula preview showing:
Operators Brackets IS: Items BS: Items P: Items Errors
Each bullet is colored to match its syntax highlighting.
Usage Examples
Example 1: Simple Ratio with Highlighting
Gross Margin Formula:
(IS: Revenue - IS: Cost of Revenue) / IS: Revenue
How it appears:
(and)in yellowIS: Revenuein green-and/in orangeIS: Cost of Revenuein green
Example 2: Price Data with Historical Offset
10-Day Price Change Percent:
P: Change Percent [-10D]
How it appears:
P: Change Percentin purple[-10D]offset in brackets(and)in yellowIS: Revenuein green50in light blue
Example 3: Error Detection
Typo in field name:
IS: Reveneu / IS: Cost
How it appears:
IS:in green (valid prefix)Reveneuin red with wavy underline (invalid field)/in orangeIS: Costin red with wavy underline (incomplete field name)
Best Practices
Use Color Feedback
- Green/Blue/Purple = Valid fields
- Orange/Yellow = Valid operators/brackets
- Red = Fix immediately!
Validation Before Saving
- Check for red errors
- Verify all fields are green, blue, or purple
- Ensure operators are orange or yellow
7. Quick Reference
Color Guide (At-a-Glance)
Orange > Operators > + - * /
Yellow > Brackets > ( )
Green > IS: Items > Revenue, Net Income, EBITDA
Light Blue > BS: Items > Total Assets, Cash, Debt
Purple > P: Items > Close Price, Change Percent
Light Blue > Numbers > 100, 1.5, 3.14
Red + Wave > Errors > Typos, invalid fields
Button Layout (Horizontal)
Operators: [ + ] [ - ] [ * ] [ / ] [ ( ] [ ) ]
Common Formulas
Gross Margin
(IS: Revenue - IS: Cost of Revenue) / IS: Revenue
Current Ratio
BS: Current Assets / BS: Current Liabilities
P/E Ratio
P: Closing Price / IS: Earnings Per Share
ROE (Return on Equity)
IS: Net Income / BS: Total Equity
Debt-to-Equity
BS: Total Debt / BS: Total Equity
Operating Margin
IS: Operating Income / IS: Revenue
Working Capital
BS: Current Assets - BS: Current Liabilities
Pre-Save Checklist
- No red errors
- All fields are green/blue/purple
- Operators are orange/yellow
- Brackets match
- Formula makes sense
Quick Actions
| Action | How |
|---|---|
| Add field | Select > Insert Field |
| Add operator | Click operator button |
| Add function | Click Advanced Functions |
| Add notes | Click Notes |
| Save ratio | Click green Save |
| Cancel | Click Cancel |
File Locations
- Ratio Config:
Importing/ratio_config.json - Main App:
Importing/ratio_maker.py
8. Available Data Reference
This section lists all data fetched from Yahoo Finance and stored in Parquet format.
Data Storage Structure
data/
fundamentals/
income_statement/{TICKER}.parquet
balance_sheet/{TICKER}.parquet
cash_flow/{TICKER}.parquet
quarterly_income_statement/{TICKER}.parquet
quarterly_balance_sheet/{TICKER}.parquet
quarterly_cash_flow/{TICKER}.parquet
earnings_estimate/{TICKER}.parquet
revenue_estimate/{TICKER}.parquet
analyst_price_targets/{TICKER}.parquet
eps_trend/{TICKER}.parquet
growth_estimates/{TICKER}.parquet
earnings_history/{TICKER}.parquet
recommendations/{TICKER}.parquet
recommendations_summary/{TICKER}.parquet
upgrades_downgrades/{TICKER}.parquet
insider_transactions/{TICKER}.parquet
insider_purchases/{TICKER}.parquet
calendar/{TICKER}.parquet
dividends/{TICKER}.parquet
splits/{TICKER}.parquet
actions/{TICKER}.parquet
news/{TICKER}.parquet
sec_filings/{TICKER}.parquet
holders/
major_holders/{TICKER}.parquet
institutional_holders/{TICKER}.parquet
mutualfund_holders/{TICKER}.parquet
insider_roster_holders/{TICKER}.parquet
prices/
{TICKER}.parquet
metadata/
{TICKER}.json
Income Statement Fields
| Field | Description |
|---|---|
| Total Revenue | Total revenue from all sources |
| Operating Revenue | Revenue from core operations |
| Cost Of Revenue | Direct costs of goods/services sold |
| Gross Profit | Revenue minus cost of revenue |
| Operating Expense | Operating costs (R&D, SG&A, etc.) |
| Research And Development | R&D spending |
| Selling General And Administration | SG&A expenses |
| Operating Income | Profit from core operations |
| Pretax Income | Income before taxes |
| Tax Provision | Income tax expense |
| Net Income | Net income attributable to company |
| Net Income Common Stockholders | Net income for common shareholders |
| Basic EPS | Earnings per share (basic) |
| Diluted EPS | Earnings per share (diluted) |
| EBIT | Earnings before interest and taxes |
| EBITDA | Earnings before interest, taxes, depreciation and amortization |
Balance Sheet Fields
Assets
| Field | Description |
|---|---|
| Total Assets | Sum of all assets |
| Current Assets | Assets convertible to cash within 1 year |
| Cash And Cash Equivalents | Cash on hand |
| Receivables | Money owed to company |
| Inventory | Goods held for sale |
| Total Non Current Assets | Long-term assets |
| Net PPE | Property, plant and equipment (net) |
| Goodwill | Goodwill from acquisitions |
Liabilities
| Field | Description |
|---|---|
| Total Liabilities Net Minority Interest | All liabilities |
| Current Liabilities | Debts due within 1 year |
| Accounts Payable | Supplier payables |
| Current Debt | Short-term borrowings |
| Long Term Debt | Long-term borrowings |
Equity
| Field | Description |
|---|---|
| Total Equity Gross Minority Interest | Total equity |
| Stockholders Equity | Shareholder equity |
| Common Stock | Common shares value |
| Retained Earnings | Accumulated profits |
Calculated Metrics
| Field | Description |
|---|---|
| Net Debt | Total debt minus cash |
| Total Debt | Sum of all debt |
| Working Capital | Current assets minus current liabilities |
| Invested Capital | Equity plus debt |
Cash Flow Statement Fields
Operating Activities
| Field | Description |
|---|---|
| Operating Cash Flow | Cash from operations |
| Net Income From Continuing Operations | Starting net income |
| Depreciation Amortization Depletion | Non-cash depreciation |
| Stock Based Compensation | Stock-based comp expense |
| Change In Working Capital | Working capital changes |
Investing Activities
| Field | Description |
|---|---|
| Investing Cash Flow | Cash used in investing |
| Capital Expenditure | CapEx spending |
| Purchase Of Investment | Investment purchases |
| Sale Of Investment | Investment sales |
Financing Activities
| Field | Description |
|---|---|
| Financing Cash Flow | Cash from financing |
| Issuance Of Debt | New debt raised |
| Repayment Of Debt | Debt repayments |
| Common Stock Issuance | Common stock issued |
| Cash Dividends Paid | Dividend payments |
Summary
| Field | Description |
|---|---|
| Changes In Cash | Total cash change |
| Free Cash Flow | Operating cash minus CapEx |
Analyst Estimates
Earnings Estimate
| Column | Description |
|---|---|
| avg | Average EPS estimate |
| low | Low EPS estimate |
| high | High EPS estimate |
| yearAgoEps | EPS from same period last year |
| numberOfAnalysts | Number of analysts |
| growth | Expected growth rate |
Revenue Estimate
| Column | Description |
|---|---|
| avg | Average revenue estimate |
| low | Low revenue estimate |
| high | High revenue estimate |
| numberOfAnalysts | Number of analysts |
Analyst Price Targets
| Field | Description |
|---|---|
| current | Current stock price |
| high | Highest analyst target |
| low | Lowest analyst target |
| mean | Average target price |
| median | Median target price |
Holder Data
Major Holders
| Metric | Description |
|---|---|
| insidersPercentHeld | Percentage held by insiders |
| institutionsPercentHeld | Percentage held by institutions |
| institutionsFloatPercentHeld | Institutional % of float |
| institutionsCount | Number of institutional holders |
Institutional Holders
| Column | Description |
|---|---|
| Holder | Institution name |
| pctHeld | Percentage of shares held |
| Shares | Number of shares |
| Value | Dollar value of position |
Price Data
| Column | Description |
|---|---|
| Date | Trading date |
| Open | Opening price |
| High | Day high |
| Low | Day low |
| Close | Closing price |
| Volume | Trading volume |
| Dividends | Dividend amount (if any) |
| Stock Splits | Split ratio (if any) |
Using This Data in Ratio Formulas
Use these prefixes to reference data:
| Prefix | Data Source |
|---|---|
| IS: | Income Statement |
| BS: | Balance Sheet |
| CF: | Cash Flow |
Example formulas:
IS: Net Income / BS: Total Assets(ROA)BS: Total Debt / BS: Stockholders Equity(Debt to Equity)CF: Free Cash Flow / IS: Net Income(FCF Conversion)
9. Color Reference
Syntax Highlighting Color Palette
Operator Colors
ORANGE (#FF9800) - Arithmetic Operators
+ (addition)
- (subtraction)
* (multiplication)
/ (division)
Bracket Colors
YELLOW (#FFD700) - Grouping Brackets
( (open parenthesis)
) (close parenthesis)
Financial Item Colors
Income Statement Items
GREEN (#81C784) - Income Statement Fields
IS: Revenue
IS: Net Income
IS: Operating Income
IS: EBITDA
... (any field prefixed with "IS:")
Balance Sheet Items
LIGHT BLUE (#81D4FA) - Balance Sheet Fields
BS: Total Assets
BS: Total Equity
BS: Total Liabilities
BS: Cash
... (any field prefixed with "BS:")
Price/Market Data
PURPLE (#CE93D8) - Price & Market Data
P: Closing Price
P: Opening Price
P: Volume
... (any field prefixed with "P:")
Function Colors
YELLOW-ORANGE (#FFC107) - Advanced Functions
AVERAGE
SUM
MAX
MIN
MEDIAN
STDEV
Number Colors
LIGHT BLUE (#90CAF9) - Numeric Literals
100
1.5
0.25
Error Colors
RED (#F44336) - Invalid Tokens/Errors
- Misspelled field names
- Unknown prefixes
- Unrecognized tokens
- Typos
Visual indicators:
- Red text color
- Wavy red underline
Example Formulas with Color Coding
Gross Margin
(IS: Revenue - IS: Cost of Revenue) / IS: Revenue
Colors:
(,)= YellowIS: Revenue= Green (appears twice)IS: Cost of Revenue= Green-,/= Orange
Current Ratio
BS: Current Assets / BS: Current Liabilities
Colors:
BS: Current Assets= Light BlueBS: Current Liabilities= Light Blue/= Orange
P/E Ratio
P: Closing Price / IS: Earnings Per Share
Colors:
P: Closing Price= PurpleIS: Earnings Per Share= Green/= Orange
Error Example (Typo)
IS: Reveneu / BS: Totl Assets
Colors:
IS:= Green (valid prefix)Reveneu= Red + wavy underline (invalid)/= OrangeBS:= Light Blue (valid prefix)Totl Assets= Red + wavy underline (invalid)
Dark Theme Background Colors
Dialog Background
- Main: #121212 (Very Dark Gray)
- Input Fields: #1E1E1E (Dark Gray)
- Borders: #2C2C2C (Medium Dark Gray)
Text Colors
- Primary Text: #E0E0E0 (Light Gray)
- Secondary Text: #B0B0B0 (Medium Gray)
Accent Colors
- Primary Accent: #29B6F6 (Light Blue)
- Success: #4CAF50 (Green)
- Danger: #E57373 (Red)
- Warning: #FFA726 (Orange)
10. Data Cleanup System
Overview
FinForge includes an automatic data cleanup system that manages parquet file storage when tickers are removed or changed. This prevents the system from accumulating unused data while providing a safety window to recover accidentally deleted tickers.
How It Works
Delayed Deletion (3-Day Grace Period)
When you remove or change a ticker in the UI, the system does NOT immediately delete the data. Instead:
- The ticker is added to a pending deletions list (
data/pending_deletions.json) - A deletion date is set for 3 days in the future
- The actual data deletion occurs on the next app launch after the 3-day period
Automatic Cleanup on Startup
Every time you launch FinForge:
- The system checks
pending_deletions.jsonfor any tickers past their deletion date - For each ticker past its 3-day grace period, all associated data is permanently deleted
- The pending deletions list is updated
Recovery Window
If you accidentally remove a ticker, you have 3 days to re-add it:
- Simply add the ticker again using the launcher
- The pending deletion will be automatically cancelled
- Your existing data will be preserved
What Gets Deleted
When a ticker’s data is permanently deleted, the following files are affected:
| Data Type | File Location | Action |
|---|---|---|
| Price History | data/prices/{TICKER}.parquet |
File deleted |
| Metadata | data/metadata/{TICKER}.json |
File deleted |
| Income Statement | data/fundamentals/income_statement/{TICKER}.parquet |
File deleted |
| Balance Sheet | data/fundamentals/balance_sheet/{TICKER}.parquet |
File deleted |
| Cash Flow | data/fundamentals/cash_flow/{TICKER}.parquet |
File deleted |
| Recommendations | data/fundamentals/recommendations/{TICKER}.parquet |
File deleted |
| Major Holders | data/holders/major_holders/{TICKER}.parquet |
File deleted |
| Institutional Holders | data/holders/institutional_holders/{TICKER}.parquet |
File deleted |
| Mutual Fund Holders | data/holders/mutualfund_holders/{TICKER}.parquet |
File deleted |
Actions That Trigger Deletion Scheduling
| Action | Result |
|---|---|
| Remove ticker (delete button) | Ticker scheduled for deletion in 3 days |
| Edit ticker to new symbol | Old ticker scheduled for deletion in 3 days |
| Clear all tickers | Each ticker scheduled for deletion in 3 days |
Actions That Cancel Scheduled Deletions
| Action | Result |
|---|---|
| Add a ticker that was pending deletion | Deletion cancelled, data preserved |
Pending Deletions File
The pending deletions are tracked in data/pending_deletions.json:
{
"TICKER1": {
"scheduled_date": "2025-12-06T21:28:50.896922",
"deletion_date": "2025-12-09T21:28:50.896910"
}
}
scheduled_date: When the ticker was removed from the UIdeletion_date: When the data will be permanently deleted
11. Troubleshooting
Ticker Management Issues
“Invalid Ticker” Error
Cause: Ticker contains numbers or is too long Solution: Use only letters, 1-5 characters
“Duplicate Ticker” Message
Cause: Ticker already exists in your list Solution: Check your list, ticker is already there
Data Not Fetching
Cause: Network issue or invalid ticker symbol Solution:
- Check your internet connection
- Verify the ticker exists on Yahoo Finance
- Check the terminal for error messages
Ticker Shows No Data
Cause: Yahoo Finance doesn’t have data for this ticker Solution: Some tickers (especially foreign or OTC) have limited data
Import Issues
No Data Appears
Possible Causes:
- Tickers not in Row 4
- Data not fetched yet
- Column A doesn’t say “INDEX”
Solutions:
- Verify tickers are in Row 4, starting from column B
- Run the fetch script first
- Ensure column A, Row 4 contains “INDEX”
“Cannot find data” Error
Cause: Parquet file doesn’t exist for the ticker Solution: Run the fetch script to download data
Import Takes Too Long
Cause: Many tickers or slow disk access Solution:
- Import fewer tickers at once
- Close other Excel workbooks
- Wait for the process to complete
Ratio Issues
Red Error Highlighting
Cause: Invalid field name Solution: Check spelling, use the field selector dropdown
“Field not found” Error
Cause: Field doesn’t exist in the data Solution: See Available Data Reference for valid field names
Calculation Shows #N/A
Cause:
- Data missing for the ticker
- Division by zero
Solution:
- Verify data exists for the ticker
- Add logic to handle zero denominators
Ratio Not Appearing in Manager
Cause: Save failed or file permission issue Solution:
- Check if ratio_config.json is writable
- Try saving again
Ratio Assignment Issues
“No ratios found”
Solution: Create or load metrics first
“No tickers found in row 4”
Solution: Import tickers in the Statement Lines tab, or type the symbols into Row 4 of the Metrics sheet starting at column B
“Failed to load Parquet data”
Solution: Make sure data/fundamentals/balance_sheet/ and data/fundamentals/income_statement/ contain Parquet files. Run an import from the Statement Lines tab first if needed.
“Duplicate row”
Solution: Two metrics are claiming the same row in Column A. Clear one of the boxes in the Assignments subtab and refresh
Calculation shows “N/A”
Reason: Financial data not found for that ticker/item Check: Ticker spelling and data availability
Calculation shows “DIV/0”
Reason: Denominator is zero Normal: Some ratios can legitimately be undefined
General Tips
- Always fetch data first before trying to import or calculate
- Check your internet connection if data fetching fails
- Verify ticker symbols exist on Yahoo Finance
- Enable Excel macros for full functionality
- Save your work frequently when working with Excel
12. Ranking Tab
The Ranking tab scores a group of stocks across the metrics you choose and produces a single ranked score for each one. Instead of looking at each ratio on its own, you pick the metrics that matter to you, tell FinForge which direction is “good” (higher or lower), assign each metric a weight, and the app combines everything into one 0-100 score per stock.
Opening the Ranking Tab
- Launch the FinForge workspace (see Getting Started)
- In the sidebar, expand Models
- Click Ranking
The Ranking screen has three main areas:
- Left panel - choose tickers, choose metrics, and manage presets
- Scoring cards - one card per selected metric, where you set the weight and curve
- Ticker cards panel - the results, showing each stock’s points and total score
Quick Start
- Choose tickers - in the left panel’s Tickers subtab, select the stocks to rank
- Choose metrics - in the Metrics subtab, toggle on the metrics to score
- Click Analyze - FinForge computes the latest value of each metric for every selected stock
- Read the results - the bottom Ticker cards panel shows each stock’s points and total score
Step 1: Select Tickers
In the left panel, click the Tickers icon (top of the panel).
- Type in the Search tickers box to filter the list
- Click a ticker row to select or deselect it
- Use All to select every imported ticker
- Use Remove all to clear the selection
- The selected count is shown at the bottom
Step 2: Select Metrics
Click the Metrics icon (middle of the left panel).
- Metrics are grouped by folder (the same folders used in the Metrics tab)
- Use Search metrics to filter
- Click a metric row to add or remove it
- Show selected filters the list to only the metrics you have chosen
- Remove all clears the metric selection
Step 3: Set Weights and Curves
Every selected metric appears as a scoring card on the right. Each card controls how that metric contributes to the final score.
Max pts (Weight)
- The Max pts box is the metric’s weight
- A metric can earn at most this many points
- A bigger Max pts means the metric matters more in the final ranking
Direction
Choose which direction is “better”:
- Higher - larger values score more points (e.g., ROE, revenue growth)
- Lower - smaller values score more points (e.g., debt-to-equity)
- Target - only available for the Bell curve; values near the center score best
Curve Type
The curve determines how a raw value is converted into points:
| Curve | What it does | Parameters |
|---|---|---|
| Percentile | Ranks each stock against the others in your selection; outlier-robust | None (automatic) |
| Bell | Full points at a center value, falling off to the sides | Center, Steepness |
| S-Curve | Smooth transition from low to high points around a midpoint | Midpoint, Slope |
| Linear | Straight-line scoring between a low and high anchor | Low anchor, High anchor |
| Steps | Score is set by which bucket (bin) the value falls into | Thresholds, Points per bin |
| Custom | Draw your own curve by adding points | Points, Smoothness |
Curve Parameters and the Mini-Chart
- Each card shows a small chart of the curve with one dot per selected stock
- Yellow handles on the curve can be dragged to reshape it; you can also type values into the parameter boxes (blank = automatic)
- When a parameter is left blank, FinForge derives it from your selected stocks (e.g., median, range)
Per-curve controls:
- Percentile - no parameters; fully automatic
- Bell - drag the center handle to move the peak and the width handle to change steepness
- S-Curve - drag the midpoint and slope handles
- Linear - drag the low and high anchor handles
- Steps - drag a threshold handle sideways to move a boundary, or drag a score handle up/down; click empty chart space to insert a new threshold; edit the Thresholds / Points columns below the chart
- Custom - click empty chart space to add a point, drag a point to move it, right-click a point to delete it; the Smoothness slider blends straight lines (0) with smooth curves (1); edit points in the list below the chart
Step 4: Run the Analysis
Click Analyze in the toolbar to compute (or refresh) the ranking. FinForge takes the latest available value of each metric for each selected stock, converts each value to points, and combines them into a 0-100 score.
- Collapse all - collapses every scoring card to keep the screen tidy
- The status text (top-right of the toolbar) shows what is happening
How the Scoring Works
- Each stock’s score = 100 x (points earned) / (maximum points available)
- Every metric that has data for a stock contributes its points; metrics with missing data are skipped for that stock and the score is re-normalized, so a missing value never unfairly penalizes a stock
- Scores are always shown on a 0-100 scale
Reading the Results
Ticker Cards Panel (bottom)
After you click Analyze, the panel at the bottom shows each selected stock:
- One Pts column per metric (the metric’s max points is shown in the header)
- A trailing Total column showing
total points / max points - Use the Search tickers box to filter the rows
- Click a ticker row to focus it - the charts draw a guide line on that stock so you can see where it sits on each curve
Results Table (full screen)
Click Results in the toolbar to open a full-screen, sortable table:
- Columns: Ticker, one points column per metric, and a Total column
- Click any column header to sort:
- Ticker - A-Z, then Z-A
- Metric - by that metric’s points (stocks with no data always sort last)
- Total - click repeatedly to cycle: total points down, total points up, score down, score up
- Click Back to return to the ranking screen
Advanced View (single metric)
Click Advanced to open a full-screen, enlarged view of one metric’s scoring card:
- Use the metric dropdown (top-left) to switch between metrics; metrics already added show an “added” label
- Create new metric jumps to the Metrics tab and starts the editor
- All curve editing works exactly as in the grid (drag handles, add points, pan the chart)
- Click Back to return to the ranking grid
Saving and Loading Presets
The left panel’s Presets subtab lets you save and restore your ranking configuration (tickers + metrics + curves + weights):
- Name - type a name for the preset
- Save - save the current configuration under that name
- Load - pick a preset from the dropdown to restore it
- New - clear the current configuration to start fresh
- Delete - remove the currently loaded preset
Tips
- Pick metrics that fit your strategy - a mix of profitability, growth, and valuation metrics usually ranks better than several similar ones
- Use weights deliberately - raise Max pts on the metrics that matter most to you
- Watch the direction - make sure “Higher” vs “Lower” matches what good looks like for each metric
- Missing data is handled - stocks without a metric’s data are scored on the remaining metrics, so a stock is not penalized for missing a single value
- Save good setups as presets - you can quickly re-run a ranking you like on new data
Support
For additional help:
- Check the Guides folder for more documentation
- Review the Developer guides for technical details
- Ensure all prerequisites are installed correctly
Document Version: 1.0 Last Updated: December 2025 Data Source: Yahoo Finance via yfinance library