コード例 #1
0
def getV(line, conf):
    lastD, nowD = data.readLine(line, conf)
    v0 = nowD.lastP
    v1 = nowD.p
    vm = v0 * (1.0 - conf.SlideRate) + v1 * conf.SlideRate
    return (v0, vm, nowD.settle)
    '''
コード例 #2
0
ファイル: model.py プロジェクト: wgzhao/scripts
def getV(line,conf):
	lastD,nowD=data.readLine(line,conf)
	v0=nowD.lastP
	v1=nowD.p
	vm=v0*(1.0-conf.SlideRate)+v1*conf.SlideRate
	return (v0,vm,nowD.settle)

	'''
コード例 #3
0
ファイル: RBreaker.py プロジェクト: wgzhao/scripts
def duralTrust(f,conf=basicConf,arg=None):
	bank=bankManage.Bank()
	detail=(arg=="detail")
	start=conf.StartValue
	curve=loss.Loss(start)
	tt=0
	phase=wave.Phase(conf.getSizes())
	blist=Stack.Queue(conf.MidSize/conf.TSize+1,[0,0,0,0])
	restBank=[0,0] #余量窗口
	minFlow=curve.now
	flow=curve.now
	for line in f:
		tt+=1
		lastD,nowD=data.readLine(line,conf)
		if nowD == None:
			continue
		v0=nowD.lastP
		v1=nowD.p
		phase.addV(v0)
コード例 #4
0
ファイル: RBreaker.py プロジェクト: rainly/scripts-1
def duralTrust(f, conf=basicConf, arg=None):
    bank = bankManage.Bank()
    detail = (arg == "detail")
    start = conf.StartValue
    curve = loss.Loss(start)
    tt = 0
    phase = wave.Phase(conf.getSizes())
    blist = Stack.Queue(conf.MidSize / conf.TSize + 1, [0, 0, 0, 0])
    restBank = [0, 0]  #余量窗口
    minFlow = curve.now
    flow = curve.now
    for line in f:
        tt += 1
        lastD, nowD = data.readLine(line, conf)
        if nowD == None:
            continue
        v0 = nowD.lastP
        v1 = nowD.p
        phase.addV(v0)
コード例 #5
0
ファイル: earn.py プロジェクト: rainly/scripts-1
def m2(f, conf1=MultiConf(1), conf2=MultiConf(2), arg=None):
    detail = (arg == "detail")
    bank1 = bankManage.Bank()
    bank2 = bankManage.Bank()
    start = conf1.StartValue
    curve = loss.Loss(start)
    tt = 0
    phase1 = wave.Phase(conf1.getSizes())
    blist1 = Stack.Queue(conf1.MidSize / conf1.TSize + 1, [0, 0, 0, 0])
    phase2 = wave.Phase(conf2.getSizes())
    blist2 = Stack.Queue(conf2.MidSize / conf2.TSize + 1, [0, 0, 0, 0])
    restBank1 = [0, 0]  #余量窗口
    restBank2 = [0, 0]
    minFlow = curve.now
    flow = curve.now
    vm1 = 0
    vm2 = 0
    lastD1 = data.Data()
    lastD2 = data.Data()
    nowD1 = data.Data()
    nowD2 = data.Data()
    for line in f:
        tt += 1
        if arg == "Curve":
            print "%s%.4f" % (conf1.CurveFix, curve.now / start * 30.0)
        if tt < 3:  #忽略第一行
            continue
        lastD1, nowD1 = data.readLine(line, conf1, nowD1, lastD1)
        lastD2, nowD2 = data.readLine(line, conf2, nowD2, lastD2)
        if nowD1 == None or nowD2 == None:
            continue
        v01 = nowD1.lastP
        v02 = nowD2.lastP
        vm1 = v01 * (1.0 - conf1.SlideRate) + conf1.SlideRate * nowD1.p
        vm2 = v02 * (1.0 - conf2.SlideRate) + conf2.SlideRate * nowD2.p
        phase1.add(v01)
        phase2.add(v02)
        curve.addTime()
        if nowD1.settle:
            e, f = bank1.destroy(vm1)
            curve.addE(e)
            flow += f
            restBank1 = [0, vm1]
            blist1 = Stack.Queue(conf1.MidSize / conf1.TSize + 1, [0, 0, 0, 0])
        if nowD2.settle:
            e, f = bank2.destroy(vm2)
            curve.addE(e)
            flow += f
            restBank2 = [0, vm2]
            blist2 = Stack.Queue(conf2.MidSize / conf2.TSize + 1, [0, 0, 0, 0])
            continue
        tn1 = clear(tt, blist1, v01, vm1, conf1, curve, phase1, detail)
        tn2 = clear(tt, blist2, v02, vm2, conf2, curve, phase2, detail)
        tn1 -= restBank1[0]  #与整数操作的差额操作
        tn2 -= restBank2[0]
        if tt % conf1.TSize == 7 % conf1.TSize:
            d1 = direction(phase1, conf1, conf1.Size, detail)
            d2 = direction(phase2, conf2, conf2.Size, detail)
            br1 = conf1.BankRate
            br2 = conf2.BankRate
            #if abs(d2) >= abs(d1):
            #	br2+=br1
            #	br1=0
            if abs(d1) > 0:
                n1 = (d1 * curve.now / conf1.MidSize * conf1.TSize * br1 /
                      v01 * conf1.GangRate / conf1.HandSize)
                tn1 += n1
                blist1.add([n1, vm1, vm1, tt])
            if abs(d2) > 0:
                n2 = (d2 * curve.now / conf2.MidSize * conf2.TSize * br2 /
                      v02 * conf2.GangRate / conf2.HandSize)
                tn2 += n2
                blist2.add([n2, vm2, vm2, tt])
        (tni1, tnv1) = near(tn1)
        (tni2, tnv2) = near(tn2)
        if abs(tni1) > 0:
            (e, f) = bank1.addBank(tni1, vm1, conf1)
            curve.addE(e)
            flow += f
        if abs(tni2) > 0:
            e, f = bank2.addBank(tni2, vm2, conf2)
            curve.addE(e)
            flow += f
        if flow < minFlow:
            minFlow = flow
        restBank1 = [tnv1, vm1]
        restBank2 = [tnv2, vm2]
    (e, f) = bank1.destroy(vm1)
    curve.addE(e)
    flow += f
    (e, f) = bank2.destroy(vm2)
    curve.addE(e)
    flow += f
    if flow < minFlow:
        minFlow = flow
    if arg == "Curve":
        print "%s%.4f" % (conf1.CurveFix, curve.now / start * 30.0)
    print curve
    print minFlow
