确定一个值是否与另一个值交叉的函数

2024-05-23 17:45:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在数据帧中处理一些数据,我发现自己编写的代码中包含了很多:

def entry_signal(y):
    conditions1 = [np.logical_and(y > 0, y.shift(1) < 0),np.logical_and(y < 0, y.shift(1) > 0)]
    values1 = ['LongEntry','ShortEntry']
    return np.select(conditions1, values1, '')

基本上,如果该值大于0且前一个值小于0,则应为真。你知道吗

我试图创建一个函数来执行此操作,但不断出现错误:

def cross_above(x,y):
    if np.logical_and(x>y, x.shift(1)<y):
        return True
    else:
        return False

然后我试着在这里使用它:

def entry_signal(y):
    conditions1 = [cross_above((y,0), y.shift(1) < 0),np.logical_and(y < 0, y.shift(1) > 0)]
    values1 = ['LongEntry','ShortEntry']
    return np.select(conditions1, values1, '')

但我不断得到一个真理,一个数列的值是模糊的。我做错什么了?你知道吗


Tags: and数据signalreturnshiftdefnpselect
1条回答
网友
1楼 · 发布于 2024-05-23 17:45:42

这能行吗?你知道吗

import numpy as np

def cross_above(x, threshold):
    x = np.asarray(x)
    return np.any( np.logical_and( x[1:]>threshold, x[:-1]<threshold) )

cross_above([1, 2, 3], 1.8) # True
cross_above([3, 2, 1], 1.2) # False
cross_above([3, 2, 1], 0.2) # False

相关问题 更多 >