Exemplo n.º 1
0
Arquivo: pool.py Projeto: ongbe/pymisc
    def estimate(self, vname, ops, front):
        l = len(self.directs)
        front = max(front, SLOPE_PERIOD)
        end = l - PROFIT_DAYS

        goods = [0] * AREA_NUM
        bads = [0] * AREA_NUM
        for i in range(front, end):
            area = self.areas[i]
            goods[area] += ops[i] * self.directs[i]

            # if ops[i] == self.directs[i]:
            # 	goods[area] += 1
            # elif self.directs[i] == 0:
            # 	pass
            # else:
            # 	bads[area] += 1

        for area in range(AREA_NUM):
            # logb.info('------' + str(area) + ', ' + str(AREA_NUM))
            vts, good, bad = self.voters[area], goods[area], bads[area]
            # logb.info('--' + str(area) + ',' + vname + ',' + str(good) + ',' + str(bad))
            gd = good - bad
            if gd < vts[-1][1] - vts[-1][2]:
                continue
            l = len(vts)
            for i in range(l):
                vgd = vts[i][1] - vts[i][2]
                if gd > vgd:
                    logb.info(str(area) + "," + vname + "," + str(good) + "," + str(bad))
                    vts.insert(i, [vname, good, bad, ops])
                    if l + 1 > self.num:
                        vts.pop(-1)
                    break
Exemplo n.º 2
0
	def estimate(self, vname, ops, front):
		l = len(self.directs)
		front = max(front, SLOPE_PERIOD)
		end = l - PROFIT_DAYS
		
		goods = [0] * AREA_NUM
		bads = [0] * AREA_NUM
		for i in range(front, end):
			if not checkTime(self.prices[i]['dt']): continue
			
			area = self.areas[i]
			goods[area] += ops[i] * self.directs[i]
			if ops[i] != 0: goods[area] -= 1
			
			#if ops[i] == self.directs[i]:
			#	goods[area] += 1
			#elif self.directs[i] == 0:
			#	pass
			#else:
			#	bads[area] += 1
				
		for area in range(AREA_NUM):
			#logb.info('------' + str(area) + ', ' + str(AREA_NUM)) 
			vts, good, bad = self.voters[area], goods[area], bads[area]
			#logb.info('--' + str(area) + ',' + vname + ',' + str(good) + ',' + str(bad)) 
			gd = good - bad
			if gd < vts[-1][1] - vts[-1][2]: continue
			l = len(vts)
			for i in range(l):
				vgd = vts[i][1] - vts[i][2]
				if gd > vgd:
					logb.info(str(area) + ',' + vname + ',' + str(good) + ',' + str(bad))
					vts.insert(i, [vname, good, bad, ops])
					if l + 1 > self.num:
						vts.pop(-1)
					break
