def OnTick(self,Tick): print repr(Tick) if self.tsData.has_key(Tick.InstrumentID): self.tsData[Tick.InstrumentID].append(Tick.LastPrice) self.askData[Tick.InstrumentID].append(Tick.AskPrice1) self.bidData[Tick.InstrumentID].append(Tick.BidPrice1) for i in range(len(self.tradingOrder)): if self.tsData[self.tradingOrder[i][0]]!=[] and self.tsData[self.tradingOrder[i][1]]!=[]: if self.tsData[self.tradingOrder[i][0]][-1]-self.tsData[self.tradingOrder[i][1]][-1]*self.tradingOrder[i][2]>self.tradingOrder[i][4] or self.tsData[self.tradingOrder[i][0]][-1]-self.tsData[self.tradingOrder[i][1]][-1]*self.tradingOrder[i][2]<self.tradingOrder[i][3]: #定义买单下单参数 strategyName="spreadTrading" instrument_id=self.tradingOrder[i][0] limitPrice=self.askData[self.tradingOrder[i][0]][-1] volume=Ygg.dataOperation().findMulti(self.tradingOrder[i][2]) orderPriceType='2' direction='0' combOffSetFlag='0' combHedgeFlag='1' #定义下单结构体 dataBuy=tradingData(self.TD.spi,strategyName).inputOrderField(self.TD.broker_id,self.TD.investor_id,instrument_id,volume,limitPrice,orderPriceType,direction,combOffSetFlag,combHedgeFlag) #定义卖单下单参数 instrument_id=self.tradingOrder[i][1] limitPrice=self.bidData[self.tradingOrder[i][1]][-1] volume=round(self.tradingOrder[i][2]*Ygg.dataOperation().findMulti(self.tradingOrder[i][2])) orderPriceType='2' direction='1' combOffSetFlag='0' combHedgeFlag='1' #定义下单结构体 dataSell=tradingData(self.TD.spi,strategyName).inputOrderField(self.TD.broker_id,self.TD.investor_id,instrument_id,volume,limitPrice,orderPriceType,direction,combOffSetFlag,combHedgeFlag) #下单 self.TD.user.ReqOrderInsert(dataBuy,self.TD.spi.requestid) self.TD.user.ReqOrderInsert(dataSell,self.TD.spi.requestid)
def OnTick(self, Tick): print repr(Tick) if self.tsData.has_key(Tick.InstrumentID): self.tsData[Tick.InstrumentID].append(Tick.LastPrice) self.askData[Tick.InstrumentID].append(Tick.AskPrice1) self.bidData[Tick.InstrumentID].append(Tick.BidPrice1) for i in range(len(self.tradingOrder)): if self.tsData[self.tradingOrder[i][0]] != [] and self.tsData[ self.tradingOrder[i][1]] != []: if self.tsData[self.tradingOrder[i][0]][-1] - self.tsData[ self.tradingOrder[i] [1]][-1] * self.tradingOrder[i][2] > self.tradingOrder[i][ 4] or self.tsData[self.tradingOrder[i][0]][ -1] - self.tsData[self.tradingOrder[i] [1]][-1] * self.tradingOrder[i][ 2] < self.tradingOrder[i][3]: #定义买单下单参数 strategyName = "spreadTrading" instrument_id = self.tradingOrder[i][0] limitPrice = self.askData[self.tradingOrder[i][0]][-1] volume = Ygg.dataOperation().findMulti( self.tradingOrder[i][2]) orderPriceType = '2' direction = '0' combOffSetFlag = '0' combHedgeFlag = '1' #定义下单结构体 dataBuy = tradingData( self.TD.spi, strategyName).inputOrderField( self.TD.broker_id, self.TD.investor_id, instrument_id, volume, limitPrice, orderPriceType, direction, combOffSetFlag, combHedgeFlag) #定义卖单下单参数 instrument_id = self.tradingOrder[i][1] limitPrice = self.bidData[self.tradingOrder[i][1]][-1] volume = round( self.tradingOrder[i][2] * Ygg.dataOperation().findMulti(self.tradingOrder[i][2])) orderPriceType = '2' direction = '1' combOffSetFlag = '0' combHedgeFlag = '1' #定义下单结构体 dataSell = tradingData( self.TD.spi, strategyName).inputOrderField( self.TD.broker_id, self.TD.investor_id, instrument_id, volume, limitPrice, orderPriceType, direction, combOffSetFlag, combHedgeFlag) #下单 self.TD.user.ReqOrderInsert(dataBuy, self.TD.spi.requestid) self.TD.user.ReqOrderInsert(dataSell, self.TD.spi.requestid)
def strategySpread(self,startDate,endDate,assetCode,sigmaMultiplier,tableName): startDate=Ygg.dataOperation().strToDate(startDate) endDate=Ygg.dataOperation().strToDate(endDate) folderPath=os.getcwd() #提取期货数据 data=Ygg.dataOperation().retrieveData(assetCode,startDate,endDate) #进行价差分析运算 [res0,startDate,endDate]=Ygg.strategy().spreadSpeculation(data,folderPath,sigmaMultiplier) #写入数据库 Ygg.dataOperation().backtestDBInsert(res0,startDate,endDate,tableName)
def strategySpread(self, startDate, endDate, assetCode, sigmaMultiplier, tableName): startDate = Ygg.dataOperation().strToDate(startDate) endDate = Ygg.dataOperation().strToDate(endDate) folderPath = os.getcwd() #提取期货数据 data = Ygg.dataOperation().retrieveData(assetCode, startDate, endDate) #进行价差分析运算 [res0, startDate, endDate] = Ygg.strategy().spreadSpeculation(data, folderPath, sigmaMultiplier) #写入数据库 Ygg.dataOperation().backtestDBInsert(res0, startDate, endDate, tableName)
futureAccount = config.get("Trading", "futureAccount") startDate = config.get("Date", "startDate") endDate = config.get("Date", "endDate") commodityCode = config.get("Data", "commodityIndex").split(",") securityMarginCode = config.get("Data", "securityMargin").split(",") #提取wind行情参数 quoteStartDate = '1995-01-01' quoteEndDate = '2013-11-01' fields = config.get("Data", "fields") commodityName = "commodityIndex" securityMarginName = "securityMargin" #提取wind行情并写入数据库 #Ygg.dataOperation().getLowFreData(commodityName,quoteStartDate,quoteEndDate,fields,commodityCode) Ygg.dataOperation().getLowFreData(securityMarginName, quoteStartDate, quoteEndDate, fields, securityMarginCode) ''' #主力合同位置 #C:\Users\Skywalker\Documents\Python\quantsTrading\configurationFile path='%s/configurationFile/commodityContract.xlsx'%(os.getcwd()[0:-8]) #价差参数 sigmaMultiplier=config.get("Assumption","sigmaMultiplier").split(",") #价差策略计算 strategyName='spread' #strategy=cloud.strategy() #strategy.strategySpread(startDate,endDate,commodityCode,sigmaMultiplier,strategyName) #策略选择规则参数 BetaADF=0.1