xalpha package¶
xalpha.backtest module¶
modules for dynamical backtesting framework
-
class
xalpha.backtest.
AverageScheduled
(start, end=None, totmoney=1000000, verbose=False, **kws)[source]¶ Bases:
xalpha.backtest.Scheduled
最简单的价值平均定投类
-
class
xalpha.backtest.
BTE
(start, end=None, totmoney=1000000, verbose=False, **kws)[source]¶ Bases:
object
BackTestEnvironment, currently only fund is supported vinfo is partially supported, however stock refactor is not carefully considered To use such powerful dynamical backtesting, one need to subclass
BTE
-
__init__
(start, end=None, totmoney=1000000, verbose=False, **kws)[source]¶ Initialize self. See help(type(self)) for accurate signature.
-
buy
(code, value, date, is_value=True)[source]¶ - Parameters
code – Fcode
value –
date – datetime obj
is_value – bool, default True. whether the quantity in value is counted in value or in share, only value is supported for funds. 基金无法按份额申购。
- Returns
-
prepare
()[source]¶ initialization function for the backtest, like variable assignment and data preparation
- Returns
-
run
(date)[source]¶ core method to be implemented in subclass, input the date, and access other informations from self then decide whether do some self.buy and self.sell
- Parameters
date – datetime obj
- Returns
-
-
class
xalpha.backtest.
Balance
(start, end=None, totmoney=1000000, verbose=False, **kws)[source]¶ Bases:
xalpha.backtest.BTE
动态平衡
-
class
xalpha.backtest.
Scheduled
(start, end=None, totmoney=1000000, verbose=False, **kws)[source]¶ Bases:
xalpha.backtest.BTE
无脑定投类
-
class
xalpha.backtest.
ScheduledSellonXIRR
(start, end=None, totmoney=1000000, verbose=False, **kws)[source]¶ Bases:
xalpha.backtest.Scheduled
无脑定投+年化收益率达到阈值全部卖出
-
class
xalpha.backtest.
Tendency28
(start, end=None, totmoney=1000000, verbose=False, **kws)[source]¶ Bases:
xalpha.backtest.BTE
二八趋势轮动
xalpha.cons module¶
basic constants and utility functions
-
xalpha.cons.
convert_date
(date)[source]¶ convert date into datetime object
- Parameters
date – string of form ‘2017-01-01’ or datetime object
- Returns
corresponding datetime object
-
xalpha.cons.
myround
(num, label=1)[source]¶ correct implementation of round with round half up, round to 2 decimals
- Parameters
num – the floating number, to be rounded
label – integer 1 or 2, 1 for round half up while 2 for always round down
- Returns
the float number after rounding, with two decimals
-
xalpha.cons.
today_obj
()[source]¶ today obj in beijing timezone with no tzinfo
- Returns
datetime.datetime
-
xalpha.cons.
xirr
(cashflows, guess=0.1)[source]¶ calculate the Internal Rate of Return of a series of cashflows at irregular intervals.
- Parameters
cashflows – a list, in which each element is a tuple of the form (date, amount), where date is a datetime object and amount is an integer or floating number. Cash outflows (investments) are represented with negative amounts, and cash inflows (returns) are positive amounts.
guess – floating number, a guess at the xirr rate solution to be used as a starting point for the numerical solution
- Returns
the IRR as a single floating number
-
xalpha.cons.
xnpv
(rate, cashflows)[source]¶ give the current cash value based on future cashflows
- Parameters
rate – float, the preset year rate
cashflows – a list, in which each element is a tuple of the form (date, amount), where date is a datetime object and amount is an integer or floating number. Cash outflows (investments) are represented with negative amounts, and cash inflows (returns) are positive amounts.
- Returns
a single float value which is the NPV of the given cash flows
-
xalpha.cons.
yesterday
()¶
-
xalpha.cons.
yesterdaydash
()¶
-
xalpha.cons.
yesterdayobj
()¶
xalpha.evaluate module¶
modules for evaluation and comparison on multiple object with price dataframe
-
class
xalpha.evaluate.
evaluate
(*fundobjs, start=None)[source]¶ Bases:
object
多个 info 对象的比较类,比较的对象只要实现了 price 属性,该属性为具有 date 和 netvalue 列的 pandas.DataFrame 即可。 更进一步,也可讲做过 bcmkset 的
xalpha.multiple.mulfix
类作为输入,只不过此时需要提前额外指定以下该对象的 name 和 code 两个属性。 由于该类需要各基金净值表可以严格对齐,因此需要对节假日和国内不同的 QDII 基金进行补齐,由于第一个基金为基准,因此第一个输入不建议是 QDII 基金- Parameters
fundobjs – info object,或者如前所述一切具有 price 表的对象
start – date string or object, 比较的起始时间,默认使用所有 price 表中最近的起始时间。 但需要注意,由于拉取的基金净值表,往往在开始几天缺失净值数据,即使使用默认时间也可能无法对齐所有净值数据。 因此建议手动设置起始时间到最近的起始时间一周后左右。
-
__init__
(*fundobjs, start=None)[source]¶ Initialize self. See help(type(self)) for accurate signature.
-
correlation_table
(end=datetime.datetime(2020, 10, 10, 19, 53, 13, 657289))[source]¶ give the correlation coefficient amongst referenced funds and indexes
- Parameters
end – string or object of date, the end date of the line
- Returns
pandas DataFrame, with correlation coefficient as elements
-
v_correlation
(end=datetime.datetime(2020, 10, 10, 19, 53, 13, 657294), vopts=None, rendered=True)[source]¶ 各基金净值的相关程度热力图可视化
- Parameters
end – string or object of date, the end date of the line
- Returns
pyecharts.charts.Heatmap.render_notebook object
-
v_netvalue
(end=datetime.datetime(2020, 10, 10, 19, 53, 13, 657276), vopts=None, rendered=True)[source]¶ 起点对齐归一的,各参考基金或指数的净值比较可视化
- Parameters
end – string or object of date, the end date of the line
vkwds – pyechart line.add() options
vopts – dict, options for pyecharts instead of builtin settings
- Returns
pyecharts.charts.Line.render_notebook()
xalpha.indicator module¶
module for implementation of indicator class, which is designed as MinIn for systems with netvalues
-
class
xalpha.indicator.
indicator
[source]¶ Bases:
object
MixIn class provide quant indicator tool box which is desinged as interface for mulfix class as well as info class, who are both treated as a single fund with price table of net value. Most of the quant indexes, their name conventions, definitions and calculations are from joinquant. Make sure first run obj.bcmkset() before you want to use functions in this class.
-
_pricegenerate
(name)[source]¶ generate price table for mulfix class, the cinfo class has this attr by default
-
static
annualized_returns
(price, start, date=datetime.datetime(2020, 10, 10, 19, 53, 13, 654092))[source]¶ - Parameters
price – price table of info().price
start – datetime obj for starting date of calculation
date – datetime obj for ending date of calculation
- Returns
float, annualized returns of the price table
-
bbi
(col='netvalue')[source]¶ 多空指标 give bull and bear line in column BBI in price table
- Parameters
col – string, column name in dataframe you want to calculate
-
bcmkset
(infoobj, start=None, riskfree=0.0371724, name='基金组合')[source]¶ Once you want to utilize the indicator tool box for analysis, first run bcmkset function to set the benchmark, otherwise most of the functions would raise error.
- Parameters
infoobj – info obj, whose netvalue are used as benchmark
start – datetime obj, indicating the starting date of all analysis. Note if use default start, there may be problems for some fundinfo obj, as lots of funds lack netvalues of several days from our API, resulting unequal length between benchmarks and fund net values.
riskfree – float, annual rate in the unit of 100%, strongly suggest make this value consistent with the interest parameter when instanciate cashinfo() class
-
bias
(window=10, col='netvalue')[source]¶ 乖离率 give the bias as BIAS column in price table
- Parameters
window – int, MA_window
col – string, column name in dataframe you want to calculate
-
boll
(window=10, deviation=2, col='netvalue')[source]¶ 布林线上下轨计算 give the bolling upper and lower band in the price table, the middle line is just ma line
- Parameters
window – int, the date window for ma and md
deviation – int or float, how many times deviation of sigma
col – string, column name in dataframe you want to calculate
-
comparison
(date=datetime.datetime(2020, 10, 10, 19, 53, 13, 654071))[source]¶ - Returns
tuple of two pd.Dataframe, the first is for aim and the second if for the benchmark index all netvalues are normalized and set equal 1.00 on the self.start date
-
correlation_coefficient
(date=datetime.datetime(2020, 10, 10, 19, 53, 13, 654108))[source]¶ - correlation coefficient between aim and benchmark values,
可以很好地衡量指数基金的追踪效果
- Returns
float between -1 and 1
-
dma
(fast_window=10, slow_window=50, ama_window=10, col='netvalue')[source]¶ 平行线差指标 give different of moving average as columns DMA and AMA in price table
- Parameters
fast_window – int
slow_window – int
ama_window – int
col – string, column name in dataframe you want to calculate
-
ema
(window=5, col='netvalue')[source]¶ 指数平均数指标 give the exponential moving average as a new column ‘EMA’ in the price table, return None
- Parameters
window – the span of date, where the decay factor alpha=2/(1+window)
col – string, column name in dataframe you want to calculate
-
kdj
(rsv_window=9, k_window=3, d_window=3, col='netvalue')[source]¶ KDJ 随机指标 由于该模块不涉及日内高低价的信息,因此区间最高价最低价都由极值收盘价代替,因此和其他软件计算的 kdj 指标可能存在出入。 give k,d,j indexes as three columns KDJ_K/D/J in price table
- Parameters
rsv_window – int
k_window – int
d_window – int
col – string, column name in dataframe you want to calculate
-
ma
(window=5, col='netvalue')[source]¶ 移动平均线指标 give the moving average as a new column ‘MA’ in the price table, return None
- Parameters
window – the date window of the MA calculation
col – string, column name in dataframe you want to calculate
-
macd
(fast_window=12, slow_window=26, signal_window=9, col='netvalue')[source]¶ 指数平滑异同移动平均线 give the MACD index as three new columns ‘MACD_DIFF/DEM/OSC’ in the price table, return None
- Parameters
fast_window – int,
slow_window – int,
signal_window – int, the ema window of the signal line
col – string, column name in dataframe you want to calculate
-
max_drawdown
(date=datetime.datetime(2020, 10, 10, 19, 53, 13, 654140))[source]¶ 回测时间段的最大回撤
- Parameters
date – date obj or string
- Returns
three elements tuple, the first two are the date obj of start and end of the time window, the third one is the drawdown amplitude in unit 1.
-
md
(window=5, col='netvalue')[source]¶ 移动标准差指标 give the moving standard deviation as a new column ‘MD’ in the price table, return None
- Parameters
window – the date window of the MD calculation
col – string, column name in dataframe you want to calculate
-
mtm
(window=10, col='netvalue')[source]¶ 动量指标,并未附加动量的平均线指标,如需计算动量平均线指标,使用ma或emca函数,col参数选择MTM列即可 give the MTM as a new column ‘MTM’ in the price table, return None
- Parameters
window – int, the difference between price now and window days ago
col – string, column name in dataframe you want to calculate
-
pct_chg
(freq='Y', benchmark=True)[source]¶ 年度,月,周涨幅统计
- Parameters
freq – str, default Y, could be M or W or anything pd.date_range accepts
- Returns
pd.DataFrame with columns date and pct_chg
-
psy
(count_window=12, ma_window=6, col='netvalue')[source]¶ 心理线指标(衡量过去 count_window 天涨幅天数) give psy and psyma as column PSY and PSYMA in price table
- Parameters
count_window – int
ma_window – int
col – string, column name in dataframe you want to calculate
-
roc
(window=10, col='netvalue')[source]¶ 变动率指标 give the ROC as a new column ‘ROC’ in the price table, return None, the ROC is in the unit of 1 instead of 1%
- Parameters
window – int, the change rate between price now and window days ago
col – string, column name in dataframe you want to calculate
-
rsi
(window=14, col='netvalue')[source]¶ 相对强弱指标 give the rsi as RSI column in price table
- Parameters
window – int, MA_window
col – string, column name in dataframe you want to calculate
-
trix
(window=10, ma_window=10, col='netvalue')[source]¶ 三重指数平滑平均线 give the trix index in column TRIX, TRMA
- Parameters
window – int
col – string, column name in dataframe you want to calculate
-
v_netvalue
(end=datetime.datetime(2020, 10, 10, 19, 53, 13, 654146), benchmark=True, rendered=True, vopts=None)[source]¶ visulaization on netvalue curve
- Parameters
end – dateobject for indicating the end date in the figure, default to yesterday
benchmark – bool, whether include benchmark’s netvalue curve, default true
vopts – dict, options for pyecharts instead of builtin settings
-
v_techindex
(end=datetime.datetime(2020, 10, 10, 19, 53, 13, 654149), col=None, rendered=True, vopts=None)[source]¶ visualization on netvalue curve and specified indicators
- Parameters
end – date string or obj, the end date of the figure
col – list, list of strings for price col name, eg.[‘MA5’,’BBI’] remember generate these indicators before the visualization, these cols don’t automatically generate for visualization
vopts – dict, options for pyecharts instead of builtin settings
-
xalpha.info module¶
modules of info class, including cashinfo, indexinfo and fundinfo class
-
xalpha.info.
CashInfo
¶ alias of
xalpha.info.cashinfo
-
xalpha.info.
FundInfo
¶ alias of
xalpha.info.fundinfo
-
class
xalpha.info.
FundReport
(code)[source]¶ Bases:
object
提供查看各种基金报告的接口
-
get_report
(no=0, id_=None)[source]¶ - Parameters
no – int。在type_=3 中的第no个报告。
id – id 可由
show_report_list()
中条目的对应 ID 得到
- Returns
-
-
xalpha.info.
IndexInfo
¶ alias of
xalpha.info.indexinfo
-
xalpha.info.
MFundInfo
¶ alias of
xalpha.info.mfundinfo
-
xalpha.info.
_nfloat
(string)[source]¶ deal with comment column in fundinfo price table, positive value for fenhong and negative value for chaifen, keep other unrocognized pattern as original string
- Parameters
string – string of input from original data
- Returns
make fenhong and songpei as float number
-
xalpha.info.
_shengoucal
(sg, sgf, value, label)[source]¶ - Infer the share of buying fund by money input, the rate of fee in the unit of %,
and netvalue of fund
- Parameters
sg – positive float, 申购金额
sgf – positive float, 申购费,以%为单位,如 0.15 表示 0.15%
value – positive float, 对应产品的单位净值
label – integer, 1 代表份额正常进行四舍五入, 2 代表份额直接舍去小数点两位之后。金额部分都是四舍五入
- Returns
tuple of two positive float, 净申购金额和申购份额
-
class
xalpha.info.
basicinfo
(code, fetch=False, save=False, path='', form='csv', round_label=0, dividend_label=0, value_label=0)[source]¶ Bases:
xalpha.indicator.indicator
Base class for info of fund, index or even cash, which cannot be directly instantiate, the basic implementation consider redemption fee as zero when shuhui() function is implemented
- Parameters
code – string of code for specific product
fetch – boolean, when open the fetch option, the class will try fetching from local files first in the init
save – boolean, when open the save option, automatically save the class to files
path – string, the file path prefix of IO. Or in sql case, path is the engine from sqlalchemy.
form – string, the format of IO, options including: ‘csv’,’sql’
round_label – int, default 0 or 1, label to the different round scheme of shares, reserved for fundinfo class. 1 代表全舍而非四舍五入。
dividend_label – int, default 0 or 1. 0 代表默认现金分红,1代表红利再投。两者均可通过记账单上的 0.05 来改变单次的默认。
value_label – int, default 0 or 1. 1 代表记账单上的赎回数目是按金额而非份额的,只能完美支持货币基金。其他净值型基金本质上无法精确到分支持这一选项,因此不开放支持。
-
__init__
(code, fetch=False, save=False, path='', form='csv', round_label=0, dividend_label=0, value_label=0)[source]¶ Initialize self. See help(type(self)) for accurate signature.
-
_basic_init
()[source]¶ set self. name rate and price (dataframe) as well as other necessary attr of info()
-
fetch
(path, form=None)[source]¶ fetch info from files
- Parameters
path – string of the folder path prefix! end with / in csv case; engine from sqlalchemy.create_engine() in sql case.
form – string, option:’csv’ or ‘sql
-
save
(path, form=None, option='r', delta=None)[source]¶ save info to files, this function is designed to redirect to more specific functions
- Parameters
path – string of the folder path prefix! or engine obj from sqlalchemy
form – string, option:’csv’
option – string, r for replace and a for append output
delta – if option is a, you have to specify the delta which is the incremental part of price table
-
shengou
(value, date, fee=None)[source]¶ give the realdate deltacash deltashare tuple based on purchase date and purchase amount if the date is not a trade date, then the purchase would happen on the next trade day, if the date is in the furture, then the trade date is taken as yesterday.
- Parameters
value – the money for purchase
date – string or object of date
fee – the rate for shengou, default None and info.rate will be used, ok for most cases
- Returns
three elements tuple, the first is the actual dateobj of commit the second is a negative float for cashin, the third is a positive float for share increase
-
shuhui
(share, date, rem, value_label=None, fee=None)[source]¶ give the cashout considering redemption rates as zero. if the date is not a trade date, then the purchase would happen on the next trade day, if the date is in the furture, then the trade date is taken as yesterday.
- Parameters
share – float or int, number of shares to be sold. if value_label=1, its cash to be sold.
date – string or object of date
rem – positions with time list
value_label – default None, value_label will be chosen by info.value_label, determining whether shuhui by share 0 or value 1. value_label = 0 will rewrite self.value_label = 1
fee – default None, determined automatically, suggested for most of the cases. Otherwise 0.015 means 1.5% in shuhui
- Returns
three elements tuple, the first is dateobj the second is a positive float for cashout, the third is a negative float for share decrease
-
class
xalpha.info.
cashinfo
(interest=0.0001, start='2012-01-01', value_label=0)[source]¶ Bases:
xalpha.info.basicinfo
A virtual class for remaining cash manage: behave like monetary fund
- Parameters
interest – float, daily rate in the unit of 100%, note this is not a year return rate!
start – str of date or dateobj, the virtual starting date of the cash fund
value_label – int, default 0 or 1. If set to 1, 记账单数字按金额赎回。
-
class
xalpha.info.
fundinfo
(code, round_label=0, dividend_label=0, fetch=False, save=False, path='', form='csv', priceonly=False)[source]¶ Bases:
xalpha.info.basicinfo
class for specific fund with basic info and every day values 所获得的基金净值数据一般截止到昨日。但注意QDII基金的净值数据会截止的更早,因此部分时间默认昨日的函数可能出现问题, 处理QDII基金时,需要额外注意。
- Parameters
code – str, 基金六位代码字符
round_label – integer 0 or 1, 取1表示基金申购时份额直接舍掉小数点两位之后。当基金处于 cons.droplist 名单中时, label 总会被自动设置为1。非名单内基金可以显式令 round_label=1.
dividend_label – int, default 0 or 1. 0 代表默认现金分红,1代表红利再投。两者均可通过记账单上的 0.05 来改变单次的默认。
fetch – boolean, when open the fetch option, the class will try fetching from local files first in the init
save – boolean, when open the save option, automatically save the class to files
path – string, the file path prefix of IO
form – string, the format of IO, options including: ‘csv’
-
__init__
(code, round_label=0, dividend_label=0, fetch=False, save=False, path='', form='csv', priceonly=False)[source]¶ Initialize self. See help(type(self)) for accurate signature.
-
_basic_init
()[source]¶ set self. name rate and price (dataframe) as well as other necessary attr of info()
-
_feepreprocess
()[source]¶ Preprocess to add self.feeinfo and self.segment attr according to redemption fee info
-
_fetch_csv
(path)[source]¶ fetch the information and pricetable from path+code.csv, not recommend to use manually, just set the fetch label to be true when init the object
- Parameters
path – string of folder path
-
_fetch_sql
(path)[source]¶ fetch the information and pricetable from sql, not recommend to use manually, just set the fetch label to be true when init the object
- Parameters
path – engine object from sqlalchemy
-
_hk_bonus
(start=None)[source]¶ [summary]
- Parameters
start ([type], optional) – “%Y-%m-%d”, defaults to None
-
static
_piecewise
(a)[source]¶ Transform the words list into a pure number segment list for redemption fee, eg. [[0,7],[7,365],[365]]
-
_save_csv
(path)[source]¶ save the information and pricetable into path+code.csv, not recommend to use manually, just set the save label to be true when init the object
- Parameters
path – string of folder path
-
_save_sql
(path)[source]¶ save the information and pricetable into sql, not recommend to use manually, just set the save label to be true when init the object
- Parameters
path – engine object from sqlalchemy
-
feedecision
(day)[source]¶ give the redemption rate in percent unit based on the days difference between purchase and redemption
- Parameters
day – integer, 赎回与申购时间之差的自然日数
- Returns
float,赎回费率,以%为单位
-
get_bond_holdings
(year='', season='', month='')[source]¶ 持仓债券细节
- Parameters
year –
season –
month –
- Returns
pd.DataFrame
-
get_industry_holdings
(year='', season='', month='', threhold=0.5)[source]¶ 持仓行业占比
- Parameters
year –
season –
month –
threhold – float, 持仓小于该百分数的个股行业不再统计,加快速度
- Returns
Dict
-
get_stock_holdings
(year='', season='', month='')[source]¶ 持仓个股细节
- Parameters
year –
season –
month –
- Returns
pd.DataFrame
-
xalpha.info.
get_fund_holdings
[source]¶ 获取基金详细的底层持仓信息
- Parameters
code – str. 6 位基金代码
year – int. eg. 2019
season – int, 1,2,3,4
month – Optional[int]. 指定 season 即可,一般不需理会
category – str. stock 股票持仓, bond 债券持仓,天天基金无法自动处理海外基金持仓,暂未兼容 FOF 的国内基金持仓
- Returns
pd.DataFrame or None. 没有对应持仓时返回 None。
-
class
xalpha.info.
indexinfo
(code, value_label=0, fetch=False, save=False, path='', form='csv')[source]¶ Bases:
xalpha.info.basicinfo
Get everyday close price of specific index. In self.price table, totvalue column is the real index while netvalue comlumn is normalized to 1 for the start date. In principle, this class can also be used to save stock prices but the price is without adjusted.
- Parameters
code – string with seven digitals! note the code here has an extra digit at the beginning, 0 for sh and 1 for sz.
value_label – int, default 0 or 1. If set to 1, 记账单数字按金额赎回。
fetch – boolean, when open the fetch option, the class will try fetching from local files first in the init
save – boolean, when open the save option, automatically save the class to files
path – string, the file path prefix of IO
form – string, the format of IO, options including: ‘csv’
-
__init__
(code, value_label=0, fetch=False, save=False, path='', form='csv')[source]¶ Initialize self. See help(type(self)) for accurate signature.
-
_basic_init
()[source]¶ set self. name rate and price (dataframe) as well as other necessary attr of info()
-
_fetch_csv
(path)[source]¶ fetch the information and pricetable from path+code.csv, not recommend to use manually, just set the fetch label to be true when init the object
- Parameters
path – string of folder path
-
_fetch_sql
(path)[source]¶ fetch the information and pricetable from sql, not recommend to use manually, just set the fetch label to be true when init the object
- Parameters
path – engine object from sqlalchemy
-
_save_csv
(path)[source]¶ save the information and pricetable into path+code.csv, not recommend to use manually, just set the save label to be true when init the object
- Parameters
path – string of folder path
-
class
xalpha.info.
mfundinfo
(code, round_label=0, value_label=0, fetch=False, save=False, path='', form='csv')[source]¶ Bases:
xalpha.info.basicinfo
真实的货币基金类,可以通过货币基金六位代码,来获取真实的货币基金业绩,并进行交易回测等
- Parameters
code – string of six digitals, code of real monetnary fund
round_label – int, default 0 or 1, label to the different round scheme of shares, reserved for fundinfo class. 1 代表全舍而非四舍五入。
value_label – int, default 0 or 1. 1 代表记账单上的赎回数目是按金额而非份额的,只能完美支持货币基金。
fetch – boolean, when open the fetch option, the class will try fetching from local files first in the init
save – boolean, when open the save option, automatically save the class to files
path – string, the file path prefix of IO
form – string, the format of IO, options including: ‘csv’
-
__init__
(code, round_label=0, value_label=0, fetch=False, save=False, path='', form='csv')[source]¶ Initialize self. See help(type(self)) for accurate signature.
-
_basic_init
()[source]¶ set self. name rate and price (dataframe) as well as other necessary attr of info()
-
_fetch_csv
(path)[source]¶ fetch the information and pricetable from path+code.csv, not recommend to use manually, just set the fetch label to be true when init the object
- Parameters
path – string of folder path
-
_fetch_sql
(path)[source]¶ fetch the information and pricetable from sql, not recommend to use manually, just set the fetch label to be true when init the object
- Parameters
path – engine object from sqlalchemy
-
_save_csv
(path)[source]¶ save the information and pricetable into path+code.csv, not recommend to use manually, just set the save label to be true when init the object
- Parameters
path – string of folder path
xalpha.multiple module¶
module for mul and mulfix class: fund combination management
-
xalpha.multiple.
IMul
¶ alias of
xalpha.multiple.imul
-
xalpha.multiple.
Mul
¶ alias of
xalpha.multiple.mul
-
xalpha.multiple.
MulFix
¶ alias of
xalpha.multiple.mulfix
-
class
xalpha.multiple.
imul
(*fundtradeobj, status=None, istatus=None)[source]¶ Bases:
xalpha.multiple.mul
-
class
xalpha.multiple.
mul
(*fundtradeobj, status=None, istatus=None, property=None, fetch=False, save=False, path='', form='csv')[source]¶ Bases:
object
multiple fund positions manage class
- Parameters
fundtradeobj – list of trade obj which you want to analyse together
status – the status table of trade, all code in this table would be considered. one must provide one of the two paramters, if both are offered, status will be overlooked 可以是场内记账单 DataFrame,也可以是 record 对象。
istatus – 场内交易账单,也可以是 irecord 对象。 若提供,则场内外交易联合统计展示。该选项只保证
combsummary
方法可正常使用,不保证mul
类的其他方法可用。property – Dict[fundcode, property_number]. property number 的解释: int. 1: 基金申购采取分位以后全舍而非四舍五入(这种基金是真实存在的==)。2:基金默认分红再投入(0 则是默认现金分红)。4:基金赎回按净值处理(暂时只支持货币基金,事实上无法精确支持按份额赎回的净值型基金)。将想要的性质数值相加即可,类似 *nix 上的 xwr 系统。
fetch – boolean, when open the fetch option, info class will try fetching from local files first in the init
save – boolean, when open the save option, info classes automatically save the class to files
path – string, the file path prefix of IO, or object or engine from sqlalchemy to connect sql database
form – string, the format of IO, options including: ‘csv’,’sql’
-
__init__
(*fundtradeobj, status=None, istatus=None, property=None, fetch=False, save=False, path='', form='csv')[source]¶ Initialize self. See help(type(self)) for accurate signature.
-
combsummary
(date=datetime.datetime(2020, 10, 10, 19, 53, 13, 666917))[source]¶ brief report table of every funds and the combination investment
- Parameters
date – string or obj of date, show info of the date given
- Returns
empty dict if nothing is remaining that date dict of various data on the trade positions
-
evaluation
(start=None)[source]¶ give the evaluation object to analysis funds properties themselves instead of trades
- Returns
xalpha.evaluate.evaluate
object, with referenced funds the same as funds we invested
-
get_industry
(date=datetime.datetime(2020, 10, 10, 19, 53, 13, 666931))[source]¶ 获取基金组合持仓的行业占比信息,底层为非 A 股持仓的暂不支持
- Parameters
date –
- Returns
Dict
-
get_industry_holdings
(date=datetime.datetime(2020, 10, 10, 19, 53, 13, 666931))¶ 获取基金组合持仓的行业占比信息,底层为非 A 股持仓的暂不支持
- Parameters
date –
- Returns
Dict
-
get_portfolio
(date=datetime.datetime(2020, 10, 10, 19, 53, 13, 666928))[source]¶ 获取基金组合底层资产大类配置的具体值
- Parameters
date –
- Returns
Dict[str, float]. stock,bond,cash 对应总值的字典
-
get_portfolio_holdings
(date=datetime.datetime(2020, 10, 10, 19, 53, 13, 666928))¶ 获取基金组合底层资产大类配置的具体值
- Parameters
date –
- Returns
Dict[str, float]. stock,bond,cash 对应总值的字典
-
get_stock_holdings
(year=None, season=None, date=datetime.datetime(2020, 10, 10, 19, 53, 13, 666924), threhold=100)[source]¶ 获取整个基金组合的底层股票持仓总和和细节,组合穿透
- Parameters
year – 基于的基金季报年份
season – 基于的基金季报季度
date – 默认昨天
threhold – 默认100。小于100元的底层股票将不在最后的结果中展示
- Returns
pd.DataFrame column: name, code, value, ratio
-
summary
(date=datetime.datetime(2020, 10, 10, 19, 53, 13, 666917))¶ brief report table of every funds and the combination investment
- Parameters
date – string or obj of date, show info of the date given
- Returns
empty dict if nothing is remaining that date dict of various data on the trade positions
-
tot
(prop='基金现值', date=datetime.datetime(2020, 10, 10, 19, 53, 13, 666913))[source]¶ sum of all the values from one prop of fund daily report, of coures many of the props make no sense to sum
- Parameters
prop – string defined in the daily report dict, typical one is ‘currentvalue’ or ‘originalpurchase’
-
v_category_positions
(date=datetime.datetime(2020, 10, 10, 19, 53, 13, 666937), rendered=True)[source]¶ 资产分类扇形图,按大类资产求和绘制
- Parameters
date –
rendered – bool. default true for notebook, for plain pyechart obj to return, set rendered=False
- Returns
-
v_positions
(date=datetime.datetime(2020, 10, 10, 19, 53, 13, 666934), rendered=True)[source]¶ pie chart visualization of positions ratio in combination
-
v_positions_history
(end='2020-10-10', rendered=True)[source]¶ river chart visulization of positions ratio history use text size to avoid legend overlap in some sense, eg. legend_text_size=8
-
v_tradevolume
(freq='D', rendered=True)[source]¶ visualization on trade summary of the funds combination
- Parameters
freq – one character string, frequency label, now supporting D for date, W for week and M for month, namely the trade volume is shown based on the time unit
- Returns
pyecharts.Bar()
-
xirrrate
(date=datetime.datetime(2020, 10, 10, 19, 53, 13, 666921), startdate=None, guess=0.01)[source]¶ xirr rate evauation of the whole invest combination
- Parameters
date – string or obj of datetime, the virtually sell-all date
startdate – string or obj of datetime, the beginning date of calculation, default from first buy
-
class
xalpha.multiple.
mulfix
(*fundtradeobj, status=None, istatus=None, property=None, fetch=False, save=False, path='', form='csv', totmoney=100000, cashobj=None)[source]¶ Bases:
xalpha.multiple.mul
,xalpha.indicator.indicator
introduce cash to make a closed investment system, where netvalue analysis can be applied namely the totcftable only has one row at the very beginning
- Parameters
fundtradeobj – trade obj to be include
status – status table, if no trade obj is provided, it will include all fund based on code in status table
property – Dict[fundcode, property_number]. property number 的解释: int. 1: 基金申购采取分位以后全舍而非四舍五入(这种基金是真实存在的==)。2:基金默认分红再投入(0 则是默认现金分红)。4:基金赎回按净值
fetch – boolean, when open the fetch option, info class will try fetching from local files first in the init
save – boolean, when open the save option, info classes automatically save the class to files
path – string, the file path prefix of IO, or object or engine from sqlalchemy to connect sql database
form – string, the format of IO, options including: ‘csv’,’sql’
totmoney – positive float, the total money as the input at the beginning
cashobj – cashinfo object, which is designed to balance the cash in and out
-
__init__
(*fundtradeobj, status=None, istatus=None, property=None, fetch=False, save=False, path='', form='csv', totmoney=100000, cashobj=None)[source]¶ Initialize self. See help(type(self)) for accurate signature.
-
static
_vcash
(totmoney, totcftable, cashobj)[source]¶ return a virtue status table with a mf(cash) column based on the given tot money and cftable
xalpha.policy module¶
modules for policy making: generate status table for simple backtesting
-
class
xalpha.policy.
buyandhold
(infoobj, start, end='2020-10-10', totmoney=100000)[source]¶ Bases:
xalpha.policy.policy
simple policy class where buy at the start day and hold forever, 始终选择分红再投入
-
class
xalpha.policy.
grid
(infoobj, buypercent, sellpercent, start, end='2020-10-10', totmoney=100000)[source]¶ Bases:
xalpha.policy.policy
网格投资类,用于指导网格投资策略的生成和模拟。这一简单的网格,买入仓位基于均分总金额,每次的卖出仓位基于均分总份额。 因此实际上每次卖出的份额都不到对应原来档位买入的份额,从而可能实现更多的收益。
- Parameters
infoobj – info object, trading aim of the grid policy
buypercent – list of positive int or float, the grid of points when purchasing, in the unit of percent 比如 [5,5,5,5] 表示以 start 这天的价格为基准,每跌5%,就加一次仓,总共加四次仓
sellpercent – list of positive int or float, the grid of points for selling 比如 [8,8,8,8] 分别对应上面各买入仓位应该涨到的百分比从而决定卖出的点位,两个列表都是靠前的是高价位仓,两列表长度需一致
start – date str of policy starting
end – date str of policy ending
totmoney – 总钱数,平均分给各个网格买入仓位
-
class
xalpha.policy.
indicator_cross
(infoobj, col, start, end='2020-10-10', totmoney=100000)[source]¶ Bases:
xalpha.policy.policy
制定两个任意技术指标之间(或和净值之间)交叉时买入卖出的策略。若收盘时恰好交叉,不操作,等第二日趋势确认。
- Parameters
info – info object, trading aim of the policy
col – a tuple with two strings, eg (‘netvalue’,’MA10’), when the left one is over the right one, we buy and otherwise we sell, that is the core of cross policy, you can choose any two columns as you like, as long as you generate them on the info object before input 也即左栏数据从下向上穿过右栏数据时,买入;反之亦然
start – date str of policy starting
end – date str of policy ending
totmoney – float or int, total money, in the cross policy, we dont have position division, instead we buy all or sell all on the given cross
-
class
xalpha.policy.
indicator_points
(infoobj, start, col, buy, sell=None, buylow=True, end='2020-10-10', totmoney=100000)[source]¶ Bases:
xalpha.policy.policy
基于技术指标的策略生成类之一,给出技术指标的多个阈值,基于这些点数值进行交易
- Parameters
infoobj – info object, trading aim of the policy
col – str, stands for the tracking column of price table, eg. ‘netvalue’ or ‘PSY’
buy – list of tuple, eg [(0.1,1),(0.2,2),(0.3,5)]. buy 1/(1+2+5) of totmoney, when the col value approach 0.1 and so on.
sell – similar list of tuple as buy input. the difference is you can omit setting of sell list, this implies you don’t want to sell. 初始化不设置sell参数,在col设为netvalue时,用于进行金字塔底仓购买特别有效. 注意不论是 sell 还是 buy 列表,都要将更难实现(离中间值更远)的点位列在后边。比如如果现在是低买模式, 那么 buy 列表越考后的点数就越小。此外,不建议设置的买点卖点有重叠区域,可能会出现策略逻辑错误。
buylow – Bool, Ture 代表,对应点位是跌破买,涨破卖,如果是 False 则反之,默认是 True
start – date str of policy starting
end – date str of policy ending
totmoney – float or int, total money, in the points policy, we share them as different positions, based on the instruction of sell and buy list
-
class
xalpha.policy.
policy
(infoobj, start, end='2020-10-10', totmoney=100000)[source]¶ Bases:
xalpha.record.record
base class for policy making, self.status to get the generating status table
- Parameters
infoobj – info object as evidence for policy making
start – string or object of date, the starting date for policy running
end – string or object of date, the ending date for policy running
totmoney – float or int, characteristic money value, not necessary to be the total amount of money
-
class
xalpha.policy.
scheduled
(infoobj, totmoney, times)[source]¶ Bases:
xalpha.policy.policy
fixed schduled purchase for given date list
- Parameters
infoobj – info obj
totmoney – float, money value for purchase every time
times – datelist of datetime object for purchase date, eg [‘2017-01-01’,’2017-07-07’,…] we recommend you use pd.date_range() to generate the schduled list
-
class
xalpha.policy.
scheduled_tune
(infoobj, totmoney, times, piece)[source]¶ Bases:
xalpha.policy.scheduled
定期不定额的方式进行投资,基于净值点数分段进行投资
-
__init__
(infoobj, totmoney, times, piece)[source]¶ - Parameters
piece – list of tuples, eg.[(1000,2),(2000,1.5)]. It means when the fund netvalue is small than some value, we choose to buy multiple times the totmoney. In this example, if the netvalue is larger than 2000, then no purchase happen at all.
-
xalpha.provider module¶
codebase related to data API provider which require further authetications
-
xalpha.provider.
b64decode_s
(s)¶
-
xalpha.provider.
b64encode_s
(s)¶
-
xalpha.provider.
set_jq_data
(user=None, pswd=None, persistent=False, debug=False)[source]¶ 设置聚宽数据源,需申请聚宽的 jqdata 试用权限。
- Parameters
user – str。聚宽用户注册手机号。
pswd – str。聚宽用户密码。
persistent – Optional[bool]. Default False. 如果是 True,则意味着聚宽用户名和密码将进行本地存储, 以后再使用 xalpha 则无须在输入密码调用该函数。请注意,如果这样做,你的聚宽账户和密码将保存在你的本地电脑, 仅有简单编码,无加密保护。请谨慎权衡本地保存的使用便利性和聚宽账户的安全性。 (如果你能保证使用 xalpha 的电脑不被黑,那么就没啥其他安全问题)
debug – Optional[bool]. Default False, if True, 那么不去真实验证聚宽数据源,而直接视为注册,用于测试或者直接在聚宽研究环境运行时。
- Returns
-
xalpha.provider.
set_proxy
(proxy=None)[source]¶ 设置代理,部分数据源可能国内网络环境不稳定。比如标普指数官网。 还有一些数据源很快就会封 IP,需要设置代理,比如人民币中间价官网,建议直接把中间价数据缓存到本地,防止反复爬取。
- Parameters
proxy – str. format as “http://user:passwd@host:port” user passwd part can be omitted if not set. None 代表取消代理
- Returns
xalpha.realtime module¶
module for realtime watch and notfication
-
xalpha.realtime.
_format_addr
(s)[source]¶ parse the email sender and receiver, Chinese encode and support
- Parameters
s – eg. ‘name <email@website.com>, name2 <email2@web2.com>’
-
xalpha.realtime.
mail
(title, content, sender=None, receiver=None, password=None, server=None, port=None, sender_name='sender', receiver_name=None)[source]¶ send email
- Parameters
title – str, title of the email
content – str, content of the email, plain text only
conf – all other paramters can be import as a dictionay, eg.conf = {‘sender’: ‘aaa@bb.com’, ‘sender_name’:’name’, ‘receiver’:[‘aaa@bb.com’,’ccc@dd.com’], ‘password’:’123456’, ‘server’:’smtp.bb.com’,’port’:123, ‘receiver_name’:[‘me’,’guest’]}. The receiver_name and sender_name options can be omitted.
-
class
xalpha.realtime.
review
(policylist, namelist=None, date=datetime.datetime(2020, 10, 11, 0, 0))[source]¶ Bases:
object
review policys and give the realtime purchase suggestions
- Parameters
policylist – list of policy object
namelist – list of names of corresponding policy, default as 0 to n-1
date – object of datetime, check date, today is prefered, date other than is not guaranteed
-
__init__
(policylist, namelist=None, date=datetime.datetime(2020, 10, 11, 0, 0))[source]¶ Initialize self. See help(type(self)) for accurate signature.
-
notification
(conf)[source]¶ send email of self.content, at least support for qq email sender
- Parameters
conf – the configuration dictionary for email send settings, no ** before the dict in needed. eg.conf = {‘sender’: ‘aaa@bb.com’, ‘sender_name’:’name’, ‘receiver’:[‘aaa@bb.com’,’ccc@dd.com’], ‘password’:’123456’, ‘server’:’smtp.bb.com’,’port’:123, ‘receiver_name’:[‘me’,’guest’]}. The receiver_name and sender_name options can be omitted.
-
xalpha.realtime.
rfundinfo
(code, round_label=0, dividend_label=0, fetch=False, save=False, path='', form='csv')[source]¶ give a fundinfo object with todays estimate netvalue at running time
- Parameters
code – string of six digitals for funds
fetch – boolean, when open the fetch option, info class will try fetching from local files first in the init
save – boolean, when open the save option, info classes automatically save the class to files
path – string, the file path prefix of IO
form – string, the format of IO, options including: ‘csv’
- Returns
the fundinfo object
xalpha.record module¶
module for status table IO
-
xalpha.record.
IRecord
¶ alias of
xalpha.record.irecord
-
xalpha.record.
Record
¶ alias of
xalpha.record.record
-
class
xalpha.record.
irecord
(path='input.csv', **readkwds)[source]¶ Bases:
xalpha.record.record
场内记账单抽象。对于场内交易,记账单毫无疑问需要记录净值,而无法依赖自动查询(因为净值实时变化)。 记账单的格式为5列,分别为 date,code,value,share,fee。日期格式为%Y%m%d, 例 20200202。 代码格式与
xalpha.universal.get_daily()
要求相同。对于常见的 A 股标的,格式为 SH501018。 value 列记录买入卖出或场内申购赎回对应的成交净值单价。share 记录实际上份额的增减,正数代表买入。 fee 栏对应了每笔交易实际的佣金,也可不记录,则默认均为0。记账单不要求严格按时间排序。 该类处理的记账单可以提供给xalpha.trade.itrade
和xalpha.multiple.imul
使用,进行场内交易的整合分析。-
__init__
(path='input.csv', **readkwds)[source]¶ Initialize self. See help(type(self)) for accurate signature.
-
sellout
(date=datetime.datetime(2020, 10, 10, 19, 53, 13, 196388), ratio=1)[source]¶ Sell all the funds in the same ratio on certain day, it is a virtual process, so it can happen before the last action exsiting in the cftable, by sell out earlier, it means all actions behind vanish. The status table in self.status would be directly changed.
- Parameters
date – string or datetime obj of the selling date
ratio – float between 0 to 1, the ratio of selling for each funds
-
-
class
xalpha.record.
record
(path='input.csv', format='matrix', fund_property=False, **readkwds)[source]¶ Bases:
object
basic class for status table read in from csv file. staus table 是关于对应基金的申赎寄账单,不同的行代表不同日期,不同的列代表不同基金, 第一行各单元格分别为 date, 及基金代码。第一列各单元格分别为 date 及各个交易日期,形式 eg. 20170129 表格内容中无交易可以直接为空或0,申购为正数,对应申购金额(申购费扣费前状态),赎回为负数,对应赎回份额, 注意两者不同,恰好对应基金的金额申购份额赎回原则,记录精度均只完美支持一位小数。 几个更具体的特殊标记:
小数点后第二位如果是5,且当日恰好为对应基金分红日,标志着选择了分红再投入的方式,否则默认分红拿现金。(该默认行为可反转)
2. 对于赎回的负数,如果是一个绝对值小于 0.005 的数,标记了赎回的份额占当时总份额的比例而非赎回的份额数目, 其中0.005对应全部赎回,线性类推。eg. 0.001对应赎回20%。
3. 账单上自定义申购费和赎回费,小数点后第三位的 5 标记,代表了该数据费用是自定义的。注意这和 -0.005 代表全部卖出并不冲突,其原因是自定义费用, 前边肯定不全为 0。第三位 5 之后,代表了 1% 位。也即 -51.28515 意义是赎回 51.28 份,赎回费为 1.5%. 200.205 代表申购 200.2 元,申购费为0 (因为标记位 5 后没有其他非零数字)。这种自定义通常可用于定期支付型基金的强制卖出(不收赎回费)和基金公司官网申购基金时申购费全免的记录。
关于基金行为的设定,基金份额是四舍五入0 还是全部舍弃 1, 基金是默认现金分红 0 还是分红再投 2, 基金是赎回数目对应份额 0 还是金额 4 (只支持货币基金), 将三个选项加起来得到 0-7 的数字,代表了基金的交易性质,默认全部为0。该性质即可以记录在 matrix 形式记账单紧贴基金代码行头的下一行,同时 record 读取时,
record(path, fund_property=True)
设定 fund_property 参数, 或直接在记账单第二行日期栏写上 property 即可。每个基金代码对应一个 0 到 7 的数字。 也可为空,默认为 0。此外如不改变记账单,也可在
xalpha.multiple.mul
类初始化时,传入 property=dict, 字典内容为 {“基金代码”:0-7 数字}。默认为0的代码可不添加。对于不同格式的记账单的例子,可在 github repo 中 tests 文件夹内的 demo*.csv 参考。
- Parameters
path – string for the csv file path or pd.DataFrame
format – str. Default is “matrix”. Can also be “list”。list 形式的账单更类似流水单。总共三列,每行由日期基金号和金额组成。 三栏标题分别为 date,fund 和 trade。其中日期的形式是 %Y/%m/%d. 该形式与默认的 matrix 不包含 “/” 不同。
fund_property – bool. Default False. If True, 基金号下第一行的数字标记对应基金参数(暂时只支持 matrix 形式账单)。
readkwds – keywords options for pandas.read_csv() function. eg. skiprows=1, skipfooter=2, see more on pandas doc.
-
__init__
(path='input.csv', format='matrix', fund_property=False, **readkwds)[source]¶ Initialize self. See help(type(self)) for accurate signature.
-
save_csv
(path=None, index=False, **tocsvkwds)[source]¶ save the status table to csv file in path, no returns
- Parameters
path – string of file path
index – boolean, whether save the index to the csv file, default False
tocsvkwds –
keywords options for pandas.to_csv() function, see pandas doc.
-
sellout
(date=datetime.datetime(2020, 10, 10, 19, 53, 13, 196332), ratio=1)[source]¶ Sell all the funds in the same ratio on certain day, it is a virtual process, so it can happen before the last action exsiting in the cftable, by sell out earlier, it means all actions behind vanish. The status table in self.status would be directly changed.
- Parameters
date – string or datetime obj of the selling date
ratio – float between 0 to 1, the ratio of selling for each funds
xalpha.remain module¶
provide class functions to adjust rem form data based on old rem form data such datastructure is useful when first-in-first-out mechanism considered in selling funds and it is also useful when converting the shares of funds.
as the nested list structure is very fragile and tend to induce unpredicatble behaviors, we strongly recommended anytime when rem data serves as function paramters, only utilize functions from this module
-
xalpha.remain.
buy
(remc, share, date)[source]¶ - Parameters
remc – array of two-elements arrays, eg [[pd.Timestamp(), 50],[pd.Timestamp(), 30] the first element in tuple is pandas.Timestamp object for date while the second element is positive float for remaining shares, tuples in rem MUST be time ordered.
share – positive float, only 2 decimal is meaningful.
date – string in the date form or datetime object
- Returns
new rem after the buying
-
xalpha.remain.
copy
(remc)[source]¶ copy the rem form data so that the return is independent of the input
xalpha.toolbox module¶
modules for Object oriented toolbox which wrappers get_daily and some more
-
xalpha.toolbox.
BlackScholes
(S, K, t, v, r=0.02, CallPutFlag='C')[source]¶ BS option pricing calculator
- Parameters
S – current stock price
K – stricking price
t – Time until option exercise (years to maturity)
r – risk-free interest rate (by year)
v – Variance(volitility) of annual increase
CallPutFlag – “C” or “P”, default call option
- Returns
-
class
xalpha.toolbox.
CBCalculator
(code, bondrate=None, riskfreerate=None, volatility=None, name=None, zgj=None)[source]¶ Bases:
object
可转债内在价值,简单计算器,期权价值与债券价值估算
-
__init__
(code, bondrate=None, riskfreerate=None, volatility=None, name=None, zgj=None)[source]¶ - Parameters
code – str. 转债代码,包含 SH 或 SZ 字头
bondrate – Optional[float]. 评估所用的债券折现率,默认使用中证企业债对应信用评级对应久期的利率
riskfreerate – Optioal[float]. 评估期权价值所用的无风险利率,默认使用国债对应久期的年利率。
volatility – Optional[float]. 正股波动性百分点,默认在一个范围浮动加上历史波动率的小幅修正。
name – str. 对于历史回测,可以直接提供 str,免得多次 get_rt 获取 name
zgj – float. 手动设置转股价,适用于想要考虑转股价调整因素进行历史估值的高阶用户
-
-
class
xalpha.toolbox.
Compare
(*codes, start='20200101', end='20201010', col='close', normalize=True)[source]¶ Bases:
object
将不同金融产品同起点归一化比较
-
__init__
(*codes, start='20200101', end='20201010', col='close', normalize=True)[source]¶ - Parameters
codes – Union[str, tuple], 格式与
xalpha.universal.get_daily()
相同,若需要汇率转换,需要用 tuple,第二个元素形如 “USD”start – %Y%m%d
end – %Y%m%d, default yesterday
col – str, default close. The column to be compared.
normalize – bool, default True. 是否将对比价格按起点时间归一。
-
-
class
xalpha.toolbox.
FundPEBHistory
(code, start=None, end=None)[source]¶ Bases:
xalpha.toolbox.IndexPEBHistory
基金历史估值封装
-
class
xalpha.toolbox.
IndexPEBHistory
(code, start=None, end=None)[source]¶ Bases:
object
对于指数历史 PE PB 的封装类
-
__init__
(code, start=None, end=None)[source]¶ - Parameters
code – str. 形式可以是 399971.XSHE 或者 SH000931
start – Optional[str]. %Y-%m-%d, 估值历史计算的起始日。
end – Dont use, only for debug
-
current
(y='pe')[source]¶ 返回实时的 pe 或 pb 绝对值估计。
- Parameters
y – Optional[str]. “pe” (defualt) or “pb”
- Returns
float.
-
current_percentile
(y='pe')[source]¶ 返回实时的 pe 或 pb 历史百分位估计
- Parameters
y – Optional[str]. “pe” (defualt) or “pb”
- Returns
float.
-
indexs
= {'000016.XSHG': ('上证50', '2012-01-01'), '000300.XSHG': ('沪深300', '2012-01-01'), '000807.XSHG': ('食品饮料', '2013-01-01'), '000827.XSHG': ('中证环保', '2013-01-01'), '000831.XSHG': ('500低波', '2013-01-01'), '000852.XSHG': ('中证1000', '2015-01-01'), '000905.XSHG': ('中证500', '2012-01-01'), '000922.XSHG': ('中证红利', '2012-01-01'), '000925.XSHG': ('基本面50', '2012-01-01'), '000931.XSHG': ('中证可选', '2012-01-01'), '000978.XSHG': ('医药100', '2012-01-01'), '000991.XSHG': ('全指医药', '2012-01-01'), '000992.XSHG': ('全指金融', '2012-01-01'), '399006.XSHE': ('创业板指', '2012-01-01'), '399324.XSHE': ('深证红利', '2012-01-01'), '399812.XSHE': ('养老产业', '2016-01-01'), '399932.XSHE': ('中证消费', '2012-01-01'), '399971.XSHE': ('中证传媒', '2014-07-01')}¶
-
-
class
xalpha.toolbox.
OverPriced
(code, start=None, end=None, prev=None)[source]¶ Bases:
object
ETF 或 LOF 历史折溢价情况分析
-
xalpha.toolbox.
PEBHistory
(code, start=None, end=None)[source]¶ 历史估值分析工具箱
- Parameters
code – str. 1. SH000***, SZ399***, 指数历史估值情况,第一原理计算,需要聚宽数据源 2. F******, 基金历史估值情况,根据股票持仓,第一原理计算 3. 8*****, 申万行业估值数据,需要聚宽数据源 4. 沪深港美股票代码,个股历史估值数据
start – str, %Y%m%d, 默认起点随着标的类型不同而不同
end – str, 仅限于 debug,强烈不建议设定,默认到昨天
- Returns
some object of PEBHistory class
-
class
xalpha.toolbox.
QDIIPredict
(code, t1dict=None, t0dict=None, positions=False, fetch=False, save=False)[source]¶ Bases:
object
T+2 确认份额的 QDII 型基金净值预测类
Warning
由于该类与现实时间的强烈耦合和激进的缓存利用,该类的对象不能”过夜”使用,每天需声明新的对象
-
__init__
(code, t1dict=None, t0dict=None, positions=False, fetch=False, save=False)[source]¶ - Parameters
code – str, 场内基金代码,eg SH501018
t1dict – Dict[str, float]. 用来预测 T-1 净值的基金组合持仓,若为空自动去 holdings 中寻找。
t0ict – Dict[str, float]. 用来预测 T 实时净值的基金组合持仓,若为空自动去 holdings 中寻找。
positions – bool. 仓位是否浮动,默认固定仓位。
fetch – bool, default True. 优先从 backend fetch t1。
save – bool, default True. 将 t1 缓存到 backend。
-
static
analyse_ud
(cpdf, col1, col2)[source]¶ - Parameters
cpdf – pd.DataFrame, with col1 as real netvalue and col2 as prediction difference
col1 – str.
col2 – str.
- Returns
-
benchmark_test
(start, end, **kws)[source]¶ 对该净值预测模型回测
- Parameters
start – str. 起始日期
end – str. 终止日期
kws – 可选仓位估计的超参。
- Returns
pd.DataFrame. real 列为真实涨跌幅,est 列为估计涨跌幅,diff 列为两者之差。
-
get_position
(date=None, refresh=False, return_date=True, **kws)[source]¶ 基于 date 日之前的净值数据,对 date 预估需要的仓位进行计算。
- Parameters
date – str. %Y-%m-%d
refresh – bool, default False. 若为 True,则刷新缓存,重新计算仓位。
return_date – bool, default True. return tuple, the second one is date in the format %Y%m%d
kws – 一些预估仓位可能的超参。包括 window,预估所需的时间窗口,decay 加权平均的权重衰减,smooth 每日仓位处理的平滑函数。以上参数均可保持默认即可获得较好效果。
- Returns
float. 0-100. 100 代表满仓。
-
get_t0
(percent=False, return_date=True)[source]¶ 获取当日实时净值估计, 该接口每日凌晨到美股收盘(早晨),不保证自洽和可用
- Parameters
percent – bool, default False。现在有两种实时的预测处理逻辑。若 percent 是 True,则将 t0dict 的 每个持仓标的的今日涨跌幅进行估算,若为 False,则将标的现价和标的对应指数昨日收盘价的比例作为涨跌幅估算。不推荐使用 percent=True.
return_date – bool, default True. return tuple, the second one is date in the format %Y%m%d
- Returns
float
-
get_t1
(date=None, return_date=True)[source]¶ 预测 date 日的净值,基于 date-1 日的净值和 date 日的外盘数据,数据自动缓存,不会重复计算
- Parameters
date – str. %Y-%m-%d. 注意若是 date 日为昨天,即今日预测昨日的净值,date 取默认值 None。
return_date – bool, default True. return tuple, the second one is date in the format %Y%m%d
- Returns
float, (str).
- Raises
NonAccurate – 由于外盘数据还未及时更新,而 raise,可在调用程序中用 except 捕获再处理。
-
get_t2
(return_date=True)[source]¶ 返回最新的已公布基金净值,注意这里严格按照最新公布,不一定是前两个交易日,可以更新,但更老会报错 DateMismatch
- Parameters
return_date –
- Returns
if return_date is True, tuple (value, %Y-%m-%d)
-
-
class
xalpha.toolbox.
SWPEBHistory
(code, start=None, end=None)[source]¶ Bases:
xalpha.toolbox.IndexPEBHistory
申万行业历史估值封装。 申万一级行业指数列表: https://www.hysec.com/hyzq/hy/detail/detail.jsp?menu=4&classid=00000003001200130002&firClassid=000300120013&twoClassid=0003001200130002&threeClassid=0003001200130002&infoId=3046547 二三级行业指数也支持
-
index1
= ['801740', '801020', '801110', '801200', '801160', '801010', '801120', '801230', '801750', '801050', '801890', '801170', '801710', '801130', '801180', '801760', '801040', '801780', '801880', '801140', '801720', '801080', '801790', '801030', '801730', '801210', '801770', '801150']¶
-
-
class
xalpha.toolbox.
StockPEBHistory
(code, start=None, end=None)[source]¶ Bases:
xalpha.toolbox.IndexPEBHistory
个股历史估值封装
-
class
xalpha.toolbox.
TEBHistory
(code, start=None, end=None)[source]¶ Bases:
object
指数总盈利和总净资产变化的分析工具箱
-
__init__
(code, start=None, end=None)[source]¶ - Parameters
code – str. 指数代码,eg. SH000016
start –
end –
-
-
xalpha.toolbox.
_set_display_notebook
()[source]¶ Initialize DataTable mode for pandas DataFrame represenation.
-
xalpha.toolbox.
_smooth_pos
(r, e, o)[source]¶ 单日仓位估计的平滑函数
- Parameters
r – 实际涨幅
e – 满仓估计涨幅
o – 昨日仓位估计
- Returns
-
xalpha.toolbox.
cb_bond_value
(issue_date, rlist, rate=0.03, date=None, tax=1.0)[source]¶ 可转债债券价值计算器
- Parameters
issue_date – str. 发行日期
rlist – List[float], 每年度的利息百分点,比如 0.4,0.6等,最后加上最后返回的值(不含最后一年利息),比如 104
rate – float,现金流折算利率,应取同久期同信用等级的企业债利率,参考 https://yield.chinabond.com.cn/
date – 默认今天,计算债券价值基于的时间
tax – float,税率,1.0 表示不算税后,0.8 为计算税后利息,一般不需要设置成0.8,因为区别不大
- Returns
-
xalpha.toolbox.
cb_ytm
(issue_date, rlist, cp, date=None, tax=1.0, guess=0.01)[source]¶ 可转债到期收益率计算器
- Parameters
issue_date – 发行日期
rlist – 计息及赎回列表
cp – 可转债现价
date – 参考日期
tax – 计税 1 vs 0.8 税后 YTM
guess – YTM 估计初始值
- Returns
-
xalpha.toolbox.
daily_increment
(code, date, lastday=None, _check=False, warning_threhold=None)[source]¶ 单一标的 date 日(若 date 日无数据则取之前的最晚有数据日,但该日必须大于 _check 对应的日期)较上一日或 lastday 的倍数, lastday 支持不完整,且不能离 date 太远
- Parameters
code –
date –
lastday – 如果用默认 None,则表示和前一日的涨跌, 不是一个支持任意日期涨幅的通用类,只有最接近的几天才保证逻辑没有问题
_check – 数据必须已更新到 date 日,除非之前每天都是节假日
- Returns
-
xalpha.toolbox.
evaluate_fluctuation
(hdict, date, lastday=None, _check=None, warning_threhold=None)[source]¶ 分析资产组合 hdict 的涨跌幅,全部兑换成人民币考虑
- Parameters
hdict –
date –
lastday –
_check – bool, ensure date source has been updated, otherwise throw DataMismatch error
warning_threhold – float>1, 异常检查阈值,若为 2, 则代表单日涨到2或跌倒1/2以外被舍弃
- Returns
-
xalpha.toolbox.
get_holdings_dict
(code, aim=95)[source]¶ 通过天天基金的股票持仓数据来生成实时预测所需的持仓字典,不保证稳定性和可靠性以及 API 的连续性,慎用
- Parameters
code –
aim –
- Returns
-
xalpha.toolbox.
is_on
(date, market='CN', no_trading_days=None)[source]¶ 粗略鉴定 date 日是否是指定 market 的开市日,对于当日鉴定,仍有数据未及时更新的风险。也存在历史数据被 investing 补全的风险。
- Parameters
date –
market – str. CN, JP, HK, US, UK, CH, HK, DE
- Returns
bool.
xalpha.trade module¶
module for trade class
-
xalpha.trade.
ITrade
¶ alias of
xalpha.trade.itrade
-
xalpha.trade.
Trade
¶ alias of
xalpha.trade.trade
-
xalpha.trade.
bottleneck
(cftable)[source]¶ find the max total input in the history given cftable with cash column
- Parameters
cftable – pd.DataFrame of cftable
-
class
xalpha.trade.
itrade
(code, status, name=None)[source]¶ Bases:
xalpha.trade.trade
场内交易,只包含 cftable 现金流表
-
__init__
(code, status, name=None)[source]¶ - Parameters
code – str. 代码格式与
xalpha.universal.get_daily()
要求相同status – 记账单或 irecord 类。
name – Optional[str]. 可提供标的名称。
-
-
class
xalpha.trade.
trade
(infoobj, status, cftable=None, remtable=None)[source]¶ Bases:
object
Trade class with fundinfo obj as input and its main attrs are cftable and remtable:
1. cftable: pd.Dataframe, 现金流量表,每行为不同变更日期,三列分别为 date,cash, share,标记对于某个投资标的 现金的进出和份额的变化情况,所有的份额数据为交易当时的不复权数据。基金份额折算通过流量表中一次性的份额增减体现。
2. remtable:pd.Dataframe, 持仓情况表,每行为不同变更日期,两列分别为 date 和 rem, rem 数据结构是一个嵌套的列表, 包含了不同时间买入仓位的剩余情况,详情参见 remain 模块。这一表格如非必需,避免任何直接调用。
- Parameters
infoobj – info object as the trading aim
status – status table, obtained from record class
-
__init__
(infoobj, status, cftable=None, remtable=None)[source]¶ Initialize self. See help(type(self)) for accurate signature.
-
_addrow
()[source]¶ Return cashflow table with one more line or raise an exception if there is no more line to add The same logic also applies to rem table 关于对于一个基金多个操作存在于同一交易日的说明:无法处理历史买入第一笔同时是分红日的情形, 事实上也不存在这种情形。无法处理一日多笔买卖的情形。 同一日既有卖也有买不现实,多笔买入只能在 csv 上合并记录,由此可能引起份额计算 0.01 的误差。可以处理分红日买入卖出的情形。 分级份额折算日封闭无法买入,所以程序直接忽略当天的买卖。因此不会出现多个操作共存的情形。
-
briefdailyreport
(date=datetime.datetime(2020, 10, 10, 19, 53, 13, 666809))[source]¶ quick summary of highly used attrs for trade
- Parameters
date – string or object of datetime
- Returns
dict with several attrs: date, unitvalue, currentshare, currentvalue
-
unitcost
(date=datetime.datetime(2020, 10, 10, 19, 53, 13, 666812))[source]¶ give the unitcost of fund positions
- Parameters
date – string or object of datetime
- Returns
float number of unitcost
-
v_totvalue
(end=datetime.datetime(2020, 10, 10, 19, 53, 13, 666818), rendered=True, vopts=None)[source]¶ visualization on the total values daily change of the aim
-
v_tradecost
(start=None, end=datetime.datetime(2020, 10, 10, 19, 53, 13, 666815), rendered=True)[source]¶ visualization giving the average cost line together with netvalue line
- Returns
pyecharts.line
-
v_tradevolume
(freq='D', rendered=True)[source]¶ visualization on trade summary
- Parameters
freq – string, “D”, “W” and “M” are supported
- Returns
pyecharts.charts.bar.render_notebook()
-
xirrrate
(date=datetime.datetime(2020, 10, 10, 19, 53, 13, 666799), startdate=None, guess=0.01)[source]¶ give the xirr rate for all the trade of the aim before date (virtually sold out on date)
- Parameters
date – string or obj of datetime, the virtually sell-all date
startdate – string or obj of datetime, the beginning date of calculation, default from first buy
-
xalpha.trade.
turnoverrate
(cftable, end=datetime.datetime(2020, 10, 10, 19, 53, 13, 666781))[source]¶ calculate the annualized turnoverrate
- Parameters
cftable – pd.DataFrame of cftable
end – str or obj of datetime for the end date of the estimation
-
xalpha.trade.
vtradecost
(self, cftable, unitcost=False, start=None, end=datetime.datetime(2020, 10, 10, 19, 53, 13, 666792), rendered=True)[source]¶ visualization giving the average cost line together with netvalue line as well as buy and sell points
- Returns
pyecharts.line
-
xalpha.trade.
vtradevolume
(cftable, freq='D', rendered=True)[source]¶ aid function on visualization of trade summary
- Parameters
cftable – cftable (pandas.DataFrame) with at least date and cash columns
freq – one character string, frequency label, now supporting D for date, W for week and M for month, namely the trade volume is shown based on the time unit
- Returns
the Bar object
-
xalpha.trade.
xirrcal
(cftable, trades, date, startdate=None, guess=0.01)[source]¶ calculate the xirr rate
- Parameters
cftable – cftable (pd.Dateframe) with date and cash column
trades – list [trade1, …], every item is an trade object, whose shares would be sold out virtually
date – string of date or datetime object, the date when virtually all holding positions being sold
guess – floating number, a guess at the xirr rate solution to be used as a starting point for the numerical solution
- Returns
the IRR as a single floating number
xalpha.universal module¶
modules for universal fetcher that gives historical daily data and realtime data for almost everything in the market
-
xalpha.universal.
VInfo
¶ alias of
xalpha.universal.vinfo
-
xalpha.universal.
_get_daily
(code, start=None, end=None, prev=365, _from=None, wrapper=True, handler=True, **kws)[source]¶ universal fetcher for daily historical data of literally everything has a value in market. 数据来源包括但不限于天天基金,雪球,英为财情,外汇局官网,聚宽,标普官网,bloomberg,雅虎财经,ycharts等。
- Parameters
code –
str.
对于沪深市场的股票,指数,ETF,LOF 场内基金,可转债和债券,直接使用其代码,主要开头需要包括 SH 或者 SZ。如果数字代码之后接 .A .B .N 分别代表后复权,前复权和不复权数据,不加后缀默认前复权。港股美股同理。
对于香港市场的股票,指数,使用其数字代码,同时开头要添加 HK。
对于美国市场的股票,指数,ETF 等,直接使用其字母缩写代码即可。
对于人民币中间价数据,使用 “USD/CNY” 的形式,具体可能的值可在 http://www.chinamoney.com.cn/chinese/bkccpr/ 历史数据的横栏查询,注意日元需要用 100JPY/CNY.
对于所有可以在 cn.investing.com 网站查到的金融产品,其代码可以是该网站对应的统一代码,或者是网址部分,比如 DAX 30 的概览页面为 https://cn.investing.com/indices/germany-30,那么对应代码即为 “indices/germany-30”。也可去网页 inspect 手动查找其内部代码(一般不需要自己做,推荐直接使用网页url作为 code 变量值),手动 inspect 加粗的实时价格,其对应的网页 span class 中的 pid 的数值即为内部代码。
对于国内发行的基金,使用基金代码,同时开头添加 F。若想考虑分红使用累计净值,则开头添加 T。
对于国内发行的货币基金,使用基金代码,同时开头添加 M。(全部按照净值数据处理)
形如 peb-000807.XSHG 或 peb-SH000807 格式的数据,可以返回每周的指数估值情况,需要 enable 聚宽数据源方可查看。
形如 iw-000807.XSHG 或 iw-SH000807 格式的数据,可以返回每月的指数成分股和实时权重,需要 enable 聚宽数据源方可查看。
形如 fs-SH501018 格式的数据,可以返回指定场内基金每日份额,需要 enable 聚宽数据源方可查看。
形如 SP5475707.2 格式的数据,可以返回标普官网相关指数的日线数据(最近十年),id 5475707 部分可以从相关指数 export 按钮获取的链接中得到,小数点后的部分代表保存的列数。参考链接:https://us.spindices.com/indices/equity/sp-global-oil-index. 若SPC开头,则从中国网站获取。
形如 BB-FGERBIU:ID 格式的数据,对应网页 https://www.bloomberg.com/quote/FGERBIU:ID,可以返回彭博的数据(最近五年)
形如 sw-801720 格式的数据,可以返回对应申万行业的历史数据情况,需要 enable 聚宽数据源方可查看。
形如 teb-SH000300 格式的数据,返回每周指数盈利和净资产总值数据(单位:亿人民币元),需要 enbale 聚宽数据方可查看。
形如 YH-CSGOLD.SW 格式的数据,返回雅虎财经标的日线数据(最近十年)。代码来自标的网页 url:https://finance.yahoo.com/quote/CSGOLD.SW。
形如 FT-22065529 格式的数据或 FT-INX:IOM,可以返回 financial times 的数据,推荐直接用后者。前者数字代码来源,打开浏览器 network 监视,切换图标时间轴时,会新增到 https://markets.ft.com/data/chartapi/series 的 XHR 请求,其 request payload 里的 [elements][symbol] 即为该指数对应数字。
形如 FTC-WTI+Crude+Oil 格式的数据,开头可以是 FTC, FTE, FTX, FTF, FTB, FTI 对应 ft.com 子栏目 commdities,equities,currencies,funds,bonds,indicies。其中 FTI 和 FT 相同。
形如 mcy-MAC_AREA_UNEMPLOY 格式的数据,返回相应的宏观数据,需要聚宽数据源。mcy,mcq,mcm 代表年度,季度和月度的数据,code 为表名,可以参考 https://www.joinquant.com/help/api/help?name=macroData
形如 ZZ000905,ZZH30533 的代码,代表中证官网的指数,ZZ 之后接指数代码,注意有些指数代码里可能包含 H,历史数据最大到近五年。
形如 GZB30018, GZ399299 格式的数据,代表国证系列指数, GZ 之后接指数代码,代码可能包含更多字母。
形如 ESCI000201 格式的数据,易盛商品指数系列,参考 http://www.esunny.com.cn/index.php?a=lists&catid=60。
形如 pt-F100032 格式的数据,返回指定基金每季度股票债券和现金的持仓比例
形如 yc-companies/DBP,yc-companies/DBP/price 格式的数据,返回ycharts股票、ETF数据,对应网页 https://ycharts.com/companies/DBP/price,最后部分为数据含义,默认price,可选:net_asset_value(仅ETF可用)、total_return_price、total_return_forward_adjusted_price、average_volume_30,历史数据限制五年内。
形如 yc-indices/^SPGSCICO,yc-indices/^SPGSCICO/level 格式的数据,返回ycharts指数数据,对应网页 https://ycharts.com/indices/%5ESPGSCICO/level,最后部分为数据含义,默认level,可选:total_return_forward_adjusted_price,历史数据限制五年内。
形如 HZ999001 HZ999005 格式的数据,代表了华证系列指数 http://www.chindices.com/indicator.html#
形如 B-AA+.3 格式的数据,代表了 AA+ 企业债三年久期利率数据 (每周)
start – str. “20200101”, “2020/01/01”, “2020-01-01” are all legal. The starting date of daily data.
end – str. format is the same as start. The ending date of daily data.
prev – Optional[int], default 365. If start is not specified, start = end-prev.
_from – Optional[str]. 一般用户不需设定该选项。can be one of “xueqiu”, “zjj”, “investing”, “tiantianjijin”. Only used for debug to enforce data source. For common use, _from can be chosed automatically based on code in the run time.
wrapper – bool. 一般用户不需设定该选项。
handler – bool. Default True. 若为 False,则 handler 钩子失效,用于钩子函数中的原函数嵌套调用。
- Returns
pd.Dataframe. must include cols: date[pd.Timestamp],close[float64]。
-
xalpha.universal.
_get_peb_range
(code, start, end)[source]¶ 获取指定指数一段时间内的 pe pb 值。
- Parameters
code – 聚宽形式指数代码。
start –
end –
- Returns
pd.DataFrame
-
xalpha.universal.
_inverse_convert_code
(code)[source]¶ 将 xalpha 形式的代码转化为聚宽形式
- Parameters
code –
- Returns
-
xalpha.universal.
cached
(s)[source]¶ Deprecated, use
cachedio()
instead, wherebackend="memory"
.Usage as follows:
@cached("20170101") def get_daily(*args, **kws): return xa.get_daily(*args, **kws)
Automatically cache the result in memory and avoid refetching :param s: str. eg. “20160101”, the starting date of cached table. :return: wrapped function.
-
xalpha.universal.
cachedio
(**ioconf)[source]¶ 用法类似:func:cached,通用透明缓存器,用来作为 (code, start, end …) -> pd.DataFrame 形式函数的缓存层, 避免重复爬取已有数据。
- Parameters
**ioconf –
可选关键字参数 backend: csv or sql or memory, path: csv 文件夹或 sql engine, refresh True 会刷新结果,重新爬取, default False, prefix 是 key 前统一部分, 缓存 hash 标志
- Returns
-
xalpha.universal.
decouple_code
(code)[source]¶ decompose SH600000.A into SH600000, after
- Parameters
code –
- Returns
Tuple
-
xalpha.universal.
get_bar
(code, prev=24, interval=3600, _from=None, handler=True, start=None, end=None)[source]¶ - Parameters
code – str. 支持雪球和英为的代码
prev – points of data from now to back, often limited by API around several hundreds
interval – float, seconds. need to match the corresponding API, typical values include 60, 300, 3600, 86400, 86400*7
handler – bool. Default True. 若为 False,则 handler 钩子失效,用于钩子函数中的嵌套。
- Returns
pd.DataFrame
-
xalpha.universal.
get_bar_frominvesting
(code, prev=120, interval=3600)[source]¶ get bar data beyond daily bar
- Parameters
code – str. investing id or url
prev – int, data points from now, max might be around 500, if exceed, only None is returnd
interval – default 3600. optional 60, 300, 900, 1800, 18000, 86400, “week”, “month”
- Returns
pd.DataFrame or None if prev and interval unmatch the API
-
xalpha.universal.
get_bar_fromxq
(code, prev, interval=3600)[source]¶ - Parameters
code –
prev –
interval – 1m, 5m, 15m, 30m, 60m, 120m, month, quarter, year, week, day
- Returns
-
xalpha.universal.
get_bar_ttl
¶
-
xalpha.universal.
get_bond_rates
[source]¶ 获取各评级企业债的不同久期的预期利率
- Parameters
rating – str. eg AAA, AA-, N for 中国国债
date – %Y-%m-%d
- Returns
-
xalpha.universal.
get_bond_rates_range
(rating, duration=3, freq='W-FRI', start=None, end=None)[source]¶
-
xalpha.universal.
get_daily
(code, start=None, end=None, prev=365, _from=None, wrapper=True, handler=True, **kws)¶ universal fetcher for daily historical data of literally everything has a value in market. 数据来源包括但不限于天天基金,雪球,英为财情,外汇局官网,聚宽,标普官网,bloomberg,雅虎财经,ycharts等。
- Parameters
code –
str.
对于沪深市场的股票,指数,ETF,LOF 场内基金,可转债和债券,直接使用其代码,主要开头需要包括 SH 或者 SZ。如果数字代码之后接 .A .B .N 分别代表后复权,前复权和不复权数据,不加后缀默认前复权。港股美股同理。
对于香港市场的股票,指数,使用其数字代码,同时开头要添加 HK。
对于美国市场的股票,指数,ETF 等,直接使用其字母缩写代码即可。
对于人民币中间价数据,使用 “USD/CNY” 的形式,具体可能的值可在 http://www.chinamoney.com.cn/chinese/bkccpr/ 历史数据的横栏查询,注意日元需要用 100JPY/CNY.
对于所有可以在 cn.investing.com 网站查到的金融产品,其代码可以是该网站对应的统一代码,或者是网址部分,比如 DAX 30 的概览页面为 https://cn.investing.com/indices/germany-30,那么对应代码即为 “indices/germany-30”。也可去网页 inspect 手动查找其内部代码(一般不需要自己做,推荐直接使用网页url作为 code 变量值),手动 inspect 加粗的实时价格,其对应的网页 span class 中的 pid 的数值即为内部代码。
对于国内发行的基金,使用基金代码,同时开头添加 F。若想考虑分红使用累计净值,则开头添加 T。
对于国内发行的货币基金,使用基金代码,同时开头添加 M。(全部按照净值数据处理)
形如 peb-000807.XSHG 或 peb-SH000807 格式的数据,可以返回每周的指数估值情况,需要 enable 聚宽数据源方可查看。
形如 iw-000807.XSHG 或 iw-SH000807 格式的数据,可以返回每月的指数成分股和实时权重,需要 enable 聚宽数据源方可查看。
形如 fs-SH501018 格式的数据,可以返回指定场内基金每日份额,需要 enable 聚宽数据源方可查看。
形如 SP5475707.2 格式的数据,可以返回标普官网相关指数的日线数据(最近十年),id 5475707 部分可以从相关指数 export 按钮获取的链接中得到,小数点后的部分代表保存的列数。参考链接:https://us.spindices.com/indices/equity/sp-global-oil-index. 若SPC开头,则从中国网站获取。
形如 BB-FGERBIU:ID 格式的数据,对应网页 https://www.bloomberg.com/quote/FGERBIU:ID,可以返回彭博的数据(最近五年)
形如 sw-801720 格式的数据,可以返回对应申万行业的历史数据情况,需要 enable 聚宽数据源方可查看。
形如 teb-SH000300 格式的数据,返回每周指数盈利和净资产总值数据(单位:亿人民币元),需要 enbale 聚宽数据方可查看。
形如 YH-CSGOLD.SW 格式的数据,返回雅虎财经标的日线数据(最近十年)。代码来自标的网页 url:https://finance.yahoo.com/quote/CSGOLD.SW。
形如 FT-22065529 格式的数据或 FT-INX:IOM,可以返回 financial times 的数据,推荐直接用后者。前者数字代码来源,打开浏览器 network 监视,切换图标时间轴时,会新增到 https://markets.ft.com/data/chartapi/series 的 XHR 请求,其 request payload 里的 [elements][symbol] 即为该指数对应数字。
形如 FTC-WTI+Crude+Oil 格式的数据,开头可以是 FTC, FTE, FTX, FTF, FTB, FTI 对应 ft.com 子栏目 commdities,equities,currencies,funds,bonds,indicies。其中 FTI 和 FT 相同。
形如 mcy-MAC_AREA_UNEMPLOY 格式的数据,返回相应的宏观数据,需要聚宽数据源。mcy,mcq,mcm 代表年度,季度和月度的数据,code 为表名,可以参考 https://www.joinquant.com/help/api/help?name=macroData
形如 ZZ000905,ZZH30533 的代码,代表中证官网的指数,ZZ 之后接指数代码,注意有些指数代码里可能包含 H,历史数据最大到近五年。
形如 GZB30018, GZ399299 格式的数据,代表国证系列指数, GZ 之后接指数代码,代码可能包含更多字母。
形如 ESCI000201 格式的数据,易盛商品指数系列,参考 http://www.esunny.com.cn/index.php?a=lists&catid=60。
形如 pt-F100032 格式的数据,返回指定基金每季度股票债券和现金的持仓比例
形如 yc-companies/DBP,yc-companies/DBP/price 格式的数据,返回ycharts股票、ETF数据,对应网页 https://ycharts.com/companies/DBP/price,最后部分为数据含义,默认price,可选:net_asset_value(仅ETF可用)、total_return_price、total_return_forward_adjusted_price、average_volume_30,历史数据限制五年内。
形如 yc-indices/^SPGSCICO,yc-indices/^SPGSCICO/level 格式的数据,返回ycharts指数数据,对应网页 https://ycharts.com/indices/%5ESPGSCICO/level,最后部分为数据含义,默认level,可选:total_return_forward_adjusted_price,历史数据限制五年内。
形如 HZ999001 HZ999005 格式的数据,代表了华证系列指数 http://www.chindices.com/indicator.html#
形如 B-AA+.3 格式的数据,代表了 AA+ 企业债三年久期利率数据 (每周)
start – str. “20200101”, “2020/01/01”, “2020-01-01” are all legal. The starting date of daily data.
end – str. format is the same as start. The ending date of daily data.
prev – Optional[int], default 365. If start is not specified, start = end-prev.
_from – Optional[str]. 一般用户不需设定该选项。can be one of “xueqiu”, “zjj”, “investing”, “tiantianjijin”. Only used for debug to enforce data source. For common use, _from can be chosed automatically based on code in the run time.
wrapper – bool. 一般用户不需设定该选项。
handler – bool. Default True. 若为 False,则 handler 钩子失效,用于钩子函数中的原函数嵌套调用。
- Returns
pd.Dataframe. must include cols: date[pd.Timestamp],close[float64]。
-
xalpha.universal.
get_fund_peb
(code, date, threhold=0.3)[source]¶ 根据基金的股票持仓,获取对应日期的 pe,pb 估值
- Parameters
code – str. 基金代码
date –
threhold – float, default 0.3. 为了计算快速,占比小于千分之三的股票将舍弃
- Returns
-
xalpha.universal.
get_fund_peb_range
(code, start, end)[source]¶ 获取一段时间的基金历史估值,每周五为频率
- Parameters
code –
start –
end –
- Returns
-
xalpha.universal.
get_fund_type
[source]¶ given fund code, return unified fund category which is extracted from get_rt(code)[“type”]
- Parameters
code –
- Returns
str.
-
xalpha.universal.
get_historical_frombb
(code, start=None, end=None, **kws)[source]¶ https://www.bloomberg.com/ 数据源, 试验性支持。 似乎有很严格的 IP 封禁措施, 且最新数据更新滞后,且国内会被 reset,似乎难以支持 T-1 净值预测。强烈建议从英为或雅虎能找到的标的,不要用彭博源,该 API 只能作为 last resort。
- Parameters
code –
start –
end –
kws –
- Returns
-
xalpha.universal.
get_historical_fromesunny
(code, start=None, end=None)[source]¶ 易盛商品指数
- Parameters
code – eg. ESCI000201
start – just placeholder
end – just placeholder
- Returns
-
xalpha.universal.
get_historical_fromft
(code, start, end, _type='indices')[source]¶ finance times 数据
- Parameters
code –
start –
end –
- Returns
-
xalpha.universal.
get_historical_fromgzindex
(code, start, end)[source]¶ 国证指数源
- Parameters
code –
start –
end –
- Returns
-
xalpha.universal.
get_historical_fromhzindex
(code, start, end)[source]¶ 华证指数源
- Parameters
code –
start –
end –
- Returns
-
xalpha.universal.
get_historical_fromsp
(code, start=None, end=None, region='us', **kws)[source]¶ 标普官网数据源
- Parameters
code –
start –
end –
kws –
- Returns
-
xalpha.universal.
get_historical_fromxq
(code, count, type_='before', full=False)[source]¶ - Parameters
code –
count –
type – str. normal, before, after
full –
- Returns
-
xalpha.universal.
get_historical_fromyh
(code, start=None, end=None)[source]¶ 雅虎财经数据源,支持数据丰富,不限于美股。但存在部分历史数据缺失 NAN 或者周末进入交易日的现象,可能数据需要进一步清洗和处理。
- Parameters
code –
start –
end –
- Returns
-
xalpha.universal.
get_historical_fromzzindex
(code, start, end=None)[source]¶ 中证指数源
- Parameters
code –
start –
end –
- Returns
-
xalpha.universal.
get_index_weight_range
(code, start, end)¶
-
xalpha.universal.
get_industry_fromxq
[source]¶ part of symbols has empty industry information
- Parameters
code –
- Returns
dict
-
xalpha.universal.
get_jsl_cb_status_ttl
¶
-
xalpha.universal.
get_newest_netvalue
(code)[source]¶ 防止天天基金总量 API 最新净值更新不及时,获取基金最新公布净值及对应日期, depracated, use get_rt(“F501018”) instead
- Parameters
code – six digits string for fund.
- Returns
netvalue, %Y-%m-%d
-
xalpha.universal.
get_newest_netvalue_ttl
¶
-
xalpha.universal.
get_now
(code, _from=None, double_check=False, double_check_threhold=0.005, handler=True)¶ universal fetcher for realtime price of literally everything.
- Parameters
code – str. 规则同
get_daily()
. 需要注意场外基金和外汇中间价是不支持实时行情的,因为其每日只有一个报价。对于 investing 的数据源,只支持网址格式代码。_from – Optional[str]. can be one of “xueqiu”, “investing”. Only used for debug to enfore data source. For common use, _from can be chosed automatically based on code in the run time.
double_check – Optional[bool], default False. 如果设为 True,只适用于 A 股,美股,港股实时行情,会通过至少两个不同的数据源交叉验证,确保正确。 适用于需要自动交易等情形,防止实时数据异常。
handler – bool. Default True. 若为 False,则 handler 钩子失效,用于钩子函数中的嵌套。
- Returns
Dict[str, Any]. 包括 “name”, “current”, “percent” 三个必有项和 “current_ext”(盘后价格), “currency” (计价货币), “market” (发行市场), “time”(记录时间) 可能为
None
的选项。
-
xalpha.universal.
get_peb
(index, date=None, table=False)[source]¶ 获取指数在指定日期的 pe 和 pb。采用当时各公司的最新财报和当时的指数成分股权重加权计算。
- Parameters
index – str. 聚宽形式的指数代码。
date – str. %Y-%m-%d
table – Optioanl[bool], default False. True 时返回整个计算的 DataFrame,用于 debug。
- Returns
Dict[str, float]. 包含 pe 和 pb 值的字典。
-
xalpha.universal.
get_peb_range
(code, start, end)¶ 获取指定指数一段时间内的 pe pb 值。
- Parameters
code – 聚宽形式指数代码。
start –
end –
- Returns
pd.DataFrame
-
xalpha.universal.
get_realtime
(code, _from=None, double_check=False, double_check_threhold=0.005, handler=True)¶ universal fetcher for realtime price of literally everything.
- Parameters
code – str. 规则同
get_daily()
. 需要注意场外基金和外汇中间价是不支持实时行情的,因为其每日只有一个报价。对于 investing 的数据源,只支持网址格式代码。_from – Optional[str]. can be one of “xueqiu”, “investing”. Only used for debug to enfore data source. For common use, _from can be chosed automatically based on code in the run time.
double_check – Optional[bool], default False. 如果设为 True,只适用于 A 股,美股,港股实时行情,会通过至少两个不同的数据源交叉验证,确保正确。 适用于需要自动交易等情形,防止实时数据异常。
handler – bool. Default True. 若为 False,则 handler 钩子失效,用于钩子函数中的嵌套。
- Returns
Dict[str, Any]. 包括 “name”, “current”, “percent” 三个必有项和 “current_ext”(盘后价格), “currency” (计价货币), “market” (发行市场), “time”(记录时间) 可能为
None
的选项。
-
xalpha.universal.
get_ri_status_ttl
¶
-
xalpha.universal.
get_rmb
(start=None, end=None, prev=360, currency='USD/CNY')[source]¶ 获取人民币汇率中间价, 该 API 官网数据源,稳定性很差
- Parameters
start –
end –
prev –
currency –
- Returns
pd.DataFrame
-
xalpha.universal.
get_rmb_ttl
¶
-
xalpha.universal.
get_rt
(code, _from=None, double_check=False, double_check_threhold=0.005, handler=True)[source]¶ universal fetcher for realtime price of literally everything.
- Parameters
code – str. 规则同
get_daily()
. 需要注意场外基金和外汇中间价是不支持实时行情的,因为其每日只有一个报价。对于 investing 的数据源,只支持网址格式代码。_from – Optional[str]. can be one of “xueqiu”, “investing”. Only used for debug to enfore data source. For common use, _from can be chosed automatically based on code in the run time.
double_check – Optional[bool], default False. 如果设为 True,只适用于 A 股,美股,港股实时行情,会通过至少两个不同的数据源交叉验证,确保正确。 适用于需要自动交易等情形,防止实时数据异常。
handler – bool. Default True. 若为 False,则 handler 钩子失效,用于钩子函数中的嵌套。
- Returns
Dict[str, Any]. 包括 “name”, “current”, “percent” 三个必有项和 “current_ext”(盘后价格), “currency” (计价货币), “market” (发行市场), “time”(记录时间) 可能为
None
的选项。
-
xalpha.universal.
get_rt_from_ttjj_ttl
¶
-
xalpha.universal.
get_sh_status_ttl
¶
-
xalpha.universal.
get_stock_peb_range
(code, start, end, wrapper=False)[source]¶ 获取股票历史 pe pb
- Parameters
code –
start –
end –
- Returns
-
xalpha.universal.
get_sw_from_jq
(code, start=None, end=None, **kws)[source]¶ - Parameters
code – str. eg. 801180 申万行业指数
start –
end –
kws –
- Returns
-
xalpha.universal.
get_sz_fs_ttl
¶
-
xalpha.universal.
get_sz_status_ttl
¶
-
xalpha.universal.
get_token_ttl
¶
-
xalpha.universal.
lru_cache_time
(ttl=None, maxsize=None)[source]¶ TTL support on lru_cache
- Parameters
ttl – float or int, seconds
maxsize – int, maxsize for lru_cache
- Returns
-
xalpha.universal.
make_ft_url
(code, _type='indices')[source]¶ - Parameters
code –
_type – indices, commodities, currencies, funds, equities, bonds
- Returns
-
xalpha.universal.
set_backend
(**ioconf)[source]¶ 设定 xalpha get_daily 函数的缓存后端,默认为内存。 ioconf 参数设置可参考
cachedio()
- Parameters
ioconf –
- Returns
None.
-
xalpha.universal.
set_handler
(method='daily', f=None)[source]¶ 为
get_daily
,get_bar
或get_rt
设置 hook,优先按照函数 f 进行处理,若返回 None,再按一般情形处理- Parameters
method – str. daily, rt, bar
f – func, default None.
- Returns
None
-
class
xalpha.universal.
vinfo
(code, name=None, start=None, end=None, rate=0, col='close', **kws)[source]¶ Bases:
xalpha.info.basicinfo
,xalpha.indicator.indicator
vinfo is an info like class wrapper for get_daily, it behaves like info