simulate 中的一些操作

本文详细介绍了量化交易中常用的各类指标,包括时间序列操作、数组操作及针对特定维度的数据处理方法等,帮助读者深入理解这些指标如何应用于实际交易策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. neutralize:

position based 的alpha

int neutralize(int di, int ti) {
  double sum = 0;
  double abssum = 0;
  int count = 0;
  for (int ii = 0; ii < nsyms; ++ii) {
    if (std::isfinite(pos(di, ii))) {
      sum += pos(di, ii);
      count++;
    } else if (std::isinf(pos(di, ii))) {
      pos(di, ii) = NaN;
    }
  }

  if (count != 0) {
    double mean = sum / count;
    for (int ii = 0; ii < nsyms; ++ii) {
      if (std::isfinite(pos(di, ii))) {
        abssum += fabs(pos(di, ii) - mean);
        pos(di, ii) = pos(di, ii) - mean;
      }
    }
  }

  if (abssum != 0) {
    for (int ii = 0; ii < nsyms; ++ii) {
      if (std::isfinite(pos(di, ii))) {
        pos(di, ii) *= 1.0 / abssum;
      }
    }
  }
  return 0;
}

2. operators definition(二维矩阵,行为日期,列为股票):

// 对当前股票t天值的操作

ts_sum(ts_matrix x, int t)  从当前天往前t天的值之和

ts_max(ts_matrix x, int t)  从当前天往前t天的值中的最大值

ts_min(ts_matrix x, int t) 从当前天往前t天的值中的最小值

ts_argmax(ts_matrix x, int) 从当前天往前t天的值中的最大值的索引

ts_argmin(ts_matrix x, int t) 从当前天往前t天的值中的最小值的索引

ts_count(ts_matrix x, int t) 从当前天往前t天中有效值的个数(除去nan和inf值)

ts_mean(ts_matrix x, int t) 从当前天往前t天所有值的平均值(如果输入的位置上是nan,则输出不一定为nan)

ts_norm(ts_matrix x, int t) 当前值除以前t天的平均值

ts_std_norm(ts_matrix x, int t) 当前值除以前t天的方差

ts_mean_linear(ts_matrix x, int t) 从当前天往前t天所有值的平均值,但权重依次递减(t, t-1, t-2, ...,1)。(输入位置上为nan,输出不一定)

ts_mean_exp(ts_matrix x, int t, double e) 从当前天往前t天所有值的平均值,权重为指数递减(pow(1-e, 0), pow(1-e, 1), ..., pow(1-e, t-1))。(输入位置上为nan,输出不一定)

ts_mean_halflife(ts_matrix x, int t, int halflife) 从当前天往前t天所有值的平均值,权重为指数递减(pow(1-e, 0), pow(1-e, 1), ..., pow(1-e, t-1),其中e=1-pow(0.5, 1/halflife))。(输入位置上为nan,输出不一定)

ts_delay(ts_matrix x, int t) 当前天的值为t天前的值

ts_delta(ts_matrix x, int t) 当前天的值与t天前的值之差

ts_rank(ts_matrix x, int t) 把包含当前天在内的t天内的值归于0-1之间,值越大,rank之后的值越大。比如(1,3,4,2,5)rank之后为(0,0.5, 0.75,0.25,1)

ts_quantile(ts_matrix x, int t) 返回包含当前天在内的t天的百分之t的值

ts_std(ts_matrix x, int t) 包含当前天在内的t天的标准差

ts_zscore(ts_matrix x, int t) 当前天的值减去前t天的均值再除以前t天的标准差

ts_fill(ts_matrix x, int t) 用前一天的值填充当前天的值

ts_corr(ts_matrix x, ts_matrix y, int t) x和y之间前t天的相关关系

ts_cov(ts_matrix x, ts_matrix y, int t) x和y之间前t天的协方差

ts_prod(ts_matrix x, int t) 包含当前天在内的前t天的值相乘

ts_moment(ts_matrix x, int k, int t) 包含当前天在内的前t天的k阶矩

ts_skew(ts_matrix x, int t) 包含当前天在内的前t天的3阶矩除以标准差的三次方(倾斜度)

ts_kurt(ts_matrix x, int t) 包含当前天在内的前t天的四阶矩除以标准差的四次方(峰度)

ts_regression(ts_matrix x, ts_matrix y, int t) x和y的前t天的线性回归

ts_KthValidValue(ts_matrix x, int k, int t) 从当前天往前数t天,返回其中第个有效的值,若没有,则返回nan

 

// 对所有股票所有天的值操作