コード例 #6
0
ファイル: earn.py プロジェクト: rainly/scripts-1
def phase(f, conf=basicConf, arg=None):
    bank = bankManage.Bank()
    detail = (arg == "detail")
    start = conf.StartValue
    curve = loss.Loss(start)
    tt = 0
    tn = 0
    phase = wave.Phase(conf.getSizes())
    volSize = 30
    smallVolSize = 10
    volPhase = wave.Phase([smallVolSize, volSize], [10, 100])
    #vol2=wave.Phase([smallVolSize,volSize],[10,100])
    sum = 0
    blist = Stack.Queue(conf.MidSize + 1, [0, 0, 0, 0])
    restBank = [0, 0]  #余量窗口
    minFlow = curve.now
    flow = curve.now
    lastDay = ""
    day = ""
    vm = 0
    lastV = -1
    maxBuyRate = -1
    divs = []
    divSum = 0
    divN = 0
    drs = []
    drSum = 0
    afterWardFac = 0  #滞后因子
    myBank = 0
    vbn = 0
    for line in f:
        tt += 1
        lastD, nowD = data.readLine(line, conf)
        if nowD == None:
            continue
        v0 = nowD.lastP
        if v0 <= 1e-12:
            sys.stderr.write(line)
            break
        v1 = nowD.p
        lastV = v0
        vol = lastD.vol
        if lastD.vol > 0 and nowD.vol - lastD.vol < 5 and nowD.vol - lastD.vol >= 0 and nowD.vol < 3000:
            vbn += 1
        if vbn > 10:
            break
        if arg == "Curve":
            print "%s%.4f" % (conf.CurveFix, curve.now / start * 30.0)
        #phase.add(v1)
        divs.append(v1)
        if len(divs) >= conf.DivSize:
            vopen = divs[-conf.DivSize]
            max = divs[-1]
            divRate = abs(max - vopen) / vopen
            drs.append(divRate)
            divSum += abs(max - vopen) / vopen
            divN += 1
            #print "",conf.MaxLoss,"divSum",divSum,"divN",divN,divSum/divN,"max-vopen",max-vopen,(max-vopen)/vopen,"max",max,"vopen",vopen
            divs = []
            drSum += divRate
            if len(drs) > 100:
                drSum -= drs[0]
                del drs[0]
            #conf.MaxLoss=divSum/divN
            #conf.MaxLoss=0.99*divSum/divN+0.01*divRate
            #conf.MaxLoss=0.94*divSum/divN+0.05*drSum/len(drs)+0.01*divRate
        volPhase.simpleAdd(vol)
        phase.add(v1)
        #vol2.add(vol)
        curve.addTime()
        vm = v1
        #v0*(1.0-conf.SlideRate)+v1*conf.SlideRate
        #print "vm",vm
        if nowD.settle:
            if detail:
                print "destroy: vm", vm, "bank", bank.bank, "price", bank.price, "now", curve.now
            myBank = 0
            e, f = bank.destroy(vm, conf)
            curve.addE(e)
            flow += f
            if detail:
                print "after destroy:bank", bank.bank, "e", e, "flow", flow, "now", curve.now
            if abs(e) > 0:
                curve.addWin(e / conf.HandSize, conf)
            restBank = [0, vm]
            blist = Stack.Queue(conf.MidSize / conf.TSize + 1, [0, 0, 0, 0])
            continue
        bankDiff = myBank - bank.bank
        if abs(bankDiff) > 1e-6:
            if True:
                print "tt", tt, "tn", tn, "myBank", myBank, "bank", bank.bank, "rest", restBank[
                    0], "bankDiff", bankDiff
            #myBank-=checkBank(blist,bankDiff,conf,detail)
        clearN = clear(tt, blist, v0, vm, conf, curve, phase, detail)
        tn = restBank[0]  #-restBank[0] #与整数操作的差额操作
        tn += bankDiff
        myBank -= bankDiff
        tn += clearN
        createN = 0
        if data.afterInDay(nowD, conf.DayEnd) <= 0 and data.afterInDay(
                nowD, conf.DayStart) >= 0:
            createN = create(tt, conf, phase, vm, curve, bank, detail)
            if createN > 0 and createN < conf.unitLowRate * conf.UnitLimit and bank.bank <= 0:
                createN = conf.UnitLimit
            if createN < 0 and createN > -conf.unitLowRate * conf.UnitLimit and bank.bank >= 0:
                createN = -conf.UnitLimit
            #afterWardFac=afterWardFac*(conf.MidSize-1.0)/conf.MidSize+createN/conf.MidSize
            #if abs(afterWardFac) > 0.8*abs(createN):
            #	createN+=0.02*afterWardFac
            tryBank = bank.bank + tn
            ceilBank = (curve.now * conf.GangRate *
                        conf.BankRate) / (v0 * conf.HandSize)
            if abs(createN) > 0 and abs(createN + tryBank) > ceilBank:
                #if random.random() > 0.9:
                #	print "createN",createN,"tryBank",tryBank,"ceilBank",ceilBank
                createN *= (ceilBank - abs(tryBank)) / abs(createN)
            tn += createN
            if abs(createN) > 0:
                blist.add([createN, vm, vm, tt])
        #phase.add(v1)
        #(tni,tnv)=near(tn)
        #tni=int(tn)+clearN
        tni = int(tn)
        tnv = tn - int(tn)  #int(tn)-tn
        if tnv > conf.StopLossNearInt and bank.bank + tni < 0:
            tni += 1
            tnv -= 1.0
        if tnv < -conf.StopLossNearInt and bank.bank + tni > 0:
            tni -= 1
            tnv += 1.0
        myBank += tni
        #if abs(createN) > 0:
        #	blist.add([createN,vm,vm,tt])
        #if abs(int(tn)) > 0:
        #	blist.add([int(tn),vm,vm,tt])
        nfold = abs(tni * v1 * conf.HandSize) / (curve.now * conf.GangRate)
        if maxBuyRate < nfold:
            #print "nfold",nfold,"maxBuyRate",maxBuyRate,"curve.now",curve.now
            maxBuyRate = nfold
        #if nfold > 0.3:
        #print "nfold",nfold,"maxBuyRate",maxBuyRate,"curve.now",curve.now
        if conf.Stock and (tni + bank.bank) < 0:
            tni = -bank.bank
            tnv = tn - tni  #tni-tn
        if abs(tni) > 0:
            if tni > 0:
                vm = vm * (1.0 + conf.SlideRate / 2500.0)
            else:
                vm = vm * (1.0 - conf.SlideRate / 2500.0)
            bb = bank.bank
            bp = bank.price
            bf = flow
            if random.random() < 1.999:  #0.1%失败交易
                (e, f) = bank.addBank(tni, vm, conf)
                curve.addE(e)
                flow += f
                if detail:
                    print "tt:", tt, "bb:", bb, "bp:", bp, "tni:", tni, "vm:", vm, "now:", curve.now, "e:", e, "f:", f, "flow:", flow
            else:
                print "trade fail: tni", tni
            dflow = curve.now - bank.value(conf) / conf.GangRate - flow
            if abs(dflow) > 1.0:
                print line
                print dflow, curve.now, tni, "vm:", vm, "bb:", bb, "bp:", bp, "after:", bank, e, bf, f, flow
                break
            if flow < minFlow:
                minFlow = flow
            #浮动
            #pass
        curve.addTrackE((vm - bank.price) * bank.bank * conf.HandSize)
        if arg == "Bank":
            #print "%s%.4f"%(conf.CurveFix,tni)
            print "%s%.4f" % (conf.CurveFix, flow / curve.now)
        if conf.Stock and bank.bank < 0:
            print "bank<0", curve.now, bank, tnv
        restBank = [tnv, vm]
    if detail:
        print "destroy: vm", vm, "bank", bank.bank, "price", bank.price, "now", curve.now
    if bank.bank > 0:
        vm = vm * (1.0 - conf.SlideRate / 2500.0)
    else:
        vm = vm * (1.0 + conf.SlideRate / 2500.0)
    (e, f) = bank.destroy(vm, conf)
    curve.addE(e)
    flow += f
    if detail:
        print "after destroy:bank", bank.bank, "e", e, "flow", flow, "now", curve.now
    if abs(e) > 0:
        curve.addWin(e / conf.HandSize, conf)
    return curve
