From 447542656a3b5220108f323af825cbb1138a0944 Mon Sep 17 00:00:00 2001 From: RuoYi Date: Mon, 24 Jun 2024 17:19:49 +0800 Subject: [PATCH 1/9] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=B8=BB=E5=AD=90?= =?UTF-8?q?=E8=A1=A8=E6=95=B0=E6=8D=AE=E6=98=BE=E7=A4=BA=E9=97=AE=E9=A2=98?= =?UTF-8?q?(IA61OI)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ruoyi-generator/src/main/resources/vm/xml/mapper.xml.vm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ruoyi-generator/src/main/resources/vm/xml/mapper.xml.vm b/ruoyi-generator/src/main/resources/vm/xml/mapper.xml.vm index b7e67473..ea430ddc 100644 --- a/ruoyi-generator/src/main/resources/vm/xml/mapper.xml.vm +++ b/ruoyi-generator/src/main/resources/vm/xml/mapper.xml.vm @@ -15,7 +15,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" #if($table.sub) - + -- Gitee From e9550ab5bdd3993188fad453dd7273a456ff10ef Mon Sep 17 00:00:00 2001 From: RuoYi Date: Thu, 27 Jun 2024 16:44:51 +0800 Subject: [PATCH 2/9] =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ruoyi/common/utils/file/FileUploadUtils.java | 2 +- .../ruoyi/framework/aspectj/DataScopeAspect.java | 2 +- .../mapper/generator/GenTableMapper.xml | 16 ++++++++-------- .../com/ruoyi/system/domain/SysUserOnline.java | 2 +- .../mapper/system/SysDictDataMapper.xml | 2 +- 5 files changed, 12 insertions(+), 12 deletions(-) diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/file/FileUploadUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/file/FileUploadUtils.java index 51fa59c8..8de4c66d 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/file/FileUploadUtils.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/file/FileUploadUtils.java @@ -25,7 +25,7 @@ public class FileUploadUtils /** * 默认大小 50M */ - public static final long DEFAULT_MAX_SIZE = 50 * 1024 * 1024; + public static final long DEFAULT_MAX_SIZE = 50 * 1024 * 1024L; /** * 默认的文件名最大长度 100 diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/DataScopeAspect.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/DataScopeAspect.java index f473f440..27caf42a 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/DataScopeAspect.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/DataScopeAspect.java @@ -150,7 +150,7 @@ public class DataScopeAspect conditions.add(dataScope); } - // 多角色情况下,所有角色都不包含传递过来的权限字符,这个时候sqlString也会为空,所以要限制一下,不查询任何数据 + // 角色都不包含传递过来的权限字符,这个时候sqlString也会为空,所以要限制一下,不查询任何数据 if (StringUtils.isEmpty(conditions)) { sqlString.append(StringUtils.format(" OR {}.dept_id = 0 ", deptAlias)); diff --git a/ruoyi-generator/src/main/resources/mapper/generator/GenTableMapper.xml b/ruoyi-generator/src/main/resources/mapper/generator/GenTableMapper.xml index 84633f3a..2378ab86 100644 --- a/ruoyi-generator/src/main/resources/mapper/generator/GenTableMapper.xml +++ b/ruoyi-generator/src/main/resources/mapper/generator/GenTableMapper.xml @@ -26,7 +26,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - + @@ -73,7 +73,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" select table_name, table_comment, create_time, update_time from information_schema.tables - where table_name NOT LIKE 'qrtz_%' and table_name NOT LIKE 'gen_%' and table_schema = (select database()) + where table_name NOT LIKE 'qrtz\_%' and table_name NOT LIKE 'gen\_%' and table_schema = (select database()) and table_name in #{name} @@ -158,12 +158,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" sysdate() ) - - + + ${sql} - - - + + + update gen_table table_name = #{tableName}, diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysUserOnline.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysUserOnline.java index c5467bb6..d259a5ba 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysUserOnline.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysUserOnline.java @@ -42,7 +42,7 @@ public class SysUserOnline extends BaseEntity /** session最后访问时间 */ private Date lastAccessTime; - /** 超时时间,单位为分钟 */ + /** 超时时间,单位为毫秒 */ private Long expireTime; /** 在线状态 */ diff --git a/ruoyi-system/src/main/resources/mapper/system/SysDictDataMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysDictDataMapper.xml index aebd9b4f..0d5dde72 100644 --- a/ruoyi-system/src/main/resources/mapper/system/SysDictDataMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/system/SysDictDataMapper.xml @@ -40,7 +40,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - where status = '0' and dict_type = #{dictType} order by dict_sort asc -- Gitee From c6c8f8b3fb8cfec4e194b557f601348ec7d328f8 Mon Sep 17 00:00:00 2001 From: RuoYi Date: Wed, 3 Jul 2024 11:06:05 +0800 Subject: [PATCH 3/9] remove sub resultType --- ruoyi-generator/src/main/resources/vm/xml/mapper.xml.vm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ruoyi-generator/src/main/resources/vm/xml/mapper.xml.vm b/ruoyi-generator/src/main/resources/vm/xml/mapper.xml.vm index ea430ddc..6adffe6b 100644 --- a/ruoyi-generator/src/main/resources/vm/xml/mapper.xml.vm +++ b/ruoyi-generator/src/main/resources/vm/xml/mapper.xml.vm @@ -81,7 +81,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" #if($table.sub) - select#foreach ($column in $subTable.columns) $column.columnName#if($foreach.count != $subTable.columns.size()),#end#end from ${subTableName} where ${subTableFkName} = #{${subTableFkName}} -- Gitee From ad5cd1921e83e98d4e89b3c6a525ac30f49d40d9 Mon Sep 17 00:00:00 2001 From: RuoYi Date: Wed, 3 Jul 2024 11:39:00 +0800 Subject: [PATCH 4/9] =?UTF-8?q?=E5=8D=87=E7=BA=A7commons.io=E5=88=B0?= =?UTF-8?q?=E6=9C=80=E6=96=B0=E7=89=88=E6=9C=AC2.16.1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 4a858d23..e0e8f146 100644 --- a/pom.xml +++ b/pom.xml @@ -27,7 +27,7 @@ 1.4.7 1.2.83 6.6.1 - 2.13.0 + 2.16.1 4.1.2 2.3 -- Gitee From 5bef005075e7442ace5867f3e275912d278e95d8 Mon Sep 17 00:00:00 2001 From: RuoYi Date: Mon, 8 Jul 2024 16:26:49 +0800 Subject: [PATCH 5/9] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=97=B6=E9=97=B4?= =?UTF-8?q?=E8=8C=83=E5=9B=B4=E6=97=A5=E6=9C=9F=E6=A0=BC=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/resources/mapper/generator/GenTableMapper.xml | 6 ++++++ .../src/main/resources/mapper/quartz/SysJobLogMapper.xml | 4 ++-- .../src/main/resources/mapper/system/SysConfigMapper.xml | 4 ++-- .../src/main/resources/mapper/system/SysDictTypeMapper.xml | 4 ++-- .../src/main/resources/mapper/system/SysRoleMapper.xml | 4 ++-- .../src/main/resources/mapper/system/SysUserMapper.xml | 4 ++-- 6 files changed, 16 insertions(+), 10 deletions(-) diff --git a/ruoyi-generator/src/main/resources/mapper/generator/GenTableMapper.xml b/ruoyi-generator/src/main/resources/mapper/generator/GenTableMapper.xml index 2378ab86..675cd0cf 100644 --- a/ruoyi-generator/src/main/resources/mapper/generator/GenTableMapper.xml +++ b/ruoyi-generator/src/main/resources/mapper/generator/GenTableMapper.xml @@ -67,6 +67,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" AND lower(table_comment) like lower(concat('%', #{tableComment}, '%')) + + and date_format(create_time,'%Y%m%d') >= date_format(#{params.beginTime},'%Y%m%d') + + + and date_format(create_time,'%Y%m%d') <= date_format(#{params.endTime},'%Y%m%d') + diff --git a/ruoyi-quartz/src/main/resources/mapper/quartz/SysJobLogMapper.xml b/ruoyi-quartz/src/main/resources/mapper/quartz/SysJobLogMapper.xml index f1dd85d2..034ae6c1 100644 --- a/ruoyi-quartz/src/main/resources/mapper/quartz/SysJobLogMapper.xml +++ b/ruoyi-quartz/src/main/resources/mapper/quartz/SysJobLogMapper.xml @@ -36,10 +36,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" AND invoke_target like concat('%', #{invokeTarget}, '%') - and date_format(create_time,'%y%m%d') >= date_format(#{params.beginTime},'%y%m%d') + and date_format(create_time,'%Y%m%d') >= date_format(#{params.beginTime},'%Y%m%d') - and date_format(create_time,'%y%m%d') <= date_format(#{params.endTime},'%y%m%d') + and date_format(create_time,'%Y%m%d') <= date_format(#{params.endTime},'%Y%m%d') order by create_time desc diff --git a/ruoyi-system/src/main/resources/mapper/system/SysConfigMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysConfigMapper.xml index 5ea755a6..f71ff383 100644 --- a/ruoyi-system/src/main/resources/mapper/system/SysConfigMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/system/SysConfigMapper.xml @@ -51,10 +51,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" AND config_key like concat('%', #{configKey}, '%') - and date_format(create_time,'%y%m%d') >= date_format(#{params.beginTime},'%y%m%d') + and date_format(create_time,'%Y%m%d') >= date_format(#{params.beginTime},'%Y%m%d') - and date_format(create_time,'%y%m%d') <= date_format(#{params.endTime},'%y%m%d') + and date_format(create_time,'%Y%m%d') <= date_format(#{params.endTime},'%Y%m%d') diff --git a/ruoyi-system/src/main/resources/mapper/system/SysDictTypeMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysDictTypeMapper.xml index 15774940..a19c921b 100644 --- a/ruoyi-system/src/main/resources/mapper/system/SysDictTypeMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/system/SysDictTypeMapper.xml @@ -33,10 +33,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" AND dict_type like concat('%', #{dictType}, '%') - and date_format(create_time,'%y%m%d') >= date_format(#{params.beginTime},'%y%m%d') + and date_format(create_time,'%Y%m%d') >= date_format(#{params.beginTime},'%Y%m%d') - and date_format(create_time,'%y%m%d') <= date_format(#{params.endTime},'%y%m%d') + and date_format(create_time,'%Y%m%d') <= date_format(#{params.endTime},'%Y%m%d') diff --git a/ruoyi-system/src/main/resources/mapper/system/SysRoleMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysRoleMapper.xml index 7d256504..70742230 100644 --- a/ruoyi-system/src/main/resources/mapper/system/SysRoleMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/system/SysRoleMapper.xml @@ -52,10 +52,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" AND r.data_scope = #{dataScope} - and date_format(r.create_time,'%y%m%d') >= date_format(#{params.beginTime},'%y%m%d') + and date_format(r.create_time,'%Y%m%d') >= date_format(#{params.beginTime},'%Y%m%d') - and date_format(r.create_time,'%y%m%d') <= date_format(#{params.endTime},'%y%m%d') + and date_format(r.create_time,'%Y%m%d') <= date_format(#{params.endTime},'%Y%m%d') ${params.dataScope} diff --git a/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml index c7bfaf69..8c035905 100644 --- a/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml @@ -76,10 +76,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" AND u.phonenumber like concat('%', #{phonenumber}, '%') - AND date_format(u.create_time,'%y%m%d') >= date_format(#{params.beginTime},'%y%m%d') + AND date_format(u.create_time,'%Y%m%d') >= date_format(#{params.beginTime},'%Y%m%d') - AND date_format(u.create_time,'%y%m%d') <= date_format(#{params.endTime},'%y%m%d') + AND date_format(u.create_time,'%Y%m%d') <= date_format(#{params.endTime},'%Y%m%d') AND (u.dept_id = #{deptId} OR u.dept_id IN ( SELECT t.dept_id FROM sys_dept t WHERE FIND_IN_SET (#{deptId},ancestors) )) -- Gitee From 71b402327271f21539d6fee35005d72cc5259dea Mon Sep 17 00:00:00 2001 From: ann <58722+ann123@user.noreply.gitee.com> Date: Tue, 27 Aug 2024 10:47:17 +0000 Subject: [PATCH 6/9] Create /321 --- 321/.keep | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 321/.keep diff --git a/321/.keep b/321/.keep new file mode 100644 index 00000000..e69de29b -- Gitee From 0e10dddbd72b7fd0ba12b6e789ac05b479115e0d Mon Sep 17 00:00:00 2001 From: ann <58722+ann123@user.noreply.gitee.com> Date: Wed, 28 Aug 2024 11:44:38 +0000 Subject: [PATCH 7/9] add PULL_REQUEST_TEMPLATE.zh-CN.md --- .gitee/PULL_REQUEST_TEMPLATE.zh-CN.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 .gitee/PULL_REQUEST_TEMPLATE.zh-CN.md diff --git a/.gitee/PULL_REQUEST_TEMPLATE.zh-CN.md b/.gitee/PULL_REQUEST_TEMPLATE.zh-CN.md new file mode 100644 index 00000000..6199c1ec --- /dev/null +++ b/.gitee/PULL_REQUEST_TEMPLATE.zh-CN.md @@ -0,0 +1,12 @@ +### 相关的Issue + + +### 原因(目的、解决的问题等) + + +### 描述(做了什么,变更了什么) + + +### 测试用例(新增、改动、可能影响的功能) + + -- Gitee From 311c4e6b34d569ea4136101addf9ac238ccd9f75 Mon Sep 17 00:00:00 2001 From: ann <58722+ann123@user.noreply.gitee.com> Date: Wed, 11 Sep 2024 08:47:55 +0000 Subject: [PATCH 8/9] add heelo.js --- heelo.js | 1 + 1 file changed, 1 insertion(+) create mode 100644 heelo.js diff --git a/heelo.js b/heelo.js new file mode 100644 index 00000000..abc62673 --- /dev/null +++ b/heelo.js @@ -0,0 +1 @@ +fffff \ No newline at end of file -- Gitee From c23a533452a431a98cf0a22bc46c6ed4bdaeb711 Mon Sep 17 00:00:00 2001 From: dfdfsd <58477+huhu5@user.noreply.gitee.com> Date: Wed, 18 Jun 2025 11:07:08 +0000 Subject: [PATCH 9/9] dff sdfsd --- Strategy_BbiBiasTradeNumStd.py | 162 +++++++++++++++++++++++++++++++++ 1 file changed, 162 insertions(+) create mode 100644 Strategy_BbiBiasTradeNumStd.py diff --git a/Strategy_BbiBiasTradeNumStd.py b/Strategy_BbiBiasTradeNumStd.py new file mode 100644 index 00000000..6e7b3b27 --- /dev/null +++ b/Strategy_BbiBiasTradeNumStd.py @@ -0,0 +1,162 @@ +# -*- coding: utf-8 -*- +""" +中性策略框架 | 邢不行 | 2024分享会 +author: 邢不行 +微信: xbx6660 +""" +import os + +# 取出策略文件名中_后的部分 +stg_name = os.path.basename(__file__).split('.')[0].split('_')[1] + +# 持仓周期。目前回测支持日线级别、小时级别。例:1H,6H,3D,7D...... +# 当持仓周期为D时,选币指标也是按照每天一根K线进行计算。 +# 当持仓周期为H时,选币指标也是按照每小时一根K线进行计算。 +hold_period = '1H'.replace('h', 'H').replace('d', 'D') +# 配置offset +offset = 0 +# 是否使用现货 +if_use_spot = True # True:使用现货。False:不使用现货,只使用合约。 + +# 多头选币数量。1 表示做多一个币; 0.1 表示做多10%的币 +long_select_coin_num = 0.1 +# 空头选币数量。1 表示做空一个币; 0.1 表示做空10%的币 +# short_select_coin_num = 0.1 +short_select_coin_num = 'long_nums' # long_nums意为着空头数量和多头数量保持一致。最多为所有合约的数量。注意:多头为0的时候,不能配置'long_nums' + +# 多头的选币因子列名。 +long_factor = '因子' # 因子:表示使用复合因子,默认是 factor_list 里面的因子组合。需要修改 calc_factor 函数配合使用 +# 空头的选币因子列名。多头和空头可以使用不同的选币因子 +short_factor = '因子' + +# 选币因子信息列表,用于`2_选币_单offset.py`,`3_计算多offset资金曲线.py`共用计算资金曲线 +factor_list = [ + ('BbiBiasTradeNumStd', True, 336, 1) # 因子名(和factors文件中相同),排序方式,参数,权重。 +] + +# 确认过滤因子及其参数,用于`2_选币_单offset.py`进行过滤 +filter_list = [ + ('Rsi', 336), +] + + +def after_merge_index(df, symbol, factor_dict, data_dict): + """ + 合并指数数据之后的处理流程,非必要。 + 本函数住要的作用如下: + 1、指定K线上不常用的数据在resample时的规则,例如:'taker_buy_quote_asset_volume': 'sum' + 2、合并外部数据,并指定外部数据在resample时的规则。例如:(伪代码) + chain_df = pd.read_csv(chain_path + symbol) # 读取指定币种链上数据 + df = pd.merge(df,chain_df,'left','candle_begin_time') # 将链上数据合并到日线上 + factor_dict['gas_total'] = 'sum' # 链上的gas_total字段,在小时数据转日线数据时用sum处理 + data_dict['gas_total'] = 'sum' # 链上的gas_total字段,在最后一次resample中的处理规则 + :param df: + :param symbol: + :param factor_dict: 小时级别resample到日线级别时使用(计算日线级别因子时需要,计算小时级别因子时不需要) + :param data_dict: resample生成最终数据时使用 + :return: + """ + + # 专门处理转日线是的resample规则 + factor_dict['taker_buy_quote_asset_volume'] = 'sum' # 计算日线级别因子前先resample到日线数据 + factor_dict['trade_num'] = 'sum' + + return df, factor_dict, data_dict + + +def after_resample(df, symbol): + """ + 数据重采样之后的处理流程,非必要 + :param df: 传入的数据 + :param symbol: 币种名称 + :return: + """ + + return df + + +# =====================以上是数据整理部分封装转的策略代码========================== +# ============================================================================ +# ============================================================================ +# ============================================================================ +# ============================================================================ +# =======================以下是选币函数封装的策略代码============================= + + +def calc_factor(df, **kwargs): + """ + 计算因子 + + 多空使用相同的两个因子 + + 1。多空相同的单因子选币,不需要编写代码 + + 2。多空相同的复合因子,本案例代码不需要修改,直接使用即可。《本案例代码就是多空相同的复合因子选币》 + + 多空使用不同的两个因子 + + 1。多空不同的单因子选币,不需要编写代码 + + 2。多空分离选币,需要根据具体因子具体改写 + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !!!!!这里改写需要一定的代码能力!!!!! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + 多空存在某一方是复合因子,另一方是单因子,则只需要计算一个复合因子即可。代码可以参考下方案例代码 + + 如果多空都是复合因子,多空需要分别是计算复合因子。 + + :param df: 原数据 + :return: + """ + # 接受外部回测的因子列表,这里主要是去适配`4_遍历选币参数.py` + external_list = kwargs.get('external_list', []) + if external_list: # 如果存在外部回测因子列表,则使用外部因子列表 + _factor_list = external_list + else: # 如过不存在外部回测因子列表,默认使用当前策略的因子列表 + _factor_list = factor_list + + # 多空相同的复合因子计算 + if long_factor == short_factor == '因子': + df[long_factor] = 0 + for factor_name, if_reverse, parameter_list, weight in _factor_list: + col_name = f'{factor_name}_{str(parameter_list)}' + # 计算单个因子的排名 + df[col_name + '_rank'] = df.groupby('candle_begin_time')[col_name].rank(ascending=if_reverse, method='min') + # 将因子按照权重累加 + df[long_factor] += (df[col_name + '_rank'] * weight) + + return df + + +def before_filter(df, **kwargs): + """ + 前置过滤函数 + 自定义过滤规则,可以对多空分别自定义过滤规则 + + :param df: 原始数据 + :return: 过滤后的数据 + """ + # 接受外部回测的因子列表,这里主要是去适配`5_查看历年参数平原.py` + ex_filter_list = kwargs.get('ex_filter_list', []) + if ex_filter_list: # 如果存在外部回测因子列表,则使用外部因子列表 + _filter_list = ex_filter_list + else: # 如过不存在外部回测因子列表,默认使用当前策略的因子列表 + _filter_list = filter_list + + df_long = df.copy() + df_short = df.copy() + + # 如果过滤列表中只有一个因子 + if len(_filter_list) == 1: + filter_factor = _filter_list[0][0] + '_' + str(_filter_list[0][1]) + # 配置了过滤因子信息,则进行过滤操作 + df_long['filter_rank'] = df_long.groupby('candle_begin_time')[filter_factor].rank(ascending=True, pct=True) + df_long = df_long[(df_long['filter_rank'] < 0.8)] + + df_short['filter_rank'] = df_short.groupby('candle_begin_time')[filter_factor].rank(ascending=True, pct=True) + df_short = df_short[(df_short['filter_rank'] < 0.8)] + else: # 如果使用多个因子进行过滤,在这里进行填写 + + pass + + return df_long, df_short -- Gitee