at_isnan(ts_matrix x) 值为nan返回1,否则返回0

at_isinf(ts_matrix x) 值为inf返回1,否则返回0

at_nan2zero(ts_matrix x) 将x中所有为nan的值转为0

at_zero2nan(ts_matrix x) 将x中为0的值转为nan

at_inf2nan(ts_matrix x) 将x中为inf的值转为nan

at_sign(ts_matrix x) 将x进行符号变换,即大于0的值为1,小于0的值为-1

at_signlog(ts_matrix x) 对x进行符号变换和log函数,然后将两者相乘

at_sqrt(ts_matrix x) 对x进行开方处理

at_signsqrt(ts_matrix x) 对x进行符号变换和开方处理,然后将两者相乘

at_signpower(ts_matrix x, double e) / at_signpower(ts_matrix x, ts_matrix y) 对x进行符号变化和e次方,然后将两者相乘 / 对x进行符号变换和对应位置的y次方,然后将两者相乘

at_power(ts_matrix x, double e) / at_power(ts_matrix x, ts_matrix y) x的e次方 / 对应位置x的y次方

at_abs(ts_matrix x) 对x取绝对值

at_round(ts_matrix x) 对x四舍六入五凑偶取整

at_floor(ts_matrix x) 小于等于x的最大整数

at_ceil(ts_matrix x) 大于x的最小整数

at_cond(ts_matrix c, ts_matrix x, ts_matrix y) 若c大于0,取x的值,否则取y的值

at_max(ts_matrix x, ts_matrix y) 取x,y中的最大值

at_min(ts_matrix x, ts_matrix y) 取x,y中的最小值

at_humdecay(ts_matrix x, double hump) 从昨天到今天的变化大于hump,取今天的值,否则取昨天的值(fabs(x_today - x_yest) / x_yest >= hump ? x_today, x_yest)

at_lastdiffvalue(ts_matrix x) 返回历史中最近的一个不同的值,只要用于fundamental的数据,值不经常变化

at_tail(ts_matrix x, double lower, double upper, double newval) 如果x的值在lower和upper之间,则使用newval,否则保持不变

at_middle(ts_matrix x, double lower, double upper, double newval) 如果x的值小于lower或者大于upper,则使用newval,否则保持不变

at_days_from_last_change(ts_matrix x) 如果今天的值与昨天的值不一样,则返回0,如果一样,则返回前面同样值的个数

at_days_from_last_appear(ts_matrix x, double value)  如果今天的值与value一样,则返回0,如果不一样,在返回前面不同值的个数

at_tradewhen(ts_matrix trigger, ts_matrix x, ts_matrix exit) 如果exit大于0,则返回nan,如果trigger大于0返回当前值,其他返回上一天的值

 

// 对当天的所有股票值的操作

cs_mean(ts_matrix x) 每天所有股票的均值

cs_neut(ts_matrix x) 每天所有股票的值减去相对应的均值

cs_rank(ts_matrix x) 把每天所有股票的值归于0-1之间,股票值越大,rank后值越大

cs_remove_middle(ts_matrix x, double pct) 移除每天值在中间的股票,pct表示保留多少尾部。pct=0.8表示移除中间数据的80%,保留开始和结束的10%。需要先做rank处理,再判断(只在尾部上的值进行交易,可以获得更高的收益,但会导致更高的turnover)

cs_remove_outlier(ts_matrix x, double pct) 移除每天值在尾部的股票,pct表示保留中间多少。pct=0.4表示移除头部20%,尾部20%,保留中间60%

cs_scale(ts_matrix x) 每天所有股票当前值除以该天所有股票绝对值的和

cs_zscore(ts_matrix x) 每天所有股票当前值减去对应的平均值在除以方差

cs_groupcount(ts_matrix x, ts_matrix group) 每天属于某个组的股票的个数

cs_groupmax(ts_matrix x, ts_matrix group) 每天属于某个组的股票的最大值

cs_groupmin(ts_matrix x, ts_matrix group) 每天属于某个组的股票的最小值

cs_groupstd(ts_matrix x, ts_matrix group) 每天属于某个组的股票的标准差

cs_groupsum(ts_matrix x, ts_matrix group) 每天属于某个组的股票值的和

cs_groupzscore(ts_matrix x, ts_matrix group) 每天属于某个组的股票当前值减去对应的平均值再除以标准差

cs_groupscale(ts_matrix x, ts_matrix group) 每天属于某个组的股票当前值处于该组所有股票绝对值之和

cs_groupindex(ts_matrix x, int ngroups) 创建一个组,根据输入的rank,即rank(x),把输入的股票平均分为n个组。