Exemplo n.º 3
0
def runStrategy_0(in_prices):
    global mas, emas, smas, std, prices
    log.debug("beginning first strategy ...")

    prices = in_prices
    ps = [p["close"] for p in prices]

    std = [0] * 51
    l = len(prices)
    for period in range(2, 51):
        std[period] = [0] * l
        for i in range(period - 1, l):
            std[period][i] = round(np.std(ps[i - period + 1 : i + 1], dtype=np.float64, ddof=0), 3)

    mas = [0] * 61
    emas = [0] * 61
    smas = [0] * 61
    for period in range(2, 61):
        mas[period] = ma.calc_ma(ps, period)
        emas[period] = ma.calc_ema(ps, period)
        smas[period] = ma.calc_sma(ps, period)

    log.debug("running first strategy ...")
    starttime = datetime.datetime.now()
    matypes = ["MA", "EMA", "SMA"]

    farr = [2, 3, 4, 5, 6, 7]
    s1arr = [4, 6, 8, 10, 12, 14, 16, 18, 20]
    s2arr = [0, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45, 48, 51]

    pool = StrategyPool(100)

    for stdPeriod in [20, 30, 40]:
        stdGuage = 1.0
        while stdGuage <= 1.3:
            maxAEquity = maxBEquity = 0
            poola = StrategyPool(5)
            poolb = StrategyPool(5)

            for ft, f in [(matype, period) for matype in matypes for period in farr]:
                for s1t, s1 in [(matype, period) for matype in matypes for period in s1arr]:
                    elapsed = (datetime.datetime.now() - starttime).seconds
                    log.debug("== " + str(elapsed) + "," + ft + "_" + str(f) + "," + s1t + "_" + str(s1) + " ==")
                    for s2t, s2 in [(matype, period) for matype in matypes for period in s2arr]:
                        if s2 != 0 and s2 < s1:
                            continue
                        if s2 == 0 and (s2t == "EMA" or s2t == "SMA"):
                            continue

                        t = doTrade(poola, stdPeriod, stdGuage, ft, f, s1t, s1, s2t, s2, "", 0, "", 0, "", 0)

                        if t.equity > maxAEquity:
                            maxAEquity = t.equity
                            maxEAs = [ft, f, s1t, s1, s2t, s2]

            elapsed = (datetime.datetime.now() - starttime).seconds
            log.info("find A time: " + str(elapsed) + " ")
            poola.showStrategies()

            for ft, f in [(matype, period) for matype in matypes for period in farr]:
                for s1t, s1 in [(matype, period) for matype in matypes for period in s1arr]:
                    elapsed = (datetime.datetime.now() - starttime).seconds
                    log.debug("== " + str(elapsed) + "," + ft + "_" + str(f) + "," + s1t + "_" + str(s1) + " ==")
                    for s2t, s2 in [(matype, period) for matype in matypes for period in s2arr]:
                        if s2 != 0 and s2 < s1:
                            continue
                        if s2 == 0 and (s2t == "EMA" or s2t == "SMA"):
                            continue

                        t = doTrade(poolb, stdPeriod, stdGuage, "", 0, "", 0, "", 0, ft, f, s1t, s1, s2t, s2)

                        if t.equity > maxBEquity:
                            maxBEquity = t.equity
                            maxEBs = [ft, f, s1t, s1, s2t, s2]

            elapsed = (datetime.datetime.now() - starttime).seconds
            log.info("find B time: " + str(elapsed) + " ")
            poolb.showStrategies()

            logb.info(str(stdPeriod) + "," + str(stdGuage) + "," + str(maxAEquity) + "," + str(maxBEquity))
            logb.info(str(maxEAs))
            logb.info(str(maxEBs))

            for i in range(5):
                sa = poola.strategies[i]
                sb = poolb.strategies[i]
                t = doTrade(
                    pool,
                    stdPeriod,
                    stdGuage,
                    sa[0].args[2],
                    sa[0].args[3],
                    sa[0].args[4],
                    sa[0].args[5],
                    sa[0].args[6],
                    sa[0].args[7],
                    sb[0].args[8],
                    sb[0].args[9],
                    sb[0].args[10],
                    sb[0].args[11],
                    sb[0].args[12],
                    sb[0].args[13],
                )
                t.generateGraph()
                pool.estimate(t)

            stdGuage += 0.1

    pool.showStrategies()
Exemplo n.º 4
0
def runStrategy_0(in_prices):
    global mas, emas, smas, std, prices
    log.debug('beginning first strategy ...')

    prices = in_prices
    ps = [p['close'] for p in prices]

    std = [0] * 51
    l = len(prices)
    for period in range(2, 51):
        std[period] = [0] * l
        for i in range(period - 1, l):
            std[period][i] = round(
                np.std(ps[i - period + 1:i + 1], dtype=np.float64, ddof=0), 3)

    mas = [0] * 61
    emas = [0] * 61
    smas = [0] * 61
    for period in range(2, 61):
        mas[period] = ma.calc_ma(ps, period)
        emas[period] = ma.calc_ema(ps, period)
        smas[period] = ma.calc_sma(ps, period)

    log.debug('running first strategy ...')
    starttime = datetime.datetime.now()
    matypes = ['MA', 'EMA', 'SMA']

    farr = [
        2,
        3,
        4,
        5,
        6,
        7,
    ]
    s1arr = [
        4,
        6,
        8,
        10,
        12,
        14,
        16,
        18,
        20,
    ]
    s2arr = [
        0,
        6,
        9,
        12,
        15,
        18,
        21,
        24,
        27,
        30,
        33,
        36,
        39,
        42,
        45,
        48,
        51,
    ]

    pool = StrategyPool(100)

    for stdPeriod in [20, 30, 40]:
        stdGuage = 1.0
        while stdGuage <= 1.3:
            maxAEquity = maxBEquity = 0
            poola = StrategyPool(5)
            poolb = StrategyPool(5)

            for ft, f in [(matype, period) for matype in matypes
                          for period in farr]:
                for s1t, s1 in [(matype, period) for matype in matypes
                                for period in s1arr]:
                    elapsed = (datetime.datetime.now() - starttime).seconds
                    log.debug('== ' + str(elapsed) + ',' + ft + '_' + str(f) +
                              ',' + s1t + '_' + str(s1) + ' ==')
                    for s2t, s2 in [(matype, period) for matype in matypes
                                    for period in s2arr]:
                        if s2 != 0 and s2 < s1: continue
                        if s2 == 0 and (s2t == 'EMA' or s2t == 'SMA'): continue

                        t = doTrade(poola, stdPeriod, stdGuage, ft, f, s1t, s1,
                                    s2t, s2, '', 0, '', 0, '', 0)

                        if t.equity > maxAEquity:
                            maxAEquity = t.equity
                            maxEAs = [ft, f, s1t, s1, s2t, s2]

            elapsed = (datetime.datetime.now() - starttime).seconds
            log.info('find A time: ' + str(elapsed) + ' ')
            poola.showStrategies()

            for ft, f in [(matype, period) for matype in matypes
                          for period in farr]:
                for s1t, s1 in [(matype, period) for matype in matypes
                                for period in s1arr]:
                    elapsed = (datetime.datetime.now() - starttime).seconds
                    log.debug('== ' + str(elapsed) + ',' + ft + '_' + str(f) +
                              ',' + s1t + '_' + str(s1) + ' ==')
                    for s2t, s2 in [(matype, period) for matype in matypes
                                    for period in s2arr]:
                        if s2 != 0 and s2 < s1: continue
                        if s2 == 0 and (s2t == 'EMA' or s2t == 'SMA'): continue

                        t = doTrade(poolb, stdPeriod, stdGuage, '', 0, '', 0,
                                    '', 0, ft, f, s1t, s1, s2t, s2)

                        if t.equity > maxBEquity:
                            maxBEquity = t.equity
                            maxEBs = [ft, f, s1t, s1, s2t, s2]

            elapsed = (datetime.datetime.now() - starttime).seconds
            log.info('find B time: ' + str(elapsed) + ' ')
            poolb.showStrategies()

            logb.info(
                str(stdPeriod) + ',' + str(stdGuage) + ',' + str(maxAEquity) +
                ',' + str(maxBEquity))
            logb.info(str(maxEAs))
            logb.info(str(maxEBs))

            for i in range(5):
                sa = poola.strategies[i]
                sb = poolb.strategies[i]
                t = doTrade(pool, stdPeriod, stdGuage, sa[0].args[2],
                            sa[0].args[3], sa[0].args[4], sa[0].args[5],
                            sa[0].args[6], sa[0].args[7], sb[0].args[8],
                            sb[0].args[9], sb[0].args[10], sb[0].args[11],
                            sb[0].args[12], sb[0].args[13])
                t.generateGraph()
                pool.estimate(t)

            stdGuage += 0.1

    pool.showStrategies()
