def test06(self): '''测试ExpectedIndex数学期望方差指标''' futurecommodity.setDataDirAfterVerified() theKLineList = futurecommodity.getContractKLineList("AP1901", True) futurelogger.log(theKLineList) fiMacd = futureindex.ExpectedIndex(26) futurelogger.log(fiMacd.cal(theKLineList))
def test05(self): '''测试macd指标''' futurecommodity.setDataDirAfterVerified() theKLineList = futurecommodity.getContractKLineList("AP1901", True) futurelogger.log(theKLineList) fiMacd = futureindex.MacdIndex(12, 26, 9) futurelogger.log(fiMacd.cal(theKLineList))
def testName(self): theKLineList = futurecommodity.getContractKLineList("AP1901") #scs = futurestrategy.SimpleChannelCloseStrategy(20) mcs = futurestrategy.MaChannelStrategy(3, 18) signalList = mcs.signal(theKLineList) combineList = futureindex.combineIndexLists( [theKLineList.getTimeList(), signalList]) futurelogger.log(combineList)
def test04(self): '''测试rsi指标''' futurecommodity.setDataDirAfterVerified() theKLineList = futurecommodity.getContractKLineList("AP1901", True) futurelogger.log(theKLineList) fiRsi6 = futureindex.RsiIndex(6) futurelogger.log(fiRsi6.cal(theKLineList)) fiRsi12 = futureindex.RsiIndex(3) futurelogger.log(fiRsi12.cal(theKLineList)) fiRsi24 = futureindex.RsiIndex(24) futurelogger.log(fiRsi24.cal(theKLineList))
def test03(self): kList = futurecommodity.getContractKLineList("AP1901") theDate01 = datetime.datetime.strptime('2018-09-16', "%Y-%m-%d") theDate02 = datetime.datetime.strptime('2018-09-21', "%Y-%m-%d") sub01 = kList.getSubscript(theDate01) sub02 = kList.getSubscript(theDate02) if sub01 is None: print("sub01 is None") else: print("sub01 time:" + kList.getKLine(sub01).timeString()) if sub02 is None: print("sub02 is None") else: print("sub02 time:" + kList.getKLine(sub02).timeString())
def trade(self): '''根据指定的时间、品种、交易策略,返回生成的交易记录字典''' transactionDict = {} for theCommodityCode in self.__commodityCodeList: theTransList = [] dateList = futuretools.getDaysList(self.beginDate, self.endDate) contractName = futurecommodity.getMainContractName( theCommodityCode, dateList[0]) if contractName is None: #如果在dateList[0]时没有一个主力合约,那么就要往后找到一个有主力合约的日子 for theDate in dateList: contractName = futurecommodity.getMainContractName( theCommodityCode, theDate) if contractName is not None: break if contractName is None: transactionDict[theCommodityCode] = [] continue dateList = futuretools.getDaysList(theDate, self.endDate) theKLineList = futurecommodity.getContractKLineList(contractName) self.__strategy.prepareIndexList(theKLineList) transaction = None for theDate in dateList: if (transaction is None) and (contractName != futurecommodity. getMainContractName(theCommodityCode, theDate)): #如果主力合约换掉了,那么要重新刷新信号量 contractNameNext = futurecommodity.getMainContractName( theCommodityCode, theDate) if contractNameNext is None: continue contractName = contractNameNext theKLineList = futurecommodity.getContractKLineList(contractName) self.__strategy.prepareIndexList(theKLineList) sub = theKLineList.getSubscript(theDate) if sub is None: continue else: lastSub = sub isHaveToCloseTrans = self.__isHaveToCloseTrans(theDate, contractName, theKLineList.getKLine(sub).close(), transaction) if (transaction is not None) and (isHaveToCloseTrans[0]): #如果因交易设置原因必须平仓则平仓 if self.__isAbleToTrade(False, transaction.getDirection(), theKLineList, sub): transaction.close(theDate, theKLineList.getKLine(sub).close(), isHaveToCloseTrans[1]) theTransList.append(transaction) transaction = None if (contractName != futurecommodity.getMainContractName( theCommodityCode, theDate)) and (transaction is None): #如果主力合约换掉了,那么要重新刷新信号量 contractName = futurecommodity.getMainContractName( theCommodityCode, theDate) theKLineList = futurecommodity.getContractKLineList(contractName) self.__strategy.prepareIndexList(theKLineList) sub = theKLineList.getSubscript(theDate) if sub is None: continue else: lastSub = sub if transaction is None: #如果当前没有仓位 if self.__isContractNearExpire(contractName, theDate)[0]: continue tradeSignal = self.__strategy.signal(theKLineList, sub, transaction) if tradeSignal.isLong() or tradeSignal.isShort(): if self.__isAbleToTrade(True, tradeSignal.getOpenDirection(), theKLineList, sub): transaction = Transaction(contractName, theDate, theKLineList.getKLine(sub).close(), tradeSignal) elif transaction.isLong(): #如果当前是多头 tradeSignal = self.__strategy.signal(theKLineList, sub, transaction) if tradeSignal.isShort(): if self.__isAbleToTrade(False, DIRECTION_LONG, theKLineList, sub): transaction.close(theDate, theKLineList.getKLine(sub).close(), "空头信号,平多仓") theTransList.append(transaction) if self.__isContractNearExpire(contractName, theDate )[0] is False: transaction = Transaction(contractName, theDate, theKLineList.getKLine(sub).close(), tradeSignal) elif tradeSignal.isPingduo(): if self.__isAbleToTrade(False, DIRECTION_LONG, theKLineList, sub): transaction.close(theDate, theKLineList.getKLine(sub).close(), "平多信号,平多仓") theTransList.append(transaction) transaction = None else: #如果当前是空头 tradeSignal = self.__strategy.signal(theKLineList, sub, transaction) if tradeSignal.isLong(): if self.__isAbleToTrade(False, DIRECTION_SHORT, theKLineList, sub): transaction.close(theDate, theKLineList.getKLine(sub).close(), "多头信号,平空仓") theTransList.append(transaction) if self.__isContractNearExpire(contractName, theDate )[0] is False: transaction = Transaction(contractName, theDate, theKLineList.getKLine(sub).close(), tradeSignal) elif tradeSignal.isPingkong(): if self.__isAbleToTrade(False, DIRECTION_SHORT, theKLineList, sub): transaction.close(theDate, theKLineList.getKLine(sub).close(), "平空信号,平空仓") theTransList.append(transaction) transaction = None if transaction is not None: transaction.close(theKLineList.getKLine( lastSub).time(), theKLineList.getKLine( lastSub).close(),"已到交易时段的最后一天,平仓了结") theTransList.append(transaction) transactionDict[theCommodityCode] = theTransList return transactionDict