cs_grouprank(ts_matrix x, ts_matrix group) 每天属于某个组的所有股票进行rank,即归于0-1之间

cs_groupquantile(ts_matrix x, ts_matrix group, double quantile) 每天属于某个组的分位数quantile的值

cs_groupmean(ts_matrix x, ts_matrix group) 每天属于某个组的所有股票值的平均

cs_groupneut(ts_matrix x, ts_matrix group) 每天属于某个组的值减去对应组的平均值

cs_regression(ts_matrix y, ts_matrix x) y与x作线性回归

 

3. operators definition(一维数组:某一天的所有股票)

sv_norm(sv_array x) 当前值除以该组的均值

sv_std(sv_array x) 该组的标准差

sv_std_norm(sv_array x) 当前值除以该组的标准差

sv_corr(sv_array x, sv_array y) x和y的相关系数

sv_cov(sv_array x, sv_array y) x和y的协方差

sv_remove_middle(sv_array x, double pct) 移除该组中每天值在中间的股票

sv_remove_outlier(sv_array x, double pct) 移除该组中每天值在头部尾部的股票

sv_groupneut(sv_array x, sv_array group) 每天属于某个组的当前值减去对应组的平均值

at_isnan(sv_array x) 该组中为nan的值转化为1,其他的为0

at_isinf(sv_array x) 该组中为inf的值转化为1,其他的为0

at_nan2zero(sv_array x) 该组中nan的值转化为0

at_zero2nan(sv_array x) 该组中0转化为nan

at_inf2nan(sv_array x) 该组中inf值转化为nan

at_sign(sv_array x) 对该组进行符号操作,大于0为1,小于0为-1

at_signlog(sv_array x) 对该组进行符号操作和log操作,然后将两者相乘

at_sqrt(sv_array x) 对该组进行开方操作

at_signsqrt(sv_array x) 对该组进行符号操作和开方操作,然后将两者相乘

at_power(sv_array x, double e) / at_power(sv_array x, sv_array y) 对该组进行e次方 / y次方

at_signpower(sv_array x, double e) / at_power(sv_array x, sv_array y) 对该组进行符号操作和e次方 / y次方,然后将两者相乘

at_abs(sv_array x) 取绝对值

at_round(sv_array x) 进行四舍六入五凑偶

at_floor(sv_array x) 该组小于等于x的最大整数

at_ceil(sv_array x) 大于x的最小整数

at_max(sv_array x, sv_array y) x和y之间的最大值

at_min(sv_array x, sv_array y) x和y之间的最小值

at_tail(sv_array x, double lower, double upper, double newval) 该组中在lower和upper之间的值设为newval(即保留两端的值)

at_middle(sv_array x, double lower, double upper, double newval) 该组中大于upper或者小于lower的值设为newal(即保留中间值)

sv_mean(sv_array x) 该组的平均值

sv_rank(sv_array x) 将该组的值归于0-1

sv_scale(sv_array x) 该组当前值除以该组所有值绝对值之和

sv_neut(sv_array x) 该组当前值减去该组的平均值

sv_quantile(sv_array x, double quantile) 该组的分位数的值(返回值是同一个值,nan另外)

sv_zscore(sv_array x) 该组的当前值减去平均值除以该组的标准差

sv_groupcount(sv_array x, sv_array group) 属于某个组的股票的个数

sv_groupmax(sv_array x, sv_array group) 属于某个组的股票值的最大值

sv_groupmin(sv_array x, sv_array group) 属于某个组的股票的最小值

sv_groupstd(sv_array x, sv_array group) 属于某个组的股票的标准差

sv_groupsum(sv_array x, sv_array group) 属于某个组的股票值之和

sv_groupzscore(sv_array x, sv_array group) 属于某个组的股票当前值减去该组的平均值再除以该组的标准差

sv_groupscale(sv_array x, sv_array group) 属于某个组的股票当前值除以该组的所有值绝对值之和

sv_groupindex(sv_array x, int ngroups) 返回一个组:将输入x平均的分配到n个组中(使用sv_rank进行处理)

sv_grouprank(sv_array x, sv_array group) 属于某个组的所有股票进行rank,归于0-1之间

sv_groupquantile(sv_array x, sv_array group, double quantile) 属于某个组股票的分位值

sv_groupmean(sv_array x, sv_array group) 属于某个组的股票的平均值

at_cond(sv_array c, sv_array x, sv_array y) c大于0为x,其他为y

sv_regression(sv_array y, sv_array x) y和x线性回归

 

转载于:https://www.cnblogs.com/sssblog/p/11536525.html

