我正在处理数据框中的一些数据,发现自己正在编写包含很多内容的代码:
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,则该值应为true。
我试图创建一个执行此操作的函数,但不断出现错误:
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, '')
但是我一直在获得系列价值的真相是模棱两可的。我在做什么错了?
答案 0 :(得分:1)
这是工作吗?
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