【问题标题】:N consecutive values screen in PythonPython中的N个连续值屏幕
【发布时间】:2021-07-25 14:27:21
【问题描述】:

我正在考虑制作一个交易算法,如果一列中的最后 n 个条目为“真”,则该算法会给出“1”信号。此处的代码将如何查找回溯窗口 - 在 stackoverflow 上找不到类似的内容。

提前致谢!

【问题讨论】:

  • roll了吗?
  • 欢迎来到 SO!到目前为止,您尝试了什么?你有一些限制,比如运行时间和内存吗?

标签: python pandas algorithm trading


【解决方案1】:

您可以将.rolling().sum()(滚动窗口内True 值的数量之和)、.ge()(大于或等于n)一起使用,最后使用.astype(int)(转换结果.ge()True/False 值到0/1 值)如下:

df['signal'] = df['Event'].rolling(n).sum().ge(n).astype(int)

在(相同)大小n 的滚动窗口内满足True 的计数>= n 自动确保最后一个n 连续值都是True


df = pd.DataFrame({
    "Number": np.arange(1,9),
    "Event": [False, True, True, True, False, True, True, False]
})

n=2
df['signal'] = df['Event'].rolling(n).sum().ge(n).astype(int)

print(df)

   Number  Event  signal
0       1  False       0
1       2   True       0
2       3   True       1
3       4   True       1
4       5  False       0
5       6   True       0
6       7   True       1
7       8  False       0


n=3
df['signal'] = df['Event'].rolling(n).sum().ge(n).astype(int)


print(df)

   Number  Event  signal
0       1  False       0
1       2   True       0
2       3   True       0
3       4   True       1
4       5  False       0
5       6   True       0
6       7   True       0
7       8  False       0

【讨论】:

    【解决方案2】:

    这样的事情呢?

    df = pd.DataFrame({
        "col1": [1,2,3,4,5],
        "col2": [False, False, True, True, True]
    })
    df2 = pd.DataFrame({
        "col1": [1,2,3,4,5],
        "col2": [False, False, False, False, False]
    })
    
    def check_last_n(df, n):
        return (df["col2"].tail(n) == True).all()
    
    print(check_last_n(df, 3))
    print(check_last_n(df, 4))
    print(check_last_n(df2, 2))
    >>> True
    >>> True
    >>> False
    

    【讨论】:

      猜你喜欢
      • 2021-09-24
      • 2019-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多