コード例 #7
0
ファイル: stepBack.py プロジェクト: rainly/scripts-1
def back(f, conf, guohu=1.0):
    phase = wave.Phase([100, conf.LargeSize, conf.Size, conf.MidSize])
    li = 0
    lsmall = 0
    bi = -1
    bn = 0
    bprice = 0
    lastV = -1
    lastLow = -1
    smallQueue = Stack.Queue(3, init=0)
    smallV = 0
    navg = 0
    flow = 10000.0
    state = State()
    lastClose5 = False
    lastIsBull = False
    for line in f:
        li += 1
        lastD, nowD = data.readLine(line, conf)
        if nowD == None:
            if bn > 0:
                bi = -1
                bn = 0
                lastV = -1
                lastLow = -1
            continue
        if nowD.open <= 0 or nowD.close <= 0:
            if bn > 0:
                bi = -1
                bn = 0
                lastV = -1
                lastLow = -1
            continue
        v = nowD.close
        high = nowD.high
        if lastV < 0:
            lastV = nowD.open
        add = (v - lastV) / float(lastV)
        if add > 0.11 or add < -0.11:
            bn = 0
            bi = -1
            lastV = -1
            continue
        rate = (v - nowD.open) / float(nowD.open)
        hrate = (high - nowD.open) / float(nowD.open)
        hadd = (high - lastV) / float(lastV)
        oadd = (nowD.open - lastV) / float(lastV)
        avg = phase.avg(conf.MidSize)
        mavg = phase.avg(conf.LargeSize)
        avg100 = phase.avg(100)
        SA = 0.07
        #B12
        if bn > 0:
            #B1,B2,B3,B4
            p = nowD.close
            #B11,B12,B13,B14,B15
            if nowD.open > (1.0 + SA) * lastV:
                p = nowD.open
            #B5,B6,B7,B8,B9,B10,B11,B12,B13,B14,B15
            elif nowD.high > (1.0 + SA) * lastV:
                p = (1.0 + SA) * lastV
            e = bn * 100 * (p - 0.0013 * p - guohu * 0.6 / 1000 - bprice)
            bn = 0
            print "%s\t%f\t%s" % (nowD.day, e / flow, str(state))
            #curve.addE(e)
            bi = -1
        #elif bi > 0:
        #	if nowD.open < 1.06*lastV:
        #		bprice=nowD.open*(1.0+0.0003)+guohu*0.6/1000
        #		bn=int(curve.now/(100*bprice))
        if high > avg:
            navg += 1
        else:
            navg = 0
        #B1,2,3,4,5
        #if (hrate > 0.085 or (hadd > 0.085 and hrate > 0.05) )and lsmall >= 1 and nowD.low <= avg and nowD.close > avg:
        #B6   增长率:0.790062 最大下降:0.228  @683    增长下降比:3.4653  0.6760年
        #if (hrate > 0.07 or (hadd > 0.07 and hrate > 0.05) )and lsmall >= 1 and nowD.low <= avg and nowD.close > avg:
        #B7
        HR = 0.08  #加oadd < (0.095-HR)防止买不进
        #if hrate > HR and oadd < (0.095-HR) and lsmall >= 1 and nowD.low <= avg and nowD.close > avg:
        #B8,B9,B10,B11,B12,B13,B14,B15
        #HR=0.04
        HA = -0.02
        #B8
        #if hrate > HR and oadd < (0.095-HR) and lsmall >= 1 and lastV <= avg*1.02 and nowD.high > (1+HA)*avg:
        #B9
        #if hrate > HR and oadd < (0.095-HR) and lsmall >= 1 and lastV <= avg*1.02 and nowD.high > (1+HA)*avg:
        state.reset()
        #B10,B11,B12,B13,B15
        if hrate > HR and oadd < (0.095 -
                                  HR) and lsmall >= 1 and lastV <= avg * 1.02:
            #B14
            #if hrate > HR and oadd < (0.095-HR) and lsmall >= 1:
            state.LastClose5 = lastClose5
            state.IsBull = lastIsBull
            bi = li
            #B1,2,3,4,5,6
            p = nowD.close
            #B7.1
            #HA=0.0
            #if hadd > HA: #两个条件要同时满足
            #	if nowD.open*(1+HR) <= (1.0+HA)*lastV:
            #		p=(1.0+HA)*lastV
            #	else:
            #sys.stderr.write("high open%.3f!\n"%(nowD.open))
            #B7,B10,B11,B12,B13,B14,B15,B16
            p = nowD.open * (1 + HR)
            #B8,B9
            #if p < (1+HA)*avg:
            #	p=(1+HA)*avg
            bprice = p * (1.0 + 0.0003) + guohu * 0.6 / 1000
            bn = int(flow / (100 * bprice))
            #if add < 0.099 or rate > 0.5:
            #	bprice=nowD.close*(1.0+0.0003)+guohu*0.6/1000
            #	bn=int(curve.now/(100*bprice))
        phase.simpleAdd(nowD.close)
        smallV -= smallQueue.pop()
        #B12,B13,B14,B15
        lastClose5 = False
        lastIsBull = False
        if mavg > avg100:
            lastIsBull = True
        #B1  0.48   0.25
        #B1#if add < 0.04 and rate < 0.04 and rate > -0.06 and nowD.low <= avg and nowD.high >= avg:
        #B2#	增长率:0.55 最大下降:0.217   mrate:0.6321
        #if add < 0.04 and rate < 0.04	and nowD.low <= avg and nowD.high >= avg:
        #B3#	0.53 最大下降:0.157   0.6680年	mrate:0.6491
        #B4,B5,B6,B7,B8,B9,B10,B11,B12,B13,B14
        if add < 0.04 and rate < 0.02 and nowD.low <= avg * 1.02 and nowD.high >= avg * 0.98:
            #B15
            #if add < 0.04 and rate < 0.02 and nowD.low <= avg*1.03 and nowD.high >= avg*0.97:
            #B12,14
            #if nowD.open >= avg*0.98 and nowD.close <= avg*1.02 and nowD.low<= avg and nowD.high >= avg:
            #B13,B15
            if nowD.low <= avg and nowD.high >= avg:
                lastClose5 = True
            lsmall += 1
            smallV += 1
            smallQueue.add(1)
        else:
            lsmall = 0
            smallQueue.add(0)
        lastV = v