Exemplo n.º 5
0
def runStrategy(in_prices):
	global mas, emas, smas, std, prices
	log.debug('beginning first strategy ...')
	
	prices = in_prices
	ps = [p['close'] for p in prices]
	
	std = [0] * 51
	l = len(prices)
	for period in range(2, 51):
		std[period] = [0] * l
		for i in range(period - 1, l):
			std[period][i] = round(np.std(ps[i-period+1 : i+1], dtype=np.float64, ddof=0), 3)
		
	mas = [0] * 61
	emas = [0] * 61
	smas = [0] * 61
	for period in range(2, 61):
		mas[period] = ma.calc_ma(ps, period)
		emas[period] = ma.calc_ema(ps, period)
		smas[period] = ma.calc_sma(ps, period)
		
	pool = StrategyPool(100)
	#t = doTrade(pool, 25, 1.0, 'MA', 7, 'SMA', 12, 'EMA', 31, 'SMA', 7, 'MA', 12, 'MA', 13)
	t = doTrade(pool, 25, 1.3, 'MA', 7, 'SMA', 13, 'EMA', 31, 'SMA', 7, 'MA', 12, 'MA', 13)
	#t = doTrade(pool, 25, 1.0, 'MA', 7, 'SMA', 13, 'EMA', 26, 'SMA', 7, 'MA', 12, 'MA', 13)
	#t = doTrade(pool, 25, 1.0, 'MA', 7, 'SMA', 12, 'EMA', 26, 'SMA', 7, 'MA', 12, 'MA', 13)
	#
	#t = doTrade(pool, 25, 1.1, 'MA', 7, 'SMA', 12, 'EMA', 31, 'SMA', 7, 'MA', 12, 'MA', 13)
	#t = doTrade(pool, 25, 1.1, 'MA', 7, 'SMA', 13, 'EMA', 31, 'SMA', 7, 'MA', 12, 'MA', 13)
	#t = doTrade(pool, 25, 1.1, 'MA', 7, 'SMA', 13, 'EMA', 26, 'SMA', 7, 'MA', 12, 'MA', 13)
	#t = doTrade(pool, 25, 1.1, 'MA', 7, 'SMA', 12, 'EMA', 26, 'SMA', 7, 'MA', 12, 'MA', 13)
	#
	#t = doTrade(pool, 25, 1.2, 'MA', 7, 'SMA', 12, 'EMA', 31, 'SMA', 7, 'MA', 12, 'MA', 13)
	#t = doTrade(pool, 25, 1.2, 'MA', 7, 'SMA', 13, 'EMA', 31, 'SMA', 7, 'MA', 12, 'MA', 13)
	#t = doTrade(pool, 25, 1.2, 'MA', 7, 'SMA', 13, 'EMA', 26, 'SMA', 7, 'MA', 12, 'MA', 13)
	#t = doTrade(pool, 25, 1.2, 'MA', 7, 'SMA', 12, 'EMA', 26, 'SMA', 7, 'MA', 12, 'MA', 13)
	#
	#t = doTrade(pool, 25, 1.3, 'MA', 7, 'SMA', 12, 'EMA', 31, 'SMA', 7, 'MA', 12, 'MA', 13)
	#t = doTrade(pool, 25, 1.3, 'MA', 7, 'SMA', 13, 'EMA', 31, 'SMA', 7, 'MA', 12, 'MA', 13)
	#t = doTrade(pool, 25, 1.3, 'MA', 7, 'SMA', 13, 'EMA', 26, 'SMA', 7, 'MA', 12, 'MA', 13)
	#t = doTrade(pool, 25, 1.3, 'MA', 7, 'SMA', 12, 'EMA', 26, 'SMA', 7, 'MA', 12, 'MA', 13)
	#t = doTrade(pool, 25, 1.0, 'MA', 7, 'SMA', 13, 'EMA', 26, 'SMA', 7, 'MA', 12, 'MA', 12)
	pool.showStrategies()
		
	return 
	
	log.debug('running first strategy ...')
	starttime = datetime.datetime.now() 
	matypes = ['MA', 'EMA', 'SMA']
	
	#farr = [2, 3, 4, 5, 6, 7, ]
	#s1arr = [4, 6, 8, 10, 12, 14, 16, 18, 20, ]
	#s2arr = [0, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45, 48, 51, ]
	
	farr = [2,]
	s1arr = [4, ]
	s2arr = [0, ]
	
	pool = StrategyPool(100)
	for stdPeriod in [20, ]:
		stdGuage = 0.5
		for stdGuage in [1.3, ]:
			maxAEquity = maxBEquity = 0
			poola = StrategyPool(5)
			poolb = StrategyPool(5)
			
			for ft, f in [(matype, period) for matype in matypes for period in farr]:
				for s1t, s1 in [(matype, period) for matype in matypes for period in s1arr]:
					elapsed = (datetime.datetime.now() - starttime).seconds
					log.debug('== ' + str(elapsed) + ',' + ft + '_' + str(f) + ',' + s1t + '_' + str(s1) + ' ==')
					for s2t, s2 in [(matype, period) for matype in matypes for period in s2arr]:
						if s2 != 0 and s2 < s1: continue
						if s2 == 0 and (s2t == 'EMA' or s2t == 'SMA'): continue
						
						t = doTrade(poola, stdPeriod, stdGuage, ft, f, s1t, s1, s2t, s2, '', 0, '', 0, '', 0)
						
						if t.equity > maxAEquity:
							maxAEquity = t.equity
							maxEAs = [ft, f, s1t, s1, s2t, s2]
						
			elapsed = (datetime.datetime.now() - starttime).seconds
			log.info('find A time: ' + str(elapsed) + ' ')
			#poola.showStrategies()
			
			for ft, f in [(matype, period) for matype in matypes for period in farr]:
				for s1t, s1 in [(matype, period) for matype in matypes for period in s1arr]:
					elapsed = (datetime.datetime.now() - starttime).seconds
					log.debug('== ' + str(elapsed) + ',' + ft + '_' + str(f) + ',' + s1t + '_' + str(s1) + ' ==')
					for s2t, s2 in [(matype, period) for matype in matypes for period in s2arr]:
						if s2 != 0 and s2 < s1: continue
						if s2 == 0 and (s2t == 'EMA' or s2t == 'SMA'): continue
						
						t = doTrade(poolb, stdPeriod, stdGuage, '', 0, '', 0, '', 0, ft, f, s1t, s1, s2t, s2)
						
						if t.equity > maxBEquity:
							maxBEquity = t.equity
							maxEBs = [ft, f, s1t, s1, s2t, s2]
						
			elapsed = (datetime.datetime.now() - starttime).seconds
			log.info('find B time: ' + str(elapsed) + ' ')
			#poolb.showStrategies()
			
			logb.info(str(stdPeriod) + ',' + str(stdGuage) + ',' + str(maxAEquity) + ',' + str(maxBEquity))
			logb.info(str(maxEAs))
			logb.info(str(maxEBs))
			
			for i in range(5):
				sa = poola.strategies[i]
				sb = poolb.strategies[i]
				t = doTrade(pool, stdPeriod, stdGuage, sa[0].args[2], sa[0].args[3], sa[0].args[4], sa[0].args[5], sa[0].args[6], sa[0].args[7], sb[0].args[8], sb[0].args[9], sb[0].args[10], sb[0].args[11], sb[0].args[12], sb[0].args[13])
				t.generateGraph()
				#pool.estimate(t)
				
			#stdGuage += 0.1
	
	pool.showStrategies()