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

金融DataFrame的position列基于历史值更新的实现方法咨询

实现代码

import numpy as np
import pandas as pd

# 第一步:计算初始开仓信号,和你原有开仓逻辑一致
entry_cond = [
    self.data['close'] > self.data['open_buy_high'],
    self.data['close'] < self.data['open_sell_low']
]
self.data['entry_signal'] = np.select(entry_cond, [1, -1], 0)

# 第二步:计算平仓触发条件
# 先临时获取当前无平仓情况下的持仓状态,用于平仓判断
temp_hold = self.data['entry_signal'].replace(0, np.nan).ffill()
exit_cond = (
    (temp_hold == 1) & (self.data['close'] < self.data['close_buy_low']) # 多单平仓:跌破多单平仓线
) | (
    (temp_hold == -1) & (self.data['close'] > self.data['close_sell_high']) # 空单平仓:涨破空单平仓线
)

# 第三步:生成最终position列
# 平仓位置强制设为0,其余位置保留开仓信号,再前向填充持仓状态
self.data['position'] = np.where(exit_cond, 0, self.data['entry_signal'])\
    .replace(0, np.nan).ffill().fillna(0).astype(int)

# 删除临时计算用的中间列
self.data.drop(columns=['entry_signal'], inplace=True)

逻辑说明

  • 你原有代码的问题是未留存上一周期的持仓状态,仅用当期position的值做判断,自然无法实现持仓延续的效果。
  • 上述逻辑先单独存储开仓信号,通过前向填充拿到每个节点默认的持仓状态,再结合平仓条件强制重置为0,最后再做一次前向填充实现「开仓后一直持有到平仓信号出现再归零」的效果。
  • 注意使用前请确保你的DataFrame已经按时间列升序排序,否则前向填充逻辑会出错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 22:15:02