You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Trigger与Stop Loss列生成合规Entry信号的向量化解法

向量化实现符合规则的交易入场信号生成

核心规则明确

  • 当出现Trigger时,次日仅在上一次Entry后已触发Exit(或首次入场)的情况下,生成有效Entry信号
  • 持仓期间(从Entry到Exit前),即使出现Trigger也禁止生成新的Entry

向量化解决方案(Pandas)

步骤1:标记潜在入场候选

首先定位所有Trigger的次日位置,作为潜在的入场候选点:

import pandas as pd

# 标记Trigger出现的行
df['trigger_flag'] = df['Trigger'] == 'Trigger'
# 潜在Entry为Trigger的次日(shift(1)实现后移一行)
df['potential_entry'] = df['trigger_flag'].shift(1).fillna(False)

步骤2:跟踪持仓状态

通过事件点(Entry/Exit)生成连续的持仓状态序列,避免循环遍历:

# 标记状态变更事件:Entry=持仓(True),Exit=清仓(False)
df['state_event'] = pd.NA
df.loc[df['signal 3'] == 'Entry', 'state_event'] = True
df.loc[df['Stop Loss'] == 'Exit', 'state_event'] = False

# 前向填充延续状态,初始状态为未持仓(False)
df['in_position'] = df['state_event'].ffill().fillna(False)

步骤3:筛选有效Entry信号

仅保留「潜在入场点 + 上一交易日未持仓」的有效信号:

# 上一交易日未持仓,才允许生成新Entry
df['valid_entry'] = df['potential_entry'] & ~df['in_position'].shift(1).fillna(False)

# 更新signal 3列:仅保留有效Entry,清空不符合规则的无效Entry
df.loc[df['valid_entry'], 'signal 3'] = 'Entry'
df.loc[~df['valid_entry'] & (df['signal 3'] == 'Entry'), 'signal 3'] = pd.NA

关键逻辑验证

针对示例中的最后一个Trigger(2024-03-29):

  • 次日(2024-04-01)的in_position.shift(1)为True(因2024-03-28的Entry尚未触发Exit)
  • 因此valid_entry为False,不会生成无效的Entry信号,完全符合规则

效率优势

该方案基于Pandas的向量化运算(底层为Numpy的C级实现),相比Python循环遍历,在处理百万级以上行的DataFrame时,效率可提升10~100倍,避免了循环的性能瓶颈。

内容的提问来源于stack exchange,提问作者Anonymous

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 21:34:53