コード例 #8
0
ファイル: stepBack.py プロジェクト: wgzhao/scripts
def back(f,conf,guohu=1.0):
	phase=wave.Phase([100,conf.LargeSize,conf.Size,conf.MidSize])
	li=0
	lsmall=0
	bi=-1
	bn=0
	bprice=0
	lastV=-1
	lastLow=-1
	smallQueue=Stack.Queue(3,init=0)
	smallV=0
	navg=0
	flow=10000.0
	state=State()
	lastClose5=False
	lastIsBull=False
	for line in f:
		li+=1
		lastD,nowD=data.readLine(line,conf)
		if nowD == None:
			if bn > 0:
				bi=-1
				bn=0
				lastV=-1
				lastLow=-1
			continue
		if nowD.open <= 0 or nowD.close <= 0:
			if bn > 0:
				bi=-1
				bn=0
				lastV=-1
				lastLow=-1
			continue
		v=nowD.close
		high=nowD.high
		if lastV < 0:
			lastV=nowD.open
		add=(v-lastV)/float(lastV)
		if add > 0.11 or add < -0.11:
			bn=0
			bi=-1
			lastV=-1
			continue
		rate=(v-nowD.open)/float(nowD.open)
		hrate=(high-nowD.open)/float(nowD.open)
		hadd=(high-lastV)/float(lastV)
		oadd=(nowD.open-lastV)/float(lastV)
		avg=phase.avg(conf.MidSize)
		mavg=phase.avg(conf.LargeSize)
		avg100=phase.avg(100)
		SA=0.07
		#B12
		if bn > 0:
			#B1,B2,B3,B4
			p=nowD.close
			#B11,B12,B13,B14,B15
			if nowD.open > (1.0+SA)*lastV:
				p=nowD.open
			#B5,B6,B7,B8,B9,B10,B11,B12,B13,B14,B15
			elif nowD.high > (1.0+SA)*lastV:
				p=(1.0+SA)*lastV
			e=bn*100*(p-0.0013*p-guohu*0.6/1000-bprice)
			bn=0
			print "%s\t%f\t%s"%(nowD.day,e/flow,str(state))
			#curve.addE(e)
			bi=-1
		#elif bi > 0:
		#	if nowD.open < 1.06*lastV:
		#		bprice=nowD.open*(1.0+0.0003)+guohu*0.6/1000
		#		bn=int(curve.now/(100*bprice))
		if high > avg:
			navg+=1
		else:
			navg=0
		#B1,2,3,4,5
		#if (hrate > 0.085 or (hadd > 0.085 and hrate > 0.05) )and lsmall >= 1 and nowD.low <= avg and nowD.close > avg:
		#B6   增长率:0.790062 最大下降:0.228  @683    增长下降比:3.4653  0.6760年
		#if (hrate > 0.07 or (hadd > 0.07 and hrate > 0.05) )and lsmall >= 1 and nowD.low <= avg and nowD.close > avg:
		#B7
		HR=0.08 #加oadd < (0.095-HR)防止买不进
		#if hrate > HR and oadd < (0.095-HR) and lsmall >= 1 and nowD.low <= avg and nowD.close > avg:
		#B8,B9,B10,B11,B12,B13,B14,B15
		#HR=0.04
		HA=-0.02
		#B8
		#if hrate > HR and oadd < (0.095-HR) and lsmall >= 1 and lastV <= avg*1.02 and nowD.high > (1+HA)*avg:
		#B9
		#if hrate > HR and oadd < (0.095-HR) and lsmall >= 1 and lastV <= avg*1.02 and nowD.high > (1+HA)*avg:
		state.reset()
		#B10,B11,B12,B13,B15
		if hrate > HR and oadd < (0.095-HR) and lsmall >= 1 and lastV <= avg*1.02:
		#B14
		#if hrate > HR and oadd < (0.095-HR) and lsmall >= 1:
			state.LastClose5=lastClose5
			state.IsBull=lastIsBull
			bi=li
			#B1,2,3,4,5,6
			p=nowD.close
			#B7.1
			#HA=0.0
			#if hadd > HA: #两个条件要同时满足
			#	if nowD.open*(1+HR) <= (1.0+HA)*lastV:
			#		p=(1.0+HA)*lastV
			#	else:
					#sys.stderr.write("high open%.3f!\n"%(nowD.open))
			#B7,B10,B11,B12,B13,B14,B15,B16
			p=nowD.open*(1+HR)
			#B8,B9
			#if p < (1+HA)*avg:
			#	p=(1+HA)*avg
			bprice=p*(1.0+0.0003)+guohu*0.6/1000
			bn=int(flow/(100*bprice))
			#if add < 0.099 or rate > 0.5:
			#	bprice=nowD.close*(1.0+0.0003)+guohu*0.6/1000
			#	bn=int(curve.now/(100*bprice))
		phase.simpleAdd(nowD.close)
		smallV-=smallQueue.pop()
		#B12,B13,B14,B15
		lastClose5=False
		lastIsBull=False
		if mavg > avg100:
			lastIsBull=True
		#B1  0.48   0.25	
		#B1#if add < 0.04 and rate < 0.04 and rate > -0.06 and nowD.low <= avg and nowD.high >= avg:
		#B2#	增长率:0.55 最大下降:0.217   mrate:0.6321
		#if add < 0.04 and rate < 0.04	and nowD.low <= avg and nowD.high >= avg:
		#B3#	0.53 最大下降:0.157   0.6680年	mrate:0.6491
		#B4,B5,B6,B7,B8,B9,B10,B11,B12,B13,B14
		if add < 0.04 and rate < 0.02 and nowD.low <= avg*1.02 and nowD.high >= avg*0.98:
		#B15
		#if add < 0.04 and rate < 0.02 and nowD.low <= avg*1.03 and nowD.high >= avg*0.97:
			#B12,14
			#if nowD.open >= avg*0.98 and nowD.close <= avg*1.02 and nowD.low<= avg and nowD.high >= avg:
			#B13,B15
			if nowD.low<= avg and nowD.high >= avg:
				lastClose5=True
			lsmall+=1
			smallV+=1
			smallQueue.add(1)
		else:
			lsmall=0
			smallQueue.add(0)
		lastV=v
