天开演化BoomEvolve

valuequant文档

认识valuequant

valuequant是一套持续进化的证券市场数据分析工具,为证券市场量化分析人士提供股权资产价值建模和市场指标算法分析服务。

最新版本1.1.5新增功能

优化StockStrategyLocal模块NormalTrade(开源)代码。

优化StockStrategyLocal模块MarginTrade(开源)代码。

优化StockStrategyLocal模块ShortSell(开源)代码。

新增StockStrategyLocal模块NormalTradeHedge普通交易对冲回测功能(开源)。

新增StockStrategyLocal模块MarginTradeHedge融资交易对冲回测功能(开源)。

新增StockStrategyLocal模块ShortTradeHedge融券交易对冲回测功能(开源)。

新增StockStrategyLocal模块NormalIndexFutureHedge股票-股指期货对冲回测功能(开源)。

新增StockStrategyLocal模块MarginIndexFutureHedge融资-股指期货对冲回测功能(开源)。

新增StockStrategyLocal模块ShortIndexFutureHedge融券-股指期货对冲回测功能(开源)。

新增StockStrategyLocal模块NormalIndexFutureHedge股票-期权对冲回测功能(开源)。

新增StockStrategyLocal模块MarginIndexFutureHedge融资-期权对冲回测功能(开源)。

新增StockStrategyLocal模块ShortIndexFutureHedge融券-期权对冲回测功能(开源)。

更多功能将在未来版本持续更新。

服务订阅

valuequant提供付费会员和免费试用两种服务模式。

付费会员在订阅期内可通过订阅账户不限次数获取valuequant服务。用户可注册登录BoomEvolve账户并付费订阅valuequant获得订阅期内valuequant付费会员资格。

免费试用账户可每日获取valuequant部分功能有限次数服务,具体可试用功能范围和每日服务次数随产品服务规则变化。用户注册登录BoomEvolve账户即可获得免费试用资格。

安装valuequant库

valuequant库适用于python3以上版本,python3用户打开本地终端,输入以下命令即可安装:

pip install valuequant

登录使用valuequant服务

用户可通过valuequant库登录使用valuequant服务,登录账户为BoomEvolve账户,可通过https://www.boomevolve.com注册获得。输入以下python命令登录valuequant服务:

>>> import valuequant as vq
>>> vq.login(name="BoomEvolve账户名称",pswd="账户密码")
登录成功
                            

严格状态更新模型Strict Latest Status Model

严格状态更新模型按时间序列样本1至2阶差分序列是否超过某设置长度连续为正或为负将时间序列分解成多个状态序列,并且研究时间序列的最新状态序列进行参数估计。长度满足最小序列步要求且均同向的状态序列确定方向;长度满足最小序列步但非均同向的状态序列需要按假设检验判定方向;长度未满足最小序列步的序列或未通过假设检验的非同向序列的状态方向为非确定。

该方法能够较为敏感地识别时间序列数据近期变化,并且保守地将尚未经过显著验证的新数据归为变化方向未确定的中性状态。

模型参数说明

参数名称 参数说明 格式规范 必填/默认值
series 时间序列样本数据。 pandas.Series类型。序列索引类型应该为带有标准freq的时间索引。 必填
minstep 若样本某阶段差分序列连续超过minstep步均为正或为负,则连续同方向的差分序列样本的状态为该方向。 int类型 必填
significance 若按minstep逻辑未能确定样本某阶段差分序列方向,则将该序列按显著性水平significance再次判定方向。 (0,0.5)区间内的float类型 必填
seasonal 是否将时间序列样本数据分离季节项。 boolean类型 False
anneal 按时间序列时间索引大小分配的计算权重。索引大小相邻两样本间,索引较小者权重是较大者权重的anneal倍。该权重应用于差分序列方向假设检验和模型参数估计。若不设置,则所有样本权重相同。 float类型 None
conservative 是否采用保守估计方式。若采用保守估计方式,则在序列1阶差分和2阶差分方向状态不一致时,为尽量保持模型一阶差分在未来推演中不出现方向反转,而尝试使用一阶差分衰减率而非二阶差分来进行一阶差分未来推演。 boolean类型 False

模型估计结果

项目名称 项目说明 项目内容 必要输出/条件输出
method 模型推演方法 random:时间序列为随机序列,按最新状态序列均值推演未来序列;l1:时间序列具有1阶差分项,按最新状态序列1阶差分均值推演未来序列;l2:时间序列具有2阶差分项,按最新状态序列2阶差分均值推演未来序列;l2smooth:在设置保守估计的情况下出现,时间序列具有2阶差分项但1阶2阶方向不一致,按最新状态序列1阶差分衰减率推演未来序列。 必要输出
step 最新状态序列步数 —— 必要输出
params 参数估计 value_mean:最新状态序列均值,method为random时输出;l1_diff:最新状态序列1阶差分均值,method为l1时输出;l2_diff:最新状态序列2阶差分均值,method为l2时输出;l2smooth_rate:最新状态序列1差分变化率均值,method为l2smooth时输出;value_latest:时间序列最新数据;l1_latest:1阶差分最新数据。 必要输出
status 最新状态序列状态 l1:1阶差分序列状态;l2:2阶差分序列状态;+:方向为正;-:方向为负;n:方向非确定。 必要输出
seasonal 季节项 时间序列的季节乘数 在模型构建参数seasonal设置为True时输出
qorder 季节项的先后顺序 —— 在模型构建参数seasonal设置为True时输出

使用示例

>>> #构建线性增长测试序列
>>> import numpy as np
>>> import pandas as pd
>>> def createlinear(l=2,b=10,sigma=0.0001,startdate='2012-03-31',freq='Q-DEC',periods=40):
...     return pd.Series(np.arange(1,periods+1)*l+b+np.random.normal(0,sigma,periods),index=pd.date_range(start=startdate,freq=freq,periods=periods))
>>> series=createlinear()

>>> #构建严格状态更新模型
>>> model=vq.Models.strict_latest_status_model(series=series,minstep=8,significance=0.3)
>>> #获取建模结果
>>> model.model()
{'method': 'l1', 'step': 40, 'params': {'l1_diff': 2.000001, 'value_latest': 90.000137}, 'status': {'l1': '+', 'l2': 'n'}}

>>> #构建含季节项的线性增长测试序列
>>> def createseasonal(seasonal=[1.001,1.002,0.999,0.998],startdate='2012-03-31',freq='Q-DEC',periods=40):
...     return pd.Series(np.tile(seasonal,int(np.ceil(periods/len(seasonal))))[:periods], index=pd.date_range(start=startdate, freq=freq, periods=periods))
>>> series=createlinear()*createseasonal()

>>> #构建设置季节项的严格状态更新模型
>>> model=vq.Models.strict_latest_status_model(series=series,minstep=8,significance=0.3,seasonal=True)
>>> #获取建模结果
>>> model.model()
{'method': 'l1', 'step': 40, 'params': {'l1_diff': 2.000039, 'value_latest': 90.002251}, 'status': {'l1': '+', 'l2': 'n'}, 'seasonal': {'12': 0.997975, '3': 1.000952, '6': 1.002025, '9': 0.999045}, 'qorder': ['3', '6', '9', '12']}

>>> #构建二次增长测试序列
>>> def createquadratic(q=-0.08,l=10,b=10,sigma=0.0001,startdate='2012-03-31',freq='Q-DEC',periods=40):
...     return pd.Series(pow(np.arange(1, periods + 1),2)*q+np.arange(1, periods + 1) * l + b + np.random.normal(0, sigma, periods), index=pd.date_range(start=startdate, freq=freq, periods=periods))
series=createquadratic()

>>> #构建严格状态更新模型
>>> model=vq.Models.strict_latest_status_model(series=series,minstep=8,significance=0.3)
>>> model.model()
{'method': 'l2', 'step': 40, 'params': {'l2_diff': -0.159991, 'l1_latest': 3.6801569999999515, 'value_latest': 282.000145}, 'status': {'l1': '+', 'l2': '-'}}
>>> #默认conservative参数为False,若1阶差分状态和2阶差分状态不同,曲线方向将在未来有限序列步出现反转

>>> #构建保守的严格状态更新模型
>>> model=vq.Models.strict_latest_status_model(series=series,minstep=8,significance=0.3,conservative=True)
>>> model.model()
{'method': 'l2smooth', 'step': 40, 'params': {'l1_latest': 3.6801569999999515, 'value_latest': 282.000145, 'l2smooth_rate': 0.9746603487603882}, 'status': {'l1': '+', 'l2': '-'}, 'smooth': True}
>>> #设置conservative参数为True,则在分析者对时间序列反转缺乏信心的情况下提供保守的估计方式,尽量使得未来推演在不出现反转的情况下实现1阶差分绝对值逐渐缩小
                            

概率状态更新模型Probable Latest Status Model

概率状态更新模型将时间序列按最小颗粒步分割成若干等长的子序列,并且按一定显著性水平对各子序列的1阶和2阶差分序列方向进行假设检验。将方向一致且连续的子序列合并。研究合并后的最新状态序列进行参数估计。

相较严格状态更新模型,概率状态更新模型能够避免对序列变化过度敏感的问题,并且能够通过统计方法更敏感地识别相邻且相似的样本。

模型参数说明

参数名称 参数说明 格式规范 必填/默认值
series 时间序列样本数据。 pandas.Series类型。序列索引类型应该为带有标准freq的时间索引。 必填
minstep 模型按最小颗粒步minstep将时间序列分割为若干等长的子序列 int类型 必填
significance 模型按显著性水平significance分析子序列1阶和2阶差分方向 (0,0.5)区间内的float类型 必填
seasonal 是否将时间序列样本数据分离季节项。 boolean类型 False
anneal 按时间序列时间索引大小分配的计算权重。索引大小相邻两样本间,索引较小者权重是较大者权重的anneal倍。该权重应用于假设检验和模型参数估计。若不设置,则所有样本权重相同。 float类型 None
conservative 是否采用保守估计方式。若采用保守估计方式,则在序列1阶差分和2阶差分方向状态不一致时,为尽量保持模型一阶差分在未来推演中不出现方向反转,而尝试使用一阶差分衰减率而非二阶差分来进行一阶差分未来推演。 boolean类型 False

模型估计结果

项目名称 项目说明 项目内容 必要输出/条件输出
method 模型推演方法 random:时间序列为随机序列,按最新状态序列均值推演未来序列;l1:时间序列具有1阶差分项,按最新状态序列1阶差分均值推演未来序列;l2:时间序列具有2阶差分项,按最新状态序列2阶差分均值推演未来序列;l2smooth:在设置保守估计的情况下出现,时间序列具有2阶差分项但1阶2阶方向不一致,按最新状态序列1阶差分衰减率推演未来序列。 必要输出
step 最新状态序列步数 —— 必要输出
params 参数估计 value_mean:最新状态序列均值,method为random时输出;l1_diff:最新状态序列1阶差分均值,method为l1时输出;l2_diff:最新状态序列2阶差分均值,method为l2时输出;l2smooth_rate:最新状态序列1差分变化率均值,method为l2smooth时输出;value_latest:时间序列最新数据;l1_latest:1阶差分最新数据。 必要输出
status 最新状态序列状态 l1:1阶差分序列状态;l2:2阶差分序列状态;+:方向为正;-:方向为负;n:方向非确定。 必要输出
seasonal 季节项 时间序列的季节乘数 在模型构建参数seasonal设置为True时输出
qorder 季节项的先后顺序 —— 在模型构建参数seasonal设置为True时输出

使用示例

>>> #构建线性增长测试序列
>>> import numpy as np
>>> import pandas as pd
>>> def createlinear(l=2,b=10,sigma=0.0001,startdate='2012-03-31',freq='Q-DEC',periods=40):
...     return pd.Series(np.arange(1,periods+1)*l+b+np.random.normal(0,sigma,periods),index=pd.date_range(start=startdate,freq=freq,periods=periods))
>>> series=createlinear()

>>> #构建概率状态更新模型
>>> model=vq.Models.probable_latest_status_model(series=series,minstep=8,significance=0.3)
>>> #获取建模结果
>>> model.model()
{'method': 'l1', 'step': 26, 'params': {'l1_diff': 2.0, 'value_latest': 90.000023}, 'status': {'l1': '+', 'l2': 'n'}}

>>> #构建含季节项的线性增长测试序列
>>> def createseasonal(seasonal=[1.001,1.002,0.999,0.998],startdate='2012-03-31',freq='Q-DEC',periods=40):
...     return pd.Series(np.tile(seasonal,int(np.ceil(periods/len(seasonal))))[:periods], index=pd.date_range(start=startdate, freq=freq, periods=periods))
>>> series=createlinear()*createseasonal()

>>> #构建设置季节项的概率状态更新模型
>>> model=vq.Models.probable_latest_status_model(series=series,minstep=8,significance=0.3,seasonal=True)
>>> #获取建模结果
>>> model.model()
{'method': 'l1', 'step': 26, 'params': {'l1_diff': 2.000159, 'value_latest': 90.002191}, 'status': {'l1': '+', 'l2': 'n'}, 'seasonal': {'12': 0.997975, '3': 1.000952, '6': 1.002024, '9': 0.999045}, 'qorder': ['3', '6', '9', '12']}

>>> #构建二次增长测试序列
>>> def createquadratic(q=-0.08,l=10,b=10,sigma=0.0001,startdate='2012-03-31',freq='Q-DEC',periods=40):
...     return pd.Series(pow(np.arange(1, periods + 1),2)*q+np.arange(1, periods + 1) * l + b + np.random.normal(0, sigma, periods), index=pd.date_range(start=startdate, freq=freq, periods=periods))
series=createquadratic()

>>> #构建概率状态更新模型
>>> model=vq.Models.probable_latest_status_model(series=series,minstep=8,significance=0.3)
>>> model.model()
{'method': 'l2', 'step': 26, 'params': {'l2_diff': -0.159994, 'l1_latest': 3.6799239999999713, 'value_latest': 282.000051}, 'status': {'l1': '+', 'l2': '-'}}
>>> #默认conservative参数为False,若1阶差分状态和2阶差分状态不同,曲线方向将在未来有限序列步出现反转

>>> #构建保守的概率状态更新模型
>>> model=vq.Models.probable_latest_status_model(series=series,minstep=8,significance=0.3,conservative=True)
>>> model.model()
{'method': 'l2smooth', 'step': 26, 'params': {'l1_latest': 3.6799239999999713, 'value_latest': 282.000051, 'l2smooth_rate': 0.9706620971665002}, 'status': {'l1': '+', 'l2': '-'}, 'smooth': True}
>>> #设置conservative参数为True,则在分析者对时间序列反转缺乏信心的情况下提供保守的估计方式,尽量使得未来推演在不出现反转的情况下实现1阶差分绝对值逐渐缩小
                            

长期状态模型Long Range Status Model

长期状态模型将时间序列所有样本数据或者一定时间范围内样本数据进行1阶和2阶差分序列方向假设检验,并按假设检验结果进行参数估计。

长期状态模型适合分析时间序列长期趋势,但对近期变化反应较为迟钝。

模型参数说明

参数名称 参数说明 格式规范 必填/默认值
series 时间序列样本数据。 pandas.Series类型。序列索引类型应该为带有标准freq的时间索引。 必填
significance 模型按显著性水平significance分析时间序列1阶和2阶差分方向 (0,0.5)区间内的float类型 必填
samplerange 样本范围。假设检验和参数估计使用的样本序列步数。默认范围为全部样本。 int类型 None
seasonal 是否将时间序列样本数据分离季节项。 boolean类型 False
anneal 按时间序列时间索引大小分配的计算权重。索引大小相邻两样本间,索引较小者权重是较大者权重的anneal倍。该权重应用于假设检验和模型参数估计。若不设置,则所有样本权重相同。 float类型 None
conservative 是否采用保守估计方式。若采用保守估计方式,则在序列1阶差分和2阶差分方向状态不一致时,为尽量保持模型一阶差分在未来推演中不出现方向反转,而尝试使用一阶差分衰减率而非二阶差分来进行一阶差分未来推演。 boolean类型 False

模型估计结果

项目名称 项目说明 项目内容 必要输出/条件输出
method 模型推演方法 random:时间序列为随机序列,按研究范围序列均值推演未来序列;l1:时间序列具有1阶差分项,按研究范围序列1阶差分均值推演未来序列;l2:时间序列具有2阶差分项,按研究范围序列2阶差分均值推演未来序列;l2smooth:在设置保守估计的情况下出现,时间序列具有2阶差分项但1阶2阶方向不一致,按研究范围序列1阶差分衰减率推演未来序列。 必要输出
step 研究范围序列步数 —— 必要输出
params 参数估计 value_mean:研究范围序列均值,method为random时输出;l1_diff:研究范围序列1阶差分均值,method为l1时输出;l2_diff:研究范围序列2阶差分均值,method为l2时输出;l2smooth_rate:研究范围序列1差分变化率均值,method为l2smooth时输出;value_latest:时间序列最新数据;l1_latest:1阶差分最新数据。 必要输出
status 研究范围序列状态 l1:1阶差分序列状态;l2:2阶差分序列状态;+:方向为正;-:方向为负;n:方向非确定。 必要输出
seasonal 季节项 时间序列的季节乘数 在模型构建参数seasonal设置为True时输出
qorder 季节项的先后顺序 —— 在模型构建参数seasonal设置为True时输出

使用示例

>>> #构建线性增长测试序列
>>> import numpy as np
>>> import pandas as pd
>>> def createlinear(l=2,b=10,sigma=0.0001,startdate='2012-03-31',freq='Q-DEC',periods=40):
...     return pd.Series(np.arange(1,periods+1)*l+b+np.random.normal(0,sigma,periods),index=pd.date_range(start=startdate,freq=freq,periods=periods))
>>> series=createlinear()

>>> #构建长期状态模型
>>> model=vq.Models.long_range_status_model(series=series,significance=0.3)
>>> #获取建模结果
>>> model.model()
{'method': 'l1', 'step': 40, 'params': {'l1_diff': 2.000003, 'value_latest': 90.000072}, 'status': {'l1': '+', 'l2': 'n'}}

>>> #构建含季节项的线性增长测试序列
>>> def createseasonal(seasonal=[1.001,1.002,0.999,0.998],startdate='2012-03-31',freq='Q-DEC',periods=40):
...     return pd.Series(np.tile(seasonal,int(np.ceil(periods/len(seasonal))))[:periods], index=pd.date_range(start=startdate, freq=freq, periods=periods))
>>> series=createlinear()*createseasonal()

>>> #构建设置季节项的长期状态模型
>>> model=vq.Models.long_range_status_model(series=series,significance=0.3,seasonal=True)
>>> #获取建模结果
>>> model.model()
{'method': 'l1', 'step': 40, 'params': {'l1_diff': 2.000045, 'value_latest': 90.002203}, 'status': {'l1': '+', 'l2': 'n'}, 'seasonal': {'12': 0.997976, '3': 1.000953, '6': 1.002024, '9': 0.999043}, 'qorder': ['3', '6', '9', '12']}

>>> #构建二次增长测试序列
>>> def createquadratic(q=-0.08,l=10,b=10,sigma=0.0001,startdate='2012-03-31',freq='Q-DEC',periods=40):
...     return pd.Series(pow(np.arange(1, periods + 1),2)*q+np.arange(1, periods + 1) * l + b + np.random.normal(0, sigma, periods), index=pd.date_range(start=startdate, freq=freq, periods=periods))
series=createquadratic()

>>> #构建长期状态模型
>>> model=vq.Models.long_range_status_model(series=series,significance=0.3)
>>> model.model()
{'method': 'l2', 'step': 40, 'params': {'l2_diff': -0.159992, 'l1_latest': 3.6800779999999804, 'value_latest': 282.00007}, 'status': {'l1': '+', 'l2': '-'}}
>>> #默认conservative参数为False,若1阶差分状态和2阶差分状态不同,曲线方向将在未来有限序列步出现反转

>>> #构建保守的长期状态模型
>>> model=vq.Models.long_range_status_model(series=series,significance=0.3,conservative=True)
>>> model.model()
{'method': 'l2smooth', 'step': 40, 'params': {'l1_latest': 3.6800779999999804, 'value_latest': 282.00007, 'l2smooth_rate': 0.9746599006548765}, 'status': {'l1': '+', 'l2': '-'}, 'smooth': True}
>>> #设置conservative参数为True,则在分析者对时间序列反转缺乏信心的情况下提供保守的估计方式,尽量使得未来推演在不出现反转的情况下实现1阶差分绝对值逐渐缩小
                            

严格状态长期惯性模型Strict Latest Long Range Model

严格状态长期惯性模型是严格状态更新模型和长期状态模型的混合。若严格状态更新模型和长期状态模型的状态评估结果不一致,则严格状态更新模型在维持一定惯性期后,按中性状态推演。

该模型能够平衡时间序列的长短期因素,短期变化需要经过一定时期验证才能证明时间序列长期趋势发生了改变。

模型参数说明

参数名称 参数说明 格式规范 必填/默认值
series 时间序列样本数据。 pandas.Series类型。序列索引类型应该为带有标准freq的时间索引。 必填
minstep 严格状态更新模型确定差分序列状态的最小连续步。 int类型 必填
significance 假设检验的显著性水平。 (0,0.5)区间内的float类型 必填
inertia 严格状态更新模型和长期状态模型不一致时,严格状态更新模型未来推演持续的序列步数 int类型 必填
seasonal 是否将时间序列样本数据分离季节项。 boolean类型 False
anneal 按时间序列时间索引大小分配的计算权重。索引大小相邻两样本间,索引较小者权重是较大者权重的anneal倍。该权重应用于差分序列方向假设检验和模型参数估计。若不设置,则所有样本权重相同。 float类型 None
samplerange 长期状态模型样本范围。 int类型 None

