Ratio Assignment System - User Guide
Overview
The Metrics sheet is a grid. Every metric you save gets its own row in Column A, and every ticker you follow gets its own column. Assigning a metric means giving it the row it should occupy; FinForge then fills in the values. All of the logic is in Python, so the workbook only stores names and numbers.
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
Two column types are treated specially. 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
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 for both routes.
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
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, to see what it measures.
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. You can also enter a symbol straight into Row 4.
5. Calculate the Metrics
From the FinForge Workspace:
- Open 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
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 (see the Custom Excel Formulas guide)
The sheet refresh itself is driven from the workspace, so there is no separate macro to run in Excel.
File Structure
FinForge/
+-- Internal/Ratios/
| +-- ratio_handeling.py (Config management)
| +-- ratio_calculator.py (Calculation engine, Column A sync)
| +-- ratio_manager_ui.py (Optional standalone Python manager, legacy)
+-- ElectronHome/
| +-- src/renderer.js (Metrics tab: list, folders, assignments)
+-- Importing/
| +-- ratio_config.json (Ratio storage)
| +-- ratio_maker.py (Create ratios)
+-- data/
| +-- fundamentals/ (Financial data in Parquet)
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
Troubleshooting
“No ratios found”
- Solution: Create or load metrics first (see Creating Ratios)
“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/anddata/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
UI Features
Metrics Tab (Actions panel):
- Refresh metrics sheet - recalculates every assigned metric
- Create metric - opens the metric builder
- Export timeseries - appears once metrics are selected
Metrics Tab (subtab bar):
- Metrics - the metric list, with a folder filter and a search box
- Folders - group metrics so a large library stays manageable
- Assignments - every metric with its row box for Column A
Assignments Subtab:
- List: Every saved metric, with an editable row box
- Red row number: Two metrics are claiming the same row
- Empty row: The metric is not written to the sheet (shown as
N/A) - Order: Metrics sort by row number; unassigned metrics sort last
Performance
- Fast Data Access: Parquet files are optimized for speed
- Efficient Calculation: Only calculates what’s needed
- Minimal Excel Interaction: Batch writes for better performance
- Progress Tracking: Know exactly what’s happening
Safety Features
- Validation: Rows must be 7 or higher, and duplicates are flagged
- Error Handling: Clear error messages
- Data Preservation:
CUSTOMcolumns are never overwritten
Notes
- Column A: Reserved for metric names, written from Row 7 downwards
- Row 4: Reserved for ticker symbols, from column B onwards
- Rows 5 and 6: Reserved and left empty
- Row 7+: Metric names and their calculated values
- No Limit: Assign as many metrics as you have free rows
- One Metric Per Row: Keeps the sheet readable and unambiguous
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
This is a clean, simple, and efficient system. Enjoy!