コード例 #9
0
ファイル: price.py プロジェクト: rainly/scripts-1
def pricePhase(f,conf=PricePhaseConf(),arg=None):
	bank=bankManage.Bank()
	detail=(arg=="detail")
	start=conf.StartValue
	curve=loss.Loss(start)
	tt=0
	tn=0
	blist=Stack.Queue(conf.MidSize+1,[0,0,0,0,conf.MidSize])
	restBank=[0,0] #余量窗口
	minFlow=curve.now
	flow=curve.now
	lastDay=""
	day=""
	vm=0
	MaxPNum=1000000
	ptime=[0]*MaxPNum
	for line in f:
		tt+=1
		lastD,nowD=data.readLine(line,conf)
		if nowD == None:
			continue
		v1=nowD.p
		vpn=int(v1*5.0)
		vm=v1
		ptime[vpn]=tt
		#if detail:
		#	print "v1",v1,"vpn",vpn
		if arg == "Curve":
			print "%s%.4f"%(conf.CurveFix,curve.now/start*30.0)
		curve.addTime()
		clearN=clear(tt,blist,v1,vm,conf,curve,detail)
		tn=restBank[0] #-restBank[0] #与整数操作的差额操作
		tn+=clearN
		createN=0
		pt0=tt
		pt_1=smoothPrice(ptime,vpn-conf.SmallSize)
		pt1=smoothPrice(ptime,vpn+conf.SmallSize)
		pt_2=smoothPrice(ptime,vpn-conf.Size)
		pt2=smoothPrice(ptime,vpn+conf.Size)
		pt_3=smoothPrice(ptime,vpn-conf.LargeSize)
		pt3=smoothPrice(ptime,vpn+conf.LargeSize)
		#pt_4=smoothPrice(ptime,vpn-conf.MSize)
		#pt4=smoothPrice(ptime,vpn+conf.MSize)
		if data.afterInDay(nowD,conf.DayEnd) <= 0 and data.afterInDay(nowD,conf.DayStart) >= 0:
			#createN=create(tt,conf,phase,vm,curve,bank,detail)
			msize=conf.MidSize
			if pt0 > pt_2 and pt_1 > pt1 and pt0 > pt_2 and pt_2 > pt_3 and pt0-pt_3 < 200:
				msize=conf.MidSize
				createN=(curve.now/msize*conf.BankRate/vm*conf.GangRate/conf.HandSize)
				if detail:
					print "pt0",pt0,"pt1",pt1,"pt2",pt2,"pt3",pt3,
					print "pt0",pt0,"pt_1",pt_1,"pt_2",pt_2,"pt_3",pt_3,"msize",msize,"v1",v1,"cn",createN
			if pt0 > pt2 and pt1 > pt_1 and pt0 > pt2 and pt2 > pt3 and pt0-pt3 < 200:
				msize=conf.MidSize
				createN=-(curve.now/msize*conf.BankRate/vm*conf.GangRate/conf.HandSize)
				if detail:
					print "pt0",pt0,"pt_1",pt_1,"pt_2",pt_2,"pt_3",pt_3
					print "pt0",pt0,"pt1",pt1,"pt2",pt2,"pt3",pt3,"msize",msize,"v1",v1,"cn",createN
			if createN > 0 and createN < conf.unitLowRate*conf.UnitLimit and bank.bank <= 0:
				createN=conf.UnitLimit
			if createN < 0 and createN > -conf.unitLowRate*conf.UnitLimit and bank.bank >= 0:
				createN=-conf.UnitLimit
			#afterWardFac=afterWardFac*(conf.MidSize-1.0)/conf.MidSize+createN/conf.MidSize
			#if abs(afterWardFac) > 0.8*abs(createN):
			#	createN+=0.02*afterWardFac
			tryBank=bank.bank+tn
			ceilBank=(curve.now*conf.GangRate*conf.BankRate)/(v1*conf.HandSize)
			if abs(createN) > 0 and abs(createN+tryBank) > ceilBank:
				#if random.random() > 0.9:
				#	print "createN",createN,"tryBank",tryBank,"ceilBank",ceilBank
				createN*=(ceilBank-abs(tryBank))/abs(createN)
			tn+=createN
			if createN > 0:
				blist.add([createN,vm+conf.SlideRate,vm+conf.SlideRate,tt,msize])
			if createN < 0:
				blist.add([createN,vm-conf.SlideRate,vm-conf.SlideRate,tt,msize])
		tni=int(tn)	
		tnv=tn-int(tn) #int(tn)-tn
		if tnv > conf.StopLossNearInt and bank.bank+tni < 0:
			tni+=1
			tnv-=1.0
		if tnv < -conf.StopLossNearInt and bank.bank+tni > 0:
			tni-=1
			tnv+=1.0
		if conf.Stock and  (tni+bank.bank) < 0:
			tni=-bank.bank
			tnv=tn-tni #tni-tn
		if abs(tni) > 0:
			bb=bank.bank
			bp=bank.price
			bf=flow
			if tni > 0:
				vm=vm+conf.SlideRate
			else:
				vm=vm-conf.SlideRate
			(e,f)=bank.addBank(tni,vm,conf)
			curve.addE(e)
			flow+=f
			if detail:
				print "tt:",tt,"bb:",bb,"bp:",bp,"tni:",tni,"vm:",vm,"now:",curve.now,"e:",e,"f:",f,"flow:",flow
			dflow=curve.now-bank.value(conf)/conf.GangRate-flow
			if abs(dflow) > 1.0:
				print line
				print dflow,curve.now,tni,"vm:",vm,"bb:",bb,"bp:",bp,"after:",bank,e,bf,f,flow
			if flow < minFlow:
				minFlow=flow
		else:
			#浮动
			#pass
			curve.addTrackE((vm-bank.price)*bank.bank*conf.HandSize)
		restBank=[tnv,vm]
	if detail:
		print "destroy: vm",vm,"bank",bank.bank,"price",bank.price,"now",curve.now
	(e,f)=bank.destroy(vm,conf)
	curve.addE(e)
	flow+=f
	if detail:
		print "after destroy:bank",bank.bank,"e",e,"flow",flow,"now",curve.now
	if abs(e) > 0:
		curve.addWin(e/conf.HandSize,conf)
	print curve.confStr(conf)	
	print minFlow