模型估计结果

项目名称 项目说明 项目内容 必要输出/条件输出
method 严格状态更新模型推演方法 random:时间序列为随机序列,按最新状态序列均值推演未来序列;l1:时间序列具有1阶差分项,按最新状态序列1阶差分均值推演未来序列;l2:时间序列具有2阶差分项,按最新状态序列2阶差分均值推演未来序列;l2smooth:在设置保守估计的情况下出现,时间序列具有2阶差分项但1阶2阶方向不一致,按最新状态序列1阶差分衰减率推演未来序列。 必要输出
params 严格状态更新模型参数估计 value_mean:最新状态序列均值,method为random时输出;l1_diff:最新状态序列1阶差分均值,method为l1时输出;l2_diff:最新状态序列2阶差分均值,method为l2时输出;l2smooth_rate:最新状态序列1差分变化率均值,method为l2smooth时输出;value_latest:时间序列最新数据;l1_latest:1阶差分最新数据。 必要输出
strict_latest 严格状态更新模型估计结果 —— 必要输出
long_range 长期状态模型估计结果 —— 必要输出
inertia 惯性期 严格状态更新模型和长期状态模型不一致时,严格状态更新模型未来推演持续的序列步数 必要输出
change 惯性期后是否改变推演模型 —— 必要输出
change_method 惯性期后模型推演方法 random:惯性期后按惯性期序列最后数据值推演未来序列;l1:惯性期后按惯性期序列最后1阶差分值推演未来序列。 在结果的change值为True时输出。
change_status 惯性期后的未来序列状态 l1:1阶差分序列状态;l2:2阶差分序列状态;+:方向为正;-:方向为负;n:方向非确定。 在结果的change值为True时输出。
seasonal 季节项 时间序列的季节乘数 在模型构建参数seasonal设置为True时输出
qorder 季节项的先后顺序 —— 在模型构建参数seasonal设置为True时输出

使用示例

>>> #构建随机-线性增长测试序列
>>> import numpy as np
>>> import pandas as pd
>>> def createrandom(b=10,sigma=2,startdate='2012-03-31',freq='Q-DEC',periods=40):
...     return pd.Series(b+np.random.normal(0,sigma,periods),index=pd.date_range(start=startdate,freq=freq,periods=periods))
>>> def createlinear(l=1,b=10,sigma=0.0001,startdate='2019-03-31',freq='Q-DEC',periods=12):
...     return pd.Series(np.arange(1,periods+1)*l+b+np.random.normal(0,sigma,periods),index=pd.date_range(start=startdate,freq=freq,periods=periods))
>>> series=createrandom()
>>> series['2019':]=createlinear()

>>> #构建严格状态长期惯性模型
>>> model=vq.Models.strict_latest_long_range_model(series,minstep=8,significance=0.3,inertia=3)
>>> #获取建模结果
>>> model.model()
{'method': 'l1', 'params': {'l1_diff': 0.999982, 'value_latest': 21.999832}, 'strict_latest': {'method': 'l1', 'step': 13, 'params': {'l1_diff': 0.999982, 'value_latest': 21.999832}, 'status': {'l1': '+', 'l2': 'n'}}, 'long_range': {'method': 'random', 'step': 40, 'params': {'value_mean': 11.416678}, 'status': {'l1': 'n'}}, 'inertia': 3, 'change': True, 'change_method': 'random', 'change_status': {'l1': 'n'}}
                            

概率状态长期惯性模型Probable Latest Long Range Model

概率状态长期惯性模型是概率状态更新模型和长期状态模型的混合。若概率状态更新模型和长期状态模型的状态评估结果不一致,则概率状态更新模型在维持一定惯性期后,按中性状态推演。

该模型能够平衡时间序列的长短期因素,短期变化需要经过一定时期验证才能证明时间序列长期趋势发生了改变。

模型参数说明

参数名称 参数说明 格式规范 必填/默认值
series 时间序列样本数据。 pandas.Series类型。序列索引类型应该为带有标准freq的时间索引。 必填
minstep 概率状态更新模型分割子序列的最小颗粒步。 int类型 必填
significance 假设检验的显著性水平。 (0,0.5)区间内的float类型 必填
inertia 概率状态更新模型和长期状态模型不一致时,概率状态更新模型未来推演持续的序列步数 int类型 必填
seasonal 是否将时间序列样本数据分离季节项。 boolean类型 False
anneal 按时间序列时间索引大小分配的计算权重。索引大小相邻两样本间,索引较小者权重是较大者权重的anneal倍。该权重应用于差分序列方向假设检验和模型参数估计。若不设置,则所有样本权重相同。 float类型 None
samplerange 长期状态模型样本范围。 int类型 None

模型估计结果

项目名称 项目说明 项目内容 必要输出/条件输出
method 概率状态更新模型推演方法 random:时间序列为随机序列,按最新状态序列均值推演未来序列;l1:时间序列具有1阶差分项,按最新状态序列1阶差分均值推演未来序列;l2:时间序列具有2阶差分项,按最新状态序列2阶差分均值推演未来序列;l2smooth:在设置保守估计的情况下出现,时间序列具有2阶差分项但1阶2阶方向不一致,按最新状态序列1阶差分衰减率推演未来序列。 必要输出
params 概率状态更新模型参数估计 value_mean:最新状态序列均值,method为random时输出;l1_diff:最新状态序列1阶差分均值,method为l1时输出;l2_diff:最新状态序列2阶差分均值,method为l2时输出;l2smooth_rate:最新状态序列1差分变化率均值,method为l2smooth时输出;value_latest:时间序列最新数据;l1_latest:1阶差分最新数据。 必要输出
probable_latest 概率状态更新模型估计结果 —— 必要输出
long_range 长期状态模型估计结果 —— 必要输出
inertia 惯性期 概率状态更新模型和长期状态模型不一致时,概率状态更新模型未来推演持续的序列步数 必要输出
change 惯性期后是否改变推演模型 —— 必要输出
change_method 惯性期后模型推演方法 random:惯性期后按惯性期序列最后数据值推演未来序列;l1:惯性期后按惯性期序列最后1阶差分值推演未来序列。 在结果的change值为True时输出。
change_status 惯性期后的未来序列状态 l1:1阶差分序列状态;l2:2阶差分序列状态;+:方向为正;-:方向为负;n:方向非确定。 在结果的change值为True时输出。
seasonal 季节项 时间序列的季节乘数 在模型构建参数seasonal设置为True时输出
qorder 季节项的先后顺序 —— 在模型构建参数seasonal设置为True时输出

使用示例

>>> #构建随机-线性增长测试序列
>>> import numpy as np
>>> import pandas as pd
>>> def createrandom(b=10,sigma=2,startdate='2012-03-31',freq='Q-DEC',periods=40):
...     return pd.Series(b+np.random.normal(0,sigma,periods),index=pd.date_range(start=startdate,freq=freq,periods=periods))
>>> def createlinear(l=1,b=10,sigma=0.0001,startdate='2019-03-31',freq='Q-DEC',periods=12):
...     return pd.Series(np.arange(1,periods+1)*l+b+np.random.normal(0,sigma,periods),index=pd.date_range(start=startdate,freq=freq,periods=periods))
>>> series=createrandom()
>>> series['2019':]=createlinear()

>>> #构建概率状态长期惯性模型
>>> model=vq.Models.probable_latest_long_range_model(series,minstep=8,significance=0.3,inertia=3)
>>> #获取建模结果
>>> model.model()
{'method': 'l1', 'params': {'l1_diff': 0.999993, 'value_latest': 21.999974}, 'probable_latest': {'method': 'l1', 'step': 9, 'params': {'l1_diff': 0.999993, 'value_latest': 21.999974}, 'status': {'l1': '+', 'l2': 'n'}}, 'long_range': {'method': 'random', 'step': 40, 'params': {'value_mean': 11.579264}, 'status': {'l1': 'n'}}, 'inertia': 3, 'change': True, 'change_method': 'random', 'change_status': {'l1': 'n'}}
                            

移动平均严格状态更新模型MA Strict Latest Status Model

先将严格状态更新模型的时间序列样本数据进行移动平均处理,再构建严格状态更新模型,但非同向的状态序列不再进行假设检验而评估为状态方向非确定。

该模型能够减少误差项对模型估计的影响。尤其在处理具有乘数季节项的时间序列数据时能够在一定程度上地消除季节项误差带来的异方差影响。

模型参数说明

参数名称 参数说明 格式规范 必填/默认值
series 时间序列样本数据。 pandas.Series类型。序列索引类型应该为带有标准freq的时间索引。 必填
mawindow 移动平均窗口长度 int类型 必填
minstep 若样本某阶段差分序列连续超过minstep步均为正或为负,则连续同方向的差分序列样本的状态为该方向。 int类型 必填
seasonal 是否将时间序列样本数据分离季节项。 boolean类型 False
anneal 按时间序列时间索引大小分配的计算权重。索引大小相邻两样本间,索引较小者权重是较大者权重的anneal倍。该权重应用于差分序列方向假设检验和模型参数估计。若不设置,则所有样本权重相同。 float类型 None
conservative 是否采用保守估计方式。若采用保守估计方式,则在序列1阶差分和2阶差分方向状态不一致时,为尽量保持模型一阶差分在未来推演中不出现方向反转,而尝试使用一阶差分衰减率而非二阶差分来进行一阶差分未来推演。 boolean类型 False

模型估计结果

项目名称 项目说明 项目内容 必要输出/条件输出
method 模型推演方法 random:时间序列为随机序列,按最新状态序列均值推演未来序列;l1:时间序列具有1阶差分项,按最新状态序列1阶差分均值推演未来序列;l2:时间序列具有2阶差分项,按最新状态序列2阶差分均值推演未来序列;l2smooth:在设置保守估计的情况下出现,时间序列具有2阶差分项但1阶2阶方向不一致,按最新状态序列1阶差分衰减率推演未来序列。 必要输出
step 最新状态序列步数 —— 必要输出
params 参数估计 value_mean:最新状态序列均值,method为random时输出;l1_diff:最新状态序列1阶差分均值,method为l1时输出;l2_diff:最新状态序列2阶差分均值,method为l2时输出;l2smooth_rate:最新状态序列1差分变化率均值,method为l2smooth时输出;value_latest:时间序列最新数据;l1_latest:1阶差分最新数据。 必要输出
status 最新状态序列状态 l1:1阶差分序列状态;l2:2阶差分序列状态;+:方向为正;-:方向为负;n:方向非确定。 必要输出
seasonal 季节项 时间序列的季节乘数 在模型构建参数seasonal设置为True时输出
qorder 季节项的先后顺序 —— 在模型构建参数seasonal设置为True时输出

使用示例

>>> #构建线性增长测试序列
>>> import numpy as np
>>> import pandas as pd
>>> def createlinear(l=2,b=10,sigma=0.0001,startdate='2012-03-31',freq='Q-DEC',periods=40):
...     return pd.Series(np.arange(1,periods+1)*l+b+np.random.normal(0,sigma,periods),index=pd.date_range(start=startdate,freq=freq,periods=periods))
>>> series=createlinear()

>>> #构建移动平均严格状态更新模型
>>> model=vq.Models.ma_strict_latest_status_model(series,mawindow=4,minstep=8)
>>> #获取建模结果
>>> model.model()
{'method': 'l1', 'step': 40, 'params': {'l1_diff': 1.999999, 'value_latest': 89.999943}, 'status': {'l1': '+', 'l2': 'n'}}

>>> #构建含季节项的线性增长测试序列
>>> def createseasonal(seasonal=[1.001,1.002,0.999,0.998],startdate='2012-03-31',freq='Q-DEC',periods=40):
...     return pd.Series(np.tile(seasonal,int(np.ceil(periods/len(seasonal))))[:periods], index=pd.date_range(start=startdate, freq=freq, periods=periods))
>>> series=createlinear()*createseasonal()

>>> #构建设置季节项的移动平均严格状态更新模型
>>> model=vq.Models.ma_strict_latest_status_model(series,mawindow=4,minstep=8,seasonal=True)
>>> #获取建模结果
>>> model.model()
{'method': 'l1', 'step': 40, 'params': {'l1_diff': 2.0, 'value_latest': 90.00241}, 'status': {'l1': '+', 'l2': 'n'}, 'seasonal': {'12': 0.997973, '3': 1.000953, '6': 1.002024, '9': 0.999045}, 'qorder': ['3', '6', '9', '12']}

>>> #构建含季节项的二次增长测试序列
>>> def createquadratic(q=-0.08,l=10,b=10,sigma=0.0001,startdate='2012-03-31',freq='Q-DEC',periods=40):
...     return pd.Series(pow(np.arange(1, periods + 1),2)*q+np.arange(1, periods + 1) * l + b + np.random.normal(0, sigma, periods), index=pd.date_range(start=startdate, freq=freq, periods=periods))
>>> series=createquadratic()*createseasonal()

>>> #构建移动平均严格状态更新模型
>>> model=vq.Models.ma_strict_latest_status_model(series,mawindow=4,minstep=8,seasonal=True)
>>> model.model()
{'method': 'l2', 'step': 40, 'params': {'l2_diff': -0.159866, 'l1_latest': 3.657406999999978, 'value_latest': 281.744325}, 'status': {'l1': '+', 'l2': '-'}, 'seasonal': {'12': 0.998906, '3': 1.001805, '6': 1.00287, '9': 0.999837}, 'qorder': ['3', '6', '9', '12']}
>>> #默认conservative参数为False,若1阶差分状态和2阶差分状态不同,曲线方向将在未来有限序列步出现反转

>>> #构建保守的移动平均严格状态更新模型
>>> model=vq.Models.ma_strict_latest_status_model(series,mawindow=4,minstep=8,seasonal=True,conservative=True)
>>> model.model()
{'method': 'l2smooth', 'step': 40, 'params': {'l1_latest': 3.657406999999978, 'value_latest': 281.744325, 'l2smooth_rate': 0.9745267582750817}, 'status': {'l1': '+', 'l2': '-'}, 'seasonal': {'12': 0.998906, '3': 1.001805, '6': 1.00287, '9': 0.999837}, 'qorder': ['3', '6', '9', '12'], 'smooth': True}
>>> #设置conservative参数为True,则在分析者对时间序列反转缺乏信心的情况下提供保守的估计方式,尽量使得未来推演在不出现反转的情况下实现1阶差分绝对值逐渐缩小
                            

移动平均概率状态更新模型MA Probable Latest Status Model

先将概率状态更新模型的时间序列样本数据进行移动平均处理,再构建严格状态更新模型。

该模型能够减少误差项对模型估计的影响。尤其在处理具有乘数季节项的时间序列数据时能够在一定程度上地消除季节项误差带来的异方差影响,并且能够通过统计方法更敏感地识别相邻且相似的样本。

模型参数说明

参数名称 参数说明 格式规范 必填/默认值
series 时间序列样本数据。 pandas.Series类型。序列索引类型应该为带有标准freq的时间索引。 必填
mawindow 移动平均窗口长度 int类型 必填
minstep 若样本某阶段差分序列连续超过minstep步均为正或为负,则连续同方向的差分序列样本的状态为该方向。 int类型 必填
significance 模型按显著性水平significance分析子序列1阶和2阶差分方向 (0,0.5)区间内的float类型 必填
seasonal 是否将时间序列样本数据分离季节项。 boolean类型 False
anneal 按时间序列时间索引大小分配的计算权重。索引大小相邻两样本间,索引较小者权重是较大者权重的anneal倍。该权重应用于差分序列方向假设检验和模型参数估计。若不设置,则所有样本权重相同。 float类型 None
conservative 是否采用保守估计方式。若采用保守估计方式,则在序列1阶差分和2阶差分方向状态不一致时,为尽量保持模型一阶差分在未来推演中不出现方向反转,而尝试使用一阶差分衰减率而非二阶差分来进行一阶差分未来推演。 boolean类型 False

模型估计结果

项目名称 项目说明 项目内容 必要输出/条件输出
method 模型推演方法 random:时间序列为随机序列,按最新状态序列均值推演未来序列;l1:时间序列具有1阶差分项,按最新状态序列1阶差分均值推演未来序列;l2:时间序列具有2阶差分项,按最新状态序列2阶差分均值推演未来序列;l2smooth:在设置保守估计的情况下出现,时间序列具有2阶差分项但1阶2阶方向不一致,按最新状态序列1阶差分衰减率推演未来序列。 必要输出
step 最新状态序列步数 —— 必要输出
params 参数估计 value_mean:最新状态序列均值,method为random时输出;l1_diff:最新状态序列1阶差分均值,method为l1时输出;l2_diff:最新状态序列2阶差分均值,method为l2时输出;l2smooth_rate:最新状态序列1差分变化率均值,method为l2smooth时输出;value_latest:时间序列最新数据;l1_latest:1阶差分最新数据。 必要输出
status 最新状态序列状态 l1:1阶差分序列状态;l2:2阶差分序列状态;+:方向为正;-:方向为负;n:方向非确定。 必要输出
seasonal 季节项 时间序列的季节乘数 在模型构建参数seasonal设置为True时输出
qorder 季节项的先后顺序 —— 在模型构建参数seasonal设置为True时输出

使用示例

>>> #构建含季节项的线性增长测试序列
>>> import numpy as np
>>> import pandas as pd
>>> def createlinear(l=2,b=10,sigma=0.0001,startdate='2012-03-31',freq='Q-DEC',periods=40):
...     return pd.Series(np.arange(1,periods+1)*l+b+np.random.normal(0,sigma,periods),index=pd.date_range(start=startdate,freq=freq,periods=periods))
>>> def createseasonal(seasonal=[1.001,1.002,0.999,0.998],startdate='2012-03-31',freq='Q-DEC',periods=40):
...     return pd.Series(np.tile(seasonal,int(np.ceil(periods/len(seasonal))))[:periods], index=pd.date_range(start=startdate, freq=freq, periods=periods))
>>> series=createlinear()*createseasonal()

>>> #构建设置季节项的移动平均概率状态更新模型
>>> model=vq.Models.ma_probable_latest_status_model(series,mawindow=4,minstep=8,significance=0.3,seasonal=True)
>>> #获取建模结果
>>> model.model()
{'method': 'l1', 'step': 41, 'params': {'l1_diff': 2.000006, 'value_latest': 90.002236}, 'status': {'l1': '+', 'l2': 'n'}, 'seasonal': {'12': 0.997975, '3': 1.000952, '6': 1.002024, '9': 0.999045}, 'qorder': ['3', '6', '9', '12']}

>>> #构建含季节项的二次增长测试序列
>>> def createquadratic(q=-0.08,l=10,b=10,sigma=0.0001,startdate='2012-03-31',freq='Q-DEC',periods=40):
...     return pd.Series(pow(np.arange(1, periods + 1),2)*q+np.arange(1, periods + 1) * l + b + np.random.normal(0, sigma, periods), index=pd.date_range(start=startdate, freq=freq, periods=periods))
>>> series=createquadratic()*createseasonal()

>>> #构建保守的移动平均概率状态更新模型
>>> model=vq.Models.ma_probable_latest_status_model(series,mawindow=4,minstep=8,significance=0.3,seasonal=True,conservative=True)
>>> model.model()
{'method': 'l2smooth', 'step': 41, 'params': {'l1_latest': 3.657123000000013, 'value_latest': 281.744139, 'l2smooth_rate': 0.9745239619673073}, 'status': {'l1': '+', 'l2': '-'}, 'seasonal': {'12': 0.998906, '3': 1.001805, '6': 1.002871, '9': 0.999837}, 'qorder': ['3', '6', '9', '12'], 'smooth': True}
>>> #设置conservative参数为True,则在分析者对时间序列反转缺乏信心的情况下提供保守的估计方式,尽量使得未来推演在不出现反转的情况下实现1阶差分绝对值逐渐缩小
                            

移动平均长期状态模型MA Long Range Status Model

先将长期状态模型的时间序列样本数据进行移动平均处理,再构建长期状态模型。

长期状态模型适合分析时间序列长期趋势,但对近期变化反应较为迟钝。

模型参数说明

参数名称 参数说明 格式规范 必填/默认值
series 时间序列样本数据。 pandas.Series类型。序列索引类型应该为带有标准freq的时间索引。 必填
mawindow 移动平均窗口长度 int类型 必填
significance 模型按显著性水平significance分析子序列1阶和2阶差分方向 (0,0.5)区间内的float类型 必填
seasonal 是否将时间序列样本数据分离季节项。 boolean类型 False
anneal 按时间序列时间索引大小分配的计算权重。索引大小相邻两样本间,索引较小者权重是较大者权重的anneal倍。该权重应用于差分序列方向假设检验和模型参数估计。若不设置,则所有样本权重相同。 float类型 None
conservative 是否采用保守估计方式。若采用保守估计方式,则在序列1阶差分和2阶差分方向状态不一致时,为尽量保持模型一阶差分在未来推演中不出现方向反转,而尝试使用一阶差分衰减率而非二阶差分来进行一阶差分未来推演。 boolean类型 False

模型估计结果

