About Wheeler
Wheeler is a comprehensive financial portfolio tracking system for managing stocks, options, long positions, dividend payments, and Treasury securities with modern web interfaces and interactive Chart.js visualizations.
Main Navigation
Main portfolio overview with allocation charts, watchlist summary, and performance metrics.
- Long by Symbol pie chart
- Put Exposure visualization
- Total Allocation with Treasuries
- Comprehensive watchlist table
Monthly performance breakdown showing Put and Call options earnings by month and ticker.
- Monthly gains tracking
- Put vs Call performance
- Cumulative profit analysis
- Symbol-specific breakdowns
Complete options trading interface with position management and analysis tools.
- Put/Call position tracking
- Expiration scatter plots
- Strike prices & premiums
- Days to expiration (DTE)
Treasury securities management with yield tracking and maturity monitoring.
- Yield calculations
- Maturity date tracking
- Performance summaries
- CRUD operations
Symbols Navigation
New Symbol
Add new stock symbols to track in your portfolio with initial price and dividend data.
- Quick symbol creation
- Initial price setting
- Dividend configuration
- P/E ratio tracking
Individual Symbols
Detailed analysis pages for each stock symbol with comprehensive trading history.
- Current prices & yields
- Options positions
- Long stock holdings
- Dividend payment history
Admin Tools
CSV data import functionality for bulk loading of portfolio data.
- Options CSV import
- Stocks data upload
- Dividends bulk load
- Validation & error handling
Database management tools for backup, restoration, and data safety.
- Timestamped backups
- Database switching
- Download backup files
- Data restoration
Navigation Tips
Interactive Charts: Hover over charts for detailed information and click legends to filter data
Sortable Tables: Click column headers to sort data in ascending or descending order
Expandable Sections: Use the Symbols and Admin toggles to expand/collapse navigation sections
Database Switching: Current database name is shown in the sidebar for multi-portfolio management
Diversified Portfolio Wheel Strategy
A comprehensive demonstration of wheel strategies across four blue-chip dividend stocks
Click to load the complete 4-symbol diversified wheel strategy demonstration
The Strategy
This tutorial demonstrates a sophisticated diversified wheel strategy across four blue-chip dividend stocks: CVX (Chevron), KO (Coca-Cola), VZ (Verizon), and MRK (Merck). Starting with $200,000 in Treasury securities as collateral, we allocate $50,000 to each symbol and systematically implement wheel strategies, showing how diversification reduces risk while maintaining strong returns.
| Story | SQL Transaction |
|---|---|
🎯 Setting the Foundation |
|
| January 2nd: We start our diversified wheel strategy by investing $200,000 in Treasury securities as our collateral base across three different maturities. We initialize four blue-chip dividend stocks: CVX (energy), KO (consumer staples), VZ (telecom), and MRK (healthcare) - providing sector diversification. |
INSERT INTO symbols (symbol, price, dividend, ex_dividend_date, pe_ratio) VALUES
('CVX', 161.45, 6.84, '2025-02-12', 15.2),
('KO', 62.85, 2.00, '2025-03-15', 26.1),
('VZ', 41.20, 2.71, '2025-02-07', 9.8),
('MRK', 98.75, 3.22, '2025-03-07', 16.7);
INSERT INTO treasuries VALUES
('912797WH8', '2025-01-02', '2025-12-15', 100000.0, 4.5, 99750.00, 100000.0),
('912797WH9', '2025-01-02', '2025-06-15', 50000.0, 4.4, 49850.00, 50000.0),
('912797WI0', '2025-01-02', '2026-01-15', 50000.0, 4.6, 49725.00, 50000.0);
|
📉 Week 1: Diversified Put Strategy Launch |
|
| January 3-8: We launch our diversified strategy with $50,000 allocated to each symbol. CVX at $158, KO at $61.50, VZ at $40.80, MRK at $97.25. We sell puts below current prices across all four positions, balancing exposure and premium collection. |
-- CVX positions (25% allocation = $50K)
('CVX', 'Put', '2025-01-03', 150.0, '2025-01-17', 0.85, 3, 1.95), -- $255 premium, $45K exposure
('CVX', 'Put', '2025-01-06', 155.0, '2025-01-17', 1.95, 2, 1.30), -- $390 premium, $31K exposure
-- KO positions (25% allocation = $50K)
('KO', 'Put', '2025-01-03', 60.0, '2025-01-17', 1.15, 8, 5.20), -- $920 premium, $48K exposure
-- VZ positions (25% allocation = $50K)
('VZ', 'Put', '2025-01-03', 39.0, '2025-01-17', 0.65, 12, 7.80), -- $780 premium, $46.8K exposure
-- MRK positions (25% allocation = $50K)
('MRK', 'Put', '2025-01-03', 95.0, '2025-01-17', 1.45, 5, 3.25); -- $725 premium, $47.5K exposure
|
📈 Week 3: First Success (Stock at $156) |
|
| January 17: Great news! CVX rallied to $156, so our January 17 puts expire worthless. We keep the full premium collected ($730 total) and immediately sell new puts for February expiration. |
UPDATE options SET closed = '2025-01-17', exit_price = 0.05
WHERE strike = 150.0 AND expiration = '2025-01-17' AND type = 'Put';
UPDATE options SET closed = '2025-01-17', exit_price = 0.10
WHERE strike = 155.0 AND expiration = '2025-01-17' AND type = 'Put';
INSERT INTO options (symbol, type, opened, strike, expiration, premium, contracts, commission) VALUES
('CVX', 'Put', '2025-01-17', 152.0, '2025-02-07', 1.35, 3, 3.50);
|
⚠️ Week 4: Diversification Benefits (Mixed Results) |
|
| January 24: Market selloff demonstrates diversification value. CVX drops to $149 (puts expire worthless), KO stable at $60.75 (puts expire worthless), VZ dips to $39.95 (gets assigned at $40), MRK at $95.80 (puts expire worthless). Only VZ gets assigned - 300 shares at $40. |
-- ASSIGNMENT: Only VZ gets assigned (300 shares at $40)
INSERT INTO long_positions (symbol, opened, shares, buy_price) VALUES ('VZ', '2025-01-24', 300, 40.0);
-- Adjust treasuries for VZ purchase ($12,000)
UPDATE treasuries SET
current_value = 38000.0,
amount = 38000.0
WHERE cuspid = '912797WH9';
-- Other symbols' puts expire worthless - keep premium
UPDATE options SET closed = '2025-01-24', exit_price = 0.12
WHERE symbol = 'CVX' AND expiration = '2025-01-24';
|
| January 27: With VZ assigned, we start covered calls on the 300 shares at $42 strike. Meanwhile, we continue selling puts on the other three symbols since they weren't assigned. Diversification keeps us active across all positions. |
-- Start covered calls on VZ assignment
INSERT INTO options (symbol, type, opened, strike, expiration, premium, contracts, commission) VALUES
('VZ', 'Call', '2025-01-27', 42.0, '2025-02-14', 1.25, 3, 1.95), -- $375 premium on VZ stock
-- Continue puts on non-assigned symbols
('CVX', 'Put', '2025-01-27', 145.0, '2025-02-14', 1.15, 3, 1.95),
('KO', 'Put', '2025-01-27', 58.5, '2025-02-14', 1.05, 4, 2.60),
('MRK', 'Put', '2025-01-27', 93.0, '2025-02-14', 1.35, 3, 1.95);
|
💰 Week 7: Wheel Completion (Stock rallies to $157) |
|
| February 14: Excellent! CVX rallied to $157 and our covered calls get exercised. We sell our 300 shares at $155 each, making $7 per share profit ($2,100) plus we collected $513 in dividends while holding the stock. |
UPDATE options SET closed = '2025-02-14', exit_price = 0.05
WHERE type = 'Call' AND strike = 155.0 AND expiration = '2025-02-14';
UPDATE long_positions SET
closed = '2025-02-14',
exit_price = 155.0
WHERE symbol = 'CVX' AND opened = '2025-01-24';
INSERT INTO dividends (symbol, received, amount) VALUES ('CVX', '2025-02-12', 513.0);
-- Buy back treasuries with stock sale proceeds
INSERT INTO treasuries (cuspid, purchased, maturity, amount, yield, buy_price, current_value) VALUES ('912797WI6', '2025-02-14', '2026-01-15', 46500.0, 4.3, 46275.00, 46500.0);
|
🔄 Second Wheel Cycle Begins |
|
| March 7: History repeats! Our March puts get assigned again, this time at $155 strike for 200 shares. We adjust our treasury holdings and immediately start selling covered calls on our new stock position. |
-- SECOND ASSIGNMENT: Buy 200 shares at $155
INSERT INTO long_positions (symbol, opened, shares, buy_price) VALUES ('CVX', '2025-03-07', 200, 155.0);
-- Adjust treasuries for stock purchase
UPDATE treasuries SET
current_value = 15500.0,
amount = 15500.0
WHERE cuspid = '912797WI6';
INSERT INTO options (symbol, type, opened, strike, expiration, premium, contracts, commission) VALUES
('CVX', 'Call', '2025-03-10', 160.0, '2025-03-21', 1.85, 2, 2.50);
|
📊 Current Status: Profitable Position |
|
| April (Current): We continue the wheel with open positions. Currently holding 200 shares at $155 cost basis (stock now at $161.45), with open puts and calls. |
-- Current open positions
INSERT INTO options (symbol, type, opened, strike, expiration, premium, contracts, commission) VALUES
('CVX', 'Put', '2025-04-07', 150.0, '2025-04-25', 1.25, 2, 2.50), -- $250 premium
('CVX', 'Put', '2025-04-09', 155.0, '2025-04-25', 1.95, 1, 1.50), -- $195 premium
('CVX', 'Call', '2025-04-10', 165.0, '2025-04-25', 1.75, 2, 2.50); -- $350 premium
-- Quarterly dividend received
INSERT INTO dividends (symbol, received, amount) VALUES ('CVX', '2025-03-15', 342.0);
|
🌟 May-June: Expansion & Major Profit Realization |
|
|
May: Market volatility increases our position to 300 shares after another assignment. We collect our third quarterly dividend ($513) and continue selling covered calls on the expanded position.
June 20 - Major Win! CVX surges to $167 and our covered calls get exercised. We sell all 300 shares at $165 - realizing substantial profits from the expanded wheel strategy. |
-- MAY: Third assignment expands position to 300 shares
INSERT INTO long_positions (symbol, opened, shares, buy_price) VALUES ('CVX', '2025-04-25', 100, 155.0);
INSERT INTO options (symbol, type, opened, strike, expiration, premium, contracts, commission) VALUES
('CVX', 'Call', '2025-05-02', 162.0, '2025-05-16', 2.45, 3, 4.00), -- $735 premium
-- Third quarterly dividend
INSERT INTO dividends (symbol, received, amount) VALUES ('CVX', '2025-05-15', 513.0);
-- JUNE 20: Market rallies - CALLS EXERCISED!
UPDATE long_positions SET closed = '2025-06-20', exit_price = 165.0 WHERE symbol = 'CVX' AND closed IS NULL;
|
☀️ July-August: Pure Put Strategy |
|
| Summer Strategy Shift: With no stock positions after the profitable June sale, we focus purely on selling cash-secured puts. The strong summer market means most puts expire worthless, generating consistent income with minimal assignment risk. |
-- JULY-AUGUST: Pure put selling strategy
INSERT INTO options (symbol, type, opened, strike, expiration, premium, contracts, commission) VALUES
('CVX', 'Put', '2025-07-01', 155.0, '2025-07-18', 2.15, 3, 3.50), -- $645 premium
('CVX', 'Put', '2025-07-08', 160.0, '2025-07-25', 2.85, 2, 2.50), -- $570 premium
('CVX', 'Put', '2025-07-15', 158.0, '2025-08-15', 2.45, 3, 3.50), -- $735 premium
('CVX', 'Put', '2025-08-01', 152.0, '2025-08-15', 1.95, 2, 2.50), -- $390 premium
-- Most expire worthless in strong market
UPDATE options SET closed = '2025-08-15', exit_price = 0.18 WHERE expiration = '2025-08-15';
|
🍂 September-November: Fourth Wheel Cycle |
|
|
September 20: Market volatility returns and we get our fourth assignment - 200 shares at $158. We immediately start our final wheel cycle of the year.
November 15: Another successful completion! CVX surges to $170 and our calls get exercised at $168. We sell the 200 shares for a $2,000 gain plus collect our final dividend of the year. |
-- SEPTEMBER 20: Fourth assignment
INSERT INTO long_positions (symbol, opened, shares, buy_price) VALUES ('CVX', '2025-09-20', 200, 158.0);
-- OCTOBER-NOVEMBER: Final wheel cycle
INSERT INTO options (symbol, type, opened, strike, expiration, premium, contracts, commission) VALUES
('CVX', 'Call', '2025-11-01', 168.0, '2025-11-15', 3.15, 2, 2.50); -- $630 premium
-- NOVEMBER 15: Final profitable exit
UPDATE long_positions SET closed = '2025-11-15', exit_price = 168.0 WHERE opened = '2025-09-20';
-- Year-end dividend
INSERT INTO dividends (symbol, received, amount) VALUES ('CVX', '2025-11-12', 342.0);
|
🎄 December: Year-End Positioning |
|
| December: We end the year by selling puts with strikes extending into 2026, positioning for continued success. CVX finishes the year at $172.35, validating our bullish wheel strategy throughout 2025. |
-- DECEMBER: Position for next year
INSERT INTO options (symbol, type, opened, strike, expiration, premium, contracts, commission) VALUES
('CVX', 'Put', '2025-12-01', 160.0, '2025-12-20', 3.25, 3, 3.50), -- $975 premium
('CVX', 'Put', '2025-12-10', 165.0, '2025-12-20', 4.15, 2, 2.50), -- $830 premium
('CVX', 'Put', '2025-12-15', 158.0, '2026-01-17', 2.85, 2, 2.50); -- $570 premium
-- Final stock price update
UPDATE symbols SET price = 172.35 WHERE symbol = 'CVX';
|
💰 Annual Profit Analysis |
|
|
Complete Year Results: Our diversified 4-symbol wheel strategy generated $54,500 in net profits over 12 months:
Options Premiums Collected (All Symbols): $42,850 • CVX: $12,500 (puts + calls across 4 wheel cycles) • KO: $11,200 (puts + calls, 3 assignments + exits) • VZ: $9,750 (puts + calls, 5 wheel cycles) • MRK: $9,400 (puts + calls, 3 wheel cycles) Stock Trading Profits: $8,900 • CVX: $3,200 (net across multiple cycles) • KO: $2,400 (net across multiple cycles) • VZ: $1,800 (net across multiple cycles) • MRK: $1,500 (net across multiple cycles) Dividend Income (All Symbols): $4,583 • CVX: $1,710 (energy sector dividends) • KO: $800 (consumer staples dividends) • VZ: $812 (telecom dividends) • MRK: $965 (healthcare dividends) Treasury Interest: $9,000 • Annual 4.5-4.6% on rolling $200K collateral Total: $65,333 gross - $833 commissions = $64,500 net Annual Return: 32.25% on $200K capital |
-- COMPREHENSIVE ANNUAL PROFIT ANALYSIS
-- Total options premiums by quarter:
SELECT
CASE
WHEN strftime('%m', opened) BETWEEN '01' AND '03' THEN 'Q1'
WHEN strftime('%m', opened) BETWEEN '04' AND '06' THEN 'Q2'
WHEN strftime('%m', opened) BETWEEN '07' AND '09' THEN 'Q3'
ELSE 'Q4'
END as quarter,
type,
SUM(premium * contracts * 100) as premium_collected,
COUNT(*) as trades
FROM options
GROUP BY quarter, type
ORDER BY quarter, type;
-- Stock trading profits by cycle:
SELECT 'Stock Profits' as source,
SUM((exit_price - buy_price) * shares) as total_gains,
COUNT(*) as completed_cycles
FROM long_positions
WHERE exit_price IS NOT NULL;
-- Annual dividend income:
SELECT 'Dividend Income' as source,
SUM(amount) as annual_dividends
FROM dividends;
-- Treasury interest earned:
SELECT 'Treasury Interest' as source,
SUM(amount * yield / 100) as annual_interest
FROM treasuries;
|
Key Insights
Diversification Power
Spreading $200K across four blue-chip sectors (energy, consumer, telecom, healthcare) reduces single-stock risk while maintaining strong wheel strategy returns.
Scalable Treasury Base
$200K Treasury collateral across three maturities provides $9K annual interest while backing multiple simultaneous wheel strategies on different symbols.
Multi-Symbol Wheel Cycles
Different symbols cycle at different times, creating steady income flow. When one symbol gets assigned, others continue generating put premiums.
Load this complete 4-symbol diversified portfolio into your Wheeler database