stockNum = 0.0 state = False execList.append((date, "sell", cap)) if state: cap = stockData.iloc[-1].adjclose * stockNum roi = (cap - oriCap) / oriCap result = {str(executeDict.keys()[0]): (roi, execList)} return result if __name__ == "__main__": # 由于这个QueueManager只从网络上获取Queue,所以注册时只提供名字: QueueManager.register('get_task_queue') QueueManager.register('get_result_queue') stockData = utils.getStockDataTrain('2018', False) stockData = stockData.set_index("datetime") stockData.index = stockData.index.map(unicode) # 连接到服务器,也就是运行taskmanager.py的机器: server_addr = '127.0.0.1' print('Connect to server %s...' % server_addr) # 端口和验证码注意保持与taskmanager.py设置的完全一致: m = QueueManager(address=(server_addr, 5000), authkey='abc') # 从网络连接: m.connect() # 获取Queue的对象: task = m.get_task_queue() result = m.get_result_queue() while (1): try:
os = kwargs.get('os') for i in n: aveU = pd.Series(stockData['adjclose'].rolling(i).apply( self.calcUp, raw=True).values, index=stockData['datetime']) # print aveU aveD = pd.Series(stockData['adjclose'].rolling(i).apply( self.calcDown, raw=True).values, index=stockData['datetime']) # print aveU, aveD rsi = 100 - 100 / (1 + (aveU.values / aveD.values)) stockData['rsi'] = rsi # print i for b in ob: for s in os: scoreRes[str(i) + '_' + str(b) + '_' + str(s)] = stockData.apply( lambda row: self.score(row, b, s), axis=1) cnt = cnt + 1 # print stockData scoreRes['datetime'] = stockData['datetime'] scoreRes = scoreRes.set_index('datetime') return scoreRes, cnt if __name__ == "__main__": stockDataTrain = utils.getStockDataTrain("0005", True) rsi = RelativeStrengthIndex() params = rsi.defaultParam() rsi.run(stockDataTrain, **params)
}) i = i + 1 # log.debug( "runtimes: " + str(i)) #if allRate = True, then there is only 1 result use to get the SharpeRatio. # calculate buy-and-hold roi buyAndHold = (stockData.iloc[-1].adjclose - stockData.iloc[0].adjclose) / stockData.iloc[0].adjclose bestRes = (bestParam, bestRoi, buyAndHold) # bestRes = (bestParam, bestRoi) return strategyResList, bestRes if __name__ == "__main__": module = importlib.import_module("BollingerBandsStrategy") class_ = getattr(module, "BollingerBandsStrategy") strategy = class_() params = strategy.defaultParam() print(params) # params['stockData'] = stockData isTrain = True stockDataTrain = utils.getStockDataTrain("0005", isTrain) bStratRes, bBstRes = runbackTest(stockDataTrain, strategy, **params) print(bStratRes, bBstRes) bParam = strategy.parseparams(bBstRes[0]) print(bParam) stockDataTest = utils.getStockDataTrain("0005", not isTrain) print(runbackTest(stockDataTest, strategy, **bParam)) # runbackTest('0005', "BollingerBands", False, **params)