项目名称 项目说明 项目内容 必要输出/条件输出
method 模型推演方法 random:时间序列为随机序列,按最新状态序列均值推演未来序列;l1:时间序列具有1阶差分项,按最新状态序列1阶差分均值推演未来序列;l2:时间序列具有2阶差分项,按最新状态序列2阶差分均值推演未来序列;l2smooth:在设置保守估计的情况下出现,时间序列具有2阶差分项但1阶2阶方向不一致,按最新状态序列1阶差分衰减率推演未来序列。 必要输出
step 最新状态序列步数 —— 必要输出
params 参数估计 value_mean:最新状态序列均值,method为random时输出;l1_diff:最新状态序列1阶差分均值,method为l1时输出;l2_diff:最新状态序列2阶差分均值,method为l2时输出;l2smooth_rate:最新状态序列1差分变化率均值,method为l2smooth时输出;value_latest:时间序列最新数据;l1_latest:1阶差分最新数据。 必要输出
status 最新状态序列状态 l1:1阶差分序列状态;l2:2阶差分序列状态;+:方向为正;-:方向为负;n:方向非确定。 必要输出
seasonal 季节项 时间序列的季节乘数 在模型构建参数seasonal设置为True时输出
qorder 季节项的先后顺序 —— 在模型构建参数seasonal设置为True时输出

使用示例

>>> #构建含季节项的线性增长测试序列
>>> import numpy as np
>>> import pandas as pd
>>> def createlinear(l=2,b=10,sigma=0.0001,startdate='2012-03-31',freq='Q-DEC',periods=40):
...     return pd.Series(np.arange(1,periods+1)*l+b+np.random.normal(0,sigma,periods),index=pd.date_range(start=startdate,freq=freq,periods=periods))
>>> def createseasonal(seasonal=[1.001,1.002,0.999,0.998],startdate='2012-03-31',freq='Q-DEC',periods=40):
...     return pd.Series(np.tile(seasonal,int(np.ceil(periods/len(seasonal))))[:periods], index=pd.date_range(start=startdate, freq=freq, periods=periods))
>>> series=createlinear()*createseasonal()

>>> #构建设置季节项的移动平均长期状态模型
>>> model=model=vq.Models.ma_long_range_status_model(series,mawindow=4,significance=0.3,seasonal=True)
>>> #获取建模结果
>>> model.model()
{'method': 'l1', 'step': 40, 'params': {'l1_diff': 2.0, 'value_latest': 90.002131}, 'status': {'l1': '+', 'l2': 'n'}, 'seasonal': {'12': 0.997975, '3': 1.000953, '6': 1.002024, '9': 0.999043}, 'qorder': ['3', '6', '9', '12']}

>>> #构建含季节项的二次增长测试序列
>>> def createquadratic(q=-0.08,l=10,b=10,sigma=0.0001,startdate='2012-03-31',freq='Q-DEC',periods=40):
...     return pd.Series(pow(np.arange(1, periods + 1),2)*q+np.arange(1, periods + 1) * l + b + np.random.normal(0, sigma, periods), index=pd.date_range(start=startdate, freq=freq, periods=periods))
>>> series=createquadratic()*createseasonal()

>>> #构建保守的移动平均长期状态模型
>>> model=vq.Models.ma_long_range_status_model(series,mawindow=4,significance=0.3,seasonal=True,conservative=True)
>>> model.model()
{'method': 'l2smooth', 'step': 40, 'params': {'l1_latest': 3.6572810000000118, 'value_latest': 281.744331, 'l2smooth_rate': 0.9745257669178147}, 'status': {'l1': '+', 'l2': '-'}, 'seasonal': {'12': 0.998906, '3': 1.001805, '6': 1.002871, '9': 0.999837}, 'qorder': ['3', '6', '9', '12'], 'smooth': True}
>>> #设置conservative参数为True,则在分析者对时间序列反转缺乏信心的情况下提供保守的估计方式,尽量使得未来推演在不出现反转的情况下实现1阶差分绝对值逐渐缩小
                            

序列形态模型Series Shape Model

序列形态模型按时间序列样本1-3阶差分方向将序列形态识别区分为random、linear、quadratic、cubic、exponential、logistic等类别,再按具体形态类别进行参数估计。参数估计将时间变量t在未来推演序列的第1序列步的值设为1,亦即时间变量t在样本数据序列最后序列步的值设为0。

该模型更大程度地利用统计方法对时间序列趋势项进行参数估计,但是无法识别时间序列结构性变化,分析者可先结合其他模型进行时间序列结构分解再使用该方法建模。

模型参数说明

参数名称 参数说明 格式规范 必填/默认值
series 时间序列样本数据。 pandas.Series类型。序列索引类型应该为带有标准freq的时间索引。 必填
significance 显著性水平。模型按显著性水平significance进行假设检验。 (0,0.5)区间内的float类型 必填
seasonal 是否将时间序列样本数据分离季节项。 boolean类型 False
conservative 是否采用保守估计方式。若采用保守估计方式则将形态分为random、linear、quadratic、cubic、exponential、logistic等6个类别。若不采用保守估计方式则将形态分为random、linear、quadratic、cubic等4个类别。 boolean类型 False

模型估计结果

项目名称 项目说明 项目内容 必要输出/条件输出
method 模型推演方法 random:使用只有常数项的曲线方程拟合时间序列;linear:使用具有时间变量t的1次项和常数项的曲线方程拟合时间序列;quadratic:使用具有时间变量t的1次项、2次项和常数项的曲线方程拟合时间序列;cubic:使用具有时间变量t的1次项、2次项、3次项和常数项的曲线方程拟合时间序列;exponential:使用t的指数项、指数项线性乘数和常数项拟合时间序列;logistic:使用时间序列数据的2次项、1次项和常数项拟合差分序列 必要输出
status 序列1-3阶差分状态 列表1-3项分别为1-3阶差分状态。+:方向为正;-:方向为负;n:方向非确定。 必要输出
params 参数估计值 constant:曲线方程常数项参数;linear:曲线方程时间变量t的1次项参数或指数项线性乘数;quadratic:曲线方程时间变量t的2次项参数;cubic:曲线方程时间变量t的3次项参数;powerbase:指数项基数;yq:差分因变量的样本二次项参数;yl:差分因变量的样本一次项参数;yb:差分因变量的常数项参数;vl:逻辑斯蒂样本序列的最新数据。 必要输出
sigma 标准差估计值 —— 必要输出
r2 判定系数 —— 必要输出

使用示例

>>> #构建随机测试序列
>>> import numpy as np
>>> import pandas as pd
>>> def createrandom(b=10,sigma=0.0001,startdate='2012-03-31',freq='Q-DEC',periods=40):
...     return pd.Series(b+np.random.normal(0,sigma,periods),index=pd.date_range(start=startdate,freq=freq,periods=periods))
>>> series=createrandom()

>>> #构建序列形态模型
>>> model=vq.Models.series_shape_model(series=series,significance=0.3)
>>> #获取建模结果
>>> model.model()
{'params': {'constant': 10.00001}, 'sigma': 9.5e-05, 'method': 'random', 'status': ['n', 'n', 'n']}

>>> #构建线性增长测试序列
>>> def createlinear(l=2,b=10,sigma=0.0001,startdate='2012-03-31',freq='Q-DEC',periods=40):
...     return pd.Series(np.arange(1,periods+1)*l+b+np.random.normal(0,sigma,periods),index=pd.date_range(start=startdate,freq=freq,periods=periods))
>>> series=createlinear()

>>> #构建序列形态模型
>>> model=vq.Models.series_shape_model(series=series,significance=0.3)
>>> #获取建模结果
>>> model.model()
{'params': {'linear': 2.0, 'constant': 90.000008}, 'sigma': 0.000106, 'r2': 1.0, 'method': 'linear', 'status': ['+', 'n', 'n']}

>>> #构建二次增长测试序列
>>> def createquadratic(q=-0.08,l=10,b=10,sigma=0.0001,startdate='2012-03-31',freq='Q-DEC',periods=40):
...     return pd.Series(pow(np.arange(1, periods + 1),2)*q+np.arange(1, periods + 1) * l + b + np.random.normal(0, sigma, periods), index=pd.date_range(start=startdate, freq=freq, periods=periods))
>>> series=createquadratic()

>>> #构建序列形态模型
>>> model=vq.Models.series_shape_model(series=series,significance=0.3)
>>> #获取建模结果
>>> model.model()
{'params': {'quadratic': -0.08, 'linear': 3.600005, 'constant': 282.000055}, 'sigma': 0.000109, 'r2': 1.0, 'method': 'quadratic', 'status': ['+', '-', 'n']}

>>> #构建三次增长测试序列
>>> def createcubic(c=1,q=-2,l=2,b=10,sigma=0.0001,startdate='2012-03-31',freq='Q-DEC',periods=40):
...     return pd.Series(pow(np.arange(1, periods + 1),3)*c+pow(np.arange(1, periods + 1),2)*q+np.arange(1, periods + 1) * l + b + np.random.normal(0, sigma, periods), index=pd.date_range(start=startdate, freq=freq, periods=periods))
>>> series=createcubic()

>>> #构建序列形态模型
>>> model=vq.Models.series_shape_model(series=series,significance=0.3)
>>> #获取建模结果
>>> model.model()
{'params': {'cubic': 1.0, 'quadratic': 118.0, 'linear': 4641.999996, 'constant': 60890.000047}, 'sigma': 9.3e-05, 'r2': 1.0, 'method': 'cubic', 'status': ['+', '+', '+']}

>>> #构建指数增长测试序列
>>> def createexponential(l=-6,p=0.9,b=10,sigma=0.0001,startdate='2012-03-31',freq='Q-DEC',periods=40):
...     return pd.Series(pow(p,np.arange(1, periods + 1))*l + b + np.random.normal(0, sigma, periods), index=pd.date_range(start=startdate, freq=freq, periods=periods))
>>> series=createexponential()

>>> #构建序列形态模型
>>> model=vq.Models.series_shape_model(series=series,significance=0.3,conservative=True)
>>> #获取建模结果
>>> model.model()
{'params': {'powerbase': 0.900004, 'linear': -0.088699, 'constant': 10.00004}, 'sigma': 8.7e-05, 'r2': 1.0, 'method': 'exponential', 'status': ['+', '-', '+']}

>>> #构建逻辑斯蒂增长测试序列
>>> def createlogistic(K=20,a=10,g=0.1,b=10,sigma=0.0001,startdate='2012-03-31',freq='Q-DEC',periods=40):
...     return pd.Series(K/(1+a*np.exp(-g*np.arange(1, periods + 1))) + b + np.random.normal(0, sigma, periods), index=pd.date_range(start=startdate, freq=freq, periods=periods))
>>> series=createlogistic()

>>> #构建序列形态模型
>>> model=vq.Models.series_shape_model(series=series,significance=0.3,conservative=True)
>>> #获取建模结果
>>> model.model()
{'params': {'yq': -0.005048, 'yl': 0.200283, 'yb': -1.486114, 'vl': 26.903902}, 'sigma': 0.001704, 'r2': 0.999692, 'method': 'logistic', 'status': ['+', 'n', '-']}
                            

移动平均严格更新序列形态模型Ma Strict Latest Status Shape Model

移动平均严格更新序列形态模型先使用移动平均严格状态更新模型进行时间序列趋势结构变化识别,再将当前趋势状态时间序列按序列形态模型建模。

该模型能够结合趋势结构变化识别算法进行预处理,并且结合统计方法对时间序列趋势项进行参数估计。

模型参数说明

参数名称 参数说明 格式规范 必填/默认值
series 时间序列样本数据。 pandas.Series类型。序列索引类型应该为带有标准freq的时间索引。 必填
mawindow 移动平均窗口长度 int类型 必填
minstep 若样本某阶段差分序列连续超过minstep步均为正或为负,则连续同方向的差分序列样本的状态为该方向。 int类型 必填
significance 显著性水平。模型按显著性水平significance进行假设检验。 (0,0.5)区间内的float类型 必填
seasonal 是否将时间序列样本数据分离季节项。 boolean类型 False
conservative 是否采用保守估计方式。若采用保守估计方式则将形态分为random、linear、quadratic、cubic、exponential、logistic等6个类别。若不采用保守估计方式则将形态分为random、linear、quadratic、cubic等4个类别。 boolean类型 False

模型估计结果

项目名称 项目说明 项目内容 必要输出/条件输出
method 模型推演方法 random:使用只有常数项的曲线方程拟合时间序列;linear:使用具有时间变量t的1次项和常数项的曲线方程拟合时间序列;quadratic:使用具有时间变量t的1次项、2次项和常数项的曲线方程拟合时间序列;cubic:使用具有时间变量t的1次项、2次项、3次项和常数项的曲线方程拟合时间序列;exponential:使用t的指数项、指数项线性乘数和常数项拟合时间序列;logistic:使用时间序列数据的2次项、1次项和常数项拟合差分序列 必要输出
status 序列1-3阶差分状态 列表1-3项分别为1-3阶差分状态。+:方向为正;-:方向为负;n:方向非确定。 必要输出
params 参数估计值 constant:曲线方程常数项参数;linear:曲线方程时间变量t的1次项参数或指数项线性乘数;quadratic:曲线方程时间变量t的2次项参数;cubic:曲线方程时间变量t的3次项参数;powerbase:指数项基数;yq:差分因变量的样本二次项参数;yl:差分因变量的样本一次项参数;yb:差分因变量的常数项参数;vl:逻辑斯蒂样本序列的最新数据。 必要输出
sigma 标准差估计值 —— 必要输出
r2 判定系数 —— 必要输出

使用示例

>>> #构建含季节项的线性增长测试序列
>>> import numpy as np
>>> import pandas as pd
>>> def createlinear(l=2,b=10,sigma=0.0001,startdate='2012-03-31',freq='Q-DEC',periods=40):
...     return pd.Series(np.arange(1,periods+1)*l+b+np.random.normal(0,sigma,periods),index=pd.date_range(start=startdate,freq=freq,periods=periods))
>>> def createseasonal(seasonal=[1.001,1.002,0.999,0.998],startdate='2012-03-31',freq='Q-DEC',periods=40):
...     return pd.Series(np.tile(seasonal,int(np.ceil(periods/len(seasonal))))[:periods], index=pd.date_range(start=startdate, freq=freq, periods=periods))
>>> series=createlinear()*createseasonal()

>>> #构建设置季节项的移动平均严格更新序列形态模型
>>> model=vq.Models.ma_strict_latest_status_shape_model(series,mawindow=4,minstep=8,significance=0.3,seasonal=True)
>>> #获取建模结果
>>> model.model()
{'params': {'linear': 2.000002, 'constant': 90.000027}, 'sigma': 0.002126, 'r2': 1.0, 'method': 'linear', 'status': ['+', 'n', 'n'], 'step': 39, 'seasonal': {'12': 0.997976, '3': 1.000953, '6': 1.002022, '9': 0.999045}, 'qorder': ['3', '6', '9', '12']}
                            

移动平均概率更新序列形态模型Ma Probable Latest Status Shape Model

移动平均概率更新序列形态模型先使用移动平均概率状态更新模型进行时间序列趋势结构变化识别,再将当前趋势状态时间序列按序列形态模型建模。

该模型能够结合趋势结构变化识别算法进行预处理,并且结合统计方法对时间序列趋势项进行参数估计。

模型参数说明

参数名称 参数说明 格式规范 必填/默认值
series 时间序列样本数据。 pandas.Series类型。序列索引类型应该为带有标准freq的时间索引。 必填
mawindow 移动平均窗口长度 int类型 必填
minstep 若样本某阶段差分序列连续超过minstep步均为正或为负,则连续同方向的差分序列样本的状态为该方向。 int类型 必填
significance 显著性水平。模型按显著性水平significance进行假设检验。 (0,0.5)区间内的float类型 必填
seasonal 是否将时间序列样本数据分离季节项。 boolean类型 False
conservative 是否采用保守估计方式。若采用保守估计方式则将形态分为random、linear、quadratic、cubic、exponential、logistic等6个类别。若不采用保守估计方式则将形态分为random、linear、quadratic、cubic等4个类别。 boolean类型 False

模型估计结果

项目名称 项目说明 项目内容 必要输出/条件输出
method 模型推演方法 random:使用只有常数项的曲线方程拟合时间序列;linear:使用具有时间变量t的1次项和常数项的曲线方程拟合时间序列;quadratic:使用具有时间变量t的1次项、2次项和常数项的曲线方程拟合时间序列;cubic:使用具有时间变量t的1次项、2次项、3次项和常数项的曲线方程拟合时间序列;exponential:使用t的指数项、指数项线性乘数和常数项拟合时间序列;logistic:使用时间序列数据的2次项、1次项和常数项拟合差分序列 必要输出
status 序列1-3阶差分状态 列表1-3项分别为1-3阶差分状态。+:方向为正;-:方向为负;n:方向非确定。 必要输出
params 参数估计值 constant:曲线方程常数项参数;linear:曲线方程时间变量t的1次项参数或指数项线性乘数;quadratic:曲线方程时间变量t的2次项参数;cubic:曲线方程时间变量t的3次项参数;powerbase:指数项基数;yq:差分因变量的样本二次项参数;yl:差分因变量的样本一次项参数;yb:差分因变量的常数项参数;vl:逻辑斯蒂样本序列的最新数据。 必要输出
sigma 标准差估计值 —— 必要输出
r2 判定系数 —— 必要输出

使用示例

>>> #构建含季节项的线性增长测试序列
>>> import numpy as np
>>> import pandas as pd
>>> def createlinear(l=2,b=10,sigma=0.0001,startdate='2012-03-31',freq='Q-DEC',periods=40):
...     return pd.Series(np.arange(1,periods+1)*l+b+np.random.normal(0,sigma,periods),index=pd.date_range(start=startdate,freq=freq,periods=periods))
>>> def createseasonal(seasonal=[1.001,1.002,0.999,0.998],startdate='2012-03-31',freq='Q-DEC',periods=40):
...     return pd.Series(np.tile(seasonal,int(np.ceil(periods/len(seasonal))))[:periods], index=pd.date_range(start=startdate, freq=freq, periods=periods))
>>> series=createlinear()*createseasonal()

>>> #构建设置季节项的移动平均概率更新序列形态模型
>>> model=vq.Models.ma_probable_latest_status_shape_model(series,mawindow=4,minstep=8,significance=0.3,seasonal=True)
>>> #获取建模结果
>>> model.model()
{'params': {'linear': 1.999999, 'constant': 89.999998}, 'sigma': 0.0021, 'r2': 1.0, 'method': 'linear', 'status': ['+', 'n', 'n'], 'step': 41, 'seasonal': {'12': 0.997976, '3': 1.000953, '6': 1.002022, '9': 0.999045}, 'qorder': ['3', '6', '9', '12']}
                            

时间序列结构化分析框架

valuequant提供5类时间序列分析框架,帮助用户更便捷分析不同类型的时间序列数据。

1.时间序列分析框架Models

2.时间序列集分析框架ModelSets

3.证券时间序列分析框架StockModels

4.证券时间序列集分析框架StockModelSets

5.证券时间序列集分析模板框架StockFrameSets

时间序列分析框架Models

Models框架可实现自定义时间序列数据分析,提供时间序列建模、拟合、推演、现值计算、内部收益率计算和兑现率计算功能。

框架数据参数

参数名称 参数说明 格式规范 必填/默认值
series 时间序列样本数据。 pandas.Series类型。序列索引类型应该为带有标准freq的时间索引。 必填

框架功能

功能名称 功能说明 功能参数
model 时间序列结构化建模 ——
data 查询时间序列数据 ——
fit 时间序列结构化模型样本内拟合 ——
forecast 时间序列结构化模型样本外推演 t:样本外未来序列推演步数
pv 结构化模型的现值计算,折现日为第1个收益日。 r:贴现率,模型seasonal参数为True时该值为年贴现率,模型seasonal参数为False时该值为步长贴现率
irr 结构化模型的交易日价格内部收益率计算。若内部收益率在[0.005,1]区间存在唯一解则返回内部收益率数值,若内部收益率低于0.005则返回'under',高于1则返回'over',存在多解则返回'multi'。 price:交易日价格;tradedate:交易日日期,应为格式'%Y-%m-%d'的字符串
batchirr 结构化模型的交易日价格序列内部收益率计算 priceseries:交易日价格序列,数据应为pandas.Series类型,序列索引类型应为带有标准freq的时间索引
achieverate 结构化模型的交易日价格兑现率计算 price:交易日价格;tradedate:交易日日期,应为格式'%Y-%m-%d'的字符串;r:贴现率,模型seasonal参数为True时该值为年贴现率,模型seasonal参数为False时该值为步长贴现率
batchachieverate 结构化模型的交易日价格序列兑现率计算 priceseries:交易日价格序列,数据应为pandas.Series类型,序列索引类型应为带有标准freq的时间索引;r:贴现率,模型seasonal参数为True时该值为年贴现率,模型seasonal参数为False时该值为步长贴现率

使用示例

>>> #构建测试序列
>>> import numpy as np
>>> import pandas as pd
>>> def createlinear(l=2,b=10,sigma=0.0001,startdate='2012-03-31',freq='Q-DEC',periods=40):
...     return pd.Series(np.arange(1,periods+1)*l+b+np.random.normal(0,sigma,periods),index=pd.date_range(start=startdate,freq=freq,periods=periods))
>>> def createseasonal(seasonal=[1.01,1.02,0.99,0.98],startdate='2012-03-31',freq='Q-DEC',periods=40):
...     return pd.Series(np.tile(seasonal,int(np.ceil(periods/len(seasonal))))[:periods], index=pd.date_range(start=startdate, freq=freq, periods=periods))
>>> series=createlinear()*createseasonal()

