# 运行时 / 数学与统计 ## `Anova_Bartlett(y, alpha)` 在1-alpha的置信水平下,Bartlett方法检验方差齐性;B-Stat为统计值,P-Value为p值,df为自由度,Hypothesis为是否接受原假设 模型表达: Bartlett检验思想来源于几何平均数小于或等于算术平均数 原假设:是水平个数 ,其中 修正的Bartlett检验: | 参数 | 类型 | 说明 | | ------- | ----- | -------------------------------------------- | | `y` | array | 数据矩阵,为二维数组类型,每一行表示一个水平 | | `alpha` | float | 显著性水平,实数或整数,在01之间 | 返回:array ## `Anova_Levene(y, alpha)` 在1-Alpha的置信水平下,Levene方法检验方差齐性,和Bartlett检验不同的是,Levene检验不要求总体具有正态性。返回一个数组,F-Stat为统计值,P-Value为p值,df1,df2为自由度,Hypothesis为是否接受原假设 模型表达: 原假设:是水平个数 ,其中是观察数目,是水平数目 | 参数 | 类型 | 说明 | | ------- | ----- | -------------------------------------------- | | `y` | array | 数据矩阵,为二维数组类型,每一行表示一个水平 | | `alpha` | float | 显著性水平,实数或整数,在01之间 | 返回:array ## `Anova_Single(y, alpha)` 在1-alpha置信水平下,在假设服从正态分布,且方差齐性,样本之间独立的基础上,判断各水平的均值是否显著相等 模型表达: , 其中:效应平方和:,误差平方和: 总离差 | 参数 | 类型 | 说明 | | ------- | ----- | -------------------------------------------- | | `y` | array | 数据矩阵,为二维数组类型,每一行表示一个水平 | | `alpha` | float | 显著性水平,实数或整数,在01之间 | 返回:array ## `Anova_Twice(y, alpha)` 在1-alpha的置信水平下,进行双因子方差分析,假设每一种情况都服从一个正态分布,且方差相等,数据独立,判断各水平的均值是否显著相等 模型表达: 有A,B两个因素,因素A有r个水平,B有s个水平,对于A,B每一个组合(Ai,Bj)都进行t次试验,得到结果: 因素B 因素A B1 B2 … Bs A1 X111, X112,…,X11t X121, X122,…,X12t … X1s1, X1s2,…,X1st A2 X211, X212,…, X21t X221, X222,…, X22t … X2s1, X2s2,…, X2st … … … … Ar Xr11, Xr12,…, Xr1t Xr21, Xr22,…, Xr2t … Xrs1, Xrs2,…, Xrst 设:且相互独立 ,其中,是水平Ai的效应,是水平Bj的效应,称为水平Ai和Bj的交互效应。, 原假设:,, 现构造了3个F统计量来分别检验假设,原理略 | 参数 | 类型 | 说明 | | ------- | ----- | ----------------------------------------------------------------------------------------------- | | `y` | array | 数据矩阵,为二维数组类型,每rep行,每一列表示一个交叉项 | | `alpha` | float | 显著性水平,实数或整数,在01之间;Rep:每一个交叉项,做rep次试验,rep=1时,没有交叉效应为0的假设 | 返回:array ## `arma(series, p, q)` 自回归移动平均模型,ARMA(p,q)模型,采用逆函数去估计自回归系数和移动平均系数,返回结果有自回归系数、移动平均系数、残差方差等信息 ARMA模型: 其中:为原序列零均值化的新序列,是自回归方程系数,为移动平均系数,是零均值、方差为的平稳白噪声 | 参数 | 类型 | 说明 | | -------- | ----- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `series` | array | 样本序列,为一维数组类型,注意要零均值化 | | `p` | int | 自回归阶数,整数类型 | | `q` | int | 移动平均阶数,整数类型;返回结果:;Ret\["AR"\]:参数估计结果,,第一项为1;Ret\["MA"\]:参数估计结果,,第一项为1;Ret\["T-test"\]:AR模型参数的T检验;Ret\["LossFunction"\];Ret\["FPE"\]:预测最大误差;Ret\["AIC"\]:模型的AIC信息准则;Ret\["SC"\]:模型的SC信息准则;Ret\["e"\]:残差信息;Ret\["Inverted AR Roots"\]:AR特征方程的特征根;Ret\["Inverted MA Roots"\]:MA特征方程的特征根;Ret\["R_squared"\]:AR模型的可决系数;Ret\["Adjusted_R_squared "\]:AR模型的修正可决系数;Ret\["Sum_squared_resid"\]:AR模型的离差平方和;Ret\["Durbin Watson stat"\]:DW统计量;Ret\["Log Likelihood"\]:对数极大似然值;Ret\["S.E. of regression"\]:回归标准差 | 返回:array ### 示例 ```tsl elps:=randnorm(0,1,200); y:=array(); y[0]:=0; for i:=1 to 199 do y[i]:=0.8*y[i-1]+elps[i]-0.4*elps[i-1]; arma(y,1,1); ``` ## `Cluster_Kmeans(samples, class_count, options)` 执行 K-means 聚类。 | 参数 | 类型 | 说明 | | ------------- | ----- | ------------------------------------------------------ | | `samples` | array | 样本矩阵 | | `class_count` | any | 聚类数量 | | `options` | array | 参数表;常见键包括 `maxiter`、`tol`、`distance`、`out` | 返回:array ## `Cluster_ward(samples)` 执行 Ward 聚类。 | 参数 | 类型 | 说明 | | --------- | ----- | -------- | | `samples` | array | 样本矩阵 | 返回:array ## `correlationMatrix(a1, t)` 相关系数矩阵求解 | 参数 | 类型 | 说明 | | ---- | ----- | ---- | | `a1` | array | | | `t` | float | | 返回:array ### 示例 ```tsl a := rand(4,3); correlationMatrix(a,1); ``` ## `Corr_partial(x, y, z, _type)` 偏相关系数,返回x和y在控制变量z下的偏相关系数,行为样本,列为指标 | 参数 | 类型 | 说明 | | ------- | ----- | ---------------------------------------------------------------------------------------------------------------- | | `x` | array | 变量一,二维实数数组 | | `y` | array | 变量二,二维实数数组 | | `z` | array | 控制变量,二维实数数组 | | `_type` | any | 1:pearson偏相关;2:Spearman偏相关;tail:假设检验的三种类型,字符串,取值为both、left和right,缺省是只输出相关系数 | 返回:any ## `covariance(a)` 计算协方差矩阵 | 参数 | 类型 | 说明 | | ---- | ----- | ---- | | `a` | array | | 返回:any ### 示例 ```tsl a := rand(4,3); covariance(a); ``` ## `Eigen_Jacobi(matrix, eigen_values, eigen_vectors)` 用 Jacobi 方法计算矩阵特征值和特征向量。 | 参数 | 类型 | 说明 | | --------------- | ----- | ---------------- | | `matrix` | array | 待分解矩阵 | | `eigen_values` | any | 接收特征值数组 | | `eigen_vectors` | any | 接收特征向量矩阵 | 返回:void ## `eye(size)` 生成单位矩阵。 | 参数 | 类型 | 说明 | | ------ | ---- | ------------------------------------------ | | `size` | any | 行数和列数;`eye(3)` 生成 `3 x 3` 单位矩阵 | 返回:array ## `factor(x, var_value)` 对样本数据进行因子分析,分别采用主成分分析法估计因子载荷矩阵(因子载荷矩阵不唯一),方差最大法做载荷矩阵的正交旋转矩阵,回归方法计算因子得分 | 参数 | 类型 | 说明 | | ----------- | ----- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `x` | array | 二维维实数数组,表示样本矩阵; | | `var_value` | float | 实数,表示方差贡献率,控制因子个数;;返回结果:ss;Ret\["Correlation Matrix",0\]:样本数据的相关系数矩阵;Ret\["kmo",0\]:KMO检验值;0.90:序列有上升趋势,q<0:序列有下降趋势),第二个为T统计量,第三个为p值,第四个为是否接受原假设。原假设为x是平稳序列,所以H为1表示接受原假设,0表示拒绝原假设 其中:qs是Spearman相关系数,Rt为秩统计量,n为样本容量 | 参数 | 类型 | 说明 | | ------- | ----- | ----------------------------------- | | `y` | array | 随机时间序列,为一维数组类型 | | `alpha` | float | 显著性水平,实数类型,取值在0-1之间 | 返回:array ## `Time_Diff(y, n)` 序列差分 | 参数 | 类型 | 说明 | | ---- | ----- | ----------------------- | | `y` | array | 需要做差分的数组数据 | | `n` | any | 差分的阶数,0阶不做处理 | 返回:any ## `Time_GARCH(rseries, model)` 广义自回归条件异方差模型,包含四种模型:GARCH(1,1)、GJR(1,1)、IGARCH(1,1)和EGARCH(1,1),本模型采用了最大似然估计法去估计模型的系数,可做一步预测。 GARCH(1,1): GJR(1,1): IGARCH(1,1): EGARCH(1,1): 最大似然估计的目标函数值为: | 参数 | 类型 | 说明 | | --------- | ------ | ---------------------------- | | `rseries` | array | 资产收益率,为一维数组类型; | | `model` | string | 模型类别,为字符串类型; | 返回:any ## `Time_InvFun(ap, mq)` 中间函数,模型逆函数,ARMA模型的逆函数,Green函数的递推公式如下: 式中: ,,是自回归方程系数,为移动平均系数, | 参数 | 类型 | 说明 | | ---- | ----- | ------------------------------ | | `ap` | array | 自相关系数,为一维数组类型; | | `mq` | array | 移动平均系数,为一维数组类型; | 返回:array ## `Time_MAq(y, q, l)` 建议使用ARMA模型替换,移动平均模型,MA(q)模型,用条件最小二乘法去估计q阶移动平均模型的系数,返回结果有移动平均系数、残差方差、预测值及预测波动。 估计过程如下: MA(q)模型: 具有逆转形式: 用算子形式比较,可得: s 条件最小二乘法使得下列残差平方和最小: 可将上述转化为矩阵形式,先求得的取值,在利用上上式计算移动平均系数 如有常数,则常数项为原序列的均值。 ,为自协方差 其中:yt为原序列零均值化的新序列,μ为原序列的均值,θq为移动平均系数,εt是零均值,方差为σ2的平稳白噪声 | 参数 | 类型 | 说明 | | ---- | ----- | -------------------------- | | `y` | array | 样本序列,为一维数组类型; | | `q` | any | 移动平均阶数; | | `l` | any | 预测步长; | 返回:array ## `Times_Cointergration(y, x, alpha)` 建议使用Times_Cointergration_test函数替换本函数,协整检验—E-G两步法检验变量的协整关系,E-G法如下: 1)在因变量与自变量存在同阶单整关系的条件,进行最小二乘法回归; 2)把回归后的残差进行平稳性检验,如果残差序列是平稳的,则两者存在协整关系,否则不存在。 | 参数 | 类型 | 说明 | | ------- | ----- | ---------------------------------------------------------------- | | `y` | array | 因变量,为一维数组类型; | | `x` | array | 自变量矩阵,为二维数组类型; | | `alpha` | float | 1-alpha为置信水平,一般为5%,也有1%和10%,数值越小,判断越严格; | 返回:string ## `Times_Cointergration_test(y, x, constant, alpha_type, style, criterion)` E-G两步法协整检验变量的协整关系,E-G法基本步骤如下: 1)在因变量与自变量存在同阶单整关系的条件,进行最小二乘法回归; 2)把回归后的残差进行平稳性检验,如果残差序列是平稳的,则两者存在协整关系,否则不存在。 | 参数 | 类型 | 说明 | | ------------ | ------ | -------------------------------------------------------------------------------------------------- | | `y` | array | 被解释变量,为一维数组类型 | | `x` | array | 解释变量,为一维数组类型 | | `constant` | bool | 回归方程是否含有常数项,为布尔类型 | | `alpha_type` | float | 显著性水平,为实数类型,一般在0-1之间 | | `style` | any | ADF法检验单整阶数时是否存在常数或趋势项,整数类型,无常数无趋势使用0、有常数无趋势1、有常数有趋势2 | | `criterion` | string | 滞后阶数判断信息准则,字符串类型,"SBIC","AIC" | 返回:array ## `Times_ECM(y, x, resid, alpha, q, p)` 两变量间的误差修正模型,准确的刻画了两序列间的短期波动特征 误差修正模型是时间序列间协整关系的主要表现形式,准确的刻画了序列间的长期均衡关系和短期波动特征。设一阶自回归分布滞后模型为: 其中,是均值为零,方差为的白噪声,进行适当的整理有: 其中若记 称为误差修正项。 | 参数 | 类型 | 说明 | | ------- | ----- | -------------------------------------------- | | `y` | array | 被解释变量,为一维数组类型 | | `x` | array | 解释变量,为一维数组类型 | | `resid` | array | 协整检验时的残差,没有输入,使用最小二乘得到 | | `alpha` | float | 显著性水平 | | `q` | any | 整数类型,被解释变量的滞后项 | | `p` | any | 整数类型,解释变量的滞后项 | 返回:any ## `timeSeriesSplit()` 时间序列数据处理;将时间序列数据:时间、数据、(股票)处理成为(时间股票数据)的格式。注意,该函数主要用于客户端结果处理,不提供给用户程序编辑。 返回:array ## `Times_Granger(y, x, q, alpha)` Granger因果检验,原假设:X不是Y的Granger原因,Hypothesis为1表示接受原假设,0表示拒绝原假设 原假设: 分别对上述两个回归方程做回归,提取残差平方和XESS跟YESS,则F统计量如下计算: | 参数 | 类型 | 说明 | | ------- | ----- | ------------------------------------- | | `y` | array | 被解释变量,为一维数组类型 | | `x` | array | 解释变量,为一维数组类型 | | `q` | any | 滞后阶数,为整数类型 | | `alpha` | float | 显著性水平,为实数类型,一般在0-1之间 | 返回:array ## `Times_johansen(x, p, k)` 进行Johansen协整检验,第一列的迹、最大特征值统计量的原假设是:没有协整关系;第二列的迹、最大特征值统计量的原假设是最多只有一个协整关系;第三列的迹、最大特征值统计量的原假设是最多只有两个协整关系…… | 参数 | 类型 | 说明 | | ---- | ----- | ---------------------------------------------------------------------------------------------------------------------- | | `x` | array | 输入多元时间序列,每一列为一指标,每行为一时间 (nobs\*m) | | `p` | any | 是否含时间趋势及常数项p = -1,没有时间趋势以及常数项p =0,含常数项p =1,含常数项以及一次时间项p >1,含常数项以及高次时间项 | | `k` | any | 滞后阶数 | 返回:array ## `zeros(size_or_rows, cols_or_fields)` 生成元素为 `0` 的一维或二维矩阵样结果。 | 参数 | 类型 | 说明 | | ---------------- | ----- | -------------------- | | `size_or_rows` | any | 一维长度或二维行数 | | `cols_or_fields` | array | 二维列数,或列名数组 | 返回:array ## `correlMatrix(stocks, start_date)` 股票列表之间的相关系数。与当前时间有关,当前时间为区间截止日。 | 参数 | 类型 | 说明 | | ------------ | --------- | ------------------------ | | `stocks` | Array | 一维字符串数组,股票列表 | | `start_date` | TDateTime | 日期型时间,开始计算日期 | 返回:TableArray ### 示例 ```tsl //组合个股相关矩阵 setSysParam(pn_date(),20201231T); stocks:=array("SH600718","SZ000920"); return correlMatrix(stocks,intToDate(20120926)); //结果: ``` ## `symOrthogonal(data, option)` 对矩阵进行正交 | 参数 | 类型 | 说明 | | -------- | ---------- | ----------------------------------------------------- | | `data` | Array | 二维数字数组, 二维数组 行下标为数字或字符串的二维数组 | | `option` | UserDefine | 用户自定义, 正交方法的选择 | 返回:array ### 示例 ```tsl 范例01 //求data的对称正交矩阵 data := rand(10,3); return symOrthogonal(data,0); //结果,随机数,每次结果不一样,仅供参考 ``` ## `covarianceAttenuation(a)` 协方差矩阵-衰减因子。 | 参数 | 类型 | 说明 | | ---- | ----- | ------------ | | `a` | array | 二维数字数组 | 返回:any ### 示例 ```tsl a:=array((1,2,3),(4,5,6)); return covarianceAttenuation(a); 返回: ``` ## `giniCoeff(x, y, method)` 计算基尼系数,其中Method决定使用的方法。 | 参数 | 类型 | 说明 | | -------- | ---- | ---- | | `x` | | | | `y` | | | | `method` | | | 返回:real ### 示例 ```tsl x:=array(0.1,0.2,0.3,0.4,0.5,0.6); y:=x^2; return giniCoeff(x,y,1); //返回:0.07 ``` ## `hurst(data, n_rs, options)` 计算hurst指数 | 参数 | 类型 | 说明 | | --------- | ----- | ---------------------------------------------------------- | | `data` | Array | 一维数字数组,用于求hurst的收益率数据 | | `n_rs` | Array | 二维数字数组,作为变参输出回归数据n和R/S | | `options` | Array | 二维数字数组,方法选项,默认方法选项 "minEle":10,"maxSur":0 | 返回:real ### 示例 ```tsl data:=spec(fundNawzfQk(20240308t,20240831t,cy_day(),0,0), "OF000001"); t := sselect ["净值收益率(%)"] from data end; return hurst(t);// 0.47 ``` ## `weightedMedian(x, w)` 加权中位数 | 参数 | 类型 | 说明 | | ---- | ----- | ------------ | | `x` | Array | 一维数字数组 | | `w` | Array | 一维权重向量 | 返回:real ### 示例 ```tsl x := array(1,2,3,4,5); w := array(0.15,0.1,0.2,0.3,0.25); echo median(x); //返回3 return weightedMedian(x, w); //返回4 ``` ## `weightedGeomean(x, w)` 加权几何平均数 | 参数 | 类型 | 说明 | | ---- | ----- | ------------ | | `x` | Array | 一维数字数组 | | `w` | Array | 一维权重向量 | 返回:real ### 示例 ```tsl x := array(1,2,3,4,5); w := array(0.15,0.1,0.2,0.3,0.25); return weightedGeomean(x,w); //3.0261 ``` ## `weightedHarmean(x, w)` 加权调和平均数 | 参数 | 类型 | 说明 | | ---- | ----- | ------------ | | `x` | Array | 一维数字数组 | | `w` | Array | 一维权重向量 | 返回:real ### 示例 ```tsl x := array(1,2,3,4,5); w := array(0.15,0.1,0.2,0.3,0.25); return weightedHarmean(x,w); //2.553 ``` ## `weightedMean(x, w)` 加权平均数 | 参数 | 类型 | 说明 | | ---- | ----- | ------------ | | `x` | Array | 一维数字数组 | | `w` | Array | 一维权重向量 | 返回:real ### 示例 ```tsl x := array(1,2,3,4,5); w := array(0.15,0.1,0.2,0.3,0.25); return weightedMean(x,w); //3.4 ``` ## `weightedPopnVariance(x, w)` 加权总体方差 | 参数 | 类型 | 说明 | | ---- | ----- | ------------ | | `x` | Array | 一维数字数组 | | `w` | Array | 一维权重向量 | 返回:real ### 示例 ```tsl x := array(1,2,3,4,5); w := array(0.15,0.1,0.2,0.3,0.25); return weightedPopnVariance(x,w); //1.84 ``` ## `weightedVariance(x, w)` 可靠性权重加权样本方差 | 参数 | 类型 | 说明 | | ---- | ----- | ------------ | | `x` | Array | 一维数字数组 | | `w` | Array | 一维权重向量 | 返回:real ### 示例 ```tsl x := array(1,2,3,4,5); w := array(0.15,0.1,0.2,0.3,0.25); return weightedVariance(x,w); //2.374 ``` ## `weightedPopnCov(a, b, w)` 加权总体协方差 | 参数 | 类型 | 说明 | | ---- | ----- | ------------ | | `a` | Array | 一维数字数组 | | `b` | Array | 一维数字数组 | | `w` | Array | 一维权重向量 | 返回:real ### 示例 ```tsl x := array(1,2,3,4,5); w := array(0.15,0.1,0.2,0.3,0.25); y := array(6,4,3,1,9); return weightedPopnCov(x,y,w);// 0.82 ``` ## `weightedCov(a, b, w)` 可靠性权重加权样本协方差 | 参数 | 类型 | 说明 | | ---- | ----- | ------------ | | `a` | Array | 一维数字数组 | | `b` | Array | 一维数字数组 | | `w` | Array | 一维权重向量 | 返回:real ### 示例 ```tsl x := array(1,2,3,4,5); w := array(0.15,0.1,0.2,0.3,0.25); y := array(6,4,3,1,9); return weightedCov(x,y,w); // 1.058 ``` ## `weightedPopnCovariance(a, w)` 加权总体协方差矩阵 | 参数 | 类型 | 说明 | | ---- | ----- | ------------------------------ | | `a` | Array | 待计算的矩阵,每一列为一个因子 | | `w` | Array | 一维权重向量 | 返回:Matix ### 示例 ```tsl begt := 20190101T; endt := 20190415T; stocks := array('SH000001','SH000300','SH600000'); //涨幅(%)矩阵 returns := pf_GetPortfolioRate(stocks,begt,endt,1)[:,1:]; //指数函数权重 n := length(returns); w := exp(1->n); w /= sum(w); return weightedPopnCovariance(returns, w); //结果 ``` ## `weightedCovariance(a, w)` 可靠性权重加权样本方差矩阵 | 参数 | 类型 | 说明 | | ---- | ----- | ------------------------------ | | `a` | Array | 待计算的矩阵,每一列为一个因子 | | `w` | Array | 一维权重向量 | 返回:matrix ### 示例 ```tsl begt := 20190101T; endt := 20190415T; stocks := array('SH000001','SH000300','SH600000'); //涨幅(%)矩阵 returns := pf_GetPortfolioRate(stocks,begt,endt,1)[:,1:]; //指数函数权重 n := length(returns); w := exp(1->n); w /= sum(w); return weightedCovariance(returns, w); //结果 ``` ## `weightedCorrel(a, b, w)` 加权相关系数 | 参数 | 类型 | 说明 | | ---- | ----- | ------------ | | `a` | Array | 一维数字数组 | | `b` | Array | 一维数字数组 | | `w` | Array | 一维权重向量 | 返回:real ### 示例 ```tsl x := array(1,2,3,4,5); w := array(0.15,0.1,0.2,0.3,0.25); y := array(6,4,3,1,9); return weightedCorrel(x,y,w); //0.1956 ``` ## `weightedCorrelM(a, w)` 加权相关系数矩阵 | 参数 | 类型 | 说明 | | ---- | ----- | ------------------------------ | | `a` | Array | 待计算的矩阵,每一列为一个因子 | | `w` | Array | 一维权重向量 | 返回:matrix ### 示例 ```tsl begt := 20190101T; endt := 20190415T; stocks := array('SH000001','SH000300','SH600000'); //涨幅(%)矩阵 returns := pf_GetPortfolioRate(stocks,begt,endt,1)[:,1:]; //指数函数权重 n := length(returns); w := exp(1->n); w /= sum(w); return weightedCorrelM(returns, w); //结果 ``` ## `ewmMean(x, y, alphatype, adjust, iflast)` 指数加权移动平均,支持nan,为nan的值参与权重计算,但计算平均时对nan值不进行计算,即计算加权平均时把nan 值及其权重都置为0进行计算 | 参数 | 类型 | 说明 | | ----------- | ------- | ------------------------------------------------------------------------------------------------------------------ | | `x` | Array | 数组,待计算移动平均的一维数字数组 | | `y` | real | 实数,衰减因子,与alphatype共同决定实际的衰减因子alpha,见平滑系数的确定 | | `alphatype` | Integer | 用户自定义,默认为0 | | `adjust` | bool | 布尔型,是否调整,True、实际权重计算,False、根据无穷序列假设下的递推式计算,默认为False,见指数加权的两种递推式。 | | `iflast` | bool | 是否只返回最后一个数,默认为False | 返回:Array ### 示例 ```tsl sp_s(Pn_stock(),'SH000300'); sp_s(pn_date(),20190415T); x := nDay3(50,stockZf3()); return x | ewmMean(x,10,1); //结果 ``` ## `ewmStd(x, y, alphatype, adjust)` 指数加权移动标准差 | 参数 | 类型 | 说明 | | ----------- | ------- | ---------------------------------------------------------------------------------------------------------- | | `x` | Array | 待计算移动平均的一维数字数组 | | `y` | real | 衰减因子,与alphatype共同决定实际的衰减因子alpha,见平滑系数的确定 | | `alphatype` | Integer | 用户自定义,默认为0 | | `adjust` | bool | 是否调整,True、实际权重计算,False、根据无穷序列假设下的递推式计算,默认为False,见指数加权的两种递推式。 | 返回:Array ### 示例 ```tsl sp_s(Pn_stock(),'SH000300'); sp_s(pn_date(),20190415T); x := nDay3(50,stockZf3()); return x | ewmStd(x,10,1); //结果 ``` ## `ewmVar(x, y, alphatype, adjust)` 指数加权移动方差,支持nan,为nan的值参与权重计算,但计算平均时对nan值不进行计算,即计算加权平均时把nan 值及其权重都置为0进行计算,(有偏暂未实现支持nan) | 参数 | 类型 | 说明 | | ----------- | ------- | ---------------------------------------------------------------------------------------------------------- | | `x` | Array | 待计算移动平均的一维数字数组 | | `y` | real | 衰减因子,与alphatype共同决定实际的衰减因子alpha,见平滑系数的确定 | | `alphatype` | Integer | 用户自定义,默认为0 | | `adjust` | bool | 是否调整,True、实际权重计算,False、根据无穷序列假设下的递推式计算,默认为False,见指数加权的两种递推式。 | 返回:Array ### 示例 ```tsl sp_s(Pn_stock(),'SH000300'); sp_s(pn_date(),20190415T); x := nDay3(50,stockZf3()); return x | ewmVar(x,10,1); //结果 ``` ## `ewmCorrel(a, b, y, alphatype, adjust, iflast)` 指数加权移动相关系数 | 参数 | 类型 | 说明 | | ----------- | ------- | ---------------------------------------------------------------------------------------------------------- | | `a` | Array | 样本a待计算的一维数字数组 | | `b` | Array | 样本b待计算的一维数字数组 | | `y` | real | 衰减因子,与alphatype共同决定实际的衰减因子alpha,见平滑系数的确定 | | `alphatype` | Integer | 用户自定义,默认为0 | | `adjust` | bool | 是否调整,True、实际权重计算,False、根据无穷序列假设下的递推式计算,默认为False,见指数加权的两种递推式。 | | `iflast` | bool | 是否只返回最后一个数,默认为False | 返回:Array ### 示例 ```tsl sp_s(Pn_stock(),'SH000300'); sp_s(pn_date(),20190415T); a:=nDay3(50,stockZf3()); b:=nDay3(50,spec(stockZf3(),'SH000001')); return a|b|ewmCorrel(a,b,10,1); //结果 ``` ## `ewmCov(a, b, y, alphatype, adjust)` 指数加权移动协方差 | 参数 | 类型 | 说明 | | ----------- | ------- | ---------------------------------------------------------------------------------------------------------- | | `a` | array | 样本a待计算的一维数字数组 | | `b` | Array | 样本b待计算的一维数字数组 | | `y` | real | 衰减因子,与alphatype共同决定实际的衰减因子alpha,见平滑系数的确定 | | `alphatype` | Integer | 用户自定义,默认为0 | | `adjust` | bool | 是否调整,True、实际权重计算,False、根据无穷序列假设下的递推式计算,默认为False,见指数加权的两种递推式。 | 返回:array ### 示例 ```tsl sp_s(Pn_stock(),'SH000300'); sp_s(pn_date(),20190415T); a:=nDay3(50,stockZf3()); b:=nDay3(50,spec(stockZf3(),'SH000001')); return a|b|ewmCov(a,b,10,1); //结果 ``` ## `ewmSlope(y, x, a, alphatype, adjust)` 指数加权移动回归斜率,y与x协方差/x方差(指数加权移动) | 参数 | 类型 | 说明 | | ----------- | ------- | ---------------------------------------------------------------------------------------------------------- | | `y` | array | 样本y待计算的一维数字数组 | | `x` | array | 样本x待计算的一维数字数组 | | `a` | real | 衰减因子,与alphatype共同决定实际的衰减因子alpha,见平滑系数的确定 | | `alphatype` | Integer | 用户自定义,默认为0 | | `adjust` | bool | 是否调整,True、实际权重计算,False、根据无穷序列假设下的递推式计算,默认为False,见指数加权的两种递推式。 | 返回:array ### 示例 ```tsl sp_s(Pn_stock(),'SH000300'); sp_s(pn_date(),20190415T); a:=nDay3(50,stockZf3()); b:=nDay3(50,spec(stockZf3(),'SH000001')); return a|b|ewmSlope(a,b,10,1); //结果 ``` ## `ewmIntercept(y, x, a, alphatype, adjust)` 指数加权移动回归截据项,y平均-斜率\*x平均 (指数加权移动) | 参数 | 类型 | 说明 | | ----------- | ------- | ---------------------------------------------------------------------------------------------------------- | | `y` | array | 样本y待计算的一维数字数组 | | `x` | array | 样本x待计算的一维数字数组 | | `a` | real | 衰减因子,与alphatype共同决定实际的衰减因子alpha,见平滑系数的确定 | | `alphatype` | Integer | 用户自定义,默认为0 | | `adjust` | bool | 是否调整,True、实际权重计算,False、根据无穷序列假设下的递推式计算,默认为False,见指数加权的两种递推式。 | 返回:array ### 示例 ```tsl sp_s(Pn_stock(),'SH000300'); sp_s(pn_date(),20190415T); a:=nDay3(50,stockZf3()); b:=nDay3(50,spec(stockZf3(),'SH000001')); return a|b|ewmIntercept(a,b,10,1); ``` ## `ewmResidual(y, x, a, alphatype, adjust)` 指数加权移动回归残差,y– (截距+斜率\*x)(指数加权移动) | 参数 | 类型 | 说明 | | ----------- | ------- | ---------------------------------------------------------------------------------------------------------- | | `y` | array | 样本y待计算的一维数字数组 | | `x` | array | 样本x待计算的一维数字数组 | | `a` | real | 衰减因子,与alphatype共同决定实际的衰减因子alpha,见平滑系数的确定 | | `alphatype` | Integer | 用户自定义,默认为0 | | `adjust` | bool | 是否调整,True、实际权重计算,False、根据无穷序列假设下的递推式计算,默认为False,见指数加权的两种递推式。 | 返回:array ### 示例 ```tsl sp_s(Pn_stock(),'SH000300'); sp_s(pn_date(),20190415T); a:=nDay3(50,stockZf3()); b:=nDay3(50,spec(stockZf3(),'SH000001')); return a|b|ewmResidual(a,b,10,1); ``` ## `auc(x, y)` 计算auc,根据roc_curve计算出来的fpr和tpr序列值计算AUC值 | 参数 | 类型 | 说明 | | ---- | ----- | ------- | | `x` | Array | x坐标点 | | `y` | Array | y坐标点 | 返回:real ### 示例 ```tsl y_true := array(1,1,2,2,1,2,1,2); y_score := array(0.1,0.4,0.35,0.8,0.5,0.7,0.45,0.6); ret := roc_curve(y_true,y_score,2); fpr := ret[0]; tpr := ret[1]; return auc(fpr,tpr); //0.8125 ``` ## `MTMMa_v(n, m)` 动力指标MTM的移动平均MTMMa,与系统证券pn_stock()、系统时间pn_date()、系统周期pn_cycle()、复权方式pn_rate()和复权基准日pn_rateday()相关。调用时需注意设置系统参数。 | 参数 | 类型 | 说明 | | ---- | ---- | ---------------- | | `n` | any | 整数,交易日天数 | | `m` | any | 整数,交易日天数 | 返回:float ## `MTM_v(n)` 动力指标MTM,计算当日收盘价C与N日前的收盘价Cn之差M,差值越来越大则意味着市势正加速上升,与系统证券pn_stock()、系统时间pn_date()、系统周期pn_cycle()、复权方式pn_rate()和复权基准日pn_rateday()相关。调用时需注意设置系统参数。 | 参数 | 类型 | 说明 | | ---- | ---- | ---------------- | | `n` | any | 整数,交易日天数 | 返回:float ## `ar_SubArray(stocks, rdate)` 字符串数组类型教学函数。返回字符串数组Stocks中每一只股票在指定报告期Rdate的十大股东情况。 | 参数 | 类型 | 说明 | | -------- | -------- | -------------- | | `stocks` | array | 证券,股票代码 | | `rdate` | datetime | 报告期 | 返回:array ## `ar_Define1(_type)` 数组类型教学函数。跟据Type的值来返回相应的随机数组。 | 参数 | 类型 | 说明 | | ------- | ---- | ---------- | | `_type` | any | 用户自定义 | 返回:array ## `ar_Define3()` 数组类型教学函数。创建一个10×10的二维随机数组,同时对列下标命名。 返回:array ## `Demo_mt_va_Cholesky()` mt_va_Cholesky()函数教学函数。对指定对称正定矩阵的行列式值平方根,其中矩阵为array( (5.0,7.0,6.0,5.0),(7.0,12.0,8.0,7.0), (6.0,8.0,10.0,9.0),(5.0,7.0,9.0,10.0));。 返回:float ## `Demo_mt_iv_Gauss_Jordan()` mt_iv_Gauss_Jordan()函数教学函数。求一般实矩阵的逆矩阵,其中求逆的矩阵A=array((0.2368,0.2471,0.2568,1.2671),(0.1968,0.2071,1.2168,0.2271),(0.1581,1.1675,0.1768,0.1871),(1.1161,0.1254,0.1397,0.149))。 返回:any ## `Demo_mt_Subtraction()` mt_Subtraction()函数教学函数。矩阵减法,其中矩阵A=array((3,-3),(5,-5)),B=array((-2,4),(1,8)),返回A-B。 返回:any ## `Demo_mt_Addition()` mt_Addition ()函数教学函数。矩阵加法,其中矩阵A=array((3,-3),(5,-5)),B=array((-2,4),(1,8)),返回A+B。 返回:any ## `Demo_mt_Transposition()` mt_Transposition()函数教学函数。矩阵转置,返回转置后的矩阵,其中转置的矩阵A=array((3,-3,11),()5,-5,8)。 返回:any ## `Framedrop_duplicates(data, subset, keep, rowname)` 数据表-去重 | 参数 | 类型 | 说明 | | --------- | ------ | --------------------------------------------------- | | `data` | array | Table,二维数据表,源数据 | | `subset` | string | String,去重字段 | | `keep` | string | String,去重保留方法,""f"":保留首个,""l"":保留最后 | | `rowname` | string | String,保留原索引重置字段名 | 返回:array ## `Framedrop_na(data, how, subset)` 数据表-去掉含Nan的行 | 参数 | 类型 | 说明 | | -------- | ------ | ------------------------------------------------------ | | `data` | array | Table,二维数据表,源数据 | | `how` | string | String,去na行方法,默认/1/""any"":任意,2/""all"":所有 | | `subset` | string | String,去重字段 | 返回:array ## `framePivot_table(t, index, columns, vals, aggfunc, aggfuncnames)` 分组、透视、汇总,类似可见Pivot_table | 参数 | 类型 | 说明 | | -------------- | ------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `t` | any | 数据表类型,数据表 | | `index` | string | 字符串,行分类字段,字段值含有nill等不可设为索引 | | `columns` | array | 一维字符串数组,列分类字段,字段值含有nill等不可设为索引 | | `vals` | array | 一维字符串数组,值字段,未指定时,代表对所有除index、columns 指定字段之外的所有字段计算 | | `aggfunc` | string | 字符串,值汇总函数,支持如下:;a、所有 TS_SQL 聚合函数:e.g:"avg"(avgof),"sum"(sumof);b、内置函数:;"\_details": 分组详情;"\_first": 第一个;"\_last": 最后一个;c、自定义函数中使用关键字thisgroup 得到当前分组数据。 | | `aggfuncnames` | array | 一维字符串数组,自定义汇总函数名称对照表 | 返回:array ## `Framelag_zf(t, period, fillzero)` 数据表-推移涨幅(%) 涨幅(%)算法: period>0: 前n期涨幅 r\[i\] := (t(i)/t(i-period)-1)\*100; period<0: 到未来n期涨幅 r\[i\] := (t(i-period)/t(i)-1)\*100; 注意period>0时,与framePct_change的结果一致。 | 参数 | 类型 | 说明 | | ---------- | ----- | --------------------------------------- | | `t` | array | Array of number,数据表,支持一维和二维 | | `period` | any | Integer,移动期数,默认1 | | `fillzero` | bool | Bool,下标越界是,是否返回0.False返回inf | 返回:array ## `Framepct_change(t, period, fillzero)` 数据表-到当期的变动百分比(%) 变动百分比(%)算法 r\[i\] := (t(i)/t(i-period)-1)\*100; | 参数 | 类型 | 说明 | | ---------- | ----- | ---------------------------------------- | | `t` | array | Array of number,数据表,支持一维和二维 | | `period` | any | Integer,变动期数,默认1 | | `fillzero` | bool | Bool,下标越界是,是否返回0. False返回inf | 返回:array ## `Frame_addprefix(t, prefix, ifcopy)` 数据表-数组下标批量加前缀 二维数组,对列名加前缀 一维数组,对行下标加前缀 | 参数 | 类型 | 说明 | | -------- | ------ | -------------------------------------- | | `t` | any | Table,源数组 | | `prefix` | string | String,前缀 | | `ifcopy` | bool | Bool,是否在拷贝后的数组改列名,默认True | 返回:array ## `Frame_addsuffix(t, suffix, ifcopy)` 数据表-数组下标批量加后缀 二维数组,对列名加后缀 一维数组,对行下标加后缀 | 参数 | 类型 | 说明 | | -------- | ------ | --------------------------------------- | | `t` | any | Table,源数组 | | `suffix` | string | String,后缀 | | `ifcopy` | bool | Bool,是否在拷贝后的数组改列名,默认True | 返回:array ## `chol(h, l, p, options, sneg)` 进行乔列斯基分解,H对称正定,则可以得到三角阵L | 参数 | 类型 | 说明 | | --------- | ------- | ------------------------------------------------------------ | | `h` | array | 需要被分解的对称矩阵,正定矩阵的分解才能成功 | | `l` | array | 变参返回乔列斯基分解得到的三角阵 | | `p` | integer | 变参返回H的分解信息,-1表示全部分解成功,否则表示分解到第p步 | | `options` | array | 三角阵选项,默认'upper'为上三角,'lower' 为下三角 | | `sneg` | array | 当 H 非正定时计算曲率方向,正定时为空 | 返回:array #### 示例 ```tsl h := corr(rand(100, 4)); chol(h, l, p); // 乔列斯基分解 if p = -1 then return l; // p=-1表示分解成功 // 输出: // Execute script error at Line:1 // function:__main__:line 1:instruction:rand: function:corr compile error or not found // function:__main__:line 1:instruction:rand: function execute error ``` ## `reIndex2(data, flag)` 修改数组的行标或列名,主要用于字符串下标修改为数字下标等 | 参数 | 类型 | 说明 | | ------ | ---------------- | ---- | | `data` | array,tablearray | | | `flag` | integer | | 返回:array,tablearray #### 示例 范例数据表:a := array('C':('A':1,'B':'too'),'D':('A':2,'B':'two')); ```tsl // 其显示如下: ``` 范例一:将表列标改为数字 ```tsl a := array('C': ('A': 1, 'B': 'too'), 'D': ('A': 2, 'B': 'two')); return reIndex2(a, 0); // 输出: // Execute script error at Line:2 // function:__main__:line 2:instruction:usercall: function:reIndex2 compile error or not found // function:__main__:line 2:instruction:usercall: function execute error ``` 范例二:将行列标作为首列首行 ```tsl a := array('C': ('A': 1, 'B': 'too'), 'D': ('A': 2, 'B': 'two')); return reIndex2(a, 5); // 输出: // Execute script error at Line:2 // function:__main__:line 2:instruction:usercall: function:reIndex2 compile error or not found // function:__main__:line 2:instruction:usercall: function execute error ``` ## `orth(a)` 矩阵范围内的标准正交基向量 | 参数 | 类型 | 说明 | | ---- | ----- | ------ | | `a` | array | 数组, | 返回:array #### 示例 ```tsl // 计算矩阵A的标准正交基 a := array((0, 1), (1, 1), (1, 0)); return orth(a); // 输出: // Execute script error at Line:3 // function:__main__:line 3:instruction:usercall: function:orth compile error or not found // function:__main__:line 3:instruction:usercall: function execute error ``` ## `det(a)` 行列式 | 参数 | 类型 | 说明 | | ---- | ----- | ----------------- | | `a` | array | 二维数字数组 样本 | 返回:real #### 示例 ```tsl a := array((1, 2), (3, 4)); return det(a); // -2 ``` ## `isSymmetry(a, tol)` 判断是否为对称矩阵 | 参数 | 类型 | 说明 | | ----- | ----- | -------------- | | `a` | array | array 二维数组 | | `tol` | real | real 精度 | 返回:integer #### 示例 ```tsl a := array((2, 1), (1, 3)); return isSymmetry(a, 0.1); // 1 ``` ## `diag(a)` 对角阵 | 参数 | 类型 | 说明 | | ---- | ----- | ---------- | | `a` | array | array 数组 | 返回:array #### 示例 ```tsl a := array((2, 1), (1, 3)); return diag(a); // array(2,3); ``` ## `norm2(a, flag)` 范数 | 参数 | 类型 | 说明 | | ------ | ------ | ----------------- | | `a` | array | 二维数字数组 样本 | | `flag` | string | string 范数类型 | 返回:real #### 示例 ```tsl a := array((2, 1), (1, 3)); return norm2(a, 'inf'); // 4 ``` ## `roots(p)` 一元n次方程求根 | 参数 | 类型 | 说明 | | ---- | ----- | ------------ | | `p` | array | array 多项式 | 返回:array #### 示例 ```tsl // 求根:3x^3+x^2+x^1+0^0=0 return roots(array(0, 1, 1, 3)); // 输出: // Execute script error at Line:2 // function:__main__:line 2:instruction:array: function:roots compile error or not found // function:__main__:line 2:instruction:array: function execute error ``` ## `cond(x)` 求矩阵 X 的条件数,最大奇异值除最小奇异值 | 参数 | 类型 | 说明 | | ---- | ----- | ---------------------------------- | | `x` | array | array 需要求条件数的矩阵或二维数组 | 返回:real #### 示例 ```tsl x := array((9, 1), (-1, 0), (0, 2), (1, 1)); return cond(x); // 4.22 ``` ## `pinv(a, t)` 伪逆 | 参数 | 类型 | 说明 | | ---- | ----- | --------------------------------------- | | `a` | array | array 矩阵 | | `t` | real | real 精度 默认为 2.220446049250313e-016 | 返回:array #### 示例 ```tsl x := array((9, 1), (-1, 0), (0, 2), (1, 1)); return pinv(x); // 输出: // Execute script error at Line:2 // function:__main__:line 2:instruction:usercall: function:pinv compile error or not found // function:__main__:line 2:instruction:usercall: function execute error ``` ## `eigen(a, eigen, eigenvectors, isreal)` 特征根与特征向量 | 参数 | 类型 | 说明 | | -------------- | ------- | --------------------------------- | | `a` | array | array 特征值分解的数据 | | `eigen` | array | array 变参返回特征值 | | `eigenvectors` | array | array 变参返回特征向量 | | `isreal` | integer | bool 是否只输出实特征值及特征向量 | 返回:integer #### 示例 ```tsl a := array((1, 2), (3, 4)); eigen(a, eigen); return eigen; // array(-0.37,5.37) ``` ## `isDefinite(h)` 判断矩阵是否正定、半正定,采用 Cholesky 分解方法 | 参数 | 类型 | 说明 | | ---- | ----- | ---------- | | `h` | array | array 样本 | 返回:real #### 示例 ```tsl x := array((3, 1), (1, 4)); return isDefinite(x); // 1 ``` ## `transPose(data)` 数组转置。注意,该函数主要用于客户端结果处理,不提供给用户程序编辑。 | 参数 | 类型 | 说明 | | ------ | ----- | ----------------------------------------------------- | | `data` | array | 数据表结构数据,第一列数据必须为字符串并且列数要大于3 | 返回:array ## `transPoseForChart(data)` 表格转置。注意,该函数主要用于客户端结果处理,不提供给用户程序编辑。 | 参数 | 类型 | 说明 | | ------ | ----- | ---------- | | `data` | array | 数据表类型 | 返回:array ## `transPoseForChartSysParam()` 表格转置。注意,该函数主要用于客户端结果处理,不提供给用户程序编辑。 返回:array ## `transPoseForChartSysParamEx()` 表格转置。注意,该函数主要用于客户端结果处理,不提供给用户程序编辑。 返回:array ## `transDataStandardize(nil_v)` 空(NIL)数据标准化。注意,该函数主要用于客户端结果处理,不提供给用户程序编辑。 | 参数 | 类型 | 说明 | | ------- | ------- | ------------------------- | | `nil_v` | integer | Nil类型的数据标准化后的值 | 返回:array ## `mbbub(p, z)` 排序,对数组P按照从小到大的顺序排序,把数组排序的顺序对应的下标值返回到数组Z中 | 参数 | 类型 | 说明 | | ---- | ----- | ---------------- | | `p` | array | 一维数字数组类型 | | `z` | array | 一维数字数组类型 | 返回:array ### 示例 ```tsl p := array(2.72, 1.24, 1.31, 0.02, 0.88, 2.18); return mbbub(p, z); // 输出: // Execute script error at Line:2 // function:__main__:line 2:instruction:usercall: function:mbbub compile error or not found // function:__main__:line 2:instruction:usercall: function execute error ``` ## `componentScoreMatrix(cm, r)` 因子得分系数矩阵 | 参数 | 类型 | 说明 | | ---- | ----- | ------------------------------ | | `cm` | array | 二维数字数组类型,载荷矩阵 | | `r` | array | 二维数字数组类型,相关系数矩阵 | 返回:array ### 示例 ```tsl // 设置样本矩阵 zt := array((0.7592, 1.7593, 21.9279, 48.5626, 55.1679), (0.0490, 0.4457, 2.2255, 82.2658, 192.4348), (-2.2313, -1.3096, -59.8883, 3.9922, -80.2419), (0.1364, 0.539, 4.3910, 55.1438, 46.0612), (0.7233, 1.9467, 15.6127, 111.3018, 58.3969)); z_t_s := Standarize_II(z_t); // 标准化 mt_Transposition(z_t_s, z); // 转置 r := correlationMatrix(z); // 相关系数矩阵 Eigen_Jacobi(r, eigen_value, eigen_vector); // 特征值&特征向量 cm := componentMatrix(eigen_value, eigen_vector, max_eigen_value); // 载荷矩阵 return componentScoreMatrix(cm, r); // 输出: // 示例包含说明文字,未作为可执行片段运行。 ``` ## `factorScoreMatrix(cs, z)` 主因子得分 | 参数 | 类型 | 说明 | | ---- | ----- | ------------------------------ | | `cs` | array | 二维数字数组类型,因子得分矩阵 | | `z` | array | 二维数字数组类型,原始数据矩阵 | 返回:array ### 示例 ```tsl // 设置样本矩阵 zt := array((0.7592, 1.7593, 21.9279, 48.5626, 55.1679), (0.0490, 0.4457, 2.2255, 82.2658, 192.4348), (-2.2313, -1.3096, -59.8883, 3.9922, -80.2419), (0.1364, 0.539, 4.3910, 55.1438, 46.0612), (0.7233, 1.9467, 15.6127, 111.3018, 58.3969)); z_t_s := Standarize_II(z_t); // 标准化 mt_Transposition(z_t_s, z); // 转置 r := correlationMatrix(z); // 相关系数矩阵 Eigen_Jacobi(r, eigen_value, eigen_vector); // 特征值&特征向量 cm := componentMatrix(eigen_value, eigen_vector, max_eigen_value); // 载荷矩阵 cs := componentScoreMatrix(cm, r); // 因子得分矩阵 return factorScoreMatrix(cs, zt); // 输出: // 示例包含说明文字,未作为可执行片段运行。 ``` ## `rotatedComponentMatrix(cm)` 返回方差最大正交旋转矩阵 | 参数 | 类型 | 说明 | | ---- | ----- | -------------------------- | | `cm` | array | 二维数字数组类型,载荷矩阵 | 返回:array ### 示例 ```tsl // 设置样本矩阵 zt := array((0.7592, 1.7593, 21.9279, 48.5626, 55.1679), (0.0490, 0.4457, 2.2255, 82.2658, 192.4348), (-2.2313, -1.3096, -59.8883, 3.9922, -80.2419), (0.1364, 0.539, 4.3910, 55.1438, 46.0612), (0.7233, 1.9467, 15.6127, 111.3018, 58.3969)); z_t_s := Standarize_II(z_t); // 标准化 mt_Transposition(z_t_s, z); // 转置 r := correlationMatrix(z); // 相关系数矩阵 Eigen_Jacobi(r, eigen_value, eigen_vector); // 特征值&特征向量 cm := componentMatrix(eigen_value, eigen_vector, max_eigen_value); // 载荷矩阵 return rotatedComponentMatrix(cm); // 输出: // 示例包含说明文字,未作为可执行片段运行。 ``` ## `princaipalComponentAnalysis(zt)` 主成分分析 | 参数 | 类型 | 说明 | | ---- | ----- | -------------------------- | | `zt` | array | 二维数字数组类型,样本矩阵 | 返回:array ### 示例 ```tsl // 设置样本矩阵 zt := array((0.7592, 1.7593, 21.9279, 48.5626, 55.1679), (0.0490, 0.4457, 2.2255, 82.2658, 192.4348), (-2.2313, -1.3096, -59.8883, 3.9922, -80.2419), (0.1364, 0.539, 4.3910, 55.1438, 46.0612), (0.7233, 1.9467, 15.6127, 111.3018, 58.3969)); return princaipalComponentAnalysis(zt); // 输出: // Execute script error at Line:7 // function:__main__:line 7:instruction:usercall: function:princaipalComponentAnalysis compile error or not found // function:__main__:line 7:instruction:usercall: function execute error ``` ## `componentMatrix(eigen_value, eigen_vector, max_eigen_value)` 载荷矩阵 | 参数 | 类型 | 说明 | | ----------------- | ----- | ------------------------------------ | | `eigen_value` | array | 一维数字数组类型,特征根 | | `eigen_vector` | array | 二维数字数组类型,特征向量 | | `max_eigen_value` | array | 一维数字数组类型,主因子对应的特征根 | 返回:array ### 示例 ```tsl // 设置样本矩阵 zt := array((0.7592, 1.7593, 21.9279, 48.5626, 55.1679), (0.0490, 0.4457, 2.2255, 82.2658, 192.4348), (-2.2313, -1.3096, -59.8883, 3.9922, -80.2419), (0.1364, 0.539, 4.3910, 55.1438, 46.0612), (0.7233, 1.9467, 15.6127, 111.3018, 58.3969)); z_t_s := Standarize_II(z_t); // 标准化 mt_Transposition(z_t_s, z); // 转置 r := correlationMatrix(z); // 相关系数矩阵 Eigen_Jacobi(r, eigen_value, eigen_vector); // 特征值&特征向量 return componentMatrix(eigen_value, eigen_vector, max_eigen_value); // 输出: // 示例包含说明文字,未作为可执行片段运行。 ``` ## `fScoreResult(factor_arr, max_eigen_value)` 获取主因子得分 | 参数 | 类型 | 说明 | | ----------------- | ----- | ------------------------------------ | | `factor_arr` | array | 二维数字数组类型,因子得分矩阵 | | `max_eigen_value` | array | 二维数字数组类型,主因子对应的特征根 | 返回:array ### 示例 ```tsl // 设置样本矩阵 zt := array((0.7592, 1.7593, 21.9279, 48.5626, 55.1679), (0.0490, 0.4457, 2.2255, 82.2658, 192.4348), (-2.2313, -1.3096, -59.8883, 3.9922, -80.2419), (0.1364, 0.539, 4.3910, 55.1438, 46.0612), (0.7233, 1.9467, 15.6127, 111.3018, 58.3969)); z_t_s := Standarize_II(z_t); // 标准化 mt_Transposition(z_t_s, z); // 转置 r := correlationMatrix(z); // 相关系数矩阵 Eigen_Jacobi(r, eigen_value, eigen_vector); // 特征值&特征向量 cm := componentMatrix(eigen_value, eigen_vector, max_eigen_value); // 载荷矩阵 cs := componentScoreMatrix(cm, r); // 因子得分系数矩阵 f_arr := factorScoreMatrix(cs, z_t_s); // 样本公共因子得分 return fScoreResult(f_arr, max_eigen_value); // 输出: // 示例包含说明文字,未作为可执行片段运行。 ``` ## `ar(y, p, approach)` 自回归模型,AR(p)模型,选择使用最小二乘,Yule-Walker方法,Foiward-backward,Geometric lattice,Burg’s lattice-bas去估计p阶自回归模型的系数,返回结果有自回归系数、残差方差、预测值及预测波动等信息 | 参数 | 类型 | 说明 | | ---------- | ------------- | ---------------------------------------- | | `y` | array of real | 样本序列,为一维数组类型,注意要零均值化 | | `p` | integer | 自回归阶数 | | `approach` | string | 估计方法 | 返回:array ### 示例 ```tsl elps := randnorm(0, 1, 200); y := array(); y[0] := 0; y[1] := 0; for i := 2 to 199 do y[i] := -0.5 * y[i-1]+0.3 * y[i-2]+elps[i]; return ar(y, 2, 'ls'); // 输出: // Execute script error at Line:1 // function:__main__:line 1:instruction:usercall: function:randnorm compile error or not found // function:__main__:line 1:instruction:usercall: function execute error ``` ## `garchFit(model_spec, y, x, e0, s0, y0)` 广义自回归条件异方差模型,采用极大似然估计方法估计模型的参数 | 参数 | 类型 | 说明 | | ------------ | ----- | ------------------------------------------------------ | | `model_spec` | array | 模型设置项,为数据表类型,参考:表8-5 | | `y` | array | 原始数据,一维数字数组 | | `x` | array | 均值方程回归外生变量,二维数字数组,可缺省 | | `e0` | array | 自回归方程残差序列起始的几项取值,一维数字数组,可缺省 | | `s0` | array | 条件方程方差序列起始的几项取值,一维数字数组,可缺省 | | `y0` | array | 原始序列起始的几项取值,一维数字数组,可缺省 | 返回:array ### 示例 ```tsl // 以1995年1月至2000年8月日元兑换美元汇率值序列(JPY,如图8-9)为例介绍怎样用天软来进行ARCH建模(序列共1427个值)。 // 图8-9日元兑换美元汇率值(JPY)序列图8-10DJPY时间序列 JPY序列显然是一个非平稳时间序列,对JPY进行差分,DJPY表示收益,见图8-10,因为DJPY是一个平稳时间序列,应该使用DJPY建立时间序列模型。按照ARMA模型中讲的那样对DJPY拟合ARMA模型,根据自相关系数以及偏自相关系数,AIC准则等,我们最终将模型定为AR(3)模型。 d_jpy := diff(jpy); m := mean(d_jpy); d_jpy := d_jpy-m; ret := arma(d_jpy, 3, 0); // 得到的结果是: // 图8-11 AR(3)残差 // 该模型的残差如图8-11所示,我们怀疑残差含有异方差,使用Time_ARCHTest函数检验。 Time_ARCHTest(ret["e"], 1, 0.05); // 图8-12 AR(3)残差 // 拒绝原假设,认为模型含有异方差,建立ARCH模型,首先建立ARCH(7)模型(尝试多次,最大滞后选为7为宜)。 // 图8-13ARCH模型结果图8-14异方差估计情况 modelspec := array( ("R": 3, "M": 0, "AR": nil, "MA": nil, "Regress": nil, "VarianceModel": "GARCH", "C": nan, "P": 0, "Q": 7, "GARCH": array(), "ARCH": array(), "Leverage": nil)); t := garchFit(model_spec, d_jpy); // 得到的异方差如图8-14。ARCH模型中的的滞后项太多,应该尝试建立GARCH(1, 1)模型: modelspec := array( ("R": 3, "M": 0, "AR": nil, "MA": nil, "Regress": nil, "VarianceModel": "GARCH", "C": nan, "P": 1, "Q": 1, "GARCH": array(), "ARCH": array(), "Leverage": nil)); t := garchFit(model_spec, d_jpy); // 图8-15GARCH模型结果图8-16方差估计情况 ``` ## `wavedec(x, n, wname)` 使用给定的小波wname进行一维多尺度离散小波分析,返回信号xin在n层上的小波分解。输出分解结构包含小波分解向量C和相应的记录向量L. | 参数 | 类型 | 说明 | | ------- | ------- | ------------------------ | | `x` | array | 一维序列,一维数字数组 | | `n` | integer | 小波分解层数,正整数 | | `wname` | string | 基础小波函数,字符串类型 | 返回:array ### 示例 ```tsl setSysParam(PN_Stock(), "SH000300"); setSysParam(pn_date(), intToDate(20120731)); close300 := nDay(800, "时间", dateTimeToStr(sp_time(1)), "收盘价", close()); close3 := close300[: , "收盘价"]; return wave := wavedec(close3, 3, "db3"); // 输出:结果格式: // 第一行是小波分解向量C,第二行是相应的记录向量L // 下面我们从图像来直接看看小波分解: // 原始序列: // 原始序列可分解成: ``` ## `wrcoef(o, c, l, wname, n)` 一维离散小波单支重构,小波分析,小波重构中间函数或者细节系数(高频)提取 | 参数 | 类型 | 说明 | | ------- | ------- | ------------------------------------------------------------- | | `o` | string | 为字符串类型,'a' 一维离散小波单支重构,'d' 细节系数提取 | | `c` | array | 小波分解向量C,数组类型,参考[Wavedec]函数的输出 | | `l` | array | 相应的记录向量L,数组类型,参考[Wavedec]函数的输出 | | `wname` | string | 基础小波函数,字符串类型,取值参考[Wavedec]函数的wname输入参数 | | `n` | integer | 小波分解层数,正整数 | 返回:array ### 示例 ```tsl setSysParam(PN_Stock(), "SH000300"); setSysParam(pn_date(), intToDate(20120731)); close300 := nDay(800, "时间", dateTimeToStr(sp_time(1)), "收盘价", close()); close3 := close300[: , "收盘价"]; wave := wavedec(close3, 3, "db3"); c := wave[0]; l := wave[1]; return wrcoef('a', c, l, 'db3', 3); // 去除前3层高频谐波 // Return wrcoef('d',c,l,'db3',3);//第3次分解得到的高频 // 输出: // 去除前3层高频谐波 return wrcoef('d', c, l, wname, 3); // 第三次分解得到的高频 ``` ## `wavelet(s, wname, n, options)` 一维序列小波消噪 | 参数 | 类型 | 说明 | | --------- | ------- | ------------------------------------------------------------- | | `s` | array | 一维序列,一维数字数组 | | `wname` | string | 基础小波函数,字符串类型,取值参考[Wavedec]函数的wname输入参数 | | `n` | integer | 小波分解层数,正整数 | | `options` | array | 方法选项 | 返回:array ### 示例 ```tsl s := array(2484.83, 2479.05, 2482.34, 2437.79, 2447.75, 2512.96, 2443.06, 2433.16, 2393.18, 2415.05, 2392.06, 2365.34, 2359.22, 2344.79, 2348.52, 2420.00, 2438.79, 2431.38, 2440.4, 2383.49, 2377.51, 2331.37, 2317.27, 2370.33, 2409.67, 2427.48, 2435.61, 2473.41, 2468.25, 2470.02, 2504.11, 2508.09, 2528.29, 2509.8, 2503.84, 2524.92, 2479.54, 2481.08, 2528.71, 2529.76, 2466.96, 2463.05, 2416.56, 2415.13, 2412.62, 2395.06, 2397.55, 2380.22, 2383.03, 2412.39, 2333.41, 2386.86, 2360.66, 2333.23, 2325.91, 2332.73, 2329.82, 2315.27, 2291.54, 2248.59, 2228.52, 2180.9, 2224.84, 2218.24, 2215.93, 2191.15, 2186.3, 2204.78, 2190.11, 2166.21, 2170.01, 2173.56, 2199.42, 2169.39, 2148.45, 2163.4, 2225.89, 2285.74, 2276.05, 2275.01, 2244.58, 2206.19, 2298.38, 2266.38, 2296.07, 2319.12, 2285.04, 2292.61, 2268.08, 2312.56, 2330.41, 2331.14, 2291.9, 2347.53, 2349.59, 2351.98, 2351.85, 2344.77, 2366.7, 2356.86, 2357.18, 2363.6, 2381.43, 2403.59, 2409.55, 2439.63, 2447.06, 2451.86, 2428.49, 2426.11, 2460.69); n := 2; wname := "db14"; options := array('brief': 1, 'sigma': 0, 'which': 1, 'alpha': 2, "thr": 0, 'sorh': 's'); return s|wavelet(s, wname, n, options); // 消噪和原始数据对比: ``` ## `accumulativeYtMtoYtm(t, fname, dw)` 复合益率转日收益率。 | 参数 | 类型 | 说明 | | ------- | ------- | ---------------------------------- | | `t` | array | 数据表类型,复合收益率序列 | | `fname` | string | 字符串,收益字段名称 | | `dw` | integer | 整数,决定源数据的单位和返回的数据 | 返回:array ### 示例 ```tsl // 源数据单位为1,设dw=2,同时返回复合收益率和转换后的日收益率 t1 := array(('日期': 20180801T, '复合收益率': 0.1), ('日期': 20180802T, '复合收益率': 0.4), ('日期': 20180803T, '复合收益率': 0.7)); r1 := accumulativeYtMtoYtm(t1, '复合收益率', 2); // 源数据单位为%,设dw=3,同时返回复合收益率和转换后的日收益率 t2 := array(('日期': 20180801T, '复合收益率(%)': 10), ('日期': 20180802T, '复合收益率(%)': 40), ('日期': 20180803T, '复合收益率(%)': 70)); r2 := accumulativeYtMtoYtm(t2, '复合收益率(%)', 3); return r1|r2; // 输出:返回: ``` ## `ytmToAccumulativeYtm(t, f_name, dw)` 日收益率转换复合收益率。 | 参数 | 类型 | 说明 | | -------- | ------- | ---------------------------------- | | `t` | array | 数组。日收益率序列 | | `f_name` | string | 字符串。收益字段名称 | | `dw` | integer | 整数。决定源数据的单位和返回的数据 | 返回:array|real ### 示例 范例01: ```tsl // 源数据单位为1,dw=2,同时返回日收益率和转换后的复合收益率 t1 := array(('日期': 20180801T, '日收益率': 0.3), ('日期': 20180802T, '日收益率': 0.6), ('日期': 20180803T, '日收益率': 0.9)); r1 := ytmToAccumulativeYtm(t1, '日收益率', 2, 0); // 源数据单位为%,dw=3,同时返回日收益率和转换后的复合收益率 t2 := array(('日期': 20180801T, '日收益率(%)': 30), ('日期': 20180802T, '日收益率(%)': 60), ('日期': 20180803T, '日收益率(%)': 90)); r2 := ytmToAccumulativeYtm(t2, '日收益率(%)', 3, 0); return r1|r2; // 输出: // 示例包含说明文字,未作为可执行片段运行。 ``` 范例2: ```tsl // 计算基金OF000009易方达天天理财A的累计收益率(%) setSysParam(PN_Stock(), "OF000009"); t := array(('日期': 20150104T, '每万份基金单位收益': 4.3769), ('日期': 20150105T, '每万份基金单位收益': 1.2507), ('日期': 20150106T, '每万份基金单位收益': 1.4671)); r := ytmToAccumulativeYtm(t, '每万份基金单位收益', 5, 0); return r; // 输出: // Execute script error at Line:6 // function:__main__:line 6:instruction:usercall: function:ytmToAccumulativeYtm compile error or not found // function:__main__:line 6:instruction:usercall: function execute error ``` ## `ratioValue(v1, v2)` 比率(财务分析) | 参数 | 类型 | 说明 | | ---- | ---- | ------------ | | `v1` | real | 实型,期末值 | | `v2` | real | 实型,期初值 | 返回:real ### 示例 ```tsl // 返回-1与-2的比率。 return ratioValue(-1, -2); // 结果:-0.5 ``` ## `outPutValueByUnit(data_type, data_unit)` 单位转换。 | 参数 | 类型 | 说明 | | ----------- | ------ | ---------------- | | `data_type` | string | 字符串,数据类型 | | `data_unit` | real | 实型,指定单位 | 返回:real ### 示例 ```tsl // 返回1234.5以10为单位转换后的结果 return outPutValueByUnit(1234.5, 'Real', 10); // 结果:123.45 ``` ## `outPutLnGrowRatio(v1, v2)` 对数增长率输出(%)。 | 参数 | 类型 | 说明 | | ---- | ---- | ------------ | | `v1` | real | 实型,期末值 | | `v2` | real | 实型,期初值 | 返回:real ### 示例 ```tsl // 取3与4的对数增长率 return outPutLnGrowRatio(3, 4); // 结果:-28.77 ``` ## `outPutGrowValue(v1, v2)` 增长 | 参数 | 类型 | 说明 | | ---- | ---- | ------------ | | `v1` | real | 实型,期末值 | | `v2` | real | 实型,期初值 | 返回:real ### 示例 ```tsl // 返回13与14的差值 return outPutGrowValue(13, 14); // 结果:-1 ``` ## `multyValue(v1, v2)` 乘法(财务分析) | 参数 | 类型 | 说明 | | ---- | ---- | ------------ | | `v1` | real | 实型,期末值 | | `v2` | real | 实型,期初值 | 返回:real ### 示例 ```tsl // 返回取-3与-5的乘积。 return multyValue(-3, -5); // 结果:-15 ``` ## `outPutGrowValue3(v1, v2)` 增长 | 参数 | 类型 | 说明 | | ---- | ---- | ------------ | | `v1` | real | 实型,期末值 | | `v2` | real | 实型,期初值 | 返回:real ### 示例 ```tsl // 返回13与14的差值 return outPutGrowValue3(13, 14); // 结果:-1 ``` ## `outPutGrowRatio3(v1, v2)` 增长率(%) | 参数 | 类型 | 说明 | | ---- | ---- | ------------ | | `v1` | real | 实型,期末值 | | `v2` | real | 实型,期初值 | 返回:real ### 示例 ```tsl // 返回14到13的增长率(%) return outPutGrowRatio3(14, 13); // 结果:7.69 ``` ## `SelectStockIndex_Call(stock_arr, beg_t, end_t, select_cond, not_is_sell, sell_cond, not_need_stoped)` 返回选股结果 | 参数 | 类型 | 说明 | | ----------------- | -------- | ------------------------ | | `stock_arr` | array | 一维字符串数组,证券代码 | | `beg_t` | datetime | 日期型时间,开始选股时间 | | `end_t` | datetime | 日期型时间,结束选股时间 | | `select_cond` | any | 布尔表达式,选股条件 | | `not_is_sell` | bool | object | | `sell_cond` | any | 布尔表达式,卖出股票条件 | | `not_need_stoped` | bool | object | 返回:array ## `Demo_ip_Hermite_B()` ip_Hermite_B()函数教学函数。埃尔米特等距插值,计算给定插值点处的函数值。 返回:float ## `Demo_ip_SLG()` ip_SLG()函数教学函数。二元全曲间插值,计算给定插值点处的函数值。 返回:float ## `Demo_ip_SLQ()` ip_SLQ()函数教学函数。二元三点插值,计算给定插值点处的函数值。 返回:float ## `Demo_ip_Aitken_A()` ip_Aitken_A()函数教学函数。埃特金不等距插值,计算给定插值点处的函数值。 返回:float ## `Demo_ip_Hermite_A()` ip_Hermite_A()函数教学函数。埃儿米特不等距插值,计算给定插值点处的函数值。 返回:float ## `Demo_ip_Parabola_A()` ip_Parabola_A()函数教学函数。抛物线不等距插值,计算给定插值点处的函数值。 返回:float ## `Demo_ip_Lagrangian_A()` ip_Lagrangian_A()函数教学函数。拉格朗日不等距插值,计算给定插值点处的函数值。 返回:float ## `Demo_ip_Spline_A()` ip_Spline_A ()函数教学函数。第一类边界条件的三次样条插值,计算给定插值点处的函数值。 返回:float ## `Demo_ip_Aitken_B()` ip_Aitken_B()函数教学函数。埃特金等距插值,计算给定插值点处的函数值。 返回:float ## `Demo_ip_Lagrangian_B()` ip_Lagrangian_B()函数教学函数。拉格朗日等距插值,计算给定插值点处的函数值。 返回:float ## `Demo_ip_Spline_B()` ip_Spline_B ()函数教学函数。第二类边界条件的三次样条插值,计算给定插值点处的函数值。 返回:float ## `Demo_ip_Parabola_B()` ip_Parabola_B ()函数教学函数。抛物线等距插值,计算给定插值点处的函数值。 返回:float ## `Demo_ip_Spline_C()` ip_Spline_C ()函数教学函数。第三类边界条件的三次样条插值,计算给定插值点处的函数值。 返回:float ## `Demo_ig_Simpson_1()` ig_Simpson_1()函数教学函数。辛普森求积法回调函数,计算定积分。 返回:float ## `Demo_ig_Romberg()` ig_Romberg()函数教学函数。龙贝格求积法回调函数,计算定积分。 返回:float ## `Demo_ig_Simpson_2()` ig_Simpson_2()函数教学函数。辛普森二重积分法回调函数,计算定积分。 返回:float ## `Demo_ig_Trapezoid_2()` Demo_ig_Trapezoid_2()函数教学函数。自适应梯形求积法回调函数,计算定积分。 返回:float ## `Demo_ig_Chebyshev()` Demo_ig_Chebyshev()函数教学函数。切比雪夫求积法回调函数,计算定积分。 返回:float ## `Demo_ig_Gauss()` Demo_ig_Gauss()函数教学函数。高斯求积法回调函数,计算定积分。 返回:float ## `Demo_ig_Trapezoid_1()` Demo_ig_Trapezoid_1()函数教学函数。变步长梯形求积法回调函数,计算定积分。 返回:float ## `ig_Trapezoid_2CallBack(x)` 自适应梯形求积法回调函数。关于自变量x的函数式,一般作用于定积分计算的被积函数。 | 参数 | 类型 | 说明 | | ---- | ----- | ---- | | `x` | float | 实数 | 返回:float ## `ig_Trapezoid_1CallBack(x)` 变步长梯形求积法回调函数。关于自变量x的函数式,一般作用于定积分计算的被积函数。 | 参数 | 类型 | 说明 | | ---- | ----- | ---- | | `x` | float | 实数 | 返回:float ## `ig_Simpson_2CallBack2(x)` 辛普森二重积分法积分上限回调函数。关于自变量x的函数式,一般作用于定积分计算的被积函数。 | 参数 | 类型 | 说明 | | ---- | ----- | ---- | | `x` | float | 实数 | 返回:float ## `ig_Simpson_1CallBack(x)` 辛普森求积法回调函数。关于自变量x的函数式,一般作用于定积分计算的被积函数。 | 参数 | 类型 | 说明 | | ---- | ----- | ---- | | `x` | float | 实数 | 返回:float ## `ig_Simpson_2CallBack1(x)` 辛普森二重积分法积分下限回调函数。关于自变量x的函数式,一般作用于定积分计算的被积函数。 | 参数 | 类型 | 说明 | | ---- | ----- | ---- | | `x` | float | 实数 | 返回:float ## `ig_ChebyshevCallBack(x)` 切比雪夫求积法回调函数。关于自变量x的函数式,一般作用于定积分计算的被积函数。 | 参数 | 类型 | 说明 | | ---- | ----- | ---- | | `x` | float | 实数 | 返回:float ## `ig_RombergCallBack(x)` 龙贝格求积法回调函数。关于自变量x的函数式,一般作用于定积分计算的被积函数。 | 参数 | 类型 | 说明 | | ---- | ----- | ---- | | `x` | float | 实数 | 返回:float ## `ig_GaussCallBack(x)` 高斯求积法回调函数。关于自变量x的函数式,一般作用于定积分计算的被积函数。 | 参数 | 类型 | 说明 | | ---- | ----- | ---- | | `x` | float | 实数 | 返回:float ## `ig_Simpson_2CallBack(x, y)` 辛普森二重积分法函数值回调函数。关于自变量x的函数式,一般作用于定积分计算的被积函数。 | 参数 | 类型 | 说明 | | ---- | ----- | ---- | | `x` | float | 实数 | | `y` | float | 实数 | 返回:float ## `Demo_se_Gauss_Jordan()` se_Gauss_Jordan()函数教学函数。高斯-约当消去法,用全主元高斯-约当法消去法同时求解系数矩阵相同而常数向量不同的m个n阶线性方程组AX = B,其中A=array((0.2368,0.2471,0.2568,1.2671),(0.1968,0.2071,1.2168,0.2271),(0.1581,1.1675,0.1768,0.1871), (1.1161,0.1254,0.1397,0.1490)),B=array((1.8471),(1.7471),(1.6471),(1.5471))。 返回:any ## `Demo_se_Ldl()` se_Ldl()函数教学函数。LU分解法,用LU分解法求解系数矩阵为对称、右端具有m组常数向量的线性方程组 AX =B,其A=array((5,7,6,5,1),(7,10,8,7,2),(5,7,9,10,4),(1,2,3,4,5)),B=array((24,96),(34,136),(36,144),(35,140),(15,60)); 返回:any ## `Demo_se_Gauss()` se_Gauss()函数教学函数。高斯消去法,用全选主元高斯消去法求解n阶线性方程组AX = B。其中A=array((0.2368,0.2471,0.2568,1.2671),(0.1968,0.2071,1.2168,0.2271),(0.1581,1.1675,0.1768,0.1871),(1.1161,0.1254,0.1397,0.1490)),B= array(1.8471,1.7471,1.6471,1.5471) 返回:any ## `Demo_se_Gauss_Seidel()` se_Gauss_Seidel()函数教学函数。高斯-赛德尔迭代法,用高斯-赛德尔迭代法求解系数矩阵具有主元占优的线性方程组AX = B。其中A=array((7,2,1,-2), (9,15,3,-2),(-2,-2,11,5),(1,3,2,13)),B=array(4,7,-1,0)。 返回:any ## `Demo_se_Cholesky()` se_Cholesky()函数教学函数。乔列斯基分解法,用乔列斯基(Cholesky)分解法(即平方根法)求解系数矩阵为对称正定、且右端具有m组常数向量的线性方程组AX = B。其中A=array((5,7,6,5),(7,10,8,7),(6,8,10,9),(5,7,9,10)),B= array((23,92),(32,128), (33,132), (31,124))。 返回:any ## `nchoosek(n, k)` 样本组合 | 参数 | 类型 | 说明 | | ---- | ------- | ------------------ | | `n` | array | 样本(一维数组) | | `k` | integer | 每组样本数量(整数) | 返回:array ### 示例 ```tsl Returnnchoosek(array('a', 'b', 'c', 'd'), 2); // 输出: array( ("d", "c"), ("d", "b"), ("d", "a"), ("c", "b"), ("c", "a"), ("b", "a")) ``` ## `betainc(x, a, b, tail)` 不完全贝塔函数 | 参数 | 类型 | 说明 | | ------ | ------ | ------------------------------------- | | `x` | array | (一维数字数组,实数) 变量 要求0<=x<=1; | | `a` | float | float 不完全贝塔函数的参数 要求a>=0; | | `b` | float | float 不完全贝塔函数的参数 要求b>=0; | | `tail` | string | 返回类型 | 返回:array ### 示例 ```tsl a := 3; b := 4; tail := 'upper'; x := rand(10); return array(betainc(x, a, b), betainc(x, a, b, tail)); // 输出: // Execute script error at Line:5 // function:__main__:line 5:instruction:usercall: function:betainc compile error or not found // function:__main__:line 5:instruction:usercall: function execute error ``` ## `percentileOfScore(data, score, _type)` 百分位占比(%) | 参数 | 类型 | 说明 | | ------- | ------- | ---------------- | | `data` | array | 数组 待处理数据, | | `score` | float | float 待排序值, | | `_type` | integer | 算法 | 返回:array ### 示例 ```tsl // 去除随机数组的极值 data := array(1, 2, 2, 4); ret := array(); n := 0; for i := 0 to 5 do begin ret[n, 'score'] := i; for j, kind in array('rank', 'strict', 'weak', 'mean')do begin ret[n, kind] := percentileOfScore(data, i, j); end ret[n, 'percenrank'] := percentrank(data, i); n++; end; return ret; // 输出: // 示例包含说明文字,未作为可执行片段运行。 ``` ## `interp(x, y, xi, method)` 分段插值函数,根据给定的数据 x,y 对数据xv进行分段插值,可选择方法 | 参数 | 类型 | 说明 | | -------- | ------------- | ------------------------------------------------------------- | | `x` | array of real | 实型一维数组,长度为N。存放给定N个点的值Xi,要求X01; y := x^2-x; xi := array(0.005, 0.01)->1; yi := interp(x, y, xi, 'spline'); return yi; // 结果:6 1、"nearest" x_ := array(5, 1, 19, 8); y_ := array(2, 3, 1, 7); xi := array(4, 12); return interp(x_, y_, xi, "nearest"); // 返回: array(2,7) 2、" linear" 分段线性插值 x_ := array(5, 1, 19, 8); y_ := array(2, 3, 1, 7); xi := array(4, 12); return interp(x_, y_, xi, "linear"); // 返回: array(2.25,4.8182) 3、"spline" 三次样条插值 x_ := array(5, 1, 19, 8); y_ := array(2, 3, 1, 7); xi := array(4, 12); return interp(x_, y_, xi, "spline"); // 返回: array(1.1407,13.9444) 4、"pchip" 分段三次hermite插值 x_ := array(5, 1, 19, 8); y_ := array(2, 3, 1, 7); xi := array(4, 12); return interp(x_, y_, xi, "pchip"); // 返回: array(2.0156,6.7115) ``` ## `spline(x1, y1, xx1)` 三次样条插值 | 参数 | 类型 | 说明 | | ----- | ----- | ----------------------- | | `x1` | array | 一维数字数组 横坐标序列 | | `y1` | array | 一维数字数组 纵坐标序列 | | `xx1` | array | 实数或一维数字数组 插值 | 返回:array ### 示例 ```tsl x := array(5, 1, 19, 8); y := array(2, 3, 1, 7); xx := array(4, 12); return spline(x, y, xx); // 返回:array(1.1407,13.9444) ``` ## `integral(call_back, a, b, method)` 求函数的数值积分 | 参数 | 类型 | 说明 | | ----------- | ------ | -------------------- | | `call_back` | string | 计算被积函数值的回调 | | `a` | double | 实型变量。积分下限 | | `b` | double | 实型变量。积分上限 | | `method` | string | 积分方法 | 返回:double ### 示例 ```tsl a := 1; b := 3; callback := "fun1"; return integral(callback, a, b, ’romberg’); // 其中fun1函数: function fun1(x) begin return 2 * x+1; end; // 结果:10 ``` ## `hessian(fun, x)` 海塞矩阵 求解函数 fun 在x点的 海塞矩阵; | 参数 | 类型 | 说明 | | ----- | ------ | ---------------- | | `fun` | string | 字符串,函数名 | | `x` | array | 一维数组,指定点 | 返回:array ### 示例 ```tsl return hessian("Hessian.demo", array(3, 4)); ``` ## `perms(x)` 样本排列 | 参数 | 类型 | 说明 | | ---- | ----- | ---------------- | | `x` | array | 样本,数组或数字 | 返回:array ### 示例 范例01:求10的阶乘 ```tsl return perms(10); // 输出:3628800 ``` 范例02:排列组合 ```tsl return perms(array("a", "b", "c")); // 输出: array( ("c", "b", "a"), ("c", "a", "b"), ("b", "c", "a"), ("b", "a", "c"), ("a", "b", "c"), ("a", "c", "b")) ``` 范例03:返回数组Array(('A','B'),('C', 'D'))中任意两个数据的排列组合 ```tsl v := Array(('A', 'B'), ('C', 'D')); return perms(v, 2); // 输出: // Execute script error at Line:2 // function:__main__:line 2:instruction:usercall: function:perms compile error or not found // function:__main__:line 2:instruction:usercall: function execute error ``` 范例04:对排列组合的每列求和 ```tsl function test_1cth(); begin func := createobject("funcexe"); a := array("A", "B", "C"); return perms(a, 3, func); end; type funcexe = class() data; function create(); begin data := ""; end function exe(dat); begin data+=dat; end end // 输出: // Execute script error at Line:0 ``` ## `maxDrawDown(data, updn, interval, ifabs)` 最大回撤 | 参数 | 类型 | 说明 | | ---------- | ------- | ----------------------------------------------- | | `data` | array | 一维数字序列 | | `updn` | bool | 涨跌标示符。1为求最大涨,0为求最大跌(默认值) | | `interval` | integer | 最大区间,为空或者小于1时,求整个区间(默认值) | | `ifabs` | float | 预留字段,暂时没有实际意义,可不给值 。 | 返回:real/table ### 示例 范例01: ```tsl // 计算一组序列的最大涨幅 data := array(3, 1, 7, 5, 6, 3); return maxDrawDown(data, 1); // 结果: 1 2 6 6 // 输出:说明:入点为data[1],出点为data[2],两者差为6,最大涨幅比例差为6 ``` 范例02: ```tsl // ------计算100日股票的最大跌幅 setSysParam(pn_stock(), 'SZ000002'); setSysParam(pn_date(), 20181031T); setSysParam(pn_rate(), 1); setSysParam(pn_rateday(), 20181031T); setSysParam(pn_cycle(), cy_day()); data := nDay3(100, close()); t := maxDrawDown(data); return t; // 结果t: 12 43 6.96759 0.25765 // 注:若需计算最大跌幅率,则只需t[3] * 100即可。 ``` ## `minRecoveryTime(r, n1, n2)` 最小恢复时间 | 参数 | 类型 | 说明 | | ---- | ------- | -------------------- | | `r` | array | (一维数字数组) 序列, | | `n1` | integer | Int 买入点位置, | | `n2` | integer | Int 卖出点位置 | 返回:integer ### 示例 ```tsl // 科大讯飞(SZ002230)在20201220最近十个交易日序列中第一天购买第二天卖出后的最小恢复时间 setSysParam(pn_stock(), "SZ002230"); setSysParam(PN_Date(), 20201220t); r := nDay(10, "close", close())[: , "close"]; return minRecoveryTime(r, 0, 1); // 输出:6 ``` ## `generateCombinations(list, ret, start, n)` 非空全组合生成器 | 参数 | 类型 | 说明 | | ------- | ------- | --------------------------- | | `list` | array | 一维数组 样本, | | `ret` | array | 返回生成的组合数组, | | `start` | integer | Int 选取起始数据的位置, | | `n` | integer | Int 记录每组数据的起始位置, | 返回:integer ### 示例 ```tsl list := array('a', 'b', 'c'); generateCombinations(list, ret); return ret; // 输出: // Execute script error at Line:2 // function:__main__:line 2:instruction:usercall: function:generateCombinations compile error or not found // function:__main__:line 2:instruction:usercall: function execute error ``` ## `percentage(y, per, style)` 百分位去极值 | 参数 | 类型 | 说明 | | ------- | ----------- | ------------------------------------------------------------------------------------------- | | `y` | array | 数字数组,待处理数据 | | `per` | real\|array | 实数或者一维数字数组,去极值百分位;5表示 5%; | | `style` | integer | 整数,0 或者不输入时 去 百分位大于 per 和小于per的;1, 去除小于per的;2 去除 大于per的 数据 | 返回:array ### 示例 ```tsl y := rand(100, 2); per := 20; style := 0; return percentage(y, per, style); ``` ## `GM_Initial(x, method, un)` 数据初始化,提供了几种数据变换的方法,有初值化、均值化、最小值化、最大值化、按行区间值化、按列区间值化、归一化、逆化、倒数化和始点零化处理原始的序列 1)初值化: 2)均值化:, 3)最小值化:, 4)最大值化:, 5)按行区间值化: 6)按列区间值化: 7)归一化:, 8)逆化: 9)倒数化: 10)始点零化: | 参数 | 类型 | 说明 | | -------- | ------ | -------------------------------------------------------------------------- | | `x` | array | 数据矩阵,为二维数组类型; | | `method` | string | 处理方法(ini,mean,min,max,rrange,crange,norm,inv,rec,zero),为字符串类型; | | `un` | array | 归一化单位,为一维数组类型 | 返回:array ## `GM_Corr(x, l)` 灰色关联度,以l行为参考数列的灰色关联度,返回的是关联度矩阵 ,, 以为参考数列,则关联度计算步骤如下: 1)初值化:; 2)求差数列:, 3)求两级最大和最小:, 4)求关联系数:,为分辨系数,是0到1之间的数 5)求关联度: | 参数 | 类型 | 说明 | | ---- | ----- | -------------------------- | | `x` | array | 数据矩阵,为二维数组类型; | | `l` | any | 参考序列标号,为整数类型 | 返回:array ## `GM_AGO(x, method, r)` 数列生成,r(r>0)次的累加或累减生成新数列 1)累加:, 2)累减:, | 参数 | 类型 | 说明 | | -------- | ------ | --------------------------------- | | `x` | array | 数据矩阵,为一维数组类型; | | `method` | string | 生成方法(add,sub),为字符串类型; | | `r` | any | 次数,为整数类型 | 返回:array ## `GM_Scorr(x, method)` 灰色绝对关联度、灰色相对关联度和灰色综合关联度,返回的是关联度矩阵 ,, 1)灰色绝对关联度: 2)灰色相对关联度:先对数列进行初值化,然后求新数列的灰色绝对关联度,即为原数列的灰色相对关联度 3)灰色综合关联度: | 参数 | 类型 | 说明 | | -------- | ------ | --------------------------------- | | `x` | array | 数据矩阵,为二维数组类型; | | `method` | string | 方法(abs,ret,com),为字符串类型; | 返回:array ## `GM_Estimate(x, l)` GM(1,1)模型,用于灰色系统模型的l步预测 结果说明: 平均相对误差:越小越接近零越好; 关联度:当ρ=0.5时,关联度大于0.6便满意 方差比:C 小误差概率:P | 参数 | 类型 | 说明 | | ---- | ----- | -------------------------- | | `x` | array | 数据矩阵,为一维数组类型; | | `l` | any | 预测步长,为整数类型 | 返回:array ## `Prog_L(f, a, b, aeq, beq, lb, ub, x0, options, ozarr, intarr)` 使用单纯形法,和起作用集法,系统默认作用集形法求解线性规划问题,即求解目标都为线性和约束条件都为线性的规划问题 Prog_L(f,A,b) 求解不等式约束 Prog_L(f,A,b,Aeq,beq) 求解不等式约束、等式约束 Prog_L(f,A,b,Aeq,beq,LB,UB) 求解不等式约束、等式约束、上下界限约束 Prog_L(f,A,b,Aeq,beq,LB,UB,x0,options) 求解不等式约束、等式约束,上下限约束,加入用户算法设置 Prog_L(f,A,b,Aeq,beq,LB,UB,x0,options,ozarr) 求解不等式约束、等式约束、上下限约束、0-1 约束 Prog_L(f,A,b,Aeq,beq,LB,UB,x0,options,ozarr,intarr) 求解不等式约束、等式约束、上下限约束、0-1 约束、整数约束 模型表达: min= sum(f\*x) st. A:\*x<=b Aeq :\* x = Beq lbp,则拒绝原假设,若alpha