def do_backtest(self, arg): paramFlag = input('Use current parameters? ([y]/n): ') if paramFlag is 'n': # Change parameters here bbFunctions.choose_parameters() numLinesLog = bbFunctions.file_len(bbCfg.logFileName) bbCfg.logFileNameBT = bbFunctions.getLogFileNameBT() try: numLinesLogBT = bbFunctions.file_len(bbCfg.logFileNameBT) except: numLinesLogBT = 0 if numLinesLogBT != numLinesLog: bitbot.main('-b') d,r=bbPerformance.getReturns(bbCfg.logFileNameBT, None, '2014-01-08', None) bbPerformance.printSummary(r)
def do_calibrate(self, arg): reload(bbCfg) old_walkUp = bbCfg.walkUp old_tradeFactor = bbCfg.tradeFactor old_allinLimit = bbCfg.allinLimit old_backupFund = bbCfg.backupFund m = [0.9, 1.1] result = [] numLinesLog = bbFunctions.file_len(bbCfg.logFileName) for i in range(len(m)**4): sys.stdout.write('|') sys.stdout.write('\n') for bbCfg.walkUp in [x * old_walkUp for x in m]: for bbCfg.tradeFactor in [x * old_tradeFactor for x in m]: for bbCfg.allinLimit in [x * old_allinLimit for x in m]: for bbCfg.backupFund in [x * old_backupFund for x in m]: bbCfg.logFileNameBT = bbFunctions.getLogFileNameBT() try: n = bbFunctions.file_len(bbCfg.logFileNameBT) except: n = 0 #bbFunctions.display_config() sys.stdout.write('|') sys.stdout.flush() if n != numLinesLog: bitbot.main('-b -q') d,r=bbPerformance.getReturns(bbCfg.logFileNameBT, None, '2014-01-08', None) result.append([ bbCfg.walkUp, bbCfg.tradeFactor, bbCfg.allinLimit, bbCfg.backupFund, 100*bbPerformance.totalReturn(r[:,3])]) print('') result = np.array(result) result = result[np.argsort(result[:, len(result[0])-1])] print(' '.join('{0:>10}'.format(x) for x in ['walkUp', 'tradeFactor', 'allinLimit', 'backupFund', 'Return'])) for row in result[-10:]: print(' '.join('{0:10.4}'.format(x) for x in row))
def main(argv=None): testFlag, btFlag, quiet = argParser(argv) # Use data from exchange if btFlag == 0: API = apiKraken.API(keyKraken, secKraken) t = bbClasses.trader(bbCfg.logFileName) # Backtest: Use data from logfile else: API = apiBacktest.API() with open(bbCfg.logFileNameBT, 'w') as logBT: logBT.write('Time,Bid,Ask,EUR,BTC,Trade,minPrice,maxPrice\n') t = bbClasses.trader(bbCfg.logFileNameBT) p = bbClasses.portfolio(100,0) m = bbClasses.marketData('Null', 500, 500) if btFlag == 1 and testFlag == 0 and not quiet: # Progress bar for i in range(bbFunctions.progressBarLength()): sys.stdout.write('|') sys.stdout.write('\n') sys.stdout.flush while True: mainLoop(m, p, t, API, testFlag, btFlag, quiet) if testFlag: break elif btFlag == 1 and API.line == bbFunctions.file_len(bbCfg.logFileName): break if not btFlag: timeNow = datetime.datetime.now() delay = (10 - (timeNow.minute)%10) * 60 - timeNow.second time.sleep(delay) if not quiet: print('\n')