>>> #构建模型
>>> model=vq.Models.ma_strict_latest_status_model(series,mawindow=4,minstep=8,seasonal=True)
>>> #获取建模结果
>>> model.model()
{'method': 'l1', 'step': 40, 'params': {'l1_diff': 1.999994, 'value_latest': 90.02255}, 'status': {'l1': '+', 'l2': 'n'}, 'seasonal': {'12': 0.979754, '3': 1.009525, '6': 1.020241, '9': 0.990442}, 'qorder': ['3', '6', '9', '12']}

>>> #查询样本数据
>>> model.data()
2012-03-31    12.119795
2012-06-30    14.280024
2012-09-30    15.839959
2012-12-31    17.639740
......
2021-03-31    84.839858
2021-06-30    87.720110
2021-09-30    87.120009
2021-12-31    88.199922
Freq: Q-DEC, dtype: float64

>>> #模型样本内拟合
>>> model.fit()
2012-03-31          NaN
2012-06-30    14.405588
2012-09-30    16.124414
2012-12-31    17.478765
......
2021-03-31    83.144534
2021-06-30    88.597577
2021-09-30    88.862559
2021-12-31    87.315679
Freq: Q-DEC, dtype: float64

>>> #模型样本外推演
>>> model.forecast(t=20)
2022-03-31     92.899059
2022-06-30     95.925648
2022-09-30     95.104749
2022-12-31     96.037962
......
2026-03-31    125.203762
2026-06-30    128.573262
2026-09-30    126.798798
2026-12-31    127.389996
Freq: Q-DEC, dtype: float64

>>> #结构化模型的的现值计算
>>> model.pv(r=0.1)
7432.00662

>>> #结构化模型的交易日价格内部收益率计算
>>> model.irr(price=7432.00662,tradedate='2022-03-31')
0.1

>>> #构建测试交易日价格序列
>>> priceseries=pd.Series([500,1000,5000,10000,50000],index=pd.date_range(start='2022-01-01',periods=5))
>>> #结构化模型的交易日价格序列内部收益率计算
>>> model.batchirr(priceseries=priceseries)
                IRRs errors
2022-01-01       NaN   over
2022-01-02  0.520891   None
2022-01-03  0.130965   None
2022-01-04  0.080250   None
2022-01-05  0.029575   None

>>> #结构化模型的交易日价格兑现率计算
>>> model.achieverate(price=7432.00662,tradedate='2022-03-31',r=0.1)
1.0

>>> #结构化模型的交易日价格序列兑现率计算
>>> model.batchachieverate(priceseries=priceseries,r=0.1)
2022-01-01    14.517870
2022-01-02     7.260857
2022-01-03     1.452556
2022-01-04     0.726470
2022-01-05     0.145333
Freq: D, dtype: float64
                            

时间序列集分析框架ModelSets

ModelSets框架可实现自定义时间序列集数据分析,提供时间序列集各维度时间序列建模、拟合、推演、现值计算、内部收益率计算和兑现率计算功能。ModelSets框架可定义自驱动(auto),衍生(derive),复合(compo),配额(quota)维度,用以描述时间序列之间关联关系。

ModelSets的维度及关联

