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
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
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()
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()
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()