コード例 #10
0
ファイル: earn.py プロジェクト: wgzhao/scripts
def m2(f,conf1=MultiConf(1),conf2=MultiConf(2),arg=None):
	detail=(arg=="detail")
	bank1=bankManage.Bank()
	bank2=bankManage.Bank()
	start=conf1.StartValue
	curve=loss.Loss(start)
	tt=0
	phase1=wave.Phase(conf1.getSizes())
	blist1=Stack.Queue(conf1.MidSize/conf1.TSize+1,[0,0,0,0])
	phase2=wave.Phase(conf2.getSizes())
	blist2=Stack.Queue(conf2.MidSize/conf2.TSize+1,[0,0,0,0])
	restBank1=[0,0] #余量窗口
	restBank2=[0,0]
	minFlow=curve.now
	flow=curve.now
	vm1=0
	vm2=0
	lastD1=data.Data()
	lastD2=data.Data()
	nowD1=data.Data()
	nowD2=data.Data()
	for line in f:
		tt+=1
		if arg == "Curve":
			print "%s%.4f"%(conf1.CurveFix,curve.now/start*30.0)
		if tt < 3: #忽略第一行
			continue
		lastD1,nowD1=data.readLine(line,conf1,nowD1,lastD1)
		lastD2,nowD2=data.readLine(line,conf2,nowD2,lastD2)
		if nowD1 == None or nowD2 == None:
			continue
		v01=nowD1.lastP
		v02=nowD2.lastP
		vm1=v01*(1.0-conf1.SlideRate)+conf1.SlideRate*nowD1.p
		vm2=v02*(1.0-conf2.SlideRate)+conf2.SlideRate*nowD2.p
		phase1.add(v01)
		phase2.add(v02)
		curve.addTime()
		if nowD1.settle:
			e,f=bank1.destroy(vm1)
			curve.addE(e)
			flow+=f
			restBank1=[0,vm1]
			blist1=Stack.Queue(conf1.MidSize/conf1.TSize+1,[0,0,0,0])
		if nowD2.settle:
			e,f=bank2.destroy(vm2)
			curve.addE(e)
			flow+=f
			restBank2=[0,vm2]
			blist2=Stack.Queue(conf2.MidSize/conf2.TSize+1,[0,0,0,0])
			continue
		tn1=clear(tt,blist1,v01,vm1,conf1,curve,phase1,detail)
		tn2=clear(tt,blist2,v02,vm2,conf2,curve,phase2,detail)
		tn1-=restBank1[0] #与整数操作的差额操作
		tn2-=restBank2[0]
		if tt % conf1.TSize == 7%conf1.TSize:
			d1=direction(phase1,conf1,conf1.Size,detail)
			d2=direction(phase2,conf2,conf2.Size,detail)
			br1=conf1.BankRate
			br2=conf2.BankRate
			#if abs(d2) >= abs(d1):
			#	br2+=br1
			#	br1=0
			if abs(d1) > 0:
				n1=(d1*curve.now/conf1.MidSize*conf1.TSize*br1/v01*conf1.GangRate/conf1.HandSize)
				tn1+=n1
				blist1.add([n1,vm1,vm1,tt])
			if abs(d2) > 0:
				n2=(d2*curve.now/conf2.MidSize*conf2.TSize*br2/v02*conf2.GangRate/conf2.HandSize)
				tn2+=n2
				blist2.add([n2,vm2,vm2,tt])
		(tni1,tnv1)=near(tn1)
		(tni2,tnv2)=near(tn2)
		if abs(tni1) > 0:
			(e,f)=bank1.addBank(tni1,vm1,conf1)
			curve.addE(e)
			flow+=f
		if abs(tni2) > 0:
			e,f=bank2.addBank(tni2,vm2,conf2)
			curve.addE(e)
			flow+=f
		if flow < minFlow:
			minFlow=flow
		restBank1=[tnv1,vm1]	
		restBank2=[tnv2,vm2]
	(e,f)=bank1.destroy(vm1)
	curve.addE(e)
	flow+=f
	(e,f)=bank2.destroy(vm2)
	curve.addE(e)
	flow+=f
	if flow < minFlow:
		minFlow=flow
	if arg == "Curve":
		print "%s%.4f"%(conf1.CurveFix,curve.now/start*30.0)
	print curve
	print minFlow