维度类别 类别说明 结构示例
自驱动维度auto 自驱动维度时间序列使用该时间序列本身作为样本数据构建时间序列模型 {'mode':'auto'}
衍生维度derive 衍生维度时间序列使用该时间序列和基准维度时间序列的币值作为样本数据构建时间序列模型。基准维度时间序列应该包含在时间序列集内。 {'mode':'derive','base':'基准维度的名称'}
复合维度compo 复合维度时间序列为其加维度列表的所有时间序列之和与其减维度列表的所有时间序列之和的差。所有加维度时间序列和所有减维度时间序列应该包含在时间序列集内。 {'mode':'compo','plus':['加维度1的名称','加维度2的名称'....],'minus':[减维度1的名称','减维度2的名称'....]}
配额维度quota 配额维度时间序列为其配额与基准维度时间序列的乘数。基准维度时间序列应该包含在时间序列集内。 {'mode':'quota','quota':0.5,'base':'基准维度的名称'}

框架数据参数

参数名称 参数说明 格式规范 必填/默认值
df 时间序列集所有维度的数据表。 pandas.DataFrame类型。序列行索引类型应为带有标准freq的时间索引。序列的列索引应为时间序列集各维度名称。 必填
structure 时间序列集结构。 dict类型。dict的键应为时间序列集维度名称,值应该为时间序列集维度结构。示例:{'维度1':{'mode':'auto'},'维度2':{'mode':'derive','base':'维度1'}} 必填

框架功能

功能名称 功能说明 功能参数
modelset 时间序列集结构化建模 ——
data 查询时间序列集的维度样本数据 dimension:维度名称
fit 结构化模型集维度模型样本内拟合 dimension:维度名称
forecast 结构化模型集维度模型样本外推演 dimension:维度名称;t:样本外未来序列推演步数
pv 结构化模型集维度模型的现值计算,折现日为第1个收益日。 dimension:维度名称;r:贴现率,模型seasonal参数为True时该值为年贴现率,模型seasonal参数为False时该值为步长贴现率
irr 结构化模型集维度模型的交易日价格内部收益率计算。若内部收益率在[0.005,1]区间存在唯一解则返回内部收益率数值,若内部收益率低于0.005则返回'under',高于1则返回'over',存在多解则返回'multi'。 dimension:维度名称;price:交易日价格;tradedate:交易日日期,应为格式'%Y-%m-%d'的字符串
batchirr 结构化模型集维度模型的交易日价格序列内部收益率计算 dimension:维度名称;priceseries:交易日价格序列,数据应为pandas.Series类型,序列索引类型应为带有标准freq的时间索引
achieverate 结构化模型集维度模型的交易日价格兑现率计算 dimension:维度名称;price:交易日价格;tradedate:交易日日期,应为格式'%Y-%m-%d'的字符串;r:贴现率,模型seasonal参数为True时该值为年贴现率,模型seasonal参数为False时该值为步长贴现率
batchachieverate 结构化模型集维度模型的交易日价格序列兑现率计算 dimension:维度名称;priceseries:交易日价格序列,数据应为pandas.Series类型,序列索引类型应为带有标准freq的时间索引;r:贴现率,模型seasonal参数为True时该值为年贴现率,模型seasonal参数为False时该值为步长贴现率

使用示例

>>> #构建测试时间序列集数据表和测试时间序列集结构
>>> import numpy as np
>>> import pandas as pd
>>> def createlinear(l=2,b=10,sigma=0.0001,startdate='2012-03-31',freq='Q-DEC',periods=40):
...     return pd.Series(np.arange(1,periods+1)*l+b+np.random.normal(0,sigma,periods),index=pd.date_range(start=startdate,freq=freq,periods=periods))
>>> df=pd.DataFrame()
>>> df['s1']=createlinear()
>>> df['s2']=df['s1']*createlinear(l=0.01, b=0.1, sigma=0.0001)
>>> df['s3']=createlinear(l=1, b=5)
>>> df['s4']=df['s1']-df['s3']
>>> df['s5']=0.5*df['s4']
>>> structure={
...     's1':{'mode':'auto'},
...     's2':{'mode':'derive','base':'s1'},
...     's3':{'mode':'auto'},
...     's4':{'mode': 'compo', 'plus': ['s1'], 'minus': ['s3']},
...     's5':{'mode': 'quota', 'quota':0.5 ,'base':'s4'}
... }

>>> #构建模型集
>>> modelset=vq.ModelSets.series_shape_modelset(df=df,structure=structure,significance=0.3)
>>> #获取建模结果
>>> modelset.modelset()
{'s1': {'mode': 'auto', 'model': {'params': {'linear': 1.999999, 'constant': 89.999985}, 'sigma': 0.0001, 'r2': 1.0, 'method': 'linear', 'status': ['+', 'n', 'n']}}, 's2': {'mode': 'derive', 'base': 's1', 'model': {'params': {'linear': 0.009999, 'constant': 0.499966}, 'sigma': 0.000104, 'r2': 0.999999, 'method': 'linear', 'status': ['+', 'n', 'n']}}, 's3': {'mode': 'auto', 'model': {'params': {'linear': 1.0, 'constant': 44.999949}, 'sigma': 0.000104, 'r2': 1.0, 'method': 'linear', 'status': ['+', 'n', 'n']}}, 's4': {'mode': 'compo', 'plus': ['s1'], 'minus': ['s3']}, 's5': {'mode': 'quota', 'quota': 0.5, 'base': 's4'}}

>>> #查询维度样本数据
>>> modelset.data('s1')
2012-03-31    12.000140
2012-06-30    13.999952
2012-09-30    15.999933
2012-12-31    18.000088
......
2021-03-31    83.999815
2021-06-30    85.999978
2021-09-30    88.000075
2021-12-31    89.999987
Freq: Q-DEC, Name: s1, dtype: float64

>>> #维度模型样本内拟合
>>> modelset.fit('s1')
2012-03-31    12.000024
2012-06-30    14.000023
2012-09-30    16.000022
2012-12-31    18.000021
......
2021-03-31    83.999988
2021-06-30    85.999987
2021-09-30    87.999986
2021-12-31    89.999985
Freq: Q-DEC, dtype: float64

>>> #维度模型样本外推演
>>> modelset.forecast('s1',t=20)
2022-03-31     91.999984
2022-06-30     93.999983
2022-09-30     95.999982
2022-12-31     97.999981
......
2026-03-31    123.999968
2026-06-30    125.999967
2026-09-30    127.999966
2026-12-31    129.999965
Freq: Q-DEC, dtype: float64

>>> #结构化模型集维度模型的现值计算
>>> modelset.pv('s1',r=0.025)
7051.997704

>>> #结构化模型集维度模型的交易日价格内部收益率计算
>>> modelset.irr('s1',price=7051.997704,tradedate='2022-03-31')
0.025

>>> #构建测试交易日价格序列
>>> priceseries=pd.Series([500,1000,5000,10000,50000],index=pd.date_range(start='2022-01-01',periods=5))
>>> #结构化模型集维度模型的交易日价格序列内部收益率计算
>>> modelset.batchirr('s1',priceseries=priceseries)
                IRRs errors
2022-01-01  0.204026   None
2022-01-02  0.110376   None
2022-01-03  0.031237   None
2022-01-04  0.019483   None
2022-01-05  0.007313   None

>>> #结构化模型集维度模型的交易日价格兑现率计算
>>> modelset.achieverate('s1',price=7051.997704,tradedate='2022-03-31',r=0.025)
1.0

>>> #结构化模型集维度模型的交易日价格序列兑现率计算
>>> modelset.batchachieverate('s1',priceseries=priceseries,r=0.025)
2022-01-01    13.763771
2022-01-02     6.883774
2022-01-03     1.377133
2022-01-04     0.688755
2022-01-05     0.137789
Freq: D, dtype: float64
                            

证券时间序列分析框架StockModels

StockModels框架可实现证券利润表维度单位股权复权数据时间序列分析,提供利润表单位股权复权数据时间序列建模、拟合、推演、现值计算、内部收益率计算和兑现率计算功能。

StockModels框架可查询的证券利润表维度

利润表类型 可查询维度
普通 营业收入,营业总收入其他,营业其他损益,营业外收入,营业外支出,利润总额其他,净利润其他,综合收益其他,营业成本,营业税金及附加,销售费用,管理费用,财务费用,营业其他费用,营业总收入,营业总成本,营业利润,利润总额,税后利润,净利润,综合收益总额
银行 利息收入,利息支出,手续费及佣金净收入,投资收益,营业收入其他,营业税金及附加,业务及管理费,减值损失等营业支出其他,营业外收入,营业外支出,利润总额其他,净利润其他,综合收益其他,利息净收入,营业收入,营业支出,营业利润,利润总额,税后利润,净利润,综合收益总额
证券 经纪业务手续费净收入,投资银行业务手续费净收入,资产管理业务手续费净收入,手续费及佣金净收入其他,投资收益,营业收入其他,营业税金及附加,业务及管理费,减值损失等营业支出其他,营业外收入,营业外支出,利润总额其他,净利润其他,综合收益其他,手续费及佣金净收入,营业收入,营业支出,营业利润,利润总额,税后利润,净利润,综合收益总额
保险 已赚保费,投资收益,营业收入其他,退保金,赔付支出净额,提取保险责任准备金净额,保单红利支出,手续费及佣金支出,营业税金及附加,业务及管理费,营业支出其他,营业外收入,营业外支出,利润总额其他,净利润其他,综合收益其他,营业收入,营业支出,营业利润,利润总额,税后利润,净利润,综合收益总额

框架数据参数

参数名称 参数说明 格式规范 必填/默认值
stockcode 证券代码 6位数字字符串。如'000001','000002' 必填
dimension 维度名称 证券利润表类型可查询的维度名称字符串。如'营业收入','营业成本' 必填
reportdate 时间序列截止的报告日 格式为'%Y-%m-%d'的日期字符串。如'2021-12-31',日期必须为季度的最后1天 必填
adjdate 复权基准日 格式为'%Y-%m-%d'的日期字符串,如'2021-11-08' 默认为None,按reportdate复权
ttm 是否分析ttm年度数据 格式boolean类型数据。若为True则使用ttm年度数据分析;若为False则使用单季数据分析。 默认为False

框架功能

功能名称 功能说明 功能参数
model 时间序列结构化建模 ——
incdata 查询证券利润表维度时间序列数据 ——
fit 时间序列结构化模型样本内拟合 ——
forecast 时间序列结构化模型样本外推演 t:样本外未来序列推演步数
pv 结构化模型的现值计算,折现日为第1个收益日。 r:贴现率,模型seasonal参数为True时该值为年贴现率,模型seasonal参数为False时该值为步长贴现率
irr 结构化模型的交易日价格内部收益率计算。若内部收益率在[0.005,1]区间存在唯一解则返回内部收益率数值,若内部收益率低于0.005则返回'under',高于1则返回'over',存在多解则返回'multi'。 price:交易日价格;tradedate:交易日日期,应为格式'%Y-%m-%d'的字符串
batchirr 结构化模型的交易日价格序列内部收益率计算 priceseries:交易日价格序列,数据应为pandas.Series类型,序列索引类型应为带有标准freq的时间索引
achieverate 结构化模型的交易日价格兑现率计算 price:交易日价格;tradedate:交易日日期,应为格式'%Y-%m-%d'的字符串;r:贴现率,模型seasonal参数为True时该值为年贴现率,模型seasonal参数为False时该值为步长贴现率
batchachieverate 结构化模型的交易日价格序列兑现率计算 priceseries:交易日价格序列,数据应为pandas.Series类型,序列索引类型应为带有标准freq的时间索引;r:贴现率,模型seasonal参数为True时该值为年贴现率,模型seasonal参数为False时该值为步长贴现率
irr_trade 结构化模型的实际交易日价格内部收益率计算。 pricemode:实际交易日价格模式,可填开市价'open'、收市价'close'、最高价'high'、最低价'low'、平均价格'weighted';tradedate:实际交易日日期,应为格式'%Y-%m-%d'的字符串
batchirr_trade 结构化模型的实际交易时期内部收益率计算 pricemode:实际交易日价格模式,可填开市价'open'、收市价'close'、最高价'high'、最低价'low'、平均价格'weighted';startdate:实际交易时期起始日期;enddate:实际交易时期结束日期;startdate和enddate均应为格式'%Y-%m-%d'的字符串
achieverate_trade 结构化模型的实际交易日价格兑现率计算 pricemode:实际交易日价格模式,可填开市价'open'、收市价'close'、最高价'high'、最低价'low'、平均价格'weighted';tradedate:实际交易日日期,应为格式'%Y-%m-%d'的字符串;r:贴现率,模型seasonal参数为True时该值为年贴现率,模型seasonal参数为False时该值为步长贴现率
batchachieverate_trade 结构化模型的实际交易时期兑现率计算 pricemode:实际交易日价格模式,可填开市价'open'、收市价'close'、最高价'high'、最低价'low'、平均价格'weighted';startdate:实际交易时期起始日期;enddate:实际交易时期结束日期;startdate和enddate均应为格式'%Y-%m-%d'的字符串;r:贴现率,模型seasonal参数为True时该值为年贴现率,模型seasonal参数为False时该值为步长贴现率

使用示例

>>> #构建模型
>>> model=vq.StockModels.ma_strict_latest_status_model(stockcode='600036',dimension='利息收入',reportdate='2021-09-30',mawindow=4,minstep=8,seasonal=True,conservative=True)
>>> #获取建模结果
>>> model.model()
{'method': 'l1', 'step': 24, 'params': {'l1_diff': 0.068282, 'value_latest': 3.261846}, 'status': {'l1': '+', 'l2': 'n'}, 'seasonal': {'12': 1.001776, '3': 0.98824, '6': 0.993877, '9': 1.00486}, 'qorder': ['12', '3', '6', '9']}

>>> #查询证券利润表维度时间序列数据
>>> model.incdata()
2005-03-31    0.156246
2005-06-30    0.000000
2005-09-30    0.000000
2005-12-31    0.380716
......
2020-12-31    2.964659
2021-03-31    3.054092
2021-06-30    3.103159
2021-09-30    3.277697
Length: 67, dtype: float64

>>> #模型样本内拟合
>>> model.fit()
2015-12-31    1.995791
2016-03-31    1.945666
2016-06-30    1.893261
2016-09-30    1.818240
......
2020-12-31    3.053510
2021-03-31    2.997274
2021-06-30    3.103256
2021-09-30    3.186854
Freq: Q-DEC, dtype: float64

>>> #模型样本外推演
>>> model.forecast(t=20)
2021-12-31    3.336042
2022-03-31    3.358445
2022-06-30    3.445465
2022-09-30    3.552154
......
2025-12-31    4.430495
2026-03-31    4.438109
2026-06-30    4.531288
2026-09-30    4.649976
Freq: Q-DEC, dtype: float64

>>> #现值计算
>>> model.pv(r=0.1)
260.950909

>>> #交易日价格内部收益率计算
>>> model.irr(price=260.950909,tradedate='2021-12-31')
0.1

>>> #构建测试交易日价格序列
>>> import pandas as pd
>>> import numpy as np
>>> priceseries=pd.Series([500,1000,5000,10000,50000],index=pd.date_range(start='2022-01-01',periods=5))
>>> #交易日价格序列内部收益率计算
>>> model.batchirr(priceseries=priceseries)
                IRRs errors
2022-01-01  0.063911   None
2022-01-02  0.041181   None
2022-01-03  0.016284   None
2022-01-04  0.011187   None
2022-01-05       NaN  under

>>> #交易日价格兑现率计算
>>> model.achieverate(price=260.950909,tradedate='2021-12-31',r=0.1)
1.0

>>> #交易日价格序列兑现率计算
>>> model.batchachieverate(priceseries=priceseries,r=0.1)
2022-01-01    0.522040
2022-01-02    0.261089
2022-01-03    0.052232
2022-01-04    0.026123
2022-01-05    0.005226
Freq: D, dtype: float64

>>> #实际交易日价格内部收益率计算
>>> model.irr_trade(pricemode='close',tradedate='2021-11-08')
0.377432

>>> #实际交易时期价格内部收益率计算
>>> model.batchirr_trade(pricemode='close',startdate='2021-10-08',enddate='2021-10-18')
                IRRs errors
2021-10-08  0.370287   None
2021-10-11  0.357606   None
2021-10-12  0.357323   None
2021-10-13  0.357985   None
2021-10-14  0.362560   None
2021-10-15  0.356793   None
2021-10-18  0.367036   None

>>> #实际交易日价格兑现率计算
>>> model.achieverate_trade(pricemode='close',tradedate='2021-11-08',r=0.1)
5.015884

>>> #实际交易日价格序列兑现率计算
>>> model.batchirr_trade(pricemode='close',startdate='2021-10-08',enddate='2021-10-18')
                IRRs errors
2021-10-08  0.370287   None
2021-10-11  0.357606   None
2021-10-12  0.357323   None
2021-10-13  0.357985   None
2021-10-14  0.362560   None
2021-10-15  0.356793   None
2021-10-18  0.367036   None

>>> #使用TTM年度数据建模
>>> model=vq.StockModels.ma_strict_latest_status_model(stockcode='600036',dimension='利息收入',reportdate='2021-09-30',mawindow=4,minstep=8,conservative=True,ttm=True)
>>> model.model()
{'method': 'l1', 'step': 15, 'params': {'l1_diff': 0.812402, 'value_latest': 12.399607}, 'status': {'l1': '+', 'l2': 'n'}}
>>> #设置参数ttm=True时,seasonal参数无意义
                            

证券时间序列集分析框架StockModelSets

StockModelSets框架可以实现证券利润表维度单位股权复权数据时间序列集分析,提供时间序列集各维度时间序列建模、拟合、推演、现值计算、内部收益率计算和兑现率计算功能。StockModelSets框架可定义自驱动(auto),衍生(derive),复合(compo),配额(quota)维度,用以描述时间序列之间关联关系。

StockModelSets框架可使用的证券利润表维度

利润表类型 可查询维度
普通 营业收入,营业总收入其他,营业其他损益,营业外收入,营业外支出,利润总额其他,净利润其他,综合收益其他,营业成本,营业税金及附加,销售费用,管理费用,财务费用,营业其他费用,营业总收入,营业总成本,营业利润,利润总额,税后利润,净利润,综合收益总额
银行 利息收入,利息支出,手续费及佣金净收入,投资收益,营业收入其他,营业税金及附加,业务及管理费,减值损失等营业支出其他,营业外收入,营业外支出,利润总额其他,净利润其他,综合收益其他,利息净收入,营业收入,营业支出,营业利润,利润总额,税后利润,净利润,综合收益总额
证券 经纪业务手续费净收入,投资银行业务手续费净收入,资产管理业务手续费净收入,手续费及佣金净收入其他,投资收益,营业收入其他,营业税金及附加,业务及管理费,减值损失等营业支出其他,营业外收入,营业外支出,利润总额其他,净利润其他,综合收益其他,手续费及佣金净收入,营业收入,营业支出,营业利润,利润总额,税后利润,净利润,综合收益总额
保险 已赚保费,投资收益,营业收入其他,退保金,赔付支出净额,提取保险责任准备金净额,保单红利支出,手续费及佣金支出,营业税金及附加,业务及管理费,营业支出其他,营业外收入,营业外支出,利润总额其他,净利润其他,综合收益其他,营业收入,营业支出,营业利润,利润总额,税后利润,净利润,综合收益总额

StockModelSets的维度及关联

维度类别 类别说明 结构示例
自驱动维度auto 自驱动维度时间序列使用该时间序列本身作为样本数据构建时间序列模型 {'mode':'auto'}
衍生维度derive 衍生维度时间序列使用该时间序列和基准维度时间序列的币值作为样本数据构建时间序列模型。基准维度时间序列应该包含在时间序列集内。 {'mode':'derive','base':'基准维度的名称'}
复合维度compo 复合维度时间序列为其加维度列表的所有时间序列之和与其减维度列表的所有时间序列之和的差。所有加维度时间序列和所有减维度时间序列应该包含在时间序列集内。 {'mode':'compo','plus':['加维度1的名称','加维度2的名称'....],'minus':[减维度1的名称','减维度2的名称'....]}
配额维度quota 配额维度时间序列为其配额与基准维度时间序列的乘数。基准维度时间序列应该包含在时间序列集内。 {'mode':'quota','quota':0.5,'base':'基准维度的名称'}

框架数据参数

参数名称 参数说明 格式规范 必填/默认值
stockcode 证券代码 6位数字字符串。如'000001','000002' 必填
structure 时间序列集结构 dict类型。dict的键应为时间序列集维度名称,值应该为时间序列集维度结构。示例:{'维度1':{'mode':'auto'},'维度2':{'mode':'derive','base':'维度1'}} 必填
reportdate 时间序列截止的报告日 格式为'%Y-%m-%d'的日期字符串。如'2021-12-31',日期必须为季度的最后1天 必填
adjdate 复权基准日 格式为'%Y-%m-%d'的日期字符串,如'2021-11-08' 默认为None,按reportdate复权
ttm 是否分析ttm年度数据 格式boolean类型数据。若为True则使用ttm年度数据分析;若为False则使用单季数据分析。 默认为False

框架功能

功能名称 功能说明 功能参数
modelset 时间序列集结构化建模 ——
data 查询时间序列集的维度样本数据 dimension:维度名称
fit 结构化模型集维度模型样本内拟合 dimension:维度名称
forecast 结构化模型集维度模型样本外推演 dimension:维度名称;t:样本外未来序列推演步数
pv 结构化模型集维度模型的现值计算,折现日为第1个收益日。 dimension:维度名称;r:贴现率,模型seasonal参数为True时该值为年贴现率,模型seasonal参数为False时该值为步长贴现率
irr 结构化模型集维度模型的交易日价格内部收益率计算。若内部收益率在[0.005,1]区间存在唯一解则返回内部收益率数值,若内部收益率低于0.005则返回'under',高于1则返回'over',存在多解则返回'multi'。 dimension:维度名称;price:交易日价格;tradedate:交易日日期,应为格式'%Y-%m-%d'的字符串
batchirr 结构化模型集维度模型的交易日价格序列内部收益率计算 dimension:维度名称;priceseries:交易日价格序列,数据应为pandas.Series类型,序列索引类型应为带有标准freq的时间索引
achieverate 结构化模型集维度模型的交易日价格兑现率计算 dimension:维度名称;price:交易日价格;tradedate:交易日日期,应为格式'%Y-%m-%d'的字符串;r:贴现率,模型seasonal参数为True时该值为年贴现率,模型seasonal参数为False时该值为步长贴现率
batchachieverate 结构化模型集维度模型的交易日价格序列兑现率计算 dimension:维度名称;priceseries:交易日价格序列,数据应为pandas.Series类型,序列索引类型应为带有标准freq的时间索引;r:贴现率,模型seasonal参数为True时该值为年贴现率,模型seasonal参数为False时该值为步长贴现率
irr_trade 结构化模型集维度模型的实际交易日价格内部收益率计算。 dimension:维度名称;pricemode:实际交易日价格模式,可填开市价'open'、收市价'close'、最高价'high'、最低价'low'、平均价格'weighted';tradedate:实际交易日日期,应为格式'%Y-%m-%d'的字符串
batchirr_trade 结构化模型集维度模型的实际交易时期内部收益率计算 dimension:维度名称;pricemode:实际交易日价格模式,可填开市价'open'、收市价'close'、最高价'high'、最低价'low'、平均价格'weighted';startdate:实际交易时期起始日期;enddate:实际交易时期结束日期;startdate和enddate均应为格式'%Y-%m-%d'的字符串
achieverate_trade 结构化模型集维度模型的实际交易日价格兑现率计算 dimension:维度名称;pricemode:实际交易日价格模式,可填开市价'open'、收市价'close'、最高价'high'、最低价'low'、平均价格'weighted';tradedate:实际交易日日期,应为格式'%Y-%m-%d'的字符串;r:贴现率,模型seasonal参数为True时该值为年贴现率,模型seasonal参数为False时该值为步长贴现率
batchachieverate_trade 结构化模型集维度模型的实际交易时期兑现率计算 dimension:维度名称;pricemode:实际交易日价格模式,可填开市价'open'、收市价'close'、最高价'high'、最低价'low'、平均价格'weighted';startdate:实际交易时期起始日期;enddate:实际交易时期结束日期;startdate和enddate均应为格式'%Y-%m-%d'的字符串;r:贴现率,模型seasonal参数为True时该值为年贴现率,模型seasonal参数为False时该值为步长贴现率

使用示例

>>> #构建时间序列集结构
>>> structure={
...             '营业收入': {'mode':'auto'},
...             '营业总收入其他': {'mode':'auto'},
...             '营业其他损益': {'mode':'auto'},
...             '营业外收入': {'mode':'auto'},
...             '营业外支出': {'mode':'auto'},
...             '利润总额其他': {'mode':'auto'},
...             '净利润其他': {'mode':'auto'},
...             '综合收益其他': {'mode':'auto'},
...             '营业成本': {'mode':'derive','base':'营业收入'},
...             '营业税金及附加': {'mode':'derive','base':'营业收入'},
...             '销售费用': {'mode':'derive','base':'营业收入'},
...             '管理费用': {'mode':'derive','base':'营业收入'},
...             '财务费用': {'mode':'derive','base':'营业收入'},
...             '营业其他费用': {'mode':'derive','base':'营业收入'},
...             '营业总收入' : {'mode': 'compo', 'plus': ['营业收入','营业总收入其他'], 'minus': []},
...             '营业总成本': {'mode': 'compo', 'plus': ['营业成本','营业税金及附加','销售费用','管理费用','财务费用','营业其他费用'], 'minus': []},
...             '营业利润': {'mode': 'compo', 'plus': ['营业总收入','营业其他损益'], 'minus': ['营业总成本']},
...             '利润总额': {'mode': 'compo', 'plus': ['营业利润','营业外收入','利润总额其他'], 'minus': ['营业外支出']},
...             '税后利润': {'mode': 'quota', 'quota':0.75 ,'base':'利润总额'},
...             '净利润': {'mode': 'compo', 'plus': ['税后利润','净利润其他'], 'minus': []},
...             '综合收益总额':{'mode': 'compo', 'plus': ['净利润','综合收益其他'], 'minus': []},
...         }

>>> #构建模型集
>>> modelset=vq.StockModelSets.ma_strict_latest_status_modelset(stockcode='600690',structure=structure,reportdate='2017-12-31',mawindow=4,minstep=8,seasonal=True,conservative=True)
>>> #获取建模结果
>>> modelset.modelset()
{'营业收入': {'mode': 'auto', 'model': {'method': 'l1', 'step': 14, 'params': {'l1_diff': 0.379913, 'value_latest': 7.85605}, 'status': {'l1': '+', 'l2': 'n'}, 'seasonal': {'12': 0.836401, '3': 0.963235, '6': 1.190104, '9': 0.977119}, 'qorder': ['3', '6', '9', '12']}}, '营业外收入': {'mode': 'auto', 'model': {'method': 'random', 'step': 32, 'params': {'value_mean': 0.024357}, 'status': {'l1': 'n'}, 'seasonal': {'12': 1.145846, '3': 0.769503, '6': 0.789491, '9': 0.952866}, 'qorder': ['3', '6', '9', '12']}}, '营业外支出': {'mode': 'auto', 'model': {'method': 'random', 'step': 58, 'params': {'value_mean': 0.001818}, 'status': {'l1': 'n'}, 'seasonal': {'12': 0.848634, '3': 0.602179, '6': 1.029571, '9': 1.205745}, 'qorder': ['3', '6', '9', '12']}}, '综合收益其他': {'mode': 'auto', 'model': {'method': 'random', 'step': 32, 'params': {'value_mean': -0.001163}, 'status': {'l1': 'n'}, 'seasonal': {'12': -0.094787, '3': 1.698016, '6': 1.446444, '9': 2.681057}, 'qorder': ['3', '6', '9', '12']}}, '营业成本': {'mode': 'derive', 'base': '营业收入', 'model': {'method': 'random', 'step': 14, 'params': {'value_mean': 0.699182}, 'status': {'l1': 'n'}, 'seasonal': {'12': 1.002891, '3': 0.994847, '6': 0.988821, '9': 1.012805}, 'qorder': ['3', '6', '9', '12']}}, '营业税金及附加': {'mode': 'derive', 'base': '营业收入', 'model': {'method': 'random', 'step': 58, 'params': {'value_mean': 0.003632}, 'status': {'l1': 'n'}, 'seasonal': {'12': 1.035196, '3': 0.840581, '6': 0.928841, '9': 1.04492}, 'qorder': ['3', '6', '9', '12']}}, '销售费用': {'mode': 'derive', 'base': '营业收入', 'model': {'method': 'random', 'step': 45, 'params': {'value_mean': 0.137667}, 'status': {'l1': 'n'}, 'seasonal': {'12': 0.951441, '3': 1.088444, '6': 1.018624, '9': 0.943284}, 'qorder': ['3', '6', '9', '12']}}, '管理费用': {'mode': 'derive', 'base': '营业收入', 'model': {'method': 'random', 'step': 23, 'params': {'value_mean': 0.068995}, 'status': {'l1': 'n'}, 'seasonal': {'12': 1.087347, '3': 1.017571, '6': 0.944272, '9': 0.942817}, 'qorder': ['3', '6', '9', '12']}}, '财务费用': {'mode': 'derive', 'base': '营业收入', 'model': {'method': 'random', 'step': 58, 'params': {'value_mean': 0.000483}, 'status': {'l1': 'n'}, 'seasonal': {'12': 1.236724, '3': 1.338647, '6': 1.909793, '9': 0.460659}, 'qorder': ['3', '6', '9', '12']}}, '营业其他费用': {'mode': 'derive', 'base': '营业收入', 'model': {'method': 'random', 'step': 48, 'params': {'value_mean': 0.001753}, 'status': {'l1': 'n'}, 'seasonal': {'12': 1.93244, '3': 1.349546, '6': 0.171696, '9': 0.833086}, 'qorder': ['3', '6', '9', '12']}}, '营业总收入': {'mode': 'compo', 'plus': ['营业收入'], 'minus': []}, '营业总成本': {'mode': 'compo', 'plus': ['营业成本', '营业税金及附加', '销售费用', '管理费用', '财务费用', '营业其他费用'], 'minus': []}, '营业利润': {'mode': 'compo', 'plus': ['营业总收入'], 'minus': ['营业总成本']}, '利润总额': {'mode': 'compo', 'plus': ['营业利润', '营业外收入'], 'minus': ['营业外支出']}, '税后利润': {'mode': 'quota', 'quota': 0.75, 'base': '利润总额'}, '净利润': {'mode': 'compo', 'plus': ['税后利润'], 'minus': []}, '综合收益总额': {'mode': 'compo', 'plus': ['净利润', '综合收益其他'], 'minus': []}}

>>> #查询证券利润表维度时间序列数据
>>> modelset.incdata('综合收益总额')
2010-03-31    0.079037
2010-06-30    0.143051
2010-09-30    0.120054
2010-12-31    0.122046
......
2017-03-31    0.346417
2017-06-30    0.472506
2017-09-30    0.275907
2017-12-31    0.275753
dtype: float64

>>> #维度模型样本内拟合
>>> modelset.fit('综合收益总额')
2014-09-30    0.324855
2014-12-31    0.235730
2015-03-31    0.193377
2015-06-30    0.343809
......
2017-03-31    0.349819
2017-06-30    0.580132
2017-09-30    0.468280
2017-12-31    0.404263
Freq: Q-DEC, dtype: float64

>>> #维度模型样本外推演
>>> modelset.forecast('综合收益总额',t=20)
2018-03-31    0.477166
2018-06-30    0.770036
2018-09-30    0.615717
2018-12-31    0.520084
......
2022-03-31    0.821030
2022-06-30    1.305306
2022-09-30    1.023223
2022-12-31    0.844383
Freq: Q-DEC, dtype: float64

>>> #现值计算
>>> modelset.pv('综合收益总额',r=0.1)
68.121251

>>> #交易日价格内部收益率计算
>>> modelset.irr('综合收益总额',price=68.121251,tradedate='2018-03-31')
0.1

>>> #构建测试交易日价格序列
>>> import pandas as pd
>>> import numpy as np
>>> priceseries=pd.Series([500,1000,5000,10000,50000],index=pd.date_range(start='2018-01-01',periods=5))
>>> #交易日价格序列内部收益率计算
>>> modelset.batchirr('综合收益总额',priceseries=priceseries)
                IRRs errors
2018-01-01  0.031065   None
2018-01-02  0.021390   None
2018-01-03  0.009234   None
2018-01-04  0.006475   None
2018-01-05       NaN  under

>>> #交易日价格兑现率计算
>>> modelset.achieverate('综合收益总额',price=68.121251,tradedate='2018-03-31',r=0.1)
1.0

>>> #交易日价格序列兑现率计算
>>> modelset.batchachieverate('综合收益总额',priceseries=priceseries,r=0.1)
2018-01-01    0.133070
2018-01-02    0.066553
2018-01-03    0.013314
2018-01-04    0.006659
2018-01-05    0.001332
Freq: D, dtype: float64

>>> #实际交易日价格内部收益率计算
>>> modelset.irr_trade('综合收益总额','close','2018-01-05')
0.235002

>>> #实际交易时期价格内部收益率计算
>>> modelset.batchirr_trade('综合收益总额',pricemode='close',startdate='2018-01-05',enddate='2018-01-10')
                IRRs errors
2018-01-05  0.235002   None
2018-01-08  0.227765   None
2018-01-09  0.224599   None
2018-01-10  0.220443   None

>>> #实际交易日价格兑现率计算
>>> modelset.achieverate_trade('综合收益总额',pricemode='close',tradedate='2017-03-16',r=0.1)
5.519836

>>> #实际交易日价格序列兑现率计算
>>> modelset.batchachieverate_trade('综合收益总额',pricemode='close',startdate='2017-03-10',enddate='2017-03-18',r=0.1)
2017-03-10    5.679002
2017-03-13    5.550267
2017-03-14    5.561767
2017-03-15    5.479098
2017-03-16    5.519836
2017-03-17    5.586371

>>> #使用TTM年度数据建模
>>> modelset=vq.StockModelSets.ma_strict_latest_status_modelset(stockcode='600690',structure=structure,reportdate='2017-12-31',mawindow=4,minstep=8,conservative=True,ttm=True)
>>> modelset.modelset()
{'营业收入': {'mode': 'auto', 'model': {'method': 'l1', 'step': 13, 'params': {'l1_diff': 1.60169, 'value_latest': 25.891691}, 'status': {'l1': '+', 'l2': 'n'}}}, '营业其他损益': {'mode': 'auto', 'model': {'method': 'l1', 'step': 13, 'params': {'l1_diff': 0.031299, 'value_latest': 0.491178}, 'status': {'l1': '+', 'l2': 'n'}}}, '营业外收入': {'mode': 'auto', 'model': {'method': 'random', 'step': 13, 'params': {'value_mean': 0.06532}, 'status': {'l1': 'n'}}}, '营业外支出': {'mode': 'auto', 'model': {'method': 'random', 'step': 13, 'params': {'value_mean': 0.013589}, 'status': {'l1': 'n'}}}, '利润总额其他': {'mode': 'auto', 'model': {'method': 'random', 'step': 13, 'params': {'value_mean': 0.0}, 'status': {'l1': 'n'}}}, '综合收益其他': {'mode': 'auto', 'model': {'method': 'random', 'step': 7, 'params': {'value_mean': -0.00341}, 'status': {'l1': 'n'}}}, '营业成本': {'mode': 'derive', 'base': '营业收入', 'model': {'method': 'random', 'step': 13, 'params': {'value_mean': 0.760509}, 'status': {'l1': 'n'}}}, '营业税金及附加': {'mode': 'derive', 'base': '营业收入', 'model': {'method': 'random', 'step': 13, 'params': {'value_mean': 0.003877}, 'status': {'l1': 'n'}}}, '销售费用': {'mode': 'derive', 'base': '营业收入', 'model': {'method': 'random', 'step': 13, 'params': {'value_mean': 0.128405}, 'status': {'l1': 'n'}}}, '管理费用': {'mode': 'derive', 'base': '营业收入', 'model': {'method': 'random', 'step': 13, 'params': {'value_mean': 0.057998}, 'status': {'l1': 'n'}}}, '财务费用': {'mode': 'derive', 'base': '营业收入', 'model': {'method': 'random', 'step': 13, 'params': {'value_mean': 0.000952}, 'status': {'l1': 'n'}}}, '营业其他费用': {'mode': 'derive', 'base': '营业收入', 'model': {'method': 'random', 'step': 11, 'params': {'value_mean': 0.002096}, 'status': {'l1': 'n'}}}, '营业总收入': {'mode': 'compo', 'plus': ['营业收入'], 'minus': []}, '营业总成本': {'mode': 'compo', 'plus': ['营业成本', '营业税金及附加', '销售费用', '管理费用', '财务费用', '营业其他费用'], 'minus': []}, '营业利润': {'mode': 'compo', 'plus': ['营业总收入', '营业其他损益'], 'minus': ['营业总成本']}, '利润总额': {'mode': 'compo', 'plus': ['营业利润', '营业外收入', '利润总额其他'], 'minus': ['营业外支出']}, '税后利润': {'mode': 'quota', 'quota': 0.75, 'base': '利润总额'}, '净利润': {'mode': 'compo', 'plus': ['税后利润'], 'minus': []}, '综合收益总额': {'mode': 'compo', 'plus': ['净利润', '综合收益其他'], 'minus': []}}
>>> #设置参数ttm=True时,seasonal参数无意义
                            

证券时间序列集分析模板框架StockFrameSets

StockFrameSets框架可以按valuequant提供的时间序列集结构模板实现证券利润表维度单位股权复权数据分析,提供利润表时间序列建模、拟合、推演、现值计算、内部收益率计算和兑现率计算功能。

框架数据参数

参数名称 参数说明 格式规范 必填/默认值
stockcode 证券代码 6位数字字符串。如'000001','000002' 必填
reportdate 时间序列截止的报告日 格式为'%Y-%m-%d'的日期字符串。如'2021-12-31',日期必须为季度的最后1天 必填
adjdate 复权基准日 格式为'%Y-%m-%d'的日期字符串,如'2021-11-08' 默认为None,按reportdate复权
ttm 是否分析ttm年度数据 格式boolean类型数据。若为True则使用ttm年度数据分析;若为False则使用单季数据分析。 默认为False

框架功能

功能名称 功能说明 功能参数
modelset 时间序列集结构化建模 ——
data 查询时间序列集的维度样本数据 dimension:维度名称
fit 结构化模型集维度模型样本内拟合 dimension:维度名称
forecast 结构化模型集维度模型样本外推演 dimension:维度名称;t:样本外未来序列推演步数
pv 结构化模型集维度模型的现值计算,折现日为第1个收益日。 dimension:维度名称;r:贴现率,模型seasonal参数为True时该值为年贴现率,模型seasonal参数为False时该值为步长贴现率
irr 结构化模型集维度模型的交易日价格内部收益率计算。若内部收益率在[0.005,1]区间存在唯一解则返回内部收益率数值,若内部收益率低于0.005则返回'under',高于1则返回'over',存在多解则返回'multi'。 dimension:维度名称;price:交易日价格;tradedate:交易日日期,应为格式'%Y-%m-%d'的字符串
batchirr 结构化模型集维度模型的交易日价格序列内部收益率计算 dimension:维度名称;priceseries:交易日价格序列,数据应为pandas.Series类型,序列索引类型应为带有标准freq的时间索引
achieverate 结构化模型集维度模型的交易日价格兑现率计算 dimension:维度名称;price:交易日价格;tradedate:交易日日期,应为格式'%Y-%m-%d'的字符串;r:贴现率,模型seasonal参数为True时该值为年贴现率,模型seasonal参数为False时该值为步长贴现率
batchachieverate 结构化模型集维度模型的交易日价格序列兑现率计算 dimension:维度名称;priceseries:交易日价格序列,数据应为pandas.Series类型,序列索引类型应为带有标准freq的时间索引;r:贴现率,模型seasonal参数为True时该值为年贴现率,模型seasonal参数为False时该值为步长贴现率
irr_trade 结构化模型集维度模型的实际交易日价格内部收益率计算。 dimension:维度名称;pricemode:实际交易日价格模式,可填开市价'open'、收市价'close'、最高价'high'、最低价'low'、平均价格'weighted';tradedate:实际交易日日期,应为格式'%Y-%m-%d'的字符串
batchirr_trade 结构化模型集维度模型的实际交易时期内部收益率计算 dimension:维度名称;pricemode:实际交易日价格模式,可填开市价'open'、收市价'close'、最高价'high'、最低价'low'、平均价格'weighted';startdate:实际交易时期起始日期;enddate:实际交易时期结束日期;startdate和enddate均应为格式'%Y-%m-%d'的字符串
achieverate_trade 结构化模型集维度模型的实际交易日价格兑现率计算 dimension:维度名称;pricemode:实际交易日价格模式,可填开市价'open'、收市价'close'、最高价'high'、最低价'low'、平均价格'weighted';tradedate:实际交易日日期,应为格式'%Y-%m-%d'的字符串;r:贴现率,模型seasonal参数为True时该值为年贴现率,模型seasonal参数为False时该值为步长贴现率
batchachieverate_trade 结构化模型集维度模型的实际交易时期兑现率计算 dimension:维度名称;pricemode:实际交易日价格模式,可填开市价'open'、收市价'close'、最高价'high'、最低价'low'、平均价格'weighted';startdate:实际交易时期起始日期;enddate:实际交易时期结束日期;startdate和enddate均应为格式'%Y-%m-%d'的字符串;r:贴现率,模型seasonal参数为True时该值为年贴现率,模型seasonal参数为False时该值为步长贴现率

使用示例

>>> #构建模型集
>>> modelset=vq.StockFrameSets.ma_strict_latest_status_frameset(stockcode='600690',reportdate='2017-12-31',mawindow=4,minstep=8,seasonal=True,conservative=True)
>>> #获取建模结果
>>> modelset.modelset()
{'营业收入': {'mode': 'auto', 'model': {'method': 'l1', 'step': 14, 'params': {'l1_diff': 0.379913, 'value_latest': 7.85605}, 'status': {'l1': '+', 'l2': 'n'}, 'seasonal': {'12': 0.836401, '3': 0.963235, '6': 1.190104, '9': 0.977119}, 'qorder': ['3', '6', '9', '12']}}, '营业外收入': {'mode': 'auto', 'model': {'method': 'random', 'step': 32, 'params': {'value_mean': 0.024357}, 'status': {'l1': 'n'}, 'seasonal': {'12': 1.145846, '3': 0.769503, '6': 0.789491, '9': 0.952866}, 'qorder': ['3', '6', '9', '12']}}, '营业外支出': {'mode': 'auto', 'model': {'method': 'random', 'step': 58, 'params': {'value_mean': 0.001818}, 'status': {'l1': 'n'}, 'seasonal': {'12': 0.848634, '3': 0.602179, '6': 1.029571, '9': 1.205745}, 'qorder': ['3', '6', '9', '12']}}, '综合收益其他': {'mode': 'auto', 'model': {'method': 'random', 'step': 32, 'params': {'value_mean': -0.001163}, 'status': {'l1': 'n'}, 'seasonal': {'12': -0.094787, '3': 1.698016, '6': 1.446444, '9': 2.681057}, 'qorder': ['3', '6', '9', '12']}}, '营业成本': {'mode': 'derive', 'base': '营业收入', 'model': {'method': 'random', 'step': 14, 'params': {'value_mean': 0.699182}, 'status': {'l1': 'n'}, 'seasonal': {'12': 1.002891, '3': 0.994847, '6': 0.988821, '9': 1.012805}, 'qorder': ['3', '6', '9', '12']}}, '营业税金及附加': {'mode': 'derive', 'base': '营业收入', 'model': {'method': 'random', 'step': 58, 'params': {'value_mean': 0.003632}, 'status': {'l1': 'n'}, 'seasonal': {'12': 1.035196, '3': 0.840581, '6': 0.928841, '9': 1.04492}, 'qorder': ['3', '6', '9', '12']}}, '销售费用': {'mode': 'derive', 'base': '营业收入', 'model': {'method': 'random', 'step': 45, 'params': {'value_mean': 0.137667}, 'status': {'l1': 'n'}, 'seasonal': {'12': 0.951441, '3': 1.088444, '6': 1.018624, '9': 0.943284}, 'qorder': ['3', '6', '9', '12']}}, '管理费用': {'mode': 'derive', 'base': '营业收入', 'model': {'method': 'random', 'step': 23, 'params': {'value_mean': 0.068995}, 'status': {'l1': 'n'}, 'seasonal': {'12': 1.087347, '3': 1.017571, '6': 0.944272, '9': 0.942817}, 'qorder': ['3', '6', '9', '12']}}, '财务费用': {'mode': 'derive', 'base': '营业收入', 'model': {'method': 'random', 'step': 58, 'params': {'value_mean': 0.000483}, 'status': {'l1': 'n'}, 'seasonal': {'12': 1.236724, '3': 1.338647, '6': 1.909793, '9': 0.460659}, 'qorder': ['3', '6', '9', '12']}}, '营业其他费用': {'mode': 'derive', 'base': '营业收入', 'model': {'method': 'random', 'step': 48, 'params': {'value_mean': 0.001753}, 'status': {'l1': 'n'}, 'seasonal': {'12': 1.93244, '3': 1.349546, '6': 0.171696, '9': 0.833086}, 'qorder': ['3', '6', '9', '12']}}, '营业总收入': {'mode': 'compo', 'plus': ['营业收入'], 'minus': []}, '营业总成本': {'mode': 'compo', 'plus': ['营业成本', '营业税金及附加', '销售费用', '管理费用', '财务费用', '营业其他费用'], 'minus': []}, '营业利润': {'mode': 'compo', 'plus': ['营业总收入'], 'minus': ['营业总成本']}, '利润总额': {'mode': 'compo', 'plus': ['营业利润', '营业外收入'], 'minus': ['营业外支出']}, '税后利润': {'mode': 'quota', 'quota': 0.75, 'base': '利润总额'}, '净利润': {'mode': 'compo', 'plus': ['税后利润'], 'minus': []}, '综合收益总额': {'mode': 'compo', 'plus': ['净利润', '综合收益其他'], 'minus': []}}

>>> #查询证券利润表维度时间序列数据
>>> modelset.incdata('综合收益总额')
2010-03-31    0.079037
2010-06-30    0.143051
2010-09-30    0.120054
2010-12-31    0.122046
......
2017-03-31    0.346417
2017-06-30    0.472506
2017-09-30    0.275907
2017-12-31    0.275753
dtype: float64

>>> #维度模型样本内拟合
>>> modelset.fit('综合收益总额')
2014-09-30    0.324855
2014-12-31    0.235730
2015-03-31    0.193377
2015-06-30    0.343809
......
2017-03-31    0.349819
2017-06-30    0.580132
2017-09-30    0.468280
2017-12-31    0.404263
Freq: Q-DEC, dtype: float64

>>> #维度模型样本外推演
>>> modelset.forecast('综合收益总额',t=20)
2018-03-31    0.477166
2018-06-30    0.770036
2018-09-30    0.615717
2018-12-31    0.520084
......
2022-03-31    0.821030
2022-06-30    1.305306
2022-09-30    1.023223
2022-12-31    0.844383
Freq: Q-DEC, dtype: float64

>>> #现值计算
>>> modelset.pv('综合收益总额',r=0.1)
68.121251

>>> #交易日价格内部收益率计算
>>> modelset.irr('综合收益总额',price=68.121251,tradedate='2018-03-31')
0.1

>>> #构建测试交易日价格序列
>>> import pandas as pd
>>> import numpy as np
>>> priceseries=pd.Series([500,1000,5000,10000,50000],index=pd.date_range(start='2018-01-01',periods=5))
>>> #交易日价格序列内部收益率计算
>>> modelset.batchirr('综合收益总额',priceseries=priceseries)
                IRRs errors
2018-01-01  0.031065   None
2018-01-02  0.021390   None
2018-01-03  0.009234   None
2018-01-04  0.006475   None
2018-01-05       NaN  under

>>> #交易日价格兑现率计算
>>> modelset.achieverate('综合收益总额',price=68.121251,tradedate='2018-03-31',r=0.1)
1.0

>>> #交易日价格序列兑现率计算
>>> modelset.batchachieverate('综合收益总额',priceseries=priceseries,r=0.1)
2018-01-01    0.133070
2018-01-02    0.066553
2018-01-03    0.013314
2018-01-04    0.006659
2018-01-05    0.001332
Freq: D, dtype: float64

>>> #实际交易日价格内部收益率计算
>>> modelset.irr_trade('综合收益总额','close','2018-01-05')
0.235002

>>> #实际交易时期价格内部收益率计算
>>> modelset.batchirr_trade('综合收益总额',pricemode='close',startdate='2018-01-05',enddate='2018-01-10')
                IRRs errors
2018-01-05  0.235002   None
2018-01-08  0.227765   None
2018-01-09  0.224599   None
2018-01-10  0.220443   None

>>> #实际交易日价格兑现率计算
>>> modelset.achieverate_trade('综合收益总额',pricemode='close',tradedate='2017-03-16',r=0.1)
5.519836

>>> #实际交易日价格序列兑现率计算
>>> modelset.batchachieverate_trade('综合收益总额',pricemode='close',startdate='2017-03-10',enddate='2017-03-18',r=0.1)
2017-03-10    5.679002
2017-03-13    5.550267
2017-03-14    5.561767
2017-03-15    5.479098
2017-03-16    5.519836
2017-03-17    5.586371

>>> #使用TTM年度数据建模
>>> modelset=vq.StockFrameSets.ma_strict_latest_status_frameset(stockcode='600690',reportdate='2017-12-31',mawindow=4,minstep=8,conservative=True,ttm=True)
>>> modelset.modelset()
{'营业收入': {'mode': 'auto', 'model': {'method': 'l1', 'step': 13, 'params': {'l1_diff': 1.60169, 'value_latest': 25.891691}, 'status': {'l1': '+', 'l2': 'n'}}}, '营业其他损益': {'mode': 'auto', 'model': {'method': 'l1', 'step': 13, 'params': {'l1_diff': 0.031299, 'value_latest': 0.491178}, 'status': {'l1': '+', 'l2': 'n'}}}, '营业外收入': {'mode': 'auto', 'model': {'method': 'random', 'step': 13, 'params': {'value_mean': 0.06532}, 'status': {'l1': 'n'}}}, '营业外支出': {'mode': 'auto', 'model': {'method': 'random', 'step': 13, 'params': {'value_mean': 0.013589}, 'status': {'l1': 'n'}}}, '利润总额其他': {'mode': 'auto', 'model': {'method': 'random', 'step': 13, 'params': {'value_mean': 0.0}, 'status': {'l1': 'n'}}}, '综合收益其他': {'mode': 'auto', 'model': {'method': 'random', 'step': 7, 'params': {'value_mean': -0.00341}, 'status': {'l1': 'n'}}}, '营业成本': {'mode': 'derive', 'base': '营业收入', 'model': {'method': 'random', 'step': 13, 'params': {'value_mean': 0.760509}, 'status': {'l1': 'n'}}}, '营业税金及附加': {'mode': 'derive', 'base': '营业收入', 'model': {'method': 'random', 'step': 13, 'params': {'value_mean': 0.003877}, 'status': {'l1': 'n'}}}, '销售费用': {'mode': 'derive', 'base': '营业收入', 'model': {'method': 'random', 'step': 13, 'params': {'value_mean': 0.128405}, 'status': {'l1': 'n'}}}, '管理费用': {'mode': 'derive', 'base': '营业收入', 'model': {'method': 'random', 'step': 13, 'params': {'value_mean': 0.057998}, 'status': {'l1': 'n'}}}, '财务费用': {'mode': 'derive', 'base': '营业收入', 'model': {'method': 'random', 'step': 13, 'params': {'value_mean': 0.000952}, 'status': {'l1': 'n'}}}, '营业其他费用': {'mode': 'derive', 'base': '营业收入', 'model': {'method': 'random', 'step': 11, 'params': {'value_mean': 0.002096}, 'status': {'l1': 'n'}}}, '营业总收入': {'mode': 'compo', 'plus': ['营业收入'], 'minus': []}, '营业总成本': {'mode': 'compo', 'plus': ['营业成本', '营业税金及附加', '销售费用', '管理费用', '财务费用', '营业其他费用'], 'minus': []}, '营业利润': {'mode': 'compo', 'plus': ['营业总收入', '营业其他损益'], 'minus': ['营业总成本']}, '利润总额': {'mode': 'compo', 'plus': ['营业利润', '营业外收入', '利润总额其他'], 'minus': ['营业外支出']}, '税后利润': {'mode': 'quota', 'quota': 0.75, 'base': '利润总额'}, '净利润': {'mode': 'compo', 'plus': ['税后利润'], 'minus': []}, '综合收益总额': {'mode': 'compo', 'plus': ['净利润', '综合收益其他'], 'minus': []}}
>>> #设置参数ttm=True时,seasonal参数无意义
                            

StockFrameSets框架时间序列集结构普通模板

维度名称 维度结构
营业收入 {'mode':'auto'}
营业总收入其他 {'mode':'auto'}
营业其他损益 {'mode':'auto'}
营业外收入 {'mode':'auto'}
营业外支出 {'mode':'auto'}
利润总额其他 {'mode':'auto'}
净利润其他 {'mode':'auto'}
综合收益其他 {'mode':'auto'}
营业成本 {'mode':'derive','base':'营业收入'}
营业税金及附加 {'mode':'derive','base':'营业收入'}
销售费用 {'mode':'derive','base':'营业收入'}
管理费用 {'mode':'derive','base':'营业收入'}
财务费用 {'mode':'derive','base':'营业收入'}
营业其他费用 {'mode':'derive','base':'营业收入'}
营业总收入 {'mode': 'compo', 'plus': ['营业收入','营业总收入其他'], 'minus': []}
营业总成本 {'mode': 'compo', 'plus': ['营业成本','营业税金及附加','销售费用','管理费用','财务费用','营业其他费用'], 'minus': []}
营业利润 {'mode': 'compo', 'plus': ['营业总收入','营业其他损益'], 'minus': ['营业总成本']}
利润总额 {'mode': 'compo', 'plus': ['营业利润','营业外收入','利润总额其他'], 'minus': ['营业外支出']}
税后利润 {'mode': 'quota', 'quota':0.75 ,'base':'利润总额'}
净利润 {'mode': 'compo', 'plus': ['税后利润','净利润其他'], 'minus': []}
综合收益总额 {'mode': 'compo', 'plus': ['净利润','综合收益其他'], 'minus': []}

StockFrameSets框架时间序列集结构银行模板

维度名称 维度结构
利息收入 {'mode':'auto'}
利息支出 {'mode':'auto'}
手续费及佣金净收入 {'mode':'auto'}
投资收益 {'mode':'auto'}
营业收入其他 {'mode':'auto'}
营业税金及附加 {'mode':'derive','base':'营业收入包含利息支出'}
业务及管理费 {'mode':'derive','base':'营业收入包含利息支出'}
减值损失等营业支出其他 {'mode':'derive','base':'营业收入包含利息支出'}
营业外收入 {'mode':'auto'}
营业外支出 {'mode':'auto'}
利润总额其他 {'mode':'auto'}
净利润其他 {'mode':'auto'}
综合收益其他 {'mode':'auto'}
利息净收入 {'mode':'compo','plus':['利息收入'],'minus':['利息支出']}
营业收入 {'mode':'compo','plus':['利息净收入','手续费及佣金净收入','投资收益','营业收入其他'],'minus':[]}
营业收入包含利息支出 {'mode':'compo','plus':['营业收入','利息支出'],'minus':[]}
营业支出 {'mode':'compo','plus':['营业税金及附加','业务及管理费', '减值损失等营业支出其他'],'minus':[]}
营业利润 {'mode':'compo','plus':['营业收入'],'minus':['营业支出']}
利润总额 {'mode': 'compo', 'plus': ['营业利润','营业外收入','利润总额其他'], 'minus': ['营业外支出']}
税后利润 {'mode': 'quota', 'quota': 0.75 ,'base':'利润总额'}
净利润 {'mode': 'compo', 'plus': ['税后利润', '净利润其他'], 'minus': []}
综合收益总额 {'mode': 'compo', 'plus': ['净利润', '综合收益其他'], 'minus': []}

StockFrameSets框架时间序列集结构证券模板

维度名称 维度结构
经纪业务手续费净收入 {'mode':'auto'}
投资银行业务手续费净收入 {'mode':'auto'}
资产管理业务手续费净收入 {'mode':'auto'}
手续费及佣金净收入其他 {'mode':'auto'}
投资收益 {'mode':'auto'}
营业收入其他 {'mode':'auto'}
营业税金及附加 {'mode':'derive','base':'营业收入'}
业务及管理费 {'mode':'derive','base':'营业收入'}
减值损失等营业支出其他 {'mode':'derive','base':'营业收入'}
营业外收入 {'mode':'auto'}
营业外支出 {'mode':'auto'}
利润总额其他 {'mode':'auto'}
净利润其他 {'mode':'auto'}
综合收益其他 {'mode':'auto'}
手续费及佣金净收入 {'mode': 'compo', 'plus': ['经纪业务手续费净收入', '投资银行业务手续费净收入', '资产管理业务手续费净收入','手续费及佣金净收入其他'], 'minus': []}
营业收入 {'mode': 'compo', 'plus': ['手续费及佣金净收入','投资收益','营业收入其他'], 'minus': []}
营业支出 {'mode': 'compo', 'plus': ['营业税金及附加','业务及管理费','减值损失等营业支出其他'], 'minus': []}
营业利润 {'mode': 'compo', 'plus': ['营业收入'], 'minus': ['营业支出']}
利润总额 {'mode': 'compo', 'plus': ['营业利润', '营业外收入', '利润总额其他'], 'minus': ['营业外支出']}
税后利润 {'mode': 'quota', 'quota': 0.75 ,'base':'利润总额'}
净利润 {'mode': 'compo', 'plus': ['税后利润', '净利润其他'], 'minus': []}
综合收益总额 {'mode': 'compo', 'plus': ['净利润', '综合收益其他'], 'minus': []}

StockFrameSets框架时间序列集结构保险模板

维度名称 维度结构
已赚保费 {'mode':'auto'}
投资收益 {'mode':'auto'}
营业收入其他 {'mode':'auto'}
退保金 {'mode':'derive','base':'已赚保费'}
赔付支出净额 {'mode':'derive','base':'已赚保费'}
提取保险责任准备金净额 {'mode':'derive','base':'已赚保费'}
保单红利支出 {'mode':'derive','base':'已赚保费'}
手续费及佣金支出 {'mode':'derive','base':'已赚保费'}
营业税金及附加 {'mode':'derive','base':'营业收入'}
业务及管理费 {'mode':'derive','base':'营业收入'}
营业支出其他 {'mode':'derive','base':'营业收入'}
营业外收入 {'mode':'auto'}
营业外支出 {'mode':'auto'}
利润总额其他 {'mode':'auto'}
净利润其他 {'mode':'auto'}
综合收益其他 {'mode':'auto'}
营业收入 {'mode': 'compo', 'plus': ['已赚保费','投资收益','营业收入其他'], 'minus': []}
营业支出 {'mode': 'compo', 'plus': ['退保金','赔付支出净额','提取保险责任准备金净额','保单红利支出','手续费及佣金支出','营业税金及附加','业务及管理费','营业支出其他'], 'minus': []}
营业利润 {'mode': 'compo', 'plus': ['营业收入'], 'minus': ['营业支出']}
利润总额 {'mode': 'compo', 'plus': ['营业利润', '营业外收入', '利润总额其他'], 'minus': ['营业外支出']}
税后利润 {'mode': 'quota', 'quota': 0.75 ,'base':'利润总额'}
净利润 {'mode': 'compo', 'plus': ['税后利润', '净利润其他'], 'minus': []}
综合收益总额 {'mode': 'compo', 'plus': ['净利润', '综合收益其他'], 'minus': []}

Resonance时间序列模型加权整合方法

valuequant提供ResonanceModel功能模块,帮助分析者对多个时间序列模型对象进行加权整合。

ResonanceModel计算分析者考察的各个时间序列模型对象相对其他时间序列模型对象的联系距离(相异程度), 与其他时间序列模型越接近赋予越高的共振程度,整体共振程度越高的时间序列模型赋予越高的权重

该功能根据各时间序列模型权重进行整合模型的样本外推演(forecast)、贴现值(pv)、内部收益率(irr)以及兑现率(achieverate)计算。

ResonanceModel功能包含以下模块:

1. CommonResonanceModel: 可整合Models对象类型、StockModels对象类型、经过ModelSetDimensionModel转换后的ModelSets维度以及经过StockSetDimensionModel转换后的StockModelSets维度

2. CompanyResonanceModel: 可整合StockModels对象类型以及经过StockSetDimensionModel转换后的StockModelSets维度

3. CommonResonanceModelSet: 可整合ModelSets对象类型、StockModelSets对象类型

4. CompanyResonanceModelSet: 可整合StockModelSets对象类型

5. ModelSetDimensionModel: 提取ModelSets对象类型的维度模型

6. StockSetDimensionModel: 提取StockModelSets对象类型的维度模型

7. 内置的联系距离计算方法: 提供5类内置的联系距离计算方法

CommonResonanceModel

初始化参数

参数名称 参数说明 格式规范 必填/默认值
models 时间序列模型列表 list类型。list内元素应当使用Models对象、StockModels对象、ModelSetDimensionModel对象或者StockSetDimensionModel对象。 必填
connection 联系距离计算方法 object类型。可直接使用内置的方法。而自定义的object应该包含计算时间序列联系距离的方法seriesmetod和计算元素联系距离的方法elementmethod。seriesmetod的传入参数为两个pandas.Series对象;elementmethod的传入参数为两个int或float变量。 必填

整合输出功能

功能名称 功能说明 功能参数
forecast 加权样本外推演 t:样本外未来序列推演步数
pv 加权现值 r:年贴现率
irr 交易日价格加权内部收益率 price:交易日价格;
tradedate:交易日日期,应为格式'%Y-%m-%d'的字符串
batchirr 交易日价格序列加权内部收益率 priceseries:交易日价格序列,数据应为pandas.Series类型,序列索引类型应为带有标准freq的时间索引
achieverate 交易日价格加权兑现率 price:交易日价格;
tradedate:交易日日期,应为格式'%Y-%m-%d'的字符串;
r:年贴现率
batchachieverate 交易日价格序列加权兑现率 priceseries:交易日价格序列,数据应为pandas.Series类型,序列索引类型应为带有标准freq的时间索引;
r:年贴现率

CompanyResonanceModel

初始化参数

参数名称 参数说明 格式规范 必填/默认值
models 时间序列模型列表 list类型。list内元素应当使用StockModels对象或者StockSetDimensionModel对象。 必填
connection 联系距离计算方法 object类型。可直接使用内置的方法。而自定义的object应该包含计算时间序列联系距离的方法seriesmetod和计算元素联系距离的方法elementmethod。seriesmetod的传入参数为两个pandas.Series对象;elementmethod的传入参数为两个int或float变量。 必填

整合输出功能

功能名称 功能说明 功能参数
forecast 加权样本外推演 t:样本外未来序列推演步数
pv 加权现值 r:年贴现率
irr 交易日价格加权内部收益率 price:交易日价格;
tradedate:交易日日期,应为格式'%Y-%m-%d'的字符串
batchirr 交易日价格序列加权内部收益率 priceseries:交易日价格序列,数据应为pandas.Series类型,序列索引类型应为带有标准freq的时间索引
achieverate 交易日价格加权兑现率 price:交易日价格;
tradedate:交易日日期,应为格式'%Y-%m-%d'的字符串;
r:年贴现率
batchachieverate 交易日价格序列加权兑现率 priceseries:交易日价格序列,数据应为pandas.Series类型,序列索引类型应为带有标准freq的时间索引;
r:年贴现率
irr_trade 实际交易日价格加权内部收益率 pricemode:实际交易日价格模式,可填开市价'open'、收市价'close'、最高价'high'、最低价'low'、平均价格'weighted';
tradedate:实际交易日日期,应为格式'%Y-%m-%d'的字符串
batchirr_trade 实际交易时期加权内部收益率 pricemode:实际交易日价格模式,可填开市价'open'、收市价'close'、最高价'high'、最低价'low'、平均价格'weighted';
startdate:实际交易时期起始日期;
enddate:实际交易时期结束日期;
startdate和enddate均应为格式'%Y-%m-%d'的字符串
achieverate_trade 实际交易日价格加权兑现率 pricemode:实际交易日价格模式,可填开市价'open'、收市价'close'、最高价'high'、最低价'low'、平均价格'weighted';
tradedate:实际交易日日期,应为格式'%Y-%m-%d'的字符串;
r:年贴现率
batchachieverate_trade 实际交易时期加权兑现率 pricemode:实际交易日价格模式,可填开市价'open'、收市价'close'、最高价'high'、最低价'low'、平均价格'weighted';
startdate:实际交易时期起始日期;
enddate:实际交易时期结束日期;
startdate和enddate均应为格式'%Y-%m-%d'的字符串;
r:年贴现率

CommonResonanceModelSet

初始化参数

参数名称 参数说明 格式规范 必填/默认值
modelsets 时间序列集模型列表 list类型。list内元素应当使用ModelSets对象或者StockModelSets对象。 必填
connection 联系距离计算方法 object类型。可直接使用内置的方法。而自定义的object应该包含计算时间序列联系距离的方法seriesmetod和计算元素联系距离的方法elementmethod。seriesmetod的传入参数为两个pandas.Series对象;elementmethod的传入参数为两个int或float变量。 必填

整合输出功能

功能名称 功能说明 功能参数
forecast 加权样本外推演 dimension:维度名称;
t:样本外未来序列推演步数
pv 加权现值 dimension:维度名称;
r:年贴现率
irr 交易日价格加权内部收益率 dimension:维度名称;
price:交易日价格;
tradedate:交易日日期,应为格式'%Y-%m-%d'的字符串
batchirr 交易日价格序列加权内部收益率 dimension:维度名称;
priceseries:交易日价格序列,数据应为pandas.Series类型,序列索引类型应为带有标准freq的时间索引
achieverate 交易日价格加权兑现率 dimension:维度名称;
price:交易日价格;
tradedate:交易日日期,应为格式'%Y-%m-%d'的字符串;
r:年贴现率
batchachieverate 交易日价格序列加权兑现率 dimension:维度名称;
priceseries:交易日价格序列,数据应为pandas.Series类型,序列索引类型应为带有标准freq的时间索引;
r:年贴现率

CompanyResonanceModelSet

初始化参数

参数名称 参数说明 格式规范 必填/默认值
modelsets 时间序列集模型列表 list类型。list内元素应当使用StockModelSets对象。 必填
connection 联系距离计算方法 object类型。可直接使用内置的方法。而自定义的object应该包含计算时间序列联系距离的方法seriesmetod和计算元素联系距离的方法elementmethod。seriesmetod的传入参数为两个pandas.Series对象;elementmethod的传入参数为两个int或float变量。 必填

整合输出功能

功能名称 功能说明 功能参数
forecast 加权样本外推演 dimension:维度名称;
t:样本外未来序列推演步数
pv 加权现值 dimension:维度名称;
r:年贴现率
irr 交易日价格加权内部收益率 dimension:维度名称;
price:交易日价格;
tradedate:交易日日期,应为格式'%Y-%m-%d'的字符串
batchirr 交易日价格序列加权内部收益率 dimension:维度名称;
priceseries:交易日价格序列,数据应为pandas.Series类型,序列索引类型应为带有标准freq的时间索引
achieverate 交易日价格加权兑现率 dimension:维度名称;
price:交易日价格;
tradedate:交易日日期,应为格式'%Y-%m-%d'的字符串;
r:年贴现率
batchachieverate 交易日价格序列加权兑现率 dimension:维度名称;
priceseries:交易日价格序列,数据应为pandas.Series类型,序列索引类型应为带有标准freq的时间索引;
r:年贴现率
irr_trade 实际交易日价格加权内部收益率 pricemode:实际交易日价格模式,可填开市价'open'、收市价'close'、最高价'high'、最低价'low'、平均价格'weighted';
tradedate:实际交易日日期,应为格式'%Y-%m-%d'的字符串
batchirr_trade 实际交易时期加权内部收益率 pricemode:实际交易日价格模式,可填开市价'open'、收市价'close'、最高价'high'、最低价'low'、平均价格'weighted';
startdate:实际交易时期起始日期;
enddate:实际交易时期结束日期;
startdate和enddate均应为格式'%Y-%m-%d'的字符串
achieverate_trade 实际交易日价格加权兑现率 pricemode:实际交易日价格模式,可填开市价'open'、收市价'close'、最高价'high'、最低价'low'、平均价格'weighted';
tradedate:实际交易日日期,应为格式'%Y-%m-%d'的字符串;
r:年贴现率
batchachieverate_trade 结构化模型的实际交易时期兑现率计算 pricemode:实际交易日价格模式,可填开市价'open'、收市价'close'、最高价'high'、最低价'low'、平均价格'weighted';
startdate:实际交易时期起始日期;
enddate:实际交易时期结束日期;
startdate和enddate均应为格式'%Y-%m-%d'的字符串;
r:年贴现率

ModelSetDimensionModel

初始化参数

参数名称 参数说明 格式规范 必填/默认值
modelset 时间序列集模型 ModelSets对象 必填
dimension 维度 str类型 必填

StockSetDimensionModel

初始化参数

参数名称 参数说明 格式规范 必填/默认值
modelset 时间序列集模型 StockModelSets对象 必填
dimension 维度 str类型 必填

内置联系距离计算方法

方法列表

方法类 初始化参数 序列加权整合公式 元素(变量)加权公式
ConnectionMethod1 dtpow, fmpow, dtsopen, fmsopen 分子:pow(pow(series1-series2,dtpow).sum(),dtsopen);
分母:pow(pow(series1+series2,fmpow).sum(),fmsopen)
分子:pow(pow(element1-element2,dtpow),dtsopen);
分母:pow(pow(element1+element2,fmpow),fmsopen)
ConnectionMethod2 dtpow, fmpow, dtsopen, fmsopen 分子:pow(pow(series1-series2,dtpow).sum(),dtsopen);
分母:pow((pow(series1,fmpow)+pow(series2,fmpow)).sum(),self.fmsopen)
分子:pow(pow(element1-element2,dtpow),dtsopen);
分母:pow((pow(element1,fmpow)+pow(element2,fmpow)),fmsopen)
ConnectionMethod3 coef1,coef2 coef1*np.exp(pow(series1-series2,2).sum()/(2*coef2)) coef1 * np.exp(pow(element1 - element2, 2) / (2 * coef2))
ConnectionMethod4 1/((series1*series2/(series1+series2)).sum()) 1/(element1*element2/(element1+element2))
ConnectionMethod5 sqrt(pow(series1,2).sum()*pow(series2,2).sum())/(series1*series2).sum() sqrt(pow(element1,2)*pow(element2,2).sum())/(element1*element2)

StockNet证券市场复杂网络建模数据

valuequant的StockNet功能模块提供证券市场复杂网络建模数据服务,目前该服务包括证券市场潮汐能量网络建模数据(StockNet)和证券市场粒子竞争社团建模数据(ParticleCompetitionTraining)。

StockNet证券市场潮汐能量网络建模数据

StockNet证券市场潮汐能量网络以市场证券为节点,以证券之间交易价格或交易额变动率时间序列的余弦相似度建立连边和配置边权,分析证券之间交易数据变动的关联关系。

初始化服务参数

参数名称 参数说明 格式规范 必填/默认值
freq 计算余弦相似度的时间序列频率。
填写'daily'则计算余弦相似度的时间序列为30个自然日内各交易日的日频数据;
填写'weekly'则计算余弦相似度的时间序列为30个自然周内各交易周的周频数据。
str类型,可填写'daily'或'weekly' 必填
periodend 计算余弦相似度的时间序列截止日期。
如果'freq'填写'daily'则periodend应该为2020-12-25至今某周周五的日期;
如果'freq'填写'weekly'则periodend应该为2019-07-31至今某月最后1日的日期。
规范的str类型,规范格式为%Y-%m-%d 必填
analysiscate 余弦相似度的分析方法。
填写'SYN'则使用网络边缘起始节点和终止节点同步的时间序列余弦相似度;
填写'LAG1'则使用终止节点相较起始节点滞后1期的时间序列余项相似度。
str类型;
dimension参数为'price'时,该参数可填写'SYN'或'LAG1';
dimension参数为'amount'时,该参数可填写'SYN'
必填
dimension 计算余弦相似度使用的时间序列数据维度。
填写'price'则使用收盘价格数据;
填写'amount'则使用交易额数据。
str类型,可填写'price'或'amount' 必填

功能列表

功能名称 功能说明 输入参数 输出说明
NetworkInfo 网络基础信息 vertexnum:网络节点数量;
edgenum:网络边缘数量;
simulimited:网络边权绝对值下限,该值为0.7和节点余弦相似度矩阵所有数值绝对值降序第vertexnum*50数值之间的最大值。
NetworkGraphs 网络连通子图基础信息 radius:网络的边权类型;可填写'S70','S75'或'S80',分别对应余弦相似度为不小于0.7,0.75或0.8的子网络的连通子图数据。 sid:连通子图编号;
vertexnum:连通子图节点数量;
edgenum:连通子图连边数量。
GraphVertexes 网络连通子图节点列表 radius:网络的边权类型;可填写'S70','S75'或'S80',分别对应余弦相似度为不小于0.7,0.75或0.8的子网络的连通子图数据。
sid:连通子图编号,通过NetworkGraphs功能取得。
list类型的节点列表。
VertexNeighbors 节点邻居列表 vertex:6位证券编码;
edgemode:填写'out'获取出边邻居,填写'in'获取入边邻居。
endvertex:出边邻居,edgemode为'out'时输出;
startvertex:入边邻居,edgemode为'in'时输出;
simularity:余弦相似度。
EdgeFrequency 历史连边出现次数。
如果网络freq属性为daily,则统计'2020-12-25'至今的出现次数;
如果网络freq属性为weekly,则统计'2019-07-31'至今的出现次数。
startvertex:起始节点6位证券编码;
endvertex:终止节点6位证券编码;
simulimited:连边权重最小值,实际统计除受该值限制外,还受实际网络simulimited属性约束。
连边出现的时期列表。

ParticleCompetitionTraining证券市场粒子竞争社团建模数据

valuequant的ParticleCompetitionTraining功能模块基于证券市场潮汐能量网络和粒子竞争社团检测算法,提供市场证券节点聚类数据服务。目前可提供dimension属性为'price'且analysiscate属性为'SYN'的基础网络的节点数量不小于750的S75连通子图的训练数据

初始化服务参数

参数名称 参数说明 格式规范 必填/默认值
network 基础网络对象 StockNet对象类型。Stock的dimension属性应为'price',analysiscate属性应为'SYN'。 必填
sid S75子网络的连通子图sid int类型。具体数值参照基础网络对象NetworkGraphs功能输出信息。 必填

功能列表

功能名称 功能说明 输入参数 输出说明
TrainingInfo 算法训练的基础信息 tid:训练编号;
psize:粒子规模,即预设社团数量;
avemaxctl:所有节点平均的最频繁访问粒子的访问比例。
Particles 粒子(社团)统计信息 tid:训练编号,通过TrainingInfo功能获得。 pid:粒子编号;
monopolize:粒子独立占领节点数;
overlap:粒子重叠占领节点数;
competeL1:与占领粒子访问比例相差不超过0.05的节点数;
competeL2:与占领粒子访问比例相差不超过0.1的节点数。
Vertexes 证券节点统计信息 tid:训练编号,通过TrainingInfo功能获得。 vertex:证券编码;
uv:到访粒子数量;
pv:所有粒子的访问总次数;
topn:访问次数排名第n个粒子的粒子编号;
topnfreq:访问次数排名第n个粒子的访问占比;
overlap:节点的重叠度指标;
maxctlnum:控制节点的粒子数量,即访问比例第1或并列第1的粒子数量。

StockStrategyLocal证券策略本地回测(免费开源)

valuequant的StockStrategyLocal功能模块提供无需登录的证券策略本地回测功能,目前该功能支持普通交易(NormalTrade)及融资融券(MarginTrade和ShortSell)日频以上策略的统计回测。

普通交易本地回测NormalTrade(免费开源)

NormalTrade对象初始化参数

参数名称 参数说明 格式规范 必填/默认值
buyfee 买入交易费用率,买入交易费用和交易金额的比值 float 必填
sellfee 卖出交易费用率,卖出交易费用和卖出交易金额的比值 float 必填
stopprofit 止盈率(比值) float ——
stoploss 止损率(比值) float ——

NormalTrade对象的统计功能statistics支持交易时间间隔为日及以上的数据的连续竞价交易回测统计,需要输入data参数,data应使用pandas.DataFrame对象,对象的列信息填写规范如下:

列名 列说明 格式规范 必填/默认值
orderbuy 行下标对应时期的买入喊价 float 必填
ordersell 行下标对应时期的卖出喊价 float 必填
refer 行下标对应时期的持有状态计算收益的参考价格 float 必填
high 行下标对应时期的最高价 float 必填
low 行下标对应时期的最低价 float 必填
openlogic 行下标对应时期是否符合开仓条件 boolean 必填
holdlogic 行下标对应时期是否符合持有条件 boolean 必填

NormalTrade对象的统计功能staistics_with_callauction支持日频数据的包含集合竞价和连续竞价的交易回测统计,需要输入data参数,data应使用pandas.DataFrame对象,对象的列信息填写规范如下:

列名 列说明 格式规范 必填/默认值
callbuy 行下标对应时期的集合竞价买入喊价 float 必填
callsell 行下标对应时期的集合竞价卖出喊价 float 必填
conbuy 行下标对应时期的连续竞价买入喊价 float 必填
consell 行下标对应时期的连续竞价卖出喊价 float 必填
refer 行下标对应时期的持有状态计算收益的参考价格 float 必填
open 行下标对应时期的开盘价格 float 必填
high 行下标对应时期的最高价 float 必填
low 行下标对应时期的最低价 float 必填
openlogic 行下标对应时期是否符合开仓条件 boolean 必填
holdlogic 行下标对应时期是否符合持有条件 boolean 必填

NormalTrade对象的统计功能statistics和staistics_with_callauction的输出data参数条件下的交易信息列表,列表中每个字典元素由以下信息组成:

数据名称 数据说明 数据格式
buyinx 买入时间 data参数行下标
buyday 买入时间间隔 int
buybid 买入价格 float
sellinx 卖出时间 data参数行下标
sellday 卖出时间间隔 int
sellbid 卖出价格 float
revenue 交易收益率,交易收益和交易本金的比值 float
cost 交易成本率,交易费用和交易本金的比值 float
revmax 最高参考收益率 float
revmin 最低参考收益率 float

融资融券本地回测MarginTrade和ShortSell(免费开源)

MarginTrade和ShortSell对象初始化参数

参数名称 参数说明 格式规范 必填/默认值
buyfee 买入交易费用率,买入交易费用和交易金额的比值 float 必填
sellfee 卖出交易费用率,卖出交易费用和卖出交易金额的比值 float 必填
interest 年利率(比值) float 必填
margin 保证金(比值) float 必填
guarantee 最低维持担保比例(比值) float 必填
stopprofit 止盈率(比值) float ——
stoploss 止损率(比值) float ——

MarginTrade和ShortSell对象的统计功能statistics支持交易时间间隔为日及以上的数据的连续竞价交易回测统计,需要输入data参数,data应使用pandas.DataFrame对象,对象的列信息填写规范如下:

列名 列说明 格式规范 必填/默认值
orderbuy 行下标对应时期的买入喊价 float 必填
ordersell 行下标对应时期的卖出喊价 float 必填
closeout 行下标对应时期的强制平仓喊价 float 必填
refer 行下标对应时期的持有状态计算收益的参考价格 float 必填
high 行下标对应时期的最高价 float 必填
low 行下标对应时期的最低价 float 必填
openlogic 行下标对应时期是否符合开仓条件 boolean 必填
holdlogic 行下标对应时期是否符合持有条件 boolean 必填

MarginTrade和ShortSell对象的统计功能staistics_with_callauction支持日频数据的包含集合竞价和连续竞价的交易回测统计,需要输入data参数,data应使用pandas.DataFrame对象,对象的列信息填写规范如下:

列名 列说明 格式规范 必填/默认值
callbuy 行下标对应时期的集合竞价买入喊价 float 必填
callsell 行下标对应时期的集合竞价卖出喊价 float 必填
conbuy 行下标对应时期的连续竞价买入喊价 float 必填
consell 行下标对应时期的连续竞价卖出喊价 float 必填
closeout 行下标对应时期的强制平仓喊价 float 必填
refer 行下标对应时期的持有状态计算收益的参考价格 float 必填
open 行下标对应时期的开盘价格 float 必填
high 行下标对应时期的最高价 float 必填
low 行下标对应时期的最低价 float 必填
openlogic 行下标对应时期是否符合开仓条件 boolean 必填
holdlogic 行下标对应时期是否符合持有条件 boolean 必填

MarginTrade和ShortSell对象的统计功能statistics和staistics_with_callauction的输出data参数条件下的交易信息列表,列表中每个字典元素由以下信息组成:

数据名称 数据说明 数据格式
buyinx 买入时间 data参数行下标
buyday 买入时间间隔 int
buybid 买入价格 float
sellinx 卖出时间 data参数行下标
sellday 卖出时间间隔 int
sellbid 卖出价格 float
revenue 交易收益率,交易收益和交易本金的比值 float
cost 交易成本率,交易费用和交易本金的比值 float
guarantee 平仓前维持担保比例(比值) float
closetype 平仓类型 str
revmax 最高参考收益率 float
revmin 最低参考收益率 float

普通交易对冲本地回测NormalTradeHedge(免费开源)

NormalTradeHedge对象初始化参数

参数名称 参数说明 格式规范 必填/默认值
nbuyfee 股票主交易买入交易费用率,买入交易费用和交易金额的比值 float 必填
nsellfee 股票主交易卖出交易费用率,卖出交易费用和卖出交易金额的比值 float 必填
ssellfee 融券对冲交易卖出交易费用率,卖出交易费用和卖出交易金额的比值 float 必填
sbuyfee 融券对冲交易买入交易费用率,买入交易费用和交易金额的比值 float 必填
sinterest 融券对冲交易日利率(比值) float 必填
smargin 融券对冲交易保证金比例(比值) float 必填
sguarantee 融券对冲交易最低维持担保比例(比值) float 必填
stopprofit 止盈率(比值) float ——
stoploss 止损率(比值) float ——

NormalTradeHedge对象的统计功能statistics支持交易时间间隔为日及以上的数据的连续竞价交易回测统计,需要输入data参数,data应使用pandas.DataFrame对象,对象的列信息填写规范如下:

列名 列说明 格式规范 必填/默认值
orderbuy 行下标对应时期的买入喊价 float 必填
ordersell 行下标对应时期的卖出喊价 float 必填
refer 行下标对应时期的持有状态计算收益的参考价格 float 必填
high 行下标对应时期的最高价 float 必填
low 行下标对应时期的最低价 float 必填
openlogic 行下标对应时期是否符合开仓条件 boolean 必填
holdlogic 行下标对应时期是否符合持有条件 boolean 必填
hedgerefer 行下标对应时期对冲交易出价及计算收益的参考价格 float 必填

NormalTradeHedge对象的统计功能staistics_with_callauction支持日频数据的包含集合竞价和连续竞价的交易回测统计,需要输入data参数,data应使用pandas.DataFrame对象,对象的列信息填写规范如下:

列名 列说明 格式规范 必填/默认值
callbuy 行下标对应时期的集合竞价买入喊价 float 必填
callsell 行下标对应时期的集合竞价卖出喊价 float 必填
conbuy 行下标对应时期的连续竞价买入喊价 float 必填
consell 行下标对应时期的连续竞价卖出喊价 float 必填
refer 行下标对应时期的持有状态计算收益的参考价格 float 必填
open 行下标对应时期的开盘价格 float 必填
high 行下标对应时期的最高价 float 必填
low 行下标对应时期的最低价 float 必填
openlogic 行下标对应时期是否符合开仓条件 boolean 必填
holdlogic 行下标对应时期是否符合持有条件 boolean 必填
hedgerefer 行下标对应时期对冲交易出价及计算收益的参考价格 float 必填

NormalTradeHedge对象的统计功能statistics和staistics_with_callauction的输出data参数条件下的交易信息列表,列表中每个字典元素由以下信息组成:

数据名称 数据说明 数据格式
buyinx 买入时间 data参数行下标
buyday 买入时间间隔 int
buybid 买入价格 float
sellinx 卖出时间 data参数行下标
sellday 卖出时间间隔 int
sellbid 卖出价格 float
hedgesell 融券对冲卖出价格 float
hedgebuy 融券对冲买入价格 float
hedgeguarantee 融券对冲维持担保比例 float
revenue 交易收益率,交易收益和交易本金的比值 float
cost 交易成本率,交易费用和交易本金的比值 float

融资融券对冲本地回测MarginTradeHedge和ShortTradeHedge(免费开源)

MarginTradeHedge和ShortTradeHedge对象初始化参数

参数名称 参数说明 格式规范 必填/默认值
mbuyfee 融资主交易买入交易费用率,买入交易费用和交易金额的比值 float 必填
msellfee 融资主交易卖出交易费用率,卖出交易费用和卖出交易金额的比值 float 必填
minterest 融资主交易年利率(比值) float 必填
mmargin 融资主交易保证金(比值) float 必填
mguarantee 融资主交易最低维持担保比例(比值) float 必填
ssellfee 融券对冲交易卖出交易费用率,卖出交易费用和卖出交易金额的比值 float 必填
sbuyfee 融券对冲交易买入交易费用率,买入交易费用和交易金额的比值 float 必填
sinterest 融券对冲交易日利率(比值) float 必填
smargin 融券对冲交易保证金比例(比值) float 必填
sguarantee 融券对冲交易最低维持担保比例(比值) float 必填
stopprofit 止盈率(比值) float ——
stoploss 止损率(比值) float ——

MarginTradeHedge和ShortTradeHedge对象的统计功能statistics支持交易时间间隔为日及以上的数据的连续竞价交易回测统计,需要输入data参数,data应使用pandas.DataFrame对象,对象的列信息填写规范如下:

列名 列说明 格式规范 必填/默认值
orderbuy 行下标对应时期的买入喊价 float 必填
ordersell 行下标对应时期的卖出喊价 float 必填
refer 行下标对应时期的持有状态计算收益的参考价格 float 必填
high 行下标对应时期的最高价 float 必填
low 行下标对应时期的最低价 float 必填
openlogic 行下标对应时期是否符合开仓条件 boolean 必填
holdlogic 行下标对应时期是否符合持有条件 boolean 必填
hedgerefer 行下标对应时期对冲出价及计算收益的参考价格 float 必填

MarginTradeHedge和ShortTradeHedge对象的统计功能staistics_with_callauction支持日频数据的包含集合竞价和连续竞价的交易回测统计,需要输入data参数,data应使用pandas.DataFrame对象,对象的列信息填写规范如下:

列名 列说明 格式规范 必填/默认值
callbuy 行下标对应时期的集合竞价买入喊价 float 必填
callsell 行下标对应时期的集合竞价卖出喊价 float 必填
conbuy 行下标对应时期的连续竞价买入喊价 float 必填
consell 行下标对应时期的连续竞价卖出喊价 float 必填
refer 行下标对应时期的持有状态计算收益的参考价格 float 必填
open 行下标对应时期的开盘价格 float 必填
high 行下标对应时期的最高价 float 必填
low 行下标对应时期的最低价 float 必填
openlogic 行下标对应时期是否符合开仓条件 boolean 必填
holdlogic 行下标对应时期是否符合持有条件 boolean 必填
hedgerefer 行下标对应时期对冲交易出价及计算收益的参考价格 float 必填

MarginTradeHedge和ShortTradeHedge对象的统计功能statistics和staistics_with_callauction的输出data参数条件下的交易信息列表,列表中每个字典元素由以下信息组成:

数据名称 数据说明 数据格式
buyinx 买入时间 data参数行下标
buyday 买入时间间隔 int
buybid 买入价格 float
sellinx 卖出时间 data参数行下标
sellday 卖出时间间隔 int
sellbid 卖出价格 float
revenue 交易收益率,交易收益和交易本金的比值 float
cost 交易成本率,交易费用和交易本金的比值 float
guarantee 平仓前维持担保比例(比值) float
hedgebuy 对冲交易买入价格 float
hedgesell 对冲交易卖出价格 float
hedgeguarantee 对冲交易平仓前维持担保比例(比值) float
closetype 平仓类型 str

股票股指期货对冲本地回测NormalIndexFutureHedge(免费开源)

NormalIndexFutureHedge对象初始化参数

参数名称 参数说明 格式规范 必填/默认值
nbuyfee 股票主交易买入交易费用率,买入交易费用和交易金额的比值 float 必填
nsellfee 股票主交易卖出交易费用率,卖出交易费用和卖出交易金额的比值 float 必填
isellfee 股指期货对冲交易卖出交易费用率,卖出交易费用和卖出合约金额的比值 float 必填
ibuyfee 股指期货对冲交易买入交易费用率,买入交易费用和合约金额的比值 float 必填
imargin 股指期货保证金占合约金额比例(比值) float 必填
iavailable 股指期货账户资金占合约金额比例(比值) float 必填
fkpath 股指期货合约列表数据本地路径 str 必填
ftfolder 股指期货合约交易数据文件夹本地路径 str 必填
stopprofit 止盈率(比值) float ——
stoploss 止损率(比值) float ——

NormalIndexFutureHedge对象的统计功能statistics支持交易时间间隔为日及以上的数据的连续竞价交易回测统计,需要输入data参数,data应使用pandas.DataFrame对象,对象的列信息填写规范如下:

列名 列说明 格式规范 必填/默认值
orderbuy 行下标对应时期的买入喊价 float 必填
ordersell 行下标对应时期的卖出喊价 float 必填
refer 行下标对应时期的持有状态计算收益的参考价格 float 必填
high 行下标对应时期的最高价 float 必填
low 行下标对应时期的最低价 float 必填
openlogic 行下标对应时期是否符合开仓条件 boolean 必填
holdlogic 行下标对应时期是否符合持有条件 boolean 必填
tradedate 行下标对应交易时期 '%Y-%m-%d'格式字符串 必填
period 行下标对应交易时期开仓的交易的最大持有交易期数 int 必填

NormalIndexFutureHedge对象的统计功能staistics_with_callauction支持日频数据的包含集合竞价和连续竞价的交易回测统计,需要输入data参数,data应使用pandas.DataFrame对象,对象的列信息填写规范如下:

列名 列说明 格式规范 必填/默认值
callbuy 行下标对应时期的集合竞价买入喊价 float 必填
callsell 行下标对应时期的集合竞价卖出喊价 float 必填
conbuy 行下标对应时期的连续竞价买入喊价 float 必填
consell 行下标对应时期的连续竞价卖出喊价 float 必填
refer 行下标对应时期的持有状态计算收益的参考价格 float 必填
open 行下标对应时期的开盘价格 float 必填
high 行下标对应时期的最高价 float 必填
low 行下标对应时期的最低价 float 必填
openlogic 行下标对应时期是否符合开仓条件 boolean 必填
holdlogic 行下标对应时期是否符合持有条件 boolean 必填
tradedate 行下标对应交易时期 '%Y-%m-%d'格式字符串 必填
period 行下标对应交易时期开仓的交易的最大持有交易期数 int 必填

NormalIndexFutureHedge对象的统计功能statistics和staistics_with_callauction的输出data参数条件下的交易信息列表,列表中每个字典元素由以下信息组成:

数据名称 数据说明 数据格式
buyinx 买入时间 data参数行下标
buyday 买入时间间隔 int
buybid 买入价格 float
sellinx 卖出时间 data参数行下标
sellday 卖出时间间隔 int
sellbid 卖出价格 float
kprice 期货合约买入价格 float
period 交易最大持有期限 int
settle 期货合约结算价格 float
faccount 平仓前期货账户资金比例 float
revenue 交易收益率,交易收益和交易本金的比值 float
cost 交易成本率,交易费用和交易本金的比值 float

融资融券股指期货对冲本地回测MarginIndexFutureHedge和ShortIndexFutureHedge(免费开源)

MarginIndexFutureHedge和ShortIndexFutureHedge对象初始化参数

参数名称 参数说明 格式规范 必填/默认值
mbuyfee 融资主交易买入交易费用率,买入交易费用和交易金额的比值 float 必填
msellfee 融资主交易卖出交易费用率,卖出交易费用和卖出交易金额的比值 float 必填
minterest 融资主交易年利率(比值) float 必填
mmargin 融资主交易保证金(比值) float 必填
mguarantee 融资主交易最低维持担保比例(比值) float 必填
isellfee 股指期货对冲交易卖出交易费用率,卖出交易费用和卖出合约金额的比值 float 必填
ibuyfee 股指期货对冲交易买入交易费用率,买入交易费用和合约金额的比值 float 必填
imargin 股指期货保证金占合约金额比例(比值) float 必填
iavailable 股指期货账户资金占合约金额比例(比值) float 必填
fkpath 股指期货合约列表数据本地路径 str 必填
ftfolder 股指期货合约交易数据文件夹本地路径 str 必填
stopprofit 止盈率(比值) float ——
stoploss 止损率(比值) float ——

MarginIndexFutureHedge和ShortIndexFutureHedge对象的统计功能statistics支持交易时间间隔为日及以上的数据的连续竞价交易回测统计,需要输入data参数,data应使用pandas.DataFrame对象,对象的列信息填写规范如下:

列名 列说明 格式规范 必填/默认值
orderbuy 行下标对应时期的买入喊价 float 必填
ordersell 行下标对应时期的卖出喊价 float 必填
refer 行下标对应时期的持有状态计算收益的参考价格 float 必填
high 行下标对应时期的最高价 float 必填
low 行下标对应时期的最低价 float 必填
openlogic 行下标对应时期是否符合开仓条件 boolean 必填
holdlogic 行下标对应时期是否符合持有条件 boolean 必填
tradedate 行下标对应交易时期 '%Y-%m-%d'格式字符串 必填
period 行下标对应交易时期开仓的交易的最大持有交易期数 int 必填

MarginIndexFutureHedge和ShortIndexFutureHedge对象的统计功能staistics_with_callauction支持日频数据的包含集合竞价和连续竞价的交易回测统计,需要输入data参数,data应使用pandas.DataFrame对象,对象的列信息填写规范如下:

列名 列说明 格式规范 必填/默认值
callbuy 行下标对应时期的集合竞价买入喊价 float 必填
callsell 行下标对应时期的集合竞价卖出喊价 float 必填
conbuy 行下标对应时期的连续竞价买入喊价 float 必填
consell 行下标对应时期的连续竞价卖出喊价 float 必填
refer 行下标对应时期的持有状态计算收益的参考价格 float 必填
open 行下标对应时期的开盘价格 float 必填
high 行下标对应时期的最高价 float 必填
low 行下标对应时期的最低价 float 必填
openlogic 行下标对应时期是否符合开仓条件 boolean 必填
holdlogic 行下标对应时期是否符合持有条件 boolean 必填
tradedate 行下标对应交易时期 '%Y-%m-%d'格式字符串 必填
period 行下标对应交易时期开仓的交易的最大持有交易期数 int 必填

MarginIndexFutureHedge和ShortIndexFutureHedge对象的统计功能statistics和staistics_with_callauction的输出data参数条件下的交易信息列表,列表中每个字典元素由以下信息组成:

数据名称 数据说明 数据格式
buyinx 买入时间 data参数行下标
buyday 买入时间间隔 int
buybid 买入价格 float
sellinx 卖出时间 data参数行下标
sellday 卖出时间间隔 int
sellbid 卖出价格 float
revenue 交易收益率,交易收益和交易本金的比值 float
cost 交易成本率,交易费用和交易本金的比值 float
guarantee 平仓前维持担保比例(比值) float
kprice 期货合约买入价格 float
period 交易最大持有期限 int
settle 期货合约结算价格 float
faccount 平仓前期货账户资金比例 float
closetype 平仓类型 str

股票期权对冲本地回测NormalOptionHedge(免费开源)

NormalOptionHedge对象初始化参数

参数名称 参数说明 格式规范 必填/默认值
nbuyfee 股票主交易买入交易费用率,买入交易费用和交易金额的比值 float 必填
nsellfee 股票主交易卖出交易费用率,卖出交易费用和卖出交易金额的比值 float 必填
osellfee 每张对冲期权合约的卖出交易费用 float 必填
obuyfee 每张对冲期权合约的买入交易费用 float 必填
omultiplier 期权合约乘数 float 必填
objpath 期权合约交易标的交易价格数据本地路径 str 必填
okpath 期权合约列表数据本地路径 str 必填
otfolder 期权合约交易数据文件夹本地路径 str 必填
stopprofit 止盈率(比值) float ——
stoploss 止损率(比值) float ——

NormalOptionHedge对象的统计功能statistics支持交易时间间隔为日及以上的数据的连续竞价交易回测统计,需要输入data参数,data应使用pandas.DataFrame对象,对象的列信息填写规范如下:

列名 列说明 格式规范 必填/默认值
orderbuy 行下标对应时期的买入喊价 float 必填
ordersell 行下标对应时期的卖出喊价 float 必填
refer 行下标对应时期的持有状态计算收益的参考价格 float 必填
high 行下标对应时期的最高价 float 必填
low 行下标对应时期的最低价 float 必填
openlogic 行下标对应时期是否符合开仓条件 boolean 必填
holdlogic 行下标对应时期是否符合持有条件 boolean 必填
tradedate 行下标对应交易时期 '%Y-%m-%d'格式字符串 必填
period 行下标对应交易时期开仓的交易的最大持有交易期数 int 必填

NormalOptionHedge对象的统计功能staistics_with_callauction支持日频数据的包含集合竞价和连续竞价的交易回测统计,需要输入data参数,data应使用pandas.DataFrame对象,对象的列信息填写规范如下:

列名 列说明 格式规范 必填/默认值
callbuy 行下标对应时期的集合竞价买入喊价 float 必填
callsell 行下标对应时期的集合竞价卖出喊价 float 必填
conbuy 行下标对应时期的连续竞价买入喊价 float 必填
consell 行下标对应时期的连续竞价卖出喊价 float 必填
refer 行下标对应时期的持有状态计算收益的参考价格 float 必填
open 行下标对应时期的开盘价格 float 必填
high 行下标对应时期的最高价 float 必填
low 行下标对应时期的最低价 float 必填
openlogic 行下标对应时期是否符合开仓条件 boolean 必填
holdlogic 行下标对应时期是否符合持有条件 boolean 必填
tradedate 行下标对应交易时期 '%Y-%m-%d'格式字符串 必填
period 行下标对应交易时期开仓的交易的最大持有交易期数 int 必填

NormalOptionHedge对象的统计功能statistics和staistics_with_callauction的输出data参数条件下的交易信息列表,列表中每个字典元素由以下信息组成:

数据名称 数据说明 数据格式
buyinx 买入时间 data参数行下标
buyday 买入时间间隔 int
buybid 买入价格 float
sellinx 卖出时间 data参数行下标
sellday 卖出时间间隔 int
sellbid 卖出价格 float
eprice 期权行权价格 float
optcost 期权买入费用 float
period 交易最大持有期限 int
settle 期权卖出价格 float
revenue 交易收益率,交易收益和交易本金的比值 float
cost 交易成本率,交易费用和交易本金的比值 float

融资融券期权对冲本地回测MarginOptionHedge和ShortOptionHedge(免费开源)

MarginOptionHedge和ShortOptionHedge对象初始化参数

参数名称 参数说明 格式规范 必填/默认值
mbuyfee 融资主交易买入交易费用率,买入交易费用和交易金额的比值 float 必填
msellfee 融资主交易卖出交易费用率,卖出交易费用和卖出交易金额的比值 float 必填
minterest 融资主交易年利率(比值) float 必填
mmargin 融资主交易保证金(比值) float 必填
mguarantee 融资主交易最低维持担保比例(比值) float 必填
osellfee 每张对冲期权合约的卖出交易费用 float 必填
obuyfee 每张对冲期权合约的买入交易费用 float 必填
omultiplier 期权合约乘数 float 必填
objpath 期权合约交易标的交易价格数据本地路径 str 必填
okpath 期权合约列表数据本地路径 str 必填
otfolder 期权合约交易数据文件夹本地路径 str 必填
stopprofit 止盈率(比值) float ——
stoploss 止损率(比值) float ——

MarginOptionHedge和ShortOptionHedge对象的统计功能statistics支持交易时间间隔为日及以上的数据的连续竞价交易回测统计,需要输入data参数,data应使用pandas.DataFrame对象,对象的列信息填写规范如下:

列名 列说明 格式规范 必填/默认值
orderbuy 行下标对应时期的买入喊价 float 必填
ordersell 行下标对应时期的卖出喊价 float 必填
refer 行下标对应时期的持有状态计算收益的参考价格 float 必填
high 行下标对应时期的最高价 float 必填
low 行下标对应时期的最低价 float 必填
openlogic 行下标对应时期是否符合开仓条件 boolean 必填
holdlogic 行下标对应时期是否符合持有条件 boolean 必填
tradedate 行下标对应交易时期 '%Y-%m-%d'格式字符串 必填
period 行下标对应交易时期开仓的交易的最大持有交易期数 int 必填

MarginOptionHedge和ShortOptionHedge对象的统计功能staistics_with_callauction支持日频数据的包含集合竞价和连续竞价的交易回测统计,需要输入data参数,data应使用pandas.DataFrame对象,对象的列信息填写规范如下:

列名 列说明 格式规范 必填/默认值
callbuy 行下标对应时期的集合竞价买入喊价 float 必填
callsell 行下标对应时期的集合竞价卖出喊价 float 必填
conbuy 行下标对应时期的连续竞价买入喊价 float 必填
consell 行下标对应时期的连续竞价卖出喊价 float 必填
refer 行下标对应时期的持有状态计算收益的参考价格 float 必填
open 行下标对应时期的开盘价格 float 必填
high 行下标对应时期的最高价 float 必填
low 行下标对应时期的最低价 float 必填
openlogic 行下标对应时期是否符合开仓条件 boolean 必填
holdlogic 行下标对应时期是否符合持有条件 boolean 必填
tradedate 行下标对应交易时期 '%Y-%m-%d'格式字符串 必填
period 行下标对应交易时期开仓的交易的最大持有交易期数 int 必填

MarginOptionHedge和ShortOptionHedge对象的统计功能statistics和staistics_with_callauction的输出data参数条件下的交易信息列表,列表中每个字典元素由以下信息组成:

数据名称 数据说明 数据格式
buyinx 买入时间 data参数行下标
buyday 买入时间间隔 int
buybid 买入价格 float
sellinx 卖出时间 data参数行下标
sellday 卖出时间间隔 int
sellbid 卖出价格 float
revenue 交易收益率,交易收益和交易本金的比值 float
cost 交易成本率,交易费用和交易本金的比值 float
guarantee 平仓前维持担保比例(比值) float
eprice 期权行权价格 float
optcost 期权买入费用 float
period 交易最大持有期限 int
settle 期权卖出价格 float
closetype 平仓类型 str