This document describes the new features added to pyPortMan.
Support for 5Paisa, Upstox, and Dhan brokers with unified portfolio view.
- 5Paisa - Full API integration
- Upstox - OAuth-based authentication
- Dhan - REST API support
- Unified portfolio view across all brokers
- Broker arbitrage opportunities detection
- Cross-broker order placement
- Consolidated holdings, positions, and orders
from multi_broker_support import UnifiedPortfolioManager, create_broker
# Create portfolio manager
manager = UnifiedPortfolioManager()
# Add brokers
broker1 = create_broker("5paisa", api_key="xxx", api_secret="xxx",
user_id="xxx", password="xxx", client_id="xxx")
broker2 = create_broker("upstox", api_key="xxx", api_secret="xxx",
user_id="xxx", password="xxx")
manager.add_broker("5paisa", broker1)
manager.add_broker("upstox", broker2)
# Login to all brokers
manager.login_all()
# Get unified holdings
holdings = manager.get_unified_holdings()
# Find arbitrage opportunities
arbitrage = manager.find_arbitrage_opportunities(["RELIANCE", "TCS"])
# Export portfolio
filename = manager.export_portfolio(format="excel")NSE/BSE live data feeds, option chain, F&O data, and corporate actions tracking.
- NSE - Official NSE API
- BSE - BSE API integration
- Real-time quotes
- Historical data (OHLCV)
- Option chain with Greeks
- F&O data
- Corporate actions
- Market movers (gainers/losers)
- Index data
- Put-Call Ratio (PCR)
- Max Pain calculation
from market_data_integration import MarketDataManager
# Create data manager
manager = MarketDataManager()
# Get quote
quote = manager.get_quote("RELIANCE", exchange="NSE")
# Get historical data
historical = manager.get_historical_data("RELIANCE", interval="day",
from_date="01-01-2024",
to_date="31-12-2024")
# Get option chain
options = manager.get_option_chain("NIFTY", expiry="2024-12-26")
# Get F&O data
fo_data = manager.get_fo_data("RELIANCE")
# Get corporate actions
actions = manager.get_corporate_actions("RELIANCE")
# Get market movers
movers = manager.get_market_movers(top_n=10)Candlestick charts with technical indicators and multi-stock comparison.
- Moving Averages: SMA, EMA
- Momentum: RSI, Stochastic, Williams %R
- Trend: MACD, ADX, Supertrend
- Volatility: Bollinger Bands, ATR
- Volume: OBV, VWAP
- Custom: Ichimoku Cloud, Heikin Ashi
- Candlestick charts
- Multiple indicators overlay
- Multi-stock comparison
- Correlation heatmap
- Performance summary
- Custom indicator builder
from advanced_charting import CandlestickChart, MultiStockComparison
# Create candlestick chart
chart = CandlestickChart(figsize=(14, 10))
fig = chart.create_chart(data, indicators=['sma_20', 'sma_50', 'rsi', 'macd', 'bollinger'])
chart.save_chart("chart.png")
# Multi-stock comparison
comparison = MultiStockComparison()
fig = comparison.compare_stocks({
"RELIANCE": reliance_data,
"TCS": tcs_data,
"INFY": infy_data
})
# Correlation heatmap
heatmap = comparison.correlation_heatmap(stocks_data)
# Performance summary
summary = comparison.performance_summary(stocks_data)Capital gains calculation (STCG/LTCG), tax-ready reports, and financial year summaries.
- FIFO-based capital gains calculation
- STCG/LTCG classification
- Indexation benefit for non-equity assets
- Asset-wise breakdown
- Symbol-wise breakdown
- ITR form data generation
- Excel/JSON export
- Equity STCG: 15% (held < 1 year)
- Equity LTCG: 10% on gains above ₹1 lakh (held ≥ 1 year)
- Other STCG: As per income slab
- Other LTCG: 20% with indexation
from tax_reporting import TaxCalculator, TaxReportGenerator, TaxYear
# Create tax calculator
calculator = TaxCalculator()
# Add transactions
calculator.add_transactions_from_dataframe(tradebook_df)
# Calculate capital gains
gains = calculator.calculate_capital_gains(TaxYear.FY_2024_25)
# Get tax summary
summary = calculator.get_tax_summary(TaxYear.FY_2024_25)
# Generate reports
report_gen = TaxReportGenerator(calculator)
# Export to Excel
filename = report_gen.export_to_excel(TaxYear.FY_2024_25)
# Generate ITR form data
itr_data = report_gen.generate_itr_form_data(TaxYear.FY_2024_25)Install the required dependencies:
pip install pandas numpy matplotlib requests scipy openpyxlFor Jupyter notebook usage:
pip install jupyter notebook ipywidgets qgridpyPortMan/
├── multi_broker_support.py # Multi-broker integration
├── market_data_integration.py # Market data providers
├── advanced_charting.py # Charting and indicators
├── tax_reporting.py # Tax calculation and reports
├── hjOpenTerminal.ipynb # Main notebook
├── auth_info.xlsx # Broker credentials
├── stocks.xlsx # Stock list
└── README_NEW_FEATURES.md # This file
BrokerBase- Base broker classFivePaisaBroker- 5Paisa integrationUpstoxBroker- Upstox integrationDhanBroker- Dhan integrationUnifiedPortfolioManager- Portfolio manager
login()- Authenticate with brokerget_holdings()- Get holdingsget_positions()- Get positionsget_orders()- Get ordersplace_order()- Place ordercancel_order()- Cancel orderget_quote()- Get quote
MarketDataProvider- Base provider classNSEDataProvider- NSE data providerBSEDataProvider- BSE data providerMarketDataManager- Unified data manager
get_quote()- Get live quoteget_historical_data()- Get historical dataget_option_chain()- Get option chainget_fo_data()- Get F&O dataget_corporate_actions()- Get corporate actionsget_market_movers()- Get gainers/losers
TechnicalIndicators- Indicator calculationsCandlestickChart- Chart creationMultiStockComparison- Multi-stock analysisCustomIndicator- Custom indicator builder
sma()- Simple Moving Averageema()- Exponential Moving Averagersi()- Relative Strength Indexmacd()- MACDbollinger_bands()- Bollinger Bandsstochastic()- Stochastic Oscillatoratr()- Average True Rangeadx()- Average Directional Index
TaxCalculator- Tax calculation engineTaxReportGenerator- Report generatorTaxYear- Financial year enumTransactionType- Transaction type enumAssetType- Asset type enum
calculate_capital_gains()- Calculate gainsget_tax_summary()- Get summaryexport_to_excel()- Export to Excelexport_to_json()- Export to JSONgenerate_itr_form_data()- Generate ITR data
from multi_broker_support import UnifiedPortfolioManager, create_broker
from market_data_integration import MarketDataManager
from advanced_charting import CandlestickChart
from tax_reporting import TaxCalculator, TaxReportGenerator, TaxYear
# 1. Setup multi-broker portfolio
manager = UnifiedPortfolioManager()
broker = create_broker("zerodha", api_key="xxx", api_secret="xxx",
user_id="xxx", password="xxx")
manager.add_broker("zerodha", broker)
manager.login_all()
# 2. Get market data
data_manager = MarketDataManager()
quote = data_manager.get_quote("RELIANCE")
historical = data_manager.get_historical_data("RELIANCE")
# 3. Create chart
chart = CandlestickChart()
fig = chart.create_chart(historical, indicators=['sma_20', 'rsi', 'macd'])
chart.save_chart("reliance_chart.png")
# 4. Generate tax report
calculator = TaxCalculator()
calculator.add_transactions_from_dataframe(tradebook)
report_gen = TaxReportGenerator(calculator)
report_gen.export_to_excel(TaxYear.FY_2024_25)from multi_broker_support import UnifiedPortfolioManager, create_broker
manager = UnifiedPortfolioManager()
# Add multiple brokers
for broker_name in ["zerodha", "5paisa", "upstox"]:
broker = create_broker(broker_name, **broker_config[broker_name])
manager.add_broker(broker_name, broker)
manager.login_all()
# Find arbitrage opportunities
symbols = ["RELIANCE", "TCS", "INFY", "HDFC"]
arbitrage = manager.find_arbitrage_opportunities(symbols)
print(arbitrage)from market_data_integration import MarketDataManager
manager = MarketDataManager()
# Get option chain
options = manager.get_option_chain("NIFTY", expiry="2024-12-26")
# Calculate PCR
from market_data_integration import calculate_pcr
pcr = calculate_pcr(options)
# Calculate Max Pain
from market_data_integration import calculate_max_pain
max_pain = calculate_max_pain(options)
print(f"PCR: {pcr:.2f}")
print(f"Max Pain: {max_pain}")- All broker APIs require valid credentials
- Market data may have rate limits
- Tax calculations are based on Indian tax laws for FY 2024-25
- Charts require matplotlib backend for display
For issues or questions, please refer to the main README or contact the project maintainers.