<think>好的,我现在需要帮助用户了解如何在Creo中使用Simulate功能。首先,我得回忆一下自己之前学过的Creo Simulate的基本步骤,确保信息准确。用户可能是一个工程师或者设计师,他们需要使用Simulate进行结构或热分析,所以步骤要详细但不过于复杂。 首先,启用Simulate模块。我记得在Creo Parametric中,Simulate可能是一个单独的模块,需要从应用菜单里启动。可能需要确认用户的许可证是否包含Simulate功能,但用户问题没提到许可证问题,可能暂时不用考虑这点。 接下来,设置材料属性。正确的材料参数对分析结果至关重要,比如弹性模量、泊松比等。用户可能需要从材料库中选择或自定义材料,这里需要提醒他们检查单位是否一致,避免常见错误。 然后是定义约束和载荷。这部分容易出错,比如约束不足导致刚体位移,或者载荷施加位置不正确。需要说明如何在几何体上施加固定约束、力、压力等,并建议用户仔细检查施加的位置和方向。 创建分析任务时,用户可能需要选择分析类型,比如静态分析、模态分析等。这里要提醒他们根据实际需求选择,并注意网格划分的质量,可能需要调整网格设置以获得更准确的结果。 运行分析后,结果的后处理也很重要。解释如何查看应力、应变、位移云图,以及如何生成报告。用户可能需要导出结果或分享给团队,所以这部分步骤要详细。 最后,常见问题部分需要涵盖典型的错误,比如网格划分失败、收敛问题,以及如何验证模型的正确性。可能还需要提到参考官方文档或培训资源,帮助用户深入学习。 现在要检查是否遗漏了重要步骤,比如模型准备阶段是否需要简化几何体,或者是否需要定义接触条件。不过根据用户的问题,可能基础使用不需要涉及复杂设置,保持回答简洁。 确保所有步骤符合中文要求,使用正确的术语,避免翻译腔。同时,按照系统指令,数学公式用$...$,独立公式用$$...$$,但在这个问题中可能用不到太多数学表达式,除非涉及到分析中的公式,比如应力计算。但用户的问题更多是操作步骤,可能暂时不需要。 最后生成相关问题,考虑用户可能进一步想知道如何优化网格,处理非线性问题,或者如何结合其他分析类型。确保问题覆盖用户可能感兴趣的扩展领域。</think>### 如何在Creo中启用和使用Simulate功能 #### 步骤1:启用Simulate模块 1. 打开Creo Parametric后,新建或打开一个装配/零件文件 2. 在顶部菜单栏选择**应用程序 > Simulate**,系统将切换至分析环境[^1] 3. 确认许可证包含Simulate模块(首次使用可能需加载许可证) #### 步骤2:设置材料属性 1. 右键模型树中的**材料**,选择**分配材料** 2. 从库中选择材料(如steel)或新建自定义材料 3. 确认材料参数: - 弹性模量$E$ - 泊松比$\nu$ - 密度$\rho$ #### 步骤3:定义约束载荷 1. **约束创建**: - 选择**边界条件 > 位移约束** - 指定固定面/边/点,约束自由度(平移/旋转) 2. **载荷施加**: - 选择力/压力/力矩等载荷类型 - 输入数值(注意单位制统一) #### 步骤4:创建分析任务 1. 在**分析和设计研究**对话框中新建研究 2. 选择分析类型: - 静态分析(应力/应变) - 模态分析(固有频率) - 热分析(温度场) 3. 配置收敛方法: - 单通道自适应 - 多通道自适应(精度更高) #### 步骤5:运行分析结果查看 1. 点击**开始运行**生成有限元网格: - 自动划分四面体/六面体单元 - 检查网格质量(长宽比<20) 2. 完成后右键选择**查看结果** 3. 使用云图显示: - 等效应力$\sigma_{vm} = \sqrt{\frac{1}{2}[(\sigma_1-\sigma_2)^2+(\sigma_2-\sigma_3)^2+(\sigma_3-\sigma_1)^2]}$ - 安全因子$n = \frac{\sigma_y}{\sigma_{vm}}$ #### 常见问题处理 1. 网格划分失败:简化模型或调整网格尺寸 2. 收敛困难:检查约束合理性,或修改材料非线性参数 3. 结果验证:通过理论公式估算关键点应力值$ \sigma = \frac{F}{A} $ ```python # 示例:简单梁弯曲应力计算验证 def beam_stress(F, L, b, h): """计算矩形截面梁最大弯曲应力""" I = (b * h**3)/12 # 惯性矩 return (F * L * h/2) / I ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值