def fup60b(stock): ''' 60分钟从负数上来的有失败上叉先导的第一次成功上叉 ''' t = stock.transaction linelog('%s:%s' % (fup60.__name__,stock.code)) hzero = cached_zeros(len(stock.hour)) pdiff,pdea = cmacd(stock.hour) cross0 = cross(hzero,pdiff) udcross = cross(pdea,pdiff) #失败上叉:最近5个周期内被下叉信号抵消,或者最近5个周期内出现第二个上叉信号(导致msum仍然>0) fcross = gand(udcross>0,gor(rollx(msum(udcross,5),-5)==0,rollx(msum(udcross>0,5),-5)>1)) ucross = gand(udcross>0,pdiff>0,bnot(fcross)) xsum1 = rsum(ucross,cross0) #此时,第一个cross>0和第二个之间的位置被填满1 xsum = rsum(xsum1,cross0) #此时,只有第一个发生位为1 signal = gand(equals(xsum,1),pdiff>0) return hour2day(signal)
def fup60b(stock): ''' 60分钟从负数上来的有失败上叉先导的第一次成功上叉 ''' t = stock.transaction linelog('%s:%s' % (fup60.__name__, stock.code)) hzero = cached_zeros(len(stock.hour)) pdiff, pdea = cmacd(stock.hour) cross0 = cross(hzero, pdiff) udcross = cross(pdea, pdiff) #失败上叉:最近5个周期内被下叉信号抵消,或者最近5个周期内出现第二个上叉信号(导致msum仍然>0) fcross = gand( udcross > 0, gor( rollx(msum(udcross, 5), -5) == 0, rollx(msum(udcross > 0, 5), -5) > 1)) ucross = gand(udcross > 0, pdiff > 0, bnot(fcross)) xsum1 = rsum(ucross, cross0) #此时,第一个cross>0和第二个之间的位置被填满1 xsum = rsum(xsum1, cross0) #此时,只有第一个发生位为1 signal = gand(equals(xsum, 1), pdiff > 0) return hour2day(signal)
def hmacd_a(stock): linelog(stock.code) t = stock.transaction shour = stock.hour pdiff1,pdea1 = cmacd(stock.hour) pdiffd,pdead = cmacd(stock.hour,48,104,36) #signal = gand(cross(pdea1,pdiff1)>0,pdiffd>pdead,pdiffd>0,pdiff1>0) #至少一日前还在下面 msignal = gand(cross(cached_zeros(len(pdiff1)),pdiffd)>0,strend(pdiff1-pdea1)>3) #nsignal = gand(pdiff1<pdea1) signal = gand(hour2day(msignal)) stock.hmacda = signal #signal = gand(signal,stock.t5,stock.t4) return signal
def prepare_hmacd(stock): #linelog('prepare hmacd:%s' % stock.code) pdiff,pdea = cmacd(stock.hour) upcross_t = gand(cross(pdea,pdiff)>0,strend(pdiff)>0) upcross = gand(upcross_t,pdiff<100) #<100才保险 downcross = gand(cross(pdea,pdiff)<0,strend(pdiff)<0) stock.hup_t = hour2day(upcross_t) stock.hup = hour2day(upcross) stock.hdown = hour2day(downcross) upcross2 = gand(cross(pdea,pdiff)>0,strend(pdiff)>0) dsub = rsub(pdiff,upcross2) csub = rsub(stock.hour,upcross2) stock.hdev = hour2day(band(greater(dsub),lesser(csub))) #小时线背离 stock.mup_100 = hour2day(gand(pdiff>pdea,pdiff<100,strend(pdiff)>0,strend(pdea)>0)) #stock.hgreater = hour2day4(pdiff>pdea) stock.xup = hour2day(gand(pdiff>pdea,strend(pdiff)>0,strend(pdea)>0))
def gmacd5(stock,ldown=30,astart=60): # t = stock.transaction mdiff,mdea = cmacd(stock.g5) xcross = gand(cross(mdea,mdiff) > 0) linelog(stock.code) #ss = sfollow(xcross,stock.mup,3) ss = band(xcross,stock.mup) #gf1 = gand(stock.g20>5000,stock.g20<9500) xatr = stock.atr * BASE / t[CLOSE] signal = gand(ss,stock.above,stock.t5,strend(stock.ma4)>0,t[VOLUME]>0,mdiff>=mdea,strend(stock.ref.ma4)>0,xatr>=astart) return signal
def fupf(stock): ''' 本次上叉比上次上叉的位置高,同时价格也高 ''' t = stock.transaction linelog('%s:%s' % (fupf.__name__,stock.code)) pdiff,pdea = cmacd(stock.hour) upcross2 = gand(cross(pdea,pdiff)>0,strend(pdiff)>0) dsub = rsub(pdea,upcross2) #csub = rsub(stock.hour,upcross2) #ssub = rsub(rollx(strend(pdea)),upcross2) #上叉前一天的strend(pdea) vz = tmax(np.abs(pdiff),60) / 5 #pdiff不能超过0线太高 hsignal = gand(dsub>0,pdiff<vz) xatr = stock.atr * BASE / t[CLOSE] mxatr = ma(xatr,13) xr = gand(xatr<50,xatr<mxatr)#,strend(xatr-mxatr)<0) nd = bnot(gand(stock.ma1<stock.ma2,stock.ma2<stock.ma3)) rt = gand(stock.ref.t3) vma_s = ma(t[VOLUME],13) vma_l = ma(t[VOLUME],30) vfilter = vma_s < vma_l * 3/4 gr = gand(stock.g20<3000,stock.g20>stock.g60,stock.g60>stock.g120) signal = gand(hour2day(hsignal),strend(stock.diff)>0,xr,rt,nd,vfilter,gr) return signal
def fupf(stock): ''' 本次上叉比上次上叉的位置高,同时价格也高 ''' t = stock.transaction linelog('%s:%s' % (fupf.__name__, stock.code)) pdiff, pdea = cmacd(stock.hour) upcross2 = gand(cross(pdea, pdiff) > 0, strend(pdiff) > 0) dsub = rsub(pdea, upcross2) #csub = rsub(stock.hour,upcross2) #ssub = rsub(rollx(strend(pdea)),upcross2) #上叉前一天的strend(pdea) vz = tmax(np.abs(pdiff), 60) / 5 #pdiff不能超过0线太高 hsignal = gand(dsub > 0, pdiff < vz) xatr = stock.atr * BASE / t[CLOSE] mxatr = ma(xatr, 13) xr = gand(xatr < 50, xatr < mxatr) #,strend(xatr-mxatr)<0) nd = bnot(gand(stock.ma1 < stock.ma2, stock.ma2 < stock.ma3)) rt = gand(stock.ref.t3) vma_s = ma(t[VOLUME], 13) vma_l = ma(t[VOLUME], 30) vfilter = vma_s < vma_l * 3 / 4 gr = gand(stock.g20 < 3000, stock.g20 > stock.g60, stock.g60 > stock.g120) signal = gand(hour2day(hsignal), strend(stock.diff) > 0, xr, rt, nd, vfilter, gr) return signal
def fup60(stock): ''' 60分钟从负数上来的第一次上叉 #或从负数上来的成功地第一次上叉(不到5个周期就下叉计作失败) ''' t = stock.transaction linelog('%s:%s' % (fup60.__name__, stock.code)) hzero = cached_zeros(len(stock.hour)) pdiff, pdea = cmacd(stock.hour) cross0 = cross(hzero, pdiff) ucross = gand(cross(pdea, pdiff) > 0) xsum1 = rsum(ucross, cross0) #此时,第一个cross>0和第二个之间的位置被填满1 xsum = rsum(xsum1, cross0) #此时,只有第一个发生位为1 signal = gand(equals(xsum, 1), pdiff > 0) return hour2day(signal)
def fup60(stock): ''' 60分钟从负数上来的第一次上叉 #或从负数上来的成功地第一次上叉(不到5个周期就下叉计作失败) ''' t = stock.transaction linelog('%s:%s' % (fup60.__name__,stock.code)) hzero = cached_zeros(len(stock.hour)) pdiff,pdea = cmacd(stock.hour) cross0 = cross(hzero,pdiff) ucross = gand(cross(pdea,pdiff)>0) xsum1 = rsum(ucross,cross0) #此时,第一个cross>0和第二个之间的位置被填满1 xsum = rsum(xsum1,cross0) #此时,只有第一个发生位为1 signal = gand(equals(xsum,1),pdiff>0) return hour2day(signal)