Welcome to plutoPy’s documentation!¶
model¶
Fred¶
St. Louis Fed FRED cache
sources: https://fred.stlouisfed.org/
-
class
plutoPy.model.Fred.
Meta
(**kwargs)¶ Bases:
sqlalchemy.ext.declarative.api.Base
,plutoPy.model.Db.StockVizUs
Query the FRED meta-data cache
-
FREQUENCY
¶ ‘D’ for day, ‘M’ for month, ‘Q’ for quarter, etc.
-
NAME
¶ title
-
SEASON_ADJUST
¶ ‘SA’ for seasonally adjusted, etc.
-
SERIES_ID
¶ use this to query the time-series
-
TICKER
¶ FRED id
-
UNITS
¶ ‘Miles’, ‘Million of Dollars’, etc.
-
World Bank GEM¶
World Bank Global Economic Monitor data
sources: https://worldbank.org
-
class
plutoPy.model.WorldBank.
Meta
(**kwargs)¶ Bases:
sqlalchemy.ext.declarative.api.Base
,plutoPy.model.Db.StockVizUs
Query to find the country and indicator id’s of the Global Economic Monitor data published by the World Bank
-
COUNTRY_ID
¶
-
COUNTRY_KEY
¶ COUNTRY_KEY and INDICATOR_KEY uniquely identify a time-series
-
COUNTRY_NAME
¶
-
END_YEAR
¶ ending year from which time-series is available
-
INDICATOR_ID
¶
-
INDICATOR_KEY
¶ COUNTRY_KEY and INDICATOR_KEY uniquely identify a time-series
-
INDICATOR_NAME
¶
-
START_YEAR
¶ starting year from which time-series is available
-
-
class
plutoPy.model.WorldBank.
TimeSeries
(**kwargs)¶ Bases:
sqlalchemy.ext.declarative.api.Base
,plutoPy.model.Db.StockVizUs
Query the Global Economic Monitor data published by the World Bank
-
COUNTRY_KEY
¶ COUNTRY_KEY and INDICATOR_KEY uniquely identifies the time-series
-
INDICATOR_KEY
¶ COUNTRY_KEY and INDICATOR_KEY uniquely identifies the time-series
-
VALUE
¶
-
YEAR
¶
-
InternationalMonetaryFund¶
International Monetary Fund data
sources: https://www.imf.org
-
class
plutoPy.model.InternationalMonetaryFund.
Meta
(**kwargs)¶ Bases:
sqlalchemy.ext.declarative.api.Base
,plutoPy.model.Db.StockVizUs
Query IMF meta-data based on geography/indicator. Then use the ID obtained here to query the time-series
-
AREA
¶ India, Great Britain, United States
-
AREA_CODE
¶ IN, GB, US…
-
DATA_DESCRIPTION
¶ description of the data: ‘Primary Commodity Prices, Copper’, ‘Economic Activity, Industrial Production, Index’
-
DATA_KEY
¶ IMF internal key: PCOPP, AIP_IX
-
END_YEAR
¶ the year till which TimeSeries data is available
-
FREQ
¶ A for Annual; Q for Quarterly; M for Monthly
-
ID
¶ use to query TimeSeries
-
START_YEAR
¶ the year from which TimeSeries data is available
-
UNIT_MEASURE
¶ IX for Index; USD for Dollar
-
UNIT_MULT
¶ 0, 3, 6 to multiply by none, thousands and millions
-
NASDAQOMX Indices¶
NASDAQOMX Indices
sources: https://indexes.nasdaqomx.com/ https://www.quandl.com/
-
class
plutoPy.model.NasdaqOmx.
Meta
(**kwargs)¶ Bases:
sqlalchemy.ext.declarative.api.Base
,plutoPy.model.Db.StockVizUs2
Query to find the time-series id of total-return indices published by the NasdaqOmx
-
CODE
¶ NasdaqOmx index code
-
ID
¶ time-series id to be used to query NasdaqOmxTimeSeries
-
NAME
¶ name of the index
-
Yield Curves¶
Yield curves
sources: https://www.ccilindia.com http://treasury.gov https://www.ecb.europa.eu
-
class
plutoPy.model.YieldCurve.
EuroArea
(**kwargs)¶ Bases:
sqlalchemy.ext.declarative.api.Base
,plutoPy.model.Db.StockViz
Query Euro area yield curves published by the ECB
-
CURVE_ID
¶ G_N_A for AAA rated only. G_N_C for all (including AAA) rated.
-
TENOR_M
¶ month
-
TENOR_Y
¶ year
-
TIME_STAMP
¶
-
VALUE
¶ yield
-
Indices¶
Indices
- sources:
- https://nseindia.com/ https://bseindia.com/ https://www.ccilindia.com https://finance.yahoo.com/ https://indices.barclays
-
class
plutoPy.model.Indices.
BarclaysMeta
(**kwargs)¶ Bases:
sqlalchemy.ext.declarative.api.Base
,plutoPy.model.Db.StockVizUs2
Meta information about the BarclaysTimeSeries by TICKER
-
CURRENCY
¶
-
DATE_BASE
¶ Date from when the index is calculated
-
DATE_LIVE
¶ Date when the index went live
-
FAMILY
¶
-
NAME
¶
-
RETURN_TYPE
¶ Excess/Price/Total Return
-
TICKER
¶
-
-
class
plutoPy.model.Indices.
BarclaysTimeSeries
(**kwargs)¶ Bases:
sqlalchemy.ext.declarative.api.Base
,plutoPy.model.Db.StockVizUs2
Query the index time-series published by Barclays
-
CLOSE
¶
-
TICKER
¶
-
TIME_STAMP
¶
-
-
class
plutoPy.model.Indices.
BseConstituents
(**kwargs)¶ Bases:
sqlalchemy.ext.declarative.api.Base
,plutoPy.model.Db.StockViz
Query the latest constituents of BSE indices
-
CODE
¶ BSE security code
-
NAME
¶ name of the index. Use this to query the constituents
-
SECURITY_NAME
¶ name of the security
-
SYMBOL
¶ NSE symbol, if the security is listed in the NSE
-
TIME_STAMP
¶ date when the constituents of the index was updated
-
-
class
plutoPy.model.Indices.
BseTimeSeries
(**kwargs)¶ Bases:
sqlalchemy.ext.declarative.api.Base
,plutoPy.model.Db.StockViz
Query the index time-series published by the BSE
-
CLOSE
¶
-
HIGH
¶
-
LOW
¶
-
NAME
¶
-
OPEN
¶
-
TIME_STAMP
¶
-
-
class
plutoPy.model.Indices.
IndiaGsecTimeSeries
(**kwargs)¶ Bases:
sqlalchemy.ext.declarative.api.Base
,plutoPy.model.Db.StockViz
Query the Indian Government Soverign Bond index time-series published by the CCIL
-
COUPON
¶ wavg coupon
-
DURATION
¶ wavg duration
-
NAME
¶ tenor bucket. possible values: 0_5, 5_10, 10_15, 15_20, 20_30
-
PRI
¶ Principal Return Index. based on clean price
-
TIME_STAMP
¶
-
TRI
¶ Total Return Index. the absolute return that the tenor bucket offers. includes coupon accrued and capital gains (losses)
-
YTM
¶ wavg yield-to-maturity
-
-
class
plutoPy.model.Indices.
IndiaVixTimeSeries
(**kwargs)¶ Bases:
sqlalchemy.ext.declarative.api.Base
,plutoPy.model.Db.StockViz
Query the India VIX time-series data published by the NSE
-
CLOSE
¶
-
HIGH
¶
-
LOW
¶
-
OPEN
¶
-
TIME_STAMP
¶
-
-
class
plutoPy.model.Indices.
NseConstituents
(**kwargs)¶ Bases:
sqlalchemy.ext.declarative.api.Base
,plutoPy.model.Db.StockViz
Query the latest constituents of NSE indices
-
CAP_WEIGHT
¶
-
INDUSTRY
¶
-
NAME
¶ name of the index. Use this to query the constituents
-
SYMBOL
¶
-
TIME_STAMP
¶ date when the constituents of the index was updated
-
-
class
plutoPy.model.Indices.
NseTimeSeries
(**kwargs)¶ Bases:
sqlalchemy.ext.declarative.api.Base
,plutoPy.model.Db.StockViz
Query the index time-series published by the NSE
-
CLOSE
¶
-
HIGH
¶
-
LOW
¶
-
NAME
¶ name of the index. Use this to query the time-series
-
OPEN
¶
-
TIME_STAMP
¶
-
VOLUME
¶
-
-
class
plutoPy.model.Indices.
YahooFinanceTimeSeries
(**kwargs)¶ Bases:
sqlalchemy.ext.declarative.api.Base
,plutoPy.model.Db.StockVizUs2
Query the index time-series published by Yahoo Finance
-
CLOSE
¶
-
CLOSE_ADJ
¶
-
HIGH
¶
-
LOW
¶
-
NAME
¶ name of the index. Use this to query the time-series
-
OPEN
¶
-
TIME_STAMP
¶
-
VOLUME
¶
-
US ETFs¶
ETFs listed in the US
MutualFundsIndia¶
Mutual Funds India
sources: https://www.amfiindia.com/
-
class
plutoPy.model.MutualFundsIndia.
AumFundwise
(**kwargs)¶ Bases:
sqlalchemy.ext.declarative.api.Base
,plutoPy.model.Db.StockViz
Query the fund-wise assets under management (AUM) of different asset managers
-
AUTO_ID
¶
-
AVG_AUM_FOFD
¶ AUM held by Fund-of-Funds
-
AVG_AUM_WO_FOFD
¶ excluding AUM held by Fund-of-Funds
-
FUND
¶ name of the manager
-
PERIOD
¶
-
-
class
plutoPy.model.MutualFundsIndia.
AumSchemewise
(**kwargs)¶ Bases:
sqlalchemy.ext.declarative.api.Base
,plutoPy.model.Db.StockViz
Query the scheme-wise assets under management (AUM) of different asset managers and their ‘schemes’
-
AUTO_ID
¶
-
AVG_AUM_FOFD
¶ AUM held by Fund-of-Funds
-
AVG_AUM_WO_FOFD
¶ excluding AUM held by Fund-of-Funds
-
PERIOD
¶
-
SCHEME_CODE
¶ code given by AMFI
-
SCHEME_NAME
¶ name of the fund - can change multiple times over its life
-
-
class
plutoPy.model.MutualFundsIndia.
Meta
(**kwargs)¶ Bases:
sqlalchemy.ext.declarative.api.Base
,plutoPy.model.Db.StockViz
Query the meta-data
-
AS_OF
¶ data capture date
-
BENCH_NOW
¶ benchmark being used currently
-
BENCH_ORIG
¶ original benchmark
-
CATEGORY
¶ Mid-Cap, Index Funds, etc…
-
EXPENSE
¶ Based on prospectus (%)
-
EXPENSE_RATIO
¶ Based on what the fund actually charged (%)
-
SCHEME_CODE
¶ code given by AMFI
-
TURNOVER_RATIO
¶ churn
-
Bases:
sqlalchemy.ext.declarative.api.Base
,plutoPy.model.Db.StockViz
Query for the NAVs of different funds
before exit loads, STT, etc…
code given by AMFI
name of the fund - can change multiple times over its life
mostly daily but some funds declare only twice a week. bond market holidays are different from equity market holidays.
-
class
plutoPy.model.MutualFundsIndia.
Portfolio
(**kwargs)¶ Bases:
sqlalchemy.ext.declarative.api.Base
,plutoPy.model.Db.StockViz
Query for the monthly reported portfolios of different funds
-
AUTO_ID
¶
-
INDUSTRY_BSE
¶ BSE’s SECTOR classification.
-
INSTRUMENT
¶ EQUITY, BOND, OTHER… broad classification
-
INSTRUMENT_TYPE
¶ E, BT, CR… clarifies INSTRUMENT
-
NAME
¶ name of the position
-
PORTFOLIO_DATE
¶ mostly declared once a month. available after the 10th of each month.
-
SCHEME_CODE
¶ code given by AMFI
-
SECTOR
¶ BASIC MATERIALS, FINANCIAL SERVICES, CONSUMER DEFENSIVE, etc…
-
SYMBOL
¶ where available, the NSE ticker/symbol of the position
-
WEIGHTAGE
¶ weightage of the position in the portfolio (%)
-
US Equities¶
Equities US
sources: https://iexcloud.io https://www.sec.gov/
-
class
plutoPy.model.EquitiesUs.
EodAdjustedTimeSeries
(**kwargs)¶ Bases:
sqlalchemy.ext.declarative.api.Base
,plutoPy.model.Db.StockVizUs2
Query end-of-day price and volume time-series adjusted for splits, bonus and dividends for listed stocks
-
CLOSE
¶
-
HIGH
¶
-
LOW
¶
-
OPEN
¶
-
SYMBOL
¶
-
TIME_STAMP
¶
-
VOLUME
¶
-
-
class
plutoPy.model.EquitiesUs.
SecFilings
(**kwargs)¶ Bases:
sqlalchemy.ext.declarative.api.Base
,plutoPy.model.Db.StockVizUs2
Links to SEC filings. Useful to keep track of M&A events in your portfolio
-
ACC_NO
¶
-
FILING_DATE
¶
-
FILING_TYPE
¶ SC14D9C => acquisitions; DEFM14A => mergers
-
FILING_URL
¶
-
FORM_NAME
¶
-
SYMBOL
¶
-
-
class
plutoPy.model.EquitiesUs.
SecMeta
(**kwargs)¶ Bases:
sqlalchemy.ext.declarative.api.Base
,plutoPy.model.Db.StockVizUs2
Meta information of companies in the SEC EDGAR database. Useful for SIC.
-
CIK
¶ Central Index Key
-
NAME
¶
-
SIC
¶ Standard Industrial Classification code
-
SIC_DESC
¶ Standard Industrial Classification
-
SYMBOL
¶
-
EquitiesIndiaNse¶
Equities India NSE
sources: https://nseindia.com/
-
class
plutoPy.model.EquitiesIndiaNse.
CorporateActions
(**kwargs)¶ Bases:
sqlalchemy.ext.declarative.api.Base
,plutoPy.model.Db.StockViz
Query the corporate actions for listed stocks
-
EX_DATE
¶
-
PURPOSE
¶
-
SERIES
¶
-
SYMBOL
¶
-
WHEN_UPDATED
¶
-
-
class
plutoPy.model.EquitiesIndiaNse.
CorporateEvents
(**kwargs)¶ Bases:
sqlalchemy.ext.declarative.api.Base
,plutoPy.model.Db.StockViz
Query the corporate events for listed stocks
-
AUTO_ID
¶
-
DISC_DATE
¶ when was the event disclosed?
-
EVENT_DATE
¶ when was the event held?
-
PURPOSE
¶
-
SYMBOL
¶
-
-
class
plutoPy.model.EquitiesIndiaNse.
CorporateResults
(**kwargs)¶ Bases:
sqlalchemy.ext.declarative.api.Base
,plutoPy.model.Db.StockViz
Query to CorporateResults for a specific period and stock
-
AUTO_ID
¶
-
H1
¶ section 1
-
H2
¶ section 2
-
H3
¶ section 3
-
H4
¶ section 4
-
KEY
¶
-
REF_ID
¶ lookup CorporateResultsMeta to get this value
-
VALUE
¶
-
-
class
plutoPy.model.EquitiesIndiaNse.
CorporateResultsMeta
(**kwargs)¶ Bases:
sqlalchemy.ext.declarative.api.Base
,plutoPy.model.Db.StockViz
Query to obtain the REF_ID to lookup CorporateResults for a specific period
-
BROADCAST_DATE
¶
-
IS_AUDITED
¶
-
IS_CONSOLIDATED
¶
-
IS_CUMULATIVE
¶
-
PERIOD
¶
-
PERIOD_BEGIN
¶
-
PERIOD_END
¶
-
REF_ID
¶ use this to query CorporateResults
-
SYMBOL
¶
-
-
class
plutoPy.model.EquitiesIndiaNse.
DailyReturns
(**kwargs)¶ Bases:
sqlalchemy.ext.declarative.api.Base
,plutoPy.model.Db.StockViz
Query the percentage daily return (close-to-close) time-series for listed stocks
-
SYMBOL
¶
-
TIME_STAMP
¶
-
VALUE
¶
-
-
class
plutoPy.model.EquitiesIndiaNse.
EodAdjustedTimeSeries
(**kwargs)¶ Bases:
sqlalchemy.ext.declarative.api.Base
,plutoPy.model.Db.StockVizDyn
Query end-of-day price and volume time-series adjusted for splits, bonus and dividends for listed stocks
-
CLOSE
¶
-
HIGH
¶
-
LOW
¶
-
OPEN
¶
-
SYMBOL
¶
-
TIME_STAMP
¶
-
VOLUME
¶
-
-
class
plutoPy.model.EquitiesIndiaNse.
EodTimeSeries
(**kwargs)¶ Bases:
sqlalchemy.ext.declarative.api.Base
,plutoPy.model.Db.StockViz
Query unadjusted end-of-day price and volume time-series for listed stocks
-
CLOSE
¶ usually a weighted average of price x volume of the last 15-minutes of trading
-
HIGH
¶
-
LAST
¶ last traded price
-
LOW
¶
-
OPEN
¶
-
SERIES
¶
-
SYMBOL
¶
-
TIME_STAMP
¶
-
VOLUME
¶
-
-
class
plutoPy.model.EquitiesIndiaNse.
MarketCapDecile
(**kwargs)¶ Bases:
sqlalchemy.ext.declarative.api.Base
,plutoPy.model.Db.StockViz
Query market-cap decile of of listed equity tickers
-
DECILE
¶
-
SYMBOL
¶
-
TIME_STAMP
¶
-
-
class
plutoPy.model.EquitiesIndiaNse.
MiscInfo
(**kwargs)¶ Bases:
sqlalchemy.ext.declarative.api.Base
,plutoPy.model.Db.StockViz
Query miscellaneous information of listed equity tickers
-
D2T_PCT
¶ delivery percentage. % of shares which were not squared off the same day out of total shares traded
-
FF_MKT_CAP_CR
¶ free-float market-cap in crores
-
LOWER_PX_BAND
¶ trading is halted if the stock trades below this level
-
SYMBOL
¶
-
TIME_STAMP
¶
-
UPPER_PX_BAND
¶ trading is halted if the stock trades above this level
-
-
class
plutoPy.model.EquitiesIndiaNse.
Tickers
(**kwargs)¶ Bases:
sqlalchemy.ext.declarative.api.Base
,plutoPy.model.Db.StockViz
Query meta data of listed equity tickers
-
DATE_LISTING
¶ date of birth of the ticker
-
FACE
¶ a stock’s face value is the initial cost of the stock, as indicated on the certificate
-
ISIN
¶ unique identifier
-
MARKET_LOT
¶ usually, you can trade just 1 stock. but sometimes, only in multiples of “market lot”
-
NAME
¶ name of the security. for eg: Infosys Limited
-
PAID_UP
¶ paid-up capital is the amount of money a company has received from shareholders in exchange for shares of stock
-
SERIES
¶ EQ/BE/BZ as assigned by the NSE
-
SYMBOL
¶ ticker/stock symbol. for eg: INFY
-
Equities Futures and Options traded on the NSE¶
Equities Futures and Options traded on the NSE
sources: https://www.nseindia.com/
-
class
plutoPy.model.EquitiesFuturesAndOptionsIndiaNse.
FuturesEodTimeSeries
(**kwargs)¶ Bases:
sqlalchemy.ext.declarative.api.Base
,plutoPy.model.Db.StockViz
Query the end-of-day prices of equity futures contracts traded on the NSE
-
CLOSE
¶ usually a weighted average of price x volume of the last 15-minutes of trading
-
CONTRACTS
¶
-
EXPIRY
¶
-
HIGH
¶
-
LOW
¶
-
OI
¶
-
OPEN
¶
-
SETTLE
¶
-
SYMBOL
¶
-
TIME_STAMP
¶
-
VALUE
¶
-
-
class
plutoPy.model.EquitiesFuturesAndOptionsIndiaNse.
LotSize
(**kwargs)¶ Bases:
sqlalchemy.ext.declarative.api.Base
,plutoPy.model.Db.StockViz
Query the lot-size of equity futures and options contracts traded on the NSE
-
CONTRACT
¶ expiry year and month. the ‘date’ part is always set to 1.
-
LOT_SIZE
¶
-
SYMBOL
¶
-
-
class
plutoPy.model.EquitiesFuturesAndOptionsIndiaNse.
OptionGreeks
(**kwargs)¶ Bases:
sqlalchemy.ext.declarative.api.Base
,plutoPy.model.Db.StockViz
Query the end-of-day option greeks of equity options contracts traded on the NSE
-
DELTA
¶
-
EXPIRY
¶
-
GAMMA
¶
-
IV
¶
-
LAMBDA
¶
-
MODEL_PRICE
¶
-
OTYPE
¶ CE - European calls; PE - European puts
-
RATE
¶ the interest rate used in the calculation
-
RHO
¶
-
SIGMA
¶ the volatility assumption used in the calculation
-
STRIKE
¶
-
SYMBOL
¶
-
THETA
¶
-
TIME_STAMP
¶
-
TTM
¶ time to maturity measured in years
-
VEGA
¶
-
-
class
plutoPy.model.EquitiesFuturesAndOptionsIndiaNse.
OptionsEodTimeSeries
(**kwargs)¶ Bases:
sqlalchemy.ext.declarative.api.Base
,plutoPy.model.Db.StockViz
Query the end-of-day prices of equity options contracts traded on the NSE
-
CLOSE
¶ usually a weighted average of price x volume of the last 15-minutes of trading
-
CONTRACTS
¶
-
EXPIRY
¶
-
HIGH
¶
-
LOW
¶
-
OI
¶
-
OPEN
¶
-
OTYPE
¶ CE - European calls; CA - American calls, etc…
-
SETTLE
¶
-
STRIKE
¶
-
SYMBOL
¶
-
TIME_STAMP
¶
-
VALUE
¶
-
Commodity Futures And Options¶
Commodity Futures and Options
sources: https://www.mcxindia.com/ https://www.ncdex.com/ https://www.cmegroup.com/
-
class
plutoPy.model.CommodityFuturesAndOptions.
CmeEod
(**kwargs)¶ Bases:
sqlalchemy.ext.declarative.api.Base
,plutoPy.model.Db.StockViz
Query the end-of-day prices of commodity futures contracts traded on the COMEX and NYMEX
-
CONTRACT
¶
-
CONTRACT_DAY
¶
-
CONTRACT_MONTH
¶
-
CONTRACT_YEAR
¶
-
HIGH
¶
-
LAST
¶
-
LOW
¶
-
OPEN
¶
-
PRODUCT_DESCRIPTION
¶
-
PRODUCT_SYMBOL
¶
-
SETTLE
¶
-
TIME_STAMP
¶
-
VOLUME
¶
-
-
class
plutoPy.model.CommodityFuturesAndOptions.
McxEod
(**kwargs)¶ Bases:
sqlalchemy.ext.declarative.api.Base
,plutoPy.model.Db.StockViz
Query the end-of-day prices of commodity contracts traded on the MCX
-
CLOSE
¶
-
CONTRACT
¶
-
EXPIRY
¶
-
EXPIRY_SERIES
¶ 0 implies current month contract, etc.
-
HIGH
¶
-
LOW
¶
-
OI
¶ open interest
-
OPEN
¶
-
OTYPE
¶ CE - European calls; PE - European puts; XX , FUTCOM - futures
-
STRIKE
¶ if OTYPE is CE or PE, then the strike
-
TIME_STAMP
¶
-
VALUE
¶ value of the contracts traded
-
VOL
¶ quantity of the underlying commodity traded in VOL_UNITS
-
VOLUME
¶ number of contracts traded
-
VOL_UNITS
¶ BALES, KGS, BBL, etc…
-
-
class
plutoPy.model.CommodityFuturesAndOptions.
NcdexEod
(**kwargs)¶ Bases:
sqlalchemy.ext.declarative.api.Base
,plutoPy.model.Db.StockViz
Query the end-of-day prices of commodity contracts traded on the NCDEX
-
CLOSE
¶
-
COMMODITY
¶ Crude palm oil, TURMERIC, etc…
-
CONTRACT
¶
-
DELIVERY_CENTRE
¶ Ahmedabad, Kandla, etc…
-
EXPIRY
¶
-
EXPIRY_SERIES
¶ 0 implies current month contract, etc.
-
HIGH
¶
-
LAST_TRADE
¶ day on which the last trade occurred
-
LOW
¶
-
MEASURE
¶ for VOLUME. MT, LOT, etc
-
OI
¶ open interest
-
OPEN
¶
-
PRICE_UNIT
¶ RS/QUINTAL, RS/10KGS, RS/BALES, etc…
-
TIME_STAMP
¶
-
TRADED_NUM
¶ number of trades
-
TRADED_QTY
¶ number of contracts traded
-
TRADED_VAL
¶ traded value in Rs. lakhs
-
Currencies¶
Currencies
sources: https://www.alphavantage.co https://www.nseindia.com/
-
class
plutoPy.model.Currencies.
Av30minTimeSeries
(**kwargs)¶ Bases:
sqlalchemy.ext.declarative.api.Base
,plutoPy.model.Db.StockVizBeka
Query the 30-min bar of currency USD-fx time-series published by AlphaVantage
-
CLOSE
¶
-
HIGH
¶
-
LOW
¶
-
OPEN
¶
-
SYMBOL
¶
-
TIME_STAMP
¶ in UTC
-
-
class
plutoPy.model.Currencies.
AvEodTimeSeries
(**kwargs)¶ Bases:
sqlalchemy.ext.declarative.api.Base
,plutoPy.model.Db.StockVizBeka
Query the end-of-day currency USD-fx time-series published by AlphaVantage
-
CLOSE
¶
-
HIGH
¶
-
LOW
¶
-
OPEN
¶
-
SYMBOL
¶
-
TIME_STAMP
¶ in UTC
-
Investment Flows India¶
Investment Flows India
sources: http://www.cdslindia.com https://www.sebi.gov.in
-
class
plutoPy.model.InvestmentFlowsIndia.
DiiCashMarket
(**kwargs)¶ Bases:
sqlalchemy.ext.declarative.api.Base
,plutoPy.model.Db.StockViz
Query purchases and sales of debt and equity by Domestic Institutional Investors
-
BUY_VALUE
¶ in Rs.
-
SECURITY_TYPE
¶
-
SELL_VALUE
¶ in Rs.
-
TIME_STAMP
¶
-
-
class
plutoPy.model.InvestmentFlowsIndia.
DiiDerivativesMarket
(**kwargs)¶ Bases:
sqlalchemy.ext.declarative.api.Base
,plutoPy.model.Db.StockViz
Query purchases and sales of futures and options by Domestic Institutional Investors
-
BUY_CONTRACTS
¶
-
BUY_VALUE
¶ in Rs.
-
OI_CONTRACTS
¶
-
OI_VALUE
¶ in Rs.
-
SECURITY_TYPE
¶
-
SELL_CONTRACTS
¶
-
SELL_VALUE
¶ in Rs.
-
TIME_STAMP
¶
-
-
class
plutoPy.model.InvestmentFlowsIndia.
FiiCashMarket
(**kwargs)¶ Bases:
sqlalchemy.ext.declarative.api.Base
,plutoPy.model.Db.StockViz
Query purchases and sales of debt and equity by Foreign Institutional Investors
-
BUY_VALUE
¶ in Rs.
-
CONVERSION_RATE_USDINR
¶
-
NET_VALUE_DLR
¶ net flow in USD
-
ROUTE
¶ Stock Exchange OR Primary market
-
SECURITY_TYPE
¶
-
SELL_VALUE
¶ in Rs.
-
TIME_STAMP
¶
-
-
class
plutoPy.model.InvestmentFlowsIndia.
FiiDerivativesMarket
(**kwargs)¶ Bases:
sqlalchemy.ext.declarative.api.Base
,plutoPy.model.Db.StockViz
Query purchases and sales of futures and options by Foreign Institutional Investors
-
BUY_CONTRACTS
¶
-
BUY_VALUE
¶ in Rs.
-
OI_CONTRACTS
¶
-
OI_VALUE
¶ in Rs.
-
SECURITY_TYPE
¶
-
SELL_CONTRACTS
¶
-
SELL_VALUE
¶ in Rs.
-
TIME_STAMP
¶
-
Fama-French¶
Fama French Data-sets
source: http://mba.tuck.dartmouth.edu/pages/faculty/ken.french/index.html
-
class
plutoPy.model.FamaFrench.
FiveFactor3x2Daily
(**kwargs)¶ Bases:
sqlalchemy.ext.declarative.api.Base
,plutoPy.model.Db.StockVizUs2
Query the Fama-French 5-factor daily returns (http://mba.tuck.dartmouth.edu/pages/faculty/ken.french/Data_Library/f-f_5_factors_2x3.html)
-
KEY_ID
¶ SMB, RMW, RF, MKT-RF, HML, CMA
-
RET
¶
-
TIME_STAMP
¶
-
-
class
plutoPy.model.FamaFrench.
Industry49Daily
(**kwargs)¶ Bases:
sqlalchemy.ext.declarative.api.Base
,plutoPy.model.Db.StockVizUs2
Query the Fama-French daily returns of 49 different industries (http://mba.tuck.dartmouth.edu/pages/faculty/ken.french/Data_Library/det_49_ind_port.html)
-
KEY_ID
¶ AGRIC, BANKS, CHEMS, etc…
-
RET
¶
-
RET_TYPE
¶ AVWRD - Average Value Weighted Returns Daily, AEWRD - Average Equal Weighted Returns Daily
-
TIME_STAMP
¶
-
-
class
plutoPy.model.FamaFrench.
MomentumDaily
(**kwargs)¶ Bases:
sqlalchemy.ext.declarative.api.Base
,plutoPy.model.Db.StockVizUs2
Query the Fama-French daily returns of momentum factor and portfolios factor: https://mba.tuck.dartmouth.edu/pages/faculty/ken.french/Data_Library/det_mom_factor_daily.html portfolios: https://mba.tuck.dartmouth.edu/pages/faculty/ken.french/Data_Library/det_10_port_form_pr_12_2_daily.html
-
KEY_ID
¶ MOM, HI_PRIOR, LO_PRIOR, PRIOR_[2..9]
-
RET
¶
-
RET_TYPE
¶ M for KEY_ID = MOM, AVWRD - Average Value Weighted Returns Daily, AEWRD - Average Equal Weighted Returns Daily
-
TIME_STAMP
¶
-
-
class
plutoPy.model.FamaFrench.
MomentumMonthly
(**kwargs)¶ Bases:
sqlalchemy.ext.declarative.api.Base
,plutoPy.model.Db.StockVizUs2
Query the Fama-French daily returns of momentum factor and portfolios factor: https://mba.tuck.dartmouth.edu/pages/faculty/ken.french/Data_Library/det_mom_factor.html portfolios: https://mba.tuck.dartmouth.edu/pages/faculty/ken.french/Data_Library/det_10_port_form_pr_12_2.html
-
KEY_ID
¶ MOM, HI_PRIOR, LO_PRIOR, PRIOR_[2..9]
-
RET
¶
-
RET_TYPE
¶ M for KEY_ID = MOM, AVWRD - Average Value Weighted Returns Daily, AEWRD - Average Equal Weighted Returns Daily
-
TIME_STAMP
¶
-
Yale/Shiller¶
Yale/Shiller Data-sets
source: http://www.econ.yale.edu/~shiller/data.htm
-
class
plutoPy.model.Yale.
Confidence
(**kwargs)¶ Bases:
sqlalchemy.ext.declarative.api.Base
,plutoPy.model.Db.StockVizUs2
Query Stock Market Confidence Indexes produced by the Yale School of Management. (https://svz.bz/2NzetU3)
-
NAME
¶
-
STD_ERR
¶
-
TIME_STAMP
¶
-
VALUE
¶
-
-
class
plutoPy.model.Yale.
SP500
(**kwargs)¶ Bases:
sqlalchemy.ext.declarative.api.Base
,plutoPy.model.Db.StockVizUs2
Query the monthly stock price, dividends, and earnings data and the consumer price index.
-
CAPE
¶
-
CLOSE
¶
-
CLOSE_REAL
¶
-
CPI
¶
-
DIVIDEND
¶
-
DIVIDEND_REAL
¶
-
EARNINGS
¶
-
EARNINGS_REAL
¶
-
LONG_IR
¶
-
TIME_STAMP
¶
-
Using Fred¶
Notebooks for this code: python; R.
"""This example illustrates how to get a list of all Fred time-series that have 'India' in its title."""
import sys
sys.path.append("..")
from sqlalchemy import func
from plutoPy.model import RoutingSession, Fred
#a list of india focused indices mainted by the Fred
results = RoutingSession.session.query(Fred.Meta.SERIES_ID, Fred.Meta.TICKER, Fred.Meta.NAME, func.min(Fred.TimeSeries.TIME_STAMP).label("start_dt"), func.max(Fred.TimeSeries.TIME_STAMP).label("end_dt")).\
join(Fred.TimeSeries, Fred.Meta.SERIES_ID == Fred.TimeSeries.SERIES_ID).\
filter(Fred.Meta.NAME.ilike('%india %')).\
group_by(Fred.Meta.SERIES_ID, Fred.Meta.TICKER, Fred.Meta.NAME).all()
print(f"fetched: {len(results)}")
for instance in results:
print(instance)
Using World Bank GEM¶
Notebooks for this code: python; R.
"""This example illustrates how to use the World Bank data-set"""
import sys
sys.path.append("..")
from sqlalchemy import func, and_
from plutoPy.model import RoutingSession, WorldBank
#fetch all India related meta data
results = (RoutingSession.session.query(WorldBank.Meta)
.filter(WorldBank.Meta.COUNTRY_NAME == "India")).all()
print(f"fetched: {len(results)}")
for instance in results:
print(instance)
#fetch cpi inflation for India
results = (RoutingSession.session.query(WorldBank.TimeSeries)
.filter(and_(WorldBank.TimeSeries.COUNTRY_KEY == 135, WorldBank.TimeSeries.INDICATOR_KEY == 6))
.order_by(WorldBank.TimeSeries.YEAR)).all()
print(f"fetched: {len(results)}")
for instance in results:
print(instance)
Using InternationalMonetaryFund¶
Notebooks for this code: python; R.
"""This example illustrates how to use the International Monetary Fund data-set"""
import sys
sys.path.append("..")
from sqlalchemy import func, and_
from plutoPy.model import RoutingSession, InternationalMonetaryFund
from sqlalchemy.orm import aliased
Meta = aliased(InternationalMonetaryFund.Meta)
TimeSeries = aliased(InternationalMonetaryFund.TimeSeries)
# get meta-data about monthly indicators pertaining to India currently maintained
results = (RoutingSession.session.query(Meta)
.filter(and_(Meta.AREA == "India", Meta.END_YEAR == 2019, Meta.FREQ == 'M'))
.all())
print(f"fetched: {len(results)}")
for instance in results:
print(instance)
# get Indian IIP index (-2147472396)
results = (RoutingSession.session.query(TimeSeries)
.filter(TimeSeries.ID == -2147472396)
.order_by(TimeSeries.YEAR, TimeSeries.MONTH)
.all())
print(f"fetched: {len(results)}")
for instance in results:
print(instance)
Using NasdaqOmx Indices¶
Notebooks for this code: python; R.
"""This example illustrates how to get a list of all NASDAQOMX TR Indices and their time-series"""
import sys
sys.path.append("..")
from sqlalchemy import func
from plutoPy.model import RoutingSession, NasdaqOmx
# fetch all "India" TR NASDAQOMX indices
results = (RoutingSession.session.query(NasdaqOmx.Meta.NAME,
func.min(NasdaqOmx.TimeSeries.TIME_STAMP).label("start_dt"),
func.max(NasdaqOmx.TimeSeries.TIME_STAMP).label("end_dt"))
.join(NasdaqOmx.TimeSeries, NasdaqOmx.Meta.ID == NasdaqOmx.TimeSeries.ID)
.filter(NasdaqOmx.Meta.NAME.ilike('% india %'))
.group_by(NasdaqOmx.Meta.NAME).all())
print(f"fetched: {len(results)}")
for instance in results:
print(instance)
Using Yield Curves¶
Notebooks for this code: python; R.
import sys
sys.path.append("..")
from sqlalchemy import func, and_
from sqlalchemy.orm import aliased
from plutoPy.model import RoutingSession, YieldCurve
#fetch the latest India Zero Coupon Bond yields
end_dt = RoutingSession.session.query(func.max(YieldCurve.IndiaZeroCoupon.TIME_STAMP)).scalar()
curve = (RoutingSession.session.query(YieldCurve.IndiaZeroCoupon)
.filter(YieldCurve.IndiaZeroCoupon.TIME_STAMP == end_dt)
.order_by(YieldCurve.IndiaZeroCoupon.MATURITY)
.all())
print("the latest India Zero Coupon Bond yields")
for c in curve:
print(c)
#fetch the latest US Treasury Yield Curve
end_dt = RoutingSession.session.query(func.max(YieldCurve.UsTreasury.TIME_STAMP)).scalar()
curve = (RoutingSession.session.query(YieldCurve.UsTreasury)
.filter(YieldCurve.UsTreasury.TIME_STAMP == end_dt)
.all())
print("the latest US Treasury Yield Curve")
for c in curve:
print(c)
#fetch the latest Euro area yield curve
end_dt = RoutingSession.session.query(func.max(YieldCurve.EuroArea.TIME_STAMP)).scalar()
alias1 = aliased(YieldCurve.EuroArea)
alias2 = aliased(YieldCurve.EuroArea)
curve = (RoutingSession.session.query(alias1.TENOR_Y, alias1.TENOR_M, alias1.VALUE.label('G_N_A'), alias2.VALUE.label('G_N_C'))
.join(alias2, and_(alias1.TENOR_Y == alias2.TENOR_Y, alias1.TENOR_M == alias2.TENOR_M, alias1.TIME_STAMP == alias2.TIME_STAMP))
.filter(and_(alias1.TIME_STAMP == end_dt, alias1.CURVE_ID == 'G_N_A', alias2.CURVE_ID == 'G_N_C'))
.order_by(alias1.TENOR_Y, alias1.TENOR_M)
.all())
print("the latest Euro Area Yield Curve")
for c in curve:
print(c)
Using Indices¶
Notebooks for this code: python; R.
"""This example illustrates how to get a list of all the latest NSE Indices, and
the constituents of a specific index."""
import sys
sys.path.append("..")
from sqlalchemy import func, text
from plutoPy.model import RoutingSession, Indices
# fetch the last 10 day India VIX levels
results = (RoutingSession.session.query(Indices.IndiaVixTimeSeries)
.order_by(Indices.IndiaVixTimeSeries.TIME_STAMP.desc())
.limit(10))
for instance in results:
print(instance)
# fetch the latest rates across tenors
end_dt = RoutingSession.session.query(func.max(Indices.IndiaGsecTimeSeries.TIME_STAMP)).scalar()
results = (RoutingSession.session.query(Indices.IndiaGsecTimeSeries)
.filter(Indices.IndiaGsecTimeSeries.TIME_STAMP == end_dt)
.all())
print(f"fetched: {len(results)}")
for instance in results:
print(instance)
# a list of all current NSE indices
end_dt = RoutingSession.session.query(func.max(Indices.NseTimeSeries.TIME_STAMP)).scalar()
results = (RoutingSession.session.query(Indices.NseTimeSeries.NAME)
.filter(Indices.NseTimeSeries.TIME_STAMP == end_dt)
.all())
print(f"fetched: {len(results)}")
for instance in results:
print(instance.NAME)
# fetch the latest NSE NIFTY 50 constituents
latest_dt = (RoutingSession.session.query(func.max(Indices.NseConstituents.TIME_STAMP))
.filter(Indices.NseConstituents.NAME == "NIFTY 50")
.scalar())
results = (RoutingSession.session.query(Indices.NseConstituents.SYMBOL, Indices.NseConstituents.CAP_WEIGHT)
.filter(Indices.NseConstituents.TIME_STAMP == latest_dt, Indices.NseConstituents.NAME == "NIFTY 50")
.all())
print(f"fetched: {len(results)}")
for instance in results:
print(instance)
# fetch the latest BSE SENSEX constituents
latest_dt = (RoutingSession.session.query(func.max(Indices.BseConstituents.TIME_STAMP))
.filter(Indices.BseConstituents.NAME == "sp bse sensex")
.scalar())
results = (RoutingSession.session.query(Indices.BseConstituents.SYMBOL, Indices.BseConstituents.SECURITY_NAME)
.filter(Indices.BseConstituents.TIME_STAMP == latest_dt, Indices.BseConstituents.NAME == "sp bse sensex")
.all())
print(f"fetched: {len(results)}")
for instance in results:
print(instance)
# fetch index date ranges published on yahoo finance
results = (RoutingSession.session.query(Indices.YahooFinanceTimeSeries.NAME,
func.min(Indices.YahooFinanceTimeSeries.TIME_STAMP).label("start_dt"),
func.max(Indices.YahooFinanceTimeSeries.TIME_STAMP).label("end_dt"))
.group_by(Indices.YahooFinanceTimeSeries.NAME)
.all())
print(f"fetched: {len(results)}")
for instance in results:
print(instance)
# fetch index date ranges published by Barclays
results = (RoutingSession.session.query(Indices.BarclaysMeta.FAMILY, Indices.BarclaysMeta.NAME,
func.min(Indices.BarclaysTimeSeries.TIME_STAMP).label("start_dt"),
func.max(Indices.BarclaysTimeSeries.TIME_STAMP).label("end_dt"))
.join(Indices.BarclaysTimeSeries, Indices.BarclaysMeta.TICKER == Indices.BarclaysTimeSeries.TICKER)
.group_by(Indices.BarclaysMeta.FAMILY, Indices.BarclaysMeta.NAME)
.all())
print(f"fetched: {len(results)}")
for instance in results:
print(instance)
Using MutualFundsIndia¶
Notebooks for this code: python; R.
"""This example illustrates how to use the MutualFundsIndia data-set"""
import sys
sys.path.append("..")
import pandas as pd
from sqlalchemy import func, or_, and_
from plutoPy.model import RoutingSession, MutualFundsIndia
# who are the biggest 5?
lastAumDate = RoutingSession.session.query(func.max(MutualFundsIndia.AumFundwise.PERIOD)).scalar()
print(f"{lastAumDate}")
aums = (RoutingSession.session.query(MutualFundsIndia.AumFundwise.FUND, MutualFundsIndia.AumFundwise.AVG_AUM_WO_FOFD + MutualFundsIndia.AumFundwise.AVG_AUM_FOFD)
.filter(MutualFundsIndia.AumFundwise.PERIOD == lastAumDate)
.order_by((MutualFundsIndia.AumFundwise.AVG_AUM_WO_FOFD + MutualFundsIndia.AumFundwise.AVG_AUM_FOFD).desc())).all()
aumDf = pd.DataFrame(aums, columns=['FUND', 'AUM']) #analyze this!
print(aumDf[0:5])
# deep dive: largest 10 mid-cap funds by AUM
lastMetaDate = RoutingSession.session.query(func.max(MutualFundsIndia.Meta.AS_OF)).scalar()
lastSwDate = RoutingSession.session.query(func.max(MutualFundsIndia.AumSchemewise.PERIOD)).scalar()
print(f"{lastMetaDate}/{lastSwDate}")
# Meta to filter for the 'Mid-Cap' category
# AumSchemewise to sort funds by AUM - largest first
# NavTimeSeries to get the start and end dates for which NAVs are available
midCaps = (RoutingSession.session.query(MutualFundsIndia.Meta.SCHEME_CODE,
MutualFundsIndia.AumSchemewise.SCHEME_NAME,
MutualFundsIndia.Meta.CATEGORY,
MutualFundsIndia.AumSchemewise.AVG_AUM_WO_FOFD,
func.min(MutualFundsIndia.NavTimeSeries.TIME_STAMP).label("start_dt"),
func.max(MutualFundsIndia.NavTimeSeries.TIME_STAMP).label("end_dt"))
.join(MutualFundsIndia.AumSchemewise, MutualFundsIndia.Meta.SCHEME_CODE == MutualFundsIndia.AumSchemewise.SCHEME_CODE)
.join(MutualFundsIndia.NavTimeSeries, MutualFundsIndia.NavTimeSeries.SCHEME_CODE == MutualFundsIndia.AumSchemewise.SCHEME_CODE)
.filter(and_(MutualFundsIndia.AumSchemewise.PERIOD == lastSwDate,
MutualFundsIndia.Meta.AS_OF == lastMetaDate,
MutualFundsIndia.Meta.CATEGORY == 'Mid-Cap'))
.group_by(MutualFundsIndia.Meta.SCHEME_CODE,
MutualFundsIndia.AumSchemewise.SCHEME_NAME,
MutualFundsIndia.Meta.CATEGORY,
MutualFundsIndia.AumSchemewise.AVG_AUM_WO_FOFD)
.order_by(MutualFundsIndia.AumSchemewise.AVG_AUM_WO_FOFD.desc())).all()
print(f"fetched: {len(midCaps)}")
# get a pandas dataframe out of the list of tuples
mcDf = pd.DataFrame(midCaps)
pd.set_option('display.max_columns', None)
print(mcDf[0:10])
# get the NAV time-series
scode = int(mcDf.iloc[2]['SCHEME_CODE'])
navs = (RoutingSession.session.query(MutualFundsIndia.NavTimeSeries.TIME_STAMP, MutualFundsIndia.NavTimeSeries.NAV)
.filter(MutualFundsIndia.NavTimeSeries.SCHEME_CODE == scode)
.order_by(MutualFundsIndia.NavTimeSeries.TIME_STAMP)).all()
navDf = pd.DataFrame(navs) #analyze this!
print(navDf[0:10])
Using Equities India (NSE)¶
Notebooks for this code: python; R.
"""This example illustrates how to use the EquitiesIndiaNse data-set."""
import sys
sys.path.append("..")
from sqlalchemy import func, and_, or_
from plutoPy.model import RoutingSession, EquitiesIndiaNse
from datetime import date, datetime
# fetch the earliest 10 listed equity
results = (RoutingSession.session.query(EquitiesIndiaNse.Tickers)
.order_by(EquitiesIndiaNse.Tickers.DATE_LISTING)
.limit(10)
.all())
for instance in results:
print(instance)
# fetch some "misc" info for State Bank of India
end_dt = RoutingSession.session.query(func.max(EquitiesIndiaNse.MiscInfo.TIME_STAMP)).scalar()
results = (RoutingSession.session.query(EquitiesIndiaNse.MiscInfo)
.filter(and_(EquitiesIndiaNse.MiscInfo.TIME_STAMP == end_dt, EquitiesIndiaNse.MiscInfo.SYMBOL == 'SBIN'))
.all())
print("misc info for SBIN:")
for instance in results:
print(instance)
# fetch the market-cap decile of DHFL since we started capturing the data-set
results = (RoutingSession.session.query(EquitiesIndiaNse.MarketCapDecile)
.filter(EquitiesIndiaNse.MarketCapDecile.SYMBOL == 'DHFL')
.all())
print("market-cap deciles for DHFL over time:")
for instance in results:
print(instance)
# fetch the latest end-of-day prices for State Bank of India
end_dt = RoutingSession.session.query(func.max(EquitiesIndiaNse.EodTimeSeries.TIME_STAMP)).scalar()
results = (RoutingSession.session.query(EquitiesIndiaNse.EodTimeSeries)
.filter(and_(EquitiesIndiaNse.EodTimeSeries.TIME_STAMP == end_dt, EquitiesIndiaNse.EodTimeSeries.SYMBOL == 'SBIN'))
.all())
print(f"fetched: {len(results)}")
for instance in results:
print(instance)
# fetch the last 10 day EOD prices for State Bank of India
results = (RoutingSession.session.query(EquitiesIndiaNse.EodTimeSeries)
.filter(and_(or_(EquitiesIndiaNse.EodTimeSeries.SERIES == 'EQ', EquitiesIndiaNse.EodTimeSeries.SERIES == 'BE'),
EquitiesIndiaNse.EodTimeSeries.SYMBOL == 'SBIN'))
.order_by(EquitiesIndiaNse.EodTimeSeries.TIME_STAMP.desc())
.limit(10)
.all())
for instance in results:
print(instance)
# UPL did a 1:2 bonus on 2019-07-02. see unadjusted eod vs. adjusted eod
startDt = datetime(2019, 6, 15)
endDt = datetime(2019, 7, 15)
print("unadjusted eod")
results = (RoutingSession.session.query(EquitiesIndiaNse.EodTimeSeries)
.filter(and_(or_(EquitiesIndiaNse.EodTimeSeries.SERIES == 'EQ', EquitiesIndiaNse.EodTimeSeries.SERIES == 'BE'),
EquitiesIndiaNse.EodTimeSeries.SYMBOL == 'UPL',
EquitiesIndiaNse.EodTimeSeries.TIME_STAMP >= startDt,
EquitiesIndiaNse.EodTimeSeries.TIME_STAMP <= endDt))
.order_by(EquitiesIndiaNse.EodTimeSeries.TIME_STAMP)
.all())
for instance in results:
print(instance)
print("adjusted eod")
results = (RoutingSession.session.query(EquitiesIndiaNse.EodAdjustedTimeSeries)
.filter(and_(EquitiesIndiaNse.EodAdjustedTimeSeries.SYMBOL == 'UPL',
EquitiesIndiaNse.EodAdjustedTimeSeries.TIME_STAMP >= startDt,
EquitiesIndiaNse.EodAdjustedTimeSeries.TIME_STAMP <= endDt))
.order_by(EquitiesIndiaNse.EodAdjustedTimeSeries.TIME_STAMP)
.all())
for instance in results:
print(instance)
# fetch the last 10 day returns for State Bank of India
results = (RoutingSession.session.query(EquitiesIndiaNse.DailyReturns)
.filter(EquitiesIndiaNse.DailyReturns.SYMBOL == 'SBIN')
.order_by(EquitiesIndiaNse.DailyReturns.TIME_STAMP.desc())
.limit(10)
.all())
for instance in results:
print(instance)
# fetch the last 10 corporate actions for State Bank of India
results = (RoutingSession.session.query(EquitiesIndiaNse.CorporateActions)
.filter(EquitiesIndiaNse.CorporateActions.SYMBOL == 'SBIN')
.order_by(EquitiesIndiaNse.CorporateActions.EX_DATE.desc())
.limit(10)
.all())
for instance in results:
print(instance)
# fetch the last 10 corporate events for State Bank of India
results = (RoutingSession.session.query(EquitiesIndiaNse.CorporateEvents)
.filter(EquitiesIndiaNse.CorporateEvents.SYMBOL == 'SBIN')
.order_by(EquitiesIndiaNse.CorporateEvents.EVENT_DATE.desc())
.limit(10)
.all())
for instance in results:
print(instance)
# fetch the last 24 quarter EPS for State Bank of India
refIds = (RoutingSession.session.query(EquitiesIndiaNse.CorporateResultsMeta)
.filter(and_(EquitiesIndiaNse.CorporateResultsMeta.SYMBOL == 'SBIN'),
EquitiesIndiaNse.CorporateResultsMeta.IS_CONSOLIDATED == False,
EquitiesIndiaNse.CorporateResultsMeta.PERIOD.ilike('%quarter'))
.order_by(EquitiesIndiaNse.CorporateResultsMeta.PERIOD_END.desc())
.limit(24)
.all())
for instance in refIds:
print(instance)
results = (RoutingSession.session.query(EquitiesIndiaNse.CorporateResults)
.filter(and_(EquitiesIndiaNse.CorporateResults.REF_ID == instance.REF_ID,
EquitiesIndiaNse.CorporateResults.KEY.ilike('%diluted%before%')))
.all())
for r in results:
print(r)
Using Equities Futures and Options traded on the NSE¶
Notebooks for this code: python; R.
"""This example illustrates how to use the EquitiesFuturesAndOptionsIndiaNse data-set."""
import sys
sys.path.append("..")
import pandas as pd
from sqlalchemy import func, and_, or_, text, Integer
from sqlalchemy.orm import aliased
from sqlalchemy.sql.expression import cast
from plutoPy.model import RoutingSession, EquitiesFuturesAndOptionsIndiaNse
from datetime import date, datetime, timedelta
# get all NIFTY futures contract traded right now
print("NIFTY futures contract traded right now")
end_dt = RoutingSession.session.query(func.max(EquitiesFuturesAndOptionsIndiaNse.FuturesEodTimeSeries.TIME_STAMP)).scalar()
results = (RoutingSession.session.query(EquitiesFuturesAndOptionsIndiaNse.FuturesEodTimeSeries)
.filter(and_(EquitiesFuturesAndOptionsIndiaNse.FuturesEodTimeSeries.SYMBOL == "NIFTY",
EquitiesFuturesAndOptionsIndiaNse.FuturesEodTimeSeries.TIME_STAMP == end_dt))
.all())
for instance in results:
print(instance)
# get all NIFTY option contracts at the nearest expiry traded right now
print("NIFTY option contracts at the nearest expiry traded right now")
end_dt = RoutingSession.session.query(func.max(EquitiesFuturesAndOptionsIndiaNse.OptionsEodTimeSeries.TIME_STAMP)).scalar()
expiry = (RoutingSession.session.query(func.min(EquitiesFuturesAndOptionsIndiaNse.OptionsEodTimeSeries.EXPIRY))
.filter(and_(EquitiesFuturesAndOptionsIndiaNse.OptionsEodTimeSeries.SYMBOL == "NIFTY",
EquitiesFuturesAndOptionsIndiaNse.OptionsEodTimeSeries.TIME_STAMP == end_dt))
.scalar())
results = (RoutingSession.session.query(EquitiesFuturesAndOptionsIndiaNse.OptionsEodTimeSeries)
.filter(and_(EquitiesFuturesAndOptionsIndiaNse.OptionsEodTimeSeries.SYMBOL == "NIFTY",
EquitiesFuturesAndOptionsIndiaNse.OptionsEodTimeSeries.EXPIRY == expiry,
cast(EquitiesFuturesAndOptionsIndiaNse.OptionsEodTimeSeries.STRIKE, Integer) % 100 == 0,
EquitiesFuturesAndOptionsIndiaNse.OptionsEodTimeSeries.TIME_STAMP == end_dt))
.order_by(EquitiesFuturesAndOptionsIndiaNse.OptionsEodTimeSeries.STRIKE, EquitiesFuturesAndOptionsIndiaNse.OptionsEodTimeSeries.OTYPE)
.all())
for instance in results:
print(instance)
# get all greeks for the NIFTY option contracts at the nearest expiry traded right now
print("greeks for the NIFTY option contracts at the nearest expiry traded right now")
end_dt = RoutingSession.session.query(func.max(EquitiesFuturesAndOptionsIndiaNse.OptionGreeks.TIME_STAMP)).scalar()
expiry = (RoutingSession.session.query(func.min(EquitiesFuturesAndOptionsIndiaNse.OptionGreeks.EXPIRY))
.filter(and_(EquitiesFuturesAndOptionsIndiaNse.OptionGreeks.SYMBOL == "NIFTY",
EquitiesFuturesAndOptionsIndiaNse.OptionGreeks.TIME_STAMP == end_dt))
.scalar())
results = (RoutingSession.session.query(EquitiesFuturesAndOptionsIndiaNse.OptionGreeks)
.filter(and_(EquitiesFuturesAndOptionsIndiaNse.OptionGreeks.SYMBOL == "NIFTY",
EquitiesFuturesAndOptionsIndiaNse.OptionGreeks.EXPIRY == expiry,
cast(EquitiesFuturesAndOptionsIndiaNse.OptionGreeks.STRIKE, Integer) % 100 == 0,
EquitiesFuturesAndOptionsIndiaNse.OptionGreeks.TIME_STAMP == end_dt))
.order_by(EquitiesFuturesAndOptionsIndiaNse.OptionGreeks.STRIKE, EquitiesFuturesAndOptionsIndiaNse.OptionGreeks.OTYPE)
.all())
for instance in results:
print(instance)
# get NIFTY's lot-sizes at different expiries
print("NIFTY's lot-sizes at different expiries")
futureDate = date.today() + timedelta(days=30*3)
results = (RoutingSession.session.query(EquitiesFuturesAndOptionsIndiaNse.LotSize)
.filter(and_(EquitiesFuturesAndOptionsIndiaNse.LotSize.SYMBOL == "NIFTY", EquitiesFuturesAndOptionsIndiaNse.LotSize.CONTRACT <= futureDate))
.order_by(EquitiesFuturesAndOptionsIndiaNse.LotSize.CONTRACT.desc())
.limit(10)
.all())
for instance in results:
print(instance)
Using Commodity Futures And Options¶
Notebooks for this code: python; R.
"""This example illustrates how to use the CommodityFuturesAndOptions data-set."""
import sys
sys.path.append("..")
import pandas as pd
from sqlalchemy import func, and_, or_, text
from sqlalchemy.orm import aliased
from plutoPy.model import RoutingSession, CommodityFuturesAndOptions
from datetime import date, datetime
pd.set_option('display.max_columns', 500)
# get all the commodities that are being traded in COMEX and NYMEX
print("commodity futures that are being traded in COMEX and NYMEX")
end_dt = RoutingSession.session.query(func.max(CommodityFuturesAndOptions.CmeEod.TIME_STAMP)).scalar()
alias1 = aliased(CommodityFuturesAndOptions.CmeEod)
alias2 = aliased(CommodityFuturesAndOptions.CmeEod)
t1 = (RoutingSession.session.query(alias1.PRODUCT_SYMBOL, alias1.PRODUCT_DESCRIPTION, func.sum(alias1.VOLUME).label("total_volume"))
.filter(alias1.TIME_STAMP == end_dt)
.group_by(alias1.PRODUCT_SYMBOL, alias1.PRODUCT_DESCRIPTION)
.order_by(text("total_volume desc"))
.all())
t2 = (RoutingSession.session.query(alias1.PRODUCT_SYMBOL, func.min(alias1.TIME_STAMP).label("start_dt"))
.group_by(alias1.PRODUCT_SYMBOL)
.order_by(text("start_dt"))
.all())
pd1 = pd.DataFrame(t1, columns=['SYMBOL', 'DESCRIPTION', 'VOLUME'])
pd2 = pd.DataFrame(t2, columns=['SYMBOL', 'LISTED_DATE'])
tradedContracts = pd.merge(pd1, pd2, on='SYMBOL')
print(tradedContracts[tradedContracts['VOLUME'] > 0])
# get all the commodity futures that are being traded in MCX
print("commodity futures that are being traded in MCX")
end_dt = RoutingSession.session.query(func.max(CommodityFuturesAndOptions.McxEod.TIME_STAMP)).scalar()
alias1 = aliased(CommodityFuturesAndOptions.McxEod)
alias2 = aliased(CommodityFuturesAndOptions.McxEod)
t1 = (RoutingSession.session.query(alias1.CONTRACT, func.sum(alias1.OI).label("total_oi"))
.filter(and_(alias1.TIME_STAMP == end_dt,
or_(alias1.OTYPE == 'XX', alias1.OTYPE == 'FUTCOM')))
.group_by(alias1.CONTRACT)
.order_by(text("total_oi desc"))
.all())
t2 = (RoutingSession.session.query(alias1.CONTRACT, func.min(alias1.TIME_STAMP).label("start_dt"))
.group_by(alias1.CONTRACT)
.filter(or_(alias1.OTYPE == 'XX', alias1.OTYPE == 'FUTCOM'))
.order_by(text("start_dt"))
.all())
pd1 = pd.DataFrame(t1, columns=['SYMBOL', 'OI'])
pd2 = pd.DataFrame(t2, columns=['SYMBOL', 'LISTED_DATE'])
tradedContracts = pd.merge(pd1, pd2, on='SYMBOL')
print(tradedContracts[tradedContracts['OI'] > 0])
# get all the commodity futures that are being traded in MCX
print("commodity futures that are being traded in NCDEX")
end_dt = RoutingSession.session.query(func.max(CommodityFuturesAndOptions.NcdexEod.TIME_STAMP)).scalar()
alias1 = aliased(CommodityFuturesAndOptions.NcdexEod)
alias2 = aliased(CommodityFuturesAndOptions.NcdexEod)
t1 = (RoutingSession.session.query(alias1.COMMODITY, func.sum(alias1.OI).label("total_oi"))
.filter(alias1.TIME_STAMP == end_dt)
.group_by(alias1.COMMODITY)
.order_by(text("total_oi desc"))
.all())
t2 = (RoutingSession.session.query(alias1.COMMODITY, func.min(alias1.TIME_STAMP).label("start_dt"))
.group_by(alias1.COMMODITY)
.order_by(text("start_dt"))
.all())
pd1 = pd.DataFrame(t1, columns=['COMMODITY', 'OI'])
pd2 = pd.DataFrame(t2, columns=['COMMODITY', 'LISTED_DATE'])
tradedContracts = pd.merge(pd1, pd2, on='COMMODITY')
print(tradedContracts[tradedContracts['OI'] > 0])
Using Currencies¶
Notebooks for this code: python; R.
"""This example illustrates how to use the Currencies data-set."""
import sys
sys.path.append("..")
import pandas as pd
from sqlalchemy import func, and_, or_, text, Integer
from sqlalchemy.orm import aliased
from sqlalchemy.sql.expression import cast
from plutoPy.model import RoutingSession, Currencies
from datetime import date, datetime, timedelta
print("AlphaVantage end-of-day pairs:")
results = (RoutingSession.session.query(Currencies.AvEodTimeSeries.SYMBOL,
func.min(Currencies.AvEodTimeSeries.TIME_STAMP).label('start_dt'),
func.max(Currencies.AvEodTimeSeries.TIME_STAMP).label('end_dt'))
.group_by(Currencies.AvEodTimeSeries.SYMBOL)
.order_by(text('start_dt'))).all()
for instance in results:
print(instance)
######################################################
# get traded futures pairs
print("traded futures pairs:")
results = (RoutingSession.session.query(Currencies.NseFuturesTimeSeries.SYMBOL,
func.min(Currencies.NseFuturesTimeSeries.TIME_STAMP).label('start_dt'),
func.max(Currencies.NseFuturesTimeSeries.TIME_STAMP).label('end_dt'))
.group_by(Currencies.NseFuturesTimeSeries.SYMBOL)
.order_by(text('start_dt'))
.all())
for instance in results:
print(instance)
# get the latest USDINR option chain for the nearest expiry
print("latest USDINR option chain for the nearest expiry:")
end_dt = RoutingSession.session.query(func.max(Currencies.NseOptionsTimeSeries.TIME_STAMP)).scalar()
expiry = (RoutingSession.session.query(func.min(Currencies.NseOptionsTimeSeries.EXPIRY))
.filter(and_(Currencies.NseOptionsTimeSeries.SYMBOL == "USDINR",
Currencies.NseOptionsTimeSeries.TIME_STAMP == end_dt))
.scalar())
results = (RoutingSession.session.query(Currencies.NseOptionsTimeSeries)
.filter(and_(Currencies.NseOptionsTimeSeries.SYMBOL == "USDINR",
Currencies.NseOptionsTimeSeries.EXPIRY == expiry,
Currencies.NseOptionsTimeSeries.TIME_STAMP == end_dt))
.order_by(Currencies.NseOptionsTimeSeries.STRIKE, Currencies.NseOptionsTimeSeries.OTYPE)
.all())
for instance in results:
print(instance)
# get the currencies tracked by AlphaVantage end-of-day
print("AlphaVantage end-of-day pairs:")
results = (RoutingSession.session.query(Currencies.AvEodTimeSeries.SYMBOL,
func.min(Currencies.AvEodTimeSeries.TIME_STAMP).label('start_dt'),
func.max(Currencies.AvEodTimeSeries.TIME_STAMP).label('end_dt'))
.group_by(Currencies.AvEodTimeSeries.SYMBOL)
.order_by(text('start_dt'))
.all())
for instance in results:
print(instance)
# get the currencies tracked by AlphaVantage 30-min bars
print("AlphaVantage 30-min bars:")
results = (RoutingSession.session.query(Currencies.Av30minTimeSeries.SYMBOL,
func.min(Currencies.Av30minTimeSeries.TIME_STAMP).label('start_dt'),
func.max(Currencies.Av30minTimeSeries.TIME_STAMP).label('end_dt'),
func.count(Currencies.Av30minTimeSeries.TIME_STAMP).label('count'))
.group_by(Currencies.Av30minTimeSeries.SYMBOL)
.order_by(text('count desc'))
.all())
for instance in results:
print(instance)
Using InvestmentFlowsIndia¶
Notebooks for this code: python; R.
"""This example illustrates how to use the InvestmentFlowsIndia data-set."""
import sys
sys.path.append("..")
import pandas as pd
from sqlalchemy import func, and_, or_, text, Integer
from sqlalchemy.orm import aliased
from sqlalchemy.sql.expression import cast
from plutoPy.model import RoutingSession, InvestmentFlowsIndia
from datetime import date, datetime, timedelta
# get daily DII and FII flows for the last 20 days for the cash market
print("daily DII and FII flows for the last 20 days for the cash market:")
results = (RoutingSession.session.query(InvestmentFlowsIndia.DiiCashMarket.TIME_STAMP, InvestmentFlowsIndia.DiiCashMarket.SECURITY_TYPE,
func.sum(InvestmentFlowsIndia.DiiCashMarket.BUY_VALUE + InvestmentFlowsIndia.FiiCashMarket.BUY_VALUE).label('BUY'),
func.sum(InvestmentFlowsIndia.DiiCashMarket.SELL_VALUE + InvestmentFlowsIndia.FiiCashMarket.SELL_VALUE).label('SELL'),
func.sum(InvestmentFlowsIndia.DiiCashMarket.BUY_VALUE + InvestmentFlowsIndia.FiiCashMarket.BUY_VALUE
- InvestmentFlowsIndia.DiiCashMarket.SELL_VALUE - InvestmentFlowsIndia.FiiCashMarket.SELL_VALUE).label('NET'))
.outerjoin(InvestmentFlowsIndia.FiiCashMarket, and_(InvestmentFlowsIndia.FiiCashMarket.TIME_STAMP == InvestmentFlowsIndia.DiiCashMarket.TIME_STAMP,
InvestmentFlowsIndia.FiiCashMarket.SECURITY_TYPE == InvestmentFlowsIndia.DiiCashMarket.SECURITY_TYPE))
.group_by(InvestmentFlowsIndia.DiiCashMarket.TIME_STAMP, InvestmentFlowsIndia.DiiCashMarket.SECURITY_TYPE)
.order_by(InvestmentFlowsIndia.DiiCashMarket.TIME_STAMP.desc())
.limit(20)
.all())
for instance in results:
print(instance)
# get instruments traced for DIIs in the derivative market
print("instruments traced for DIIs in the derivative market")
results = (RoutingSession.session.query(InvestmentFlowsIndia.DiiDerivativesMarket.SECURITY_TYPE,
func.min(InvestmentFlowsIndia.DiiDerivativesMarket.TIME_STAMP).label('start_dt'),
func.max(InvestmentFlowsIndia.DiiDerivativesMarket.TIME_STAMP).label('end_dt'))
.group_by(InvestmentFlowsIndia.DiiDerivativesMarket.SECURITY_TYPE)
.order_by(text('start_dt'))
.all())
for instance in results:
print(instance)
# get instruments traced for FIIs in the derivative market
print("instruments traced for FIIs in the derivative market")
results = (RoutingSession.session.query(InvestmentFlowsIndia.FiiDerivativesMarket.SECURITY_TYPE,
func.min(InvestmentFlowsIndia.FiiDerivativesMarket.TIME_STAMP).label('start_dt'),
func.max(InvestmentFlowsIndia.FiiDerivativesMarket.TIME_STAMP).label('end_dt'))
.group_by(InvestmentFlowsIndia.FiiDerivativesMarket.SECURITY_TYPE)
.order_by(text('start_dt'))
.all())
for instance in results:
print(instance)
Using FamaFrench¶
Notebooks for this code: python; R.
"""This example illustrates how to use the Fama-French dataset."""
import sys
sys.path.append("..")
from sqlalchemy import func, text
from plutoPy.model import RoutingSession, FamaFrench
# show data-ranges for Fama-french factors
results = (RoutingSession.session.query(FamaFrench.FiveFactor3x2Daily.KEY_ID,
func.min(FamaFrench.FiveFactor3x2Daily.TIME_STAMP).label("start_dt"),
func.max(FamaFrench.FiveFactor3x2Daily.TIME_STAMP).label("end_dt"))
.group_by(FamaFrench.FiveFactor3x2Daily.KEY_ID)
.all())
print(f"fetched: {len(results)}")
for instance in results:
print(instance)
# show data-ranges for Fama-french industry daily returns
results = (RoutingSession.session.query(FamaFrench.Industry49Daily.KEY_ID,
FamaFrench.Industry49Daily.RET_TYPE,
func.min(FamaFrench.Industry49Daily.TIME_STAMP).label("start_dt"),
func.max(FamaFrench.Industry49Daily.TIME_STAMP).label("end_dt"))
.group_by(FamaFrench.Industry49Daily.KEY_ID, FamaFrench.Industry49Daily.RET_TYPE)
.order_by(text("start_dt"))
.all())
print(f"fetched: {len(results)}")
for instance in results:
print(instance)
# show data-ranges for Fama-french momentum daily returns
results = (RoutingSession.session.query(FamaFrench.MomentumDaily.KEY_ID,
FamaFrench.MomentumDaily.RET_TYPE,
func.min(FamaFrench.MomentumDaily.TIME_STAMP).label("start_dt"),
func.max(FamaFrench.MomentumDaily.TIME_STAMP).label("end_dt"))
.group_by(FamaFrench.MomentumDaily.KEY_ID, FamaFrench.MomentumDaily.RET_TYPE)
.order_by(text("start_dt"))
.all())
print(f"fetched: {len(results)}")
for instance in results:
print(instance)
# show data-ranges for Fama-french momentum daily returns
results = (RoutingSession.session.query(FamaFrench.MomentumMonthly.KEY_ID,
FamaFrench.MomentumMonthly.RET_TYPE,
func.min(FamaFrench.MomentumMonthly.TIME_STAMP).label("start_dt"),
func.max(FamaFrench.MomentumMonthly.TIME_STAMP).label("end_dt"))
.group_by(FamaFrench.MomentumMonthly.KEY_ID, FamaFrench.MomentumMonthly.RET_TYPE)
.order_by(text("start_dt"))
.all())
print(f"fetched: {len(results)}")
for instance in results:
print(instance)
Using Yale/Shiller¶
Notebooks for this code: python; R.
"""This example illustrates how to use the Yale/Shiller dataset."""
import sys
sys.path.append("..")
from sqlalchemy import func, text, extract, and_
from plutoPy.model import RoutingSession, Yale
from datetime import date
# start and end dates of confidence indices
results = (RoutingSession.session.query(Yale.Confidence.NAME,
func.min(Yale.Confidence.TIME_STAMP).label("start_dt"),
func.max(Yale.Confidence.TIME_STAMP).label("end_dt"))
.group_by(Yale.Confidence.NAME)
.all())
print(f"fetched: {len(results)}")
for instance in results:
print(instance)
# SP500 close and CAPE at the end of each year since 1995
startDate = date(1995, 12, 1)
results = (RoutingSession.session.query(extract('year', Yale.SP500.TIME_STAMP).label('Y'), Yale.SP500.CLOSE, Yale.SP500.CAPE)
.filter(and_(extract('month', Yale.SP500.TIME_STAMP) == 12, Yale.SP500.TIME_STAMP >= startDate))
.order_by(Yale.SP500.TIME_STAMP)
.all())
print(f"fetched: {len(results)}")
for instance in results:
print(instance)