-
Notifications
You must be signed in to change notification settings - Fork 690
Open
Description
已有的实现是:
def BARSSINCEN(S, N): # N周期内第一次S条件成立到现在的周期数,N为常量 by jqz1226
return pd.Series(S).rolling(N).apply(lambda x:N-1-np.argmax(x) if np.argmax(x) or x[0] else 0,raw=True).fillna(0).values.astype(int)
如果条件都不成立,则返回的是0,这个不是期望的,应该改成这样:
return pd.Series(S).rolling(N).apply(lambda x:N-1-np.argmax(x) if np.argmax(x) or x[0] else float('nan'),raw=True).values
比如下面这个选股条件:
XG:BARSSINCEN(C>=REF(HHV(H,250),1),50)=0 AND VOL>MA(VOL,5)*1.5 AND MA(C,5)>MA(C,10) AND MA(C,10)>MA(C,20);
如果用原有实现,那么即使条件 C>=REF(HHV(H,250),1) 不满足, BARSSINCEN(C>=REF(HHV(H,250),1),50)=0 反而成立了
Metadata
Metadata
Assignees
Labels
No labels