基于Python Pandas统计股票价格有效周期数的技术问询
用Pandas统计股票价格的有效周期次数
核心思路
通过标记入场信号和出场信号,结合累计求和跟踪周期状态,最终统计完整周期的数量。
具体实现步骤
假设你的股票数据存储在df中,包含price列(对应股票价格):
生成突破信号
先判断价格是否从下方突破入场价或出场价:# 入场信号:前一日价格低于136.3,当日价格站上136.3 df['entry_signal'] = (df['price'].shift(1) < 136.3) & (df['price'] >= 136.3) # 出场信号:前一日价格低于136.6,当日价格站上136.6 df['exit_signal'] = (df['price'].shift(1) < 136.6) & (df['price'] >= 136.6)跟踪周期状态
用cumsum()计算当前是否处于周期内:入场信号加1,出场信号减1,状态大于0时表示处于周期中:df['cycle_state'] = df['entry_signal'].astype(int) - df['exit_signal'].astype(int) df['in_cycle'] = df['cycle_state'].cumsum() > 0修正信号有效性
确保入场信号只在非周期状态下触发,出场信号只在周期状态下触发:# 入场信号仅当之前不在周期中时生效 df['entry_signal'] = df['entry_signal'] & ~df['in_cycle'].shift(1).fillna(False) # 出场信号仅当之前在周期中时生效 df['exit_signal'] = df['exit_signal'] & df['in_cycle'].shift(1).fillna(False)重新计算状态并统计周期数
修正信号后重新计算周期状态,出场信号的总和就是完整周期的数量:df['cycle_state'] = df['entry_signal'].astype(int) - df['exit_signal'].astype(int) df['in_cycle'] = df['cycle_state'].cumsum() > 0 # 统计有效周期次数 cycle_count = df['exit_signal'].sum() print(f"有效周期次数:{cycle_count}")
示例验证
用模拟数据测试(对应你提到的2个周期场景):
import pandas as pd data = {'price': [136.2, 136.4, 136.5, 136.7, 136.5, 136.2, 136.4, 136.5, 136.8]} df = pd.DataFrame(data)
运行代码后,cycle_count会输出2,符合预期结果。
内容的提问来源于stack exchange,提问作者tichy
相关产品推荐
相关产品推荐

