def get_actionday(self): # 取交易日历 req = ReqPackage() req.Type = BarType.TradeDate self.trading_days = self.get_data_zmq(req) req.Type = BarType.Product products = self.get_data_zmq(req) proc_dict = {} for p in products: proc_dict[p['_id']] = p req.Type = BarType.InstrumentInfo insts = self.get_data_zmq(req) for inst_proc in insts: proc = proc_dict[inst_proc['ProductID']] f = InstrumentField() f.ExchangeID = proc['ExchangeID'] f.InstrumentID = inst_proc['_id'] f.PriceTick = proc['PriceTick'] f.ProductID = inst_proc['ProductID'] f.ProductType = proc['ProductType'] f.VolumeMultiple = proc['VolumeTuple'] if 'MAXLIMITORDERVOLUME' in proc: f.MaxOrderVolume = proc['MAXLIMITORDERVOLUME'] self.instrument_info[inst_proc['_id']] = f # 接口未登录,不计算Actionday if self.TradingDay == '': return self.Actionday = self.TradingDay if self.trading_days.index(self.TradingDay) == 0 else self.trading_days[self.trading_days.index(self.TradingDay) - 1] self.Actionday1 = (datetime.strptime(self.Actionday, '%Y%m%d') + timedelta(days=1)).strftime('%Y%m%d')
def __init__(self, stra_barupdate=None, stra_onorder=None): '''初始所有变量''' self.stra_uppdate = stra_barupdate self.stra_onorder = stra_onorder '''每bar只执行一次交易''' self.SingleOrderOneBar = False '''每bar只执行一 次交易''' '''K线序列''' self.Bars = [] '''K线序列''' '''合约''' self.Instrument = '' '''合约''' '''合约信息''' self.InstrumentInfo = InstrumentField() '''合约信息''' '''周期''' self.Interval = 1 '''周期''' '''周期类型''' self.IntervalType = IntervalType.Minute '''周期类型''' '''分笔数据 Tick.Instrument用来判断是否有实盘数据''' self.Tick = Tick() '''分笔数据 Tick.Instrument用来判断是否有实盘数据''' '''买卖信号''' self.Orders = [] '''买卖信号''' '''指标字典 策略使用的指标保存在此字典中 以便管理程序显示和处理''' self.IndexDict = {} '''指标字典 策略使用的指标保存在此字典中 以便管理程序显示和处理''' '''时间''' self.D = [] '''时间''' '''最高价''' self.H = [] '''最高价''' '''最低价''' self.L = [] '''最低价''' '''开盘价''' self.O = [] '''开盘价''' '''收盘价''' self.C = [] '''收盘价''' '''交易量''' self.V = [] '''交易量''' '''持仓量''' self.I = [] '''持仓量''' self._lastOrder = OrderItem()
def _OnRspQryInstrument(self, pInstrument: CThostFtdcInstrumentField, pRspInfo: CThostFtdcRspInfoField, nRequestID: int, bIsLast: bool): """""" inst = InstrumentField() inst.InstrumentID = pInstrument.getInstrumentID() inst.ProductID = pInstrument.getProductID() inst.ExchangeID = pInstrument.getExchangeID() inst.VolumeMultiple = pInstrument.getVolumeMultiple() inst.PriceTick = pInstrument.getPriceTick() inst.MaxOrderVolume = pInstrument.getMaxLimitOrderVolume() self.instruments[inst.InstrumentID] = inst
def get_actionday(self): # 取交易日历 if self.cfg.engine_postgres: conn = self.cfg.engine_postgres.raw_connection() cursor = conn.cursor() cursor.execute( 'select _id from future_config.trade_date where trading = 1') self.trading_days = [c[0] for c in cursor.fetchall()] else: req = ReqPackage() req.Type = BarType.TradeDate self.trading_days = self.get_data_zmq(req) req.Type = BarType.Product products = self.get_data_zmq(req) proc_dict = {} for p in products: proc_dict[p['_id']] = p req.Type = BarType.InstrumentInfo insts = self.get_data_zmq(req) for inst_proc in insts: proc = proc_dict[inst_proc['ProductID']] f = InstrumentField() f.ExchangeID = proc['ExchangeID'] f.InstrumentID = inst_proc['_id'] f.PriceTick = proc['PriceTick'] f.ProductID = inst_proc['ProductID'] f.ProductType = proc['ProductType'] f.VolumeMultiple = proc['VolumeTuple'] if 'MAXLIMITORDERVOLUME' in proc: f.MaxOrderVolume = proc['MAXLIMITORDERVOLUME'] self.instrument_info[inst_proc['_id']] = f # 接口未登录,不计算Actionday if self.TradingDay == '': return self.Actionday = self.TradingDay if self.trading_days.index( self.TradingDay) == 0 else self.trading_days[ self.trading_days.index(self.TradingDay) - 1] self.Actionday1 = (datetime.strptime(self.Actionday, '%Y%m%d') + timedelta(days=1)).strftime('%Y%m%d')