def decover1(source, interval=1): ''' 去除间隔期内!=0数值的重复出现,并将信号标准化为1 新的信号会增强interval. 去除效率大于derepeatc ''' nsource = nequals(source, 0) ms = msum2(nsource, interval + 1) #间隔0为本位和,间隔1位本左邻和 return gand(equals(ms, 1), nsource)
def decover1(source,interval=1): ''' 去除间隔期内!=0数值的重复出现,并将信号标准化为1 新的信号会增强interval. 去除效率大于derepeatc ''' nsource = nequals(source,0) ms = msum2(nsource,interval+1) #间隔0为本位和,间隔1位本左邻和 return gand(equals(ms,1),nsource)
def under_cross(signal,source,follow): ''' 信号日低于或下叉。source一般为downlimit,follow为low 不仅仅给出下叉信号,而且还给出signal日follow是否低于source 信号日低于,则将屏蔽买入 下叉则是卖出 ''' sd = equals(cross(source,follow),-1) indices = (signal > 0) sd[indices] = greater_equals(source[indices],follow[indices]) return sd
def under_cross(signal, source, follow): ''' 信号日低于或下叉。source一般为downlimit,follow为low 不仅仅给出下叉信号,而且还给出signal日follow是否低于source 信号日低于,则将屏蔽买入 下叉则是卖出 ''' sd = equals(cross(source, follow), -1) indices = (signal > 0) sd[indices] = greater_equals(source[indices], follow[indices]) return sd
def xmaxmin_points(source,extends,functor,gfunctor,limit): ''' 计算最高或最低点,extends为作用范围. 返回值中前extends和后extends位都置0 ''' covered = extends * 2 + 1 #最大点必然大于之前的extends个元素和之后的extends个元素 if(len(source) < covered): return np.zeros_like(source) peak_values = tmaxmin(source,covered,functor,gfunctor,limit) xpeak_values = rollx(peak_values,-extends) cores = equals(source,xpeak_values) ncores = derepeatc(cores) ncores[:extends] = ncores[-extends:] = 0 return ncores
def xmaxmin_points(source, extends, functor, gfunctor, limit): ''' 计算最高或最低点,extends为作用范围. 返回值中前extends和后extends位都置0 ''' covered = extends * 2 + 1 #最大点必然大于之前的extends个元素和之后的extends个元素 if (len(source) < covered): return np.zeros_like(source) peak_values = tmaxmin(source, covered, functor, gfunctor, limit) xpeak_values = rollx(peak_values, -extends) cores = equals(source, xpeak_values) ncores = derepeatc(cores) ncores[:extends] = ncores[-extends:] = 0 return ncores
def derepeatc(source): ''' 去除!=0数值的连续出现(只剩下第一个),正规化为1 c是consecutive的意思 ''' t = subd(nequals(source,0)) return equals(t,1)
def opendayofweek(weekdays): #周开盘日 #特定情形下会不正确,如某周一交易日后,下一个交易日正好是下周二,则该周二不会被识别为周开盘日. 好在错误对称。 #另,第一个交易日也被识别为周开盘日 return greater(lesser_equals(weekdays-rollx(weekdays)) + equals(weekdays,1))
def closedayofweek(weekdays): #周收盘日 #特别特殊的情形下会不正确,如某周一交易日后,下一个交易日正好是下周二,则该周一不会被识别为周收盘日 #另,最后一个交易日也被识别为周收盘日 return greater(greater_equals(weekdays-rollx(weekdays,-1)) + equals(weekdays,5))
def derepeatc(source): ''' 去除!=0数值的连续出现(只剩下第一个),正规化为1 c是consecutive的意思 ''' t = subd(nequals(source, 0)) return equals(t, 1)
def opendayofweek(weekdays): #周开盘日 #特定情形下会不正确,如某周一交易日后,下一个交易日正好是下周二,则该周二不会被识别为周开盘日. 好在错误对称。 #另,第一个交易日也被识别为周开盘日 return greater( lesser_equals(weekdays - rollx(weekdays)) + equals(weekdays, 1))
def closedayofweek(weekdays): #周收盘日 #特别特殊的情形下会不正确,如某周一交易日后,下一个交易日正好是下周二,则该周一不会被识别为周收盘日 #另,最后一个交易日也被识别为周收盘日 return greater( greater_equals(weekdays - rollx(weekdays, -1)) + equals(weekdays, 5))