Dividend Manager
SkillCommerce & financeTrack dividends, manage DRIP (reinvestment), forecast income, and optimize dividend portfolio.
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the Dividend Manager skill
What this skill tells your AI
The instructions your AI receives, as published by signal-execution-labs/forex-trading-ai-agent in skills/dividend-manager/SKILL.md and read by ahel’s review.
Vollautomatisches Dividenden-Tracking und Reinvestment.
Overview
- Dividend Tracking - Alle Ausschüttungen erfassen
- DRIP Automation - Automatische Wiederanlage
- Income Forecast - Zukünftige Einnahmen planen
- Portfolio Optimization - Yield vs Growth Balance
🤖 AUTO-PILOT MODE
# ~/.kit/config/dividend-manager.json
{
"auto_pilot": {
"enabled": true,
"drip": {
"enabled": true,
"mode": "same_stock", # same_stock | diversify | accumulate_cash
"min_reinvest_eur": 25,
"require_approval": false
},
"alerts": {
"ex_dividend_reminder_days": 3,
"payment_notification": true,
"yield_change_threshold_pct": 10
},
"rebalance": {
"target_yield_pct": 4.0,
"max_single_position_pct": 10
},
"tax_optimization": {
"use_sparerpauschbetrag": true,
"freistellungsauftrag_eur": 1000
}
}
}
Commands
Track Dividend Portfolio
python3 -c "
import yfinance as yf
portfolio = [
{'symbol': 'AAPL', 'shares': 50},
{'symbol': 'MSFT', 'shares': 30},
{'symbol': 'JNJ', 'shares': 40},
{'symbol': 'KO', 'shares': 100},
{'symbol': 'O', 'shares': 75}, # Realty Income (monthly)
]
print('💰 DIVIDEND PORTFOLIO')
print('=' * 70)
print(f'{\"Symbol\":8} {\"Shares\":>8} {\"Price\":>10} {\"Div/Share\":>10} {\"Yield\":>8} {\"Annual\":>10}')
print('-' * 70)
total_value = 0
total_annual_div = 0
for p in portfolio:
try:
stock = yf.Ticker(p['symbol'])
info = stock.info
price = info.get('currentPrice', info.get('regularMarketPrice', 0))
div_rate = info.get('dividendRate', 0) or 0
div_yield = info.get('dividendYield', 0) or 0
position_value = p['shares'] * price
annual_div = p['shares'] * div_rate
total_value += position_value
total_annual_div += annual_div
print(f\"{p['symbol']:8} {p['shares']:>8} \${price:>9.2f} \${div_rate:>9.2f} {div_yield*100:>7.2f}% \${annual_div:>9.2f}\")
except Exception as e:
print(f\"{p['symbol']:8} Error: {e}\")
print('-' * 70)
portfolio_yield = (total_annual_div / total_value * 100) if total_value > 0 else 0
print(f'{\"TOTAL\":8} {\"\":>8} \${total_value:>9,.2f} {\"\":>10} {portfolio_yield:>7.2f}% \${total_annual_div:>9,.2f}')
print()
print(f'📅 Monthly Income: \${total_annual_div/12:,.2f}')
"
Upcoming Dividends Calendar
python3 -c "
import yfinance as yf
from datetime import datetime, timedelta
portfolio = ['AAPL', 'MSFT', 'JNJ', 'KO', 'O', 'VZ', 'PG']
print('📅 UPCOMING DIVIDENDS')
print('=' * 60)
upcoming = []
for symbol in portfolio:
try:
stock = yf.Ticker(symbol)
cal = stock.calendar
if cal is not None and not cal.empty:
ex_date = cal.get('Ex-Dividend Date')
if ex_date:
upcoming.append({
'symbol': symbol,
'ex_date': ex_date,
'dividend': stock.info.get('dividendRate', 0) / 4 # Quarterly
})
except:
pass
# Sort by date
for div in sorted(upcoming, key=lambda x: x['ex_date'] if x['ex_date'] else datetime.max):
if div['ex_date']:
date_str = div['ex_date'].strftime('%Y-%m-%d') if hasattr(div['ex_date'], 'strftime') else str(div['ex_date'])
print(f\"{div['symbol']:6} | Ex-Date: {date_str} | ~\${div['dividend']:.2f}/share\")
"
DRIP Calculator & Auto-Reinvest
python3 -c "
import yfinance as yf
# Dividend received
dividend_payment = {
'symbol': 'AAPL',
'shares_owned': 50,
'dividend_per_share': 0.24,
'total_received': 12.00
}
stock = yf.Ticker(dividend_payment['symbol'])
current_price = stock.info.get('currentPrice', 150)
# Calculate DRIP
shares_to_buy = dividend_payment['total_received'] / current_price
fractional = shares_to_buy % 1
whole_shares = int(shares_to_buy)
leftover_cash = fractional * current_price
print('💰 DRIP CALCULATION')
print('=' * 50)
print(f\"Dividend Received: \${dividend_payment['total_received']:.2f}\")
print(f\"Current Price: \${current_price:.2f}\")
print()
print(f\"Shares to Buy: {shares_to_buy:.4f}\")
print(f\" Whole Shares: {whole_shares}\")
print(f\" Leftover Cash: \${leftover_cash:.2f}\")
print()
if whole_shares > 0:
print(f'🤖 AUTO-DRIP: Would buy {whole_shares} shares of {dividend_payment[\"symbol\"]}')
# Execute: exchange.create_market_buy_order(symbol, whole_shares)
else:
print('💵 Accumulating cash for next DRIP opportunity')
"
Dividend Growth Analysis
python3 -c "
import yfinance as yf
import pandas as pd
symbol = 'JNJ' # Dividend King
stock = yf.Ticker(symbol)
# Get historical dividends
dividends = stock.dividends
if len(dividends) > 0:
# Annual dividends
annual = dividends.resample('Y').sum()
print(f'📈 DIVIDEND GROWTH: {symbol}')
print('=' * 50)
# Last 5 years
recent = annual.tail(6)
for date, div in recent.items():
print(f'{date.year}: \${div:.2f}')
# Calculate CAGR
if len(recent) >= 2:
start_div = recent.iloc[0]
end_div = recent.iloc[-1]
years = len(recent) - 1
cagr = ((end_div / start_div) ** (1/years) - 1) * 100
print()
print(f'5-Year CAGR: {cagr:.1f}%')
# Project future
current_annual = end_div
print()
print('📊 Projected (assuming same growth):')
for y in range(1, 6):
projected = current_annual * ((1 + cagr/100) ** y)
print(f' Year {y}: \${projected:.2f}')
"
Income Forecast
python3 -c "
from datetime import datetime, timedelta
# Portfolio with dividend schedules
portfolio = [
{'symbol': 'AAPL', 'shares': 50, 'div_quarterly': 0.24, 'months': [2, 5, 8, 11]},
{'symbol': 'MSFT', 'shares': 30, 'div_quarterly': 0.75, 'months': [3, 6, 9, 12]},
{'symbol': 'O', 'shares': 75, 'div_monthly': 0.256, 'months': list(range(1, 13))}, # Monthly
{'symbol': 'KO', 'shares': 100, 'div_quarterly': 0.46, 'months': [4, 7, 10, 1]},
]
print('📅 12-MONTH DIVIDEND FORECAST')
print('=' * 60)
monthly_income = {m: 0 for m in range(1, 13)}
for p in portfolio:
if 'div_monthly' in p:
for m in p['months']:
monthly_income[m] += p['shares'] * p['div_monthly']
elif 'div_quarterly' in p:
for m in p['months']:
monthly_income[m] += p['shares'] * p['div_quarterly']
current_month = datetime.now().month
for month in range(1, 13):
month_name = datetime(2026, month, 1).strftime('%B')
income = monthly_income[month]
bar = '█' * int(income / 10)
marker = ' ◄── Current' if month == current_month else ''
print(f'{month_name:10} €{income:>8.2f} {bar}{marker}')
total = sum(monthly_income.values())
print()
print(f'Annual Total: €{total:,.2f}')
print(f'Monthly Avg: €{total/12:,.2f}')
"
Auto-Pilot: Full DRIP Automation
python3 -c "
import json
import os
from datetime import datetime
print('🤖 DIVIDEND MANAGER AUTO-PILOT')
print('=' * 50)
print(f'Running: {datetime.now().isoformat()}')
print()
# Auto-pilot tasks:
tasks = [
('📥 Check for new dividend payments', 'check_payments'),
('💰 Process DRIP reinvestments', 'process_drip'),
('📅 Update dividend calendar', 'update_calendar'),
('📊 Recalculate yield metrics', 'calc_metrics'),
('🔔 Send upcoming ex-date alerts', 'send_alerts'),
]
for task, func in tasks:
print(f'{task}...')
# Execute task
print(f' ✅ Done')
print()
print('Next run: Tomorrow 09:00')
"
Workflow
DRIP Modes
| Mode | Description |
|---|---|
same_stock | Reinvest in same stock |
diversify | Spread across underweight positions |
accumulate_cash | Save for manual allocation |
highest_yield | Buy highest yielding stock |
Dividend Aristocrats Focus
Stocks with 25+ years of dividend increases:
- JNJ, KO, PG, MMM, EMR, XOM, CVX, ABT, PEP, CL
Tax Optimization (Germany)
- Sparerpauschbetrag: €1,000 (Singles) / €2,000 (Married)
- Freistellungsauftrag: Split across brokers
- Quellensteuer: Track foreign withholding for credit
Signals
- GitHub stars
- 136
- Forks
- 870
- Last commit
- Sep 2026
Advanced
- Catalog kind
- skill
- Gateway key
dividend-manager- Source
- github.com/signal-execution-labs/forex-trading-ai-agent