コード例 #11
0
ファイル: earn.py プロジェクト: wgzhao/scripts
def phase(f,conf=basicConf,arg=None):
	bank=bankManage.Bank()
	detail=(arg=="detail")
	start=conf.StartValue
	curve=loss.Loss(start)
	tt=0
	tn=0
	phase=wave.Phase(conf.getSizes())
	volSize=30
	smallVolSize=10
	volPhase=wave.Phase([smallVolSize,volSize],[10,100])
	#vol2=wave.Phase([smallVolSize,volSize],[10,100])
	sum=0
	blist=Stack.Queue(conf.MidSize+1,[0,0,0,0])
	restBank=[0,0] #余量窗口
	minFlow=curve.now
	flow=curve.now
	lastDay=""
	day=""
	vm=0
	lastV=-1
	maxBuyRate=-1
	divs=[]
	divSum=0
	divN=0
	drs=[]
	drSum=0
	afterWardFac=0 #滞后因子
	myBank=0
	vbn=0
	for line in f:
		tt+=1
		lastD,nowD=data.readLine(line,conf)
		if nowD == None:
			continue
		v0=nowD.lastP
		if v0 <= 1e-12:
			sys.stderr.write(line)
			break
		v1=nowD.p
		lastV=v0
		vol=lastD.vol
		if lastD.vol > 0 and nowD.vol - lastD.vol< 5 and nowD.vol - lastD.vol >= 0 and nowD.vol < 3000:
			vbn+=1
		if vbn > 10:
			break
		if arg == "Curve":
			print "%s%.4f"%(conf.CurveFix,curve.now/start*30.0)
		#phase.add(v1)
		divs.append(v1)
		if len(divs) >= conf.DivSize:
			vopen=divs[-conf.DivSize]
			max=divs[-1]
			divRate=abs(max-vopen)/vopen
			drs.append(divRate)
			divSum+=abs(max-vopen)/vopen
			divN+=1
			#print "",conf.MaxLoss,"divSum",divSum,"divN",divN,divSum/divN,"max-vopen",max-vopen,(max-vopen)/vopen,"max",max,"vopen",vopen
			divs=[]
			drSum+=divRate
			if len(drs) > 100:
				drSum-=drs[0]
				del drs[0]
			#conf.MaxLoss=divSum/divN
			#conf.MaxLoss=0.99*divSum/divN+0.01*divRate
			#conf.MaxLoss=0.94*divSum/divN+0.05*drSum/len(drs)+0.01*divRate
		volPhase.simpleAdd(vol)
		phase.add(v1)
		#vol2.add(vol)
		curve.addTime()
		vm=v1
		#v0*(1.0-conf.SlideRate)+v1*conf.SlideRate
		#print "vm",vm
		if nowD.settle:
			if detail:
				print "destroy: vm",vm,"bank",bank.bank,"price",bank.price,"now",curve.now
			myBank=0
			e,f=bank.destroy(vm,conf)
			curve.addE(e)
			flow+=f
			if detail:
				print "after destroy:bank",bank.bank,"e",e,"flow",flow,"now",curve.now
			if abs(e) > 0:
				curve.addWin(e/conf.HandSize,conf)
			restBank=[0,vm]
			blist=Stack.Queue(conf.MidSize/conf.TSize+1,[0,0,0,0])
			continue
		bankDiff=myBank-bank.bank
		if abs(bankDiff) > 1e-6:
			if True:
				print "tt",tt,"tn",tn,"myBank",myBank,"bank",bank.bank,"rest",restBank[0],"bankDiff",bankDiff
			#myBank-=checkBank(blist,bankDiff,conf,detail)
		clearN=clear(tt,blist,v0,vm,conf,curve,phase,detail)
		tn=restBank[0] #-restBank[0] #与整数操作的差额操作
		tn+=bankDiff
		myBank-=bankDiff
		tn+=clearN
		createN=0
		if data.afterInDay(nowD,conf.DayEnd) <= 0 and data.afterInDay(nowD,conf.DayStart) >= 0:
			createN=create(tt,conf,phase,vm,curve,bank,detail)
			if createN > 0 and createN < conf.unitLowRate*conf.UnitLimit and bank.bank <= 0:
				createN=conf.UnitLimit
			if createN < 0 and createN > -conf.unitLowRate*conf.UnitLimit and bank.bank >= 0:
				createN=-conf.UnitLimit
			#afterWardFac=afterWardFac*(conf.MidSize-1.0)/conf.MidSize+createN/conf.MidSize
			#if abs(afterWardFac) > 0.8*abs(createN):
			#	createN+=0.02*afterWardFac
			tryBank=bank.bank+tn
			ceilBank=(curve.now*conf.GangRate*conf.BankRate)/(v0*conf.HandSize)
			if abs(createN) > 0 and abs(createN+tryBank) > ceilBank:
				#if random.random() > 0.9:
				#	print "createN",createN,"tryBank",tryBank,"ceilBank",ceilBank
				createN*=(ceilBank-abs(tryBank))/abs(createN)
			tn+=createN
			if abs(createN) > 0:
				blist.add([createN,vm,vm,tt])
		#phase.add(v1)
		#(tni,tnv)=near(tn)
		#tni=int(tn)+clearN
		tni=int(tn)	
		tnv=tn-int(tn) #int(tn)-tn
		if tnv > conf.StopLossNearInt and bank.bank+tni < 0:
			tni+=1
			tnv-=1.0
		if tnv < -conf.StopLossNearInt and bank.bank+tni > 0:
			tni-=1
			tnv+=1.0
		myBank+=tni
		#if abs(createN) > 0:
		#	blist.add([createN,vm,vm,tt])
		#if abs(int(tn)) > 0:
		#	blist.add([int(tn),vm,vm,tt])
		nfold=abs(tni*v1*conf.HandSize)/ (curve.now*conf.GangRate)
		if maxBuyRate < nfold:
			#print "nfold",nfold,"maxBuyRate",maxBuyRate,"curve.now",curve.now
			maxBuyRate=nfold
		#if nfold > 0.3:
			#print "nfold",nfold,"maxBuyRate",maxBuyRate,"curve.now",curve.now
		if conf.Stock and  (tni+bank.bank) < 0:
			tni=-bank.bank
			tnv=tn-tni #tni-tn
		if abs(tni) > 0:
			if tni > 0:
				vm=vm*(1.0+conf.SlideRate/2500.0)
			else:
				vm=vm*(1.0-conf.SlideRate/2500.0)
			bb=bank.bank
			bp=bank.price
			bf=flow
			if random.random() < 1.999: #0.1%失败交易
				(e,f)=bank.addBank(tni,vm,conf)
				curve.addE(e)
				flow+=f
				if detail:
					print "tt:",tt,"bb:",bb,"bp:",bp,"tni:",tni,"vm:",vm,"now:",curve.now,"e:",e,"f:",f,"flow:",flow
			else:
				print "trade fail: tni",tni
			dflow=curve.now-bank.value(conf)/conf.GangRate-flow
			if abs(dflow) > 1.0:
				print line
				print dflow,curve.now,tni,"vm:",vm,"bb:",bb,"bp:",bp,"after:",bank,e,bf,f,flow
				break
			if flow < minFlow:
				minFlow=flow
			#浮动
			#pass
		curve.addTrackE((vm-bank.price)*bank.bank*conf.HandSize)
		if arg == "Bank":
			#print "%s%.4f"%(conf.CurveFix,tni)
			print "%s%.4f"%(conf.CurveFix,flow/curve.now)
		if conf.Stock and bank.bank < 0:
			print "bank<0",curve.now,bank,tnv
		restBank=[tnv,vm]
	if detail:
		print "destroy: vm",vm,"bank",bank.bank,"price",bank.price,"now",curve.now
	if bank.bank > 0:
		vm=vm*(1.0-conf.SlideRate/2500.0)
	else:
		vm=vm*(1.0+conf.SlideRate/2500.0)
	(e,f)=bank.destroy(vm,conf)
	curve.addE(e)
	flow+=f
	if detail:
		print "after destroy:bank",bank.bank,"e",e,"flow",flow,"now",curve.now
	if abs(e) > 0:
		curve.addWin(e/conf.HandSize,conf)
	return curve