def OnFrontConnected(self): self.mdlogger.info('OnFrontConnected: Connect...') req = ApiStruct.ReqUserLogin(BrokerID=self.brokerID, UserID=self.userID, Password=self.password) self.requestID += 1 self.ReqUserLogin(req, self.requestID)
def OnFrontConnected(self): print('OnFrontConnected: Login...') req = ApiStruct.ReqUserLogin(BrokerID=self.brokerID, UserID=self.userID, Password=self.password) self.requestID += 1 self.ReqUserLogin(req, self.requestID)
def query_position(self, instrument_id=None, timeout=3): req = ApiStruct.QryInvestorPosition(BrokerID=self.broker_id, InvestorID=self.user_id) if instrument_id: req.InstrumentID = instrument_id self.request_id += 1 request_id = self.request_id ret = self.api.ReqQryInvestorPosition(req, request_id) if ret != 0: print 'query position failed', ret return None results = self._get_results(timeout, request_id) if results is None: return None self.position_dict = {} for result in results: if result.InstrumentID is None or result.PosiDirection is None or result.Position is None: continue if (result.InstrumentID, result.PosiDirection) not in self.position_dict: self.position_dict[(result.InstrumentID, result.PosiDirection)] = [] self.position_dict[(result.InstrumentID, result.PosiDirection)].append(result) return self.position_dict
def OnFrontConnected(self): print('OnFrontConnected: Login...') requestid = self.get_requestid() req = ApiStruct.ReqUserLogin(BrokerID=self.broker_id, \ UserID=self.investor_id, \ Password=self.password) self.ReqUserLogin(req, requestid)
def order_insert(self, orderref, tkr, side, ocflag, qty, prc, hedging, pct=1): reqid = self.get_requestid() qty = int(max(qty * pct, 1)) ocflag = ApiStruct.OF_Open if ocflag == 'O' else ( ApiStruct.OF_Close if ocflag == 'C' else ApiStruct.OF_CloseToday) side = ApiStruct.D_Buy if side == 'B' else ApiStruct.D_Sell hedging = ApiStruct.HF_Hedge if hedging == 'hedging' else ApiStruct.HF_Speculation req = ApiStruct.InputOrder(BrokerID=self.broker_id, InvestorID=self.investor_id, \ InstrumentID=tkr, \ OrderRef=orderref, \ OrderPriceType=ApiStruct.OPT_AnyPrice, \ Direction=side, \ CombOffsetFlag=ocflag, \ LimitPrice=0.0, \ VolumeTotalOriginal=qty, \ TimeCondition=ApiStruct.TC_IOC, \ MinVolume=1, \ CombHedgeFlag=hedging, \ RequestID=reqid) self.order_status[orderref] = '' self.order_eqty[orderref] = 0 print("OrderInsert: ", req) self.ReqOrderInsert(req, reqid)
def user_login(self, broker_id, investor_id, passwd): req = ApiStruct.ReqUserLogin(BrokerID=broker_id, UserID=investor_id, Password=passwd) self.requestid += 1 r = self.ReqUserLogin(req, self.requestid)
def test_insert_one_2_db(self): price = np.random.random(1)[0] * 10000 p_struct = ApiStruct.InputOrder( BrokerID=b'123', # 这一项作为标示,用于完成assert后的删除操作,因此要前后一致 InvestorID=b'', InstrumentID=b'rb1710', UserID=b'asdf', OrderPriceType=ApiStruct.OPT_LimitPrice, Direction=ApiStruct.D_Buy, CombOffsetFlag=ApiStruct.OF_Open, CombHedgeFlag=ApiStruct.HF_Speculation, LimitPrice=price, VolumeTotalOriginal=1, TimeCondition=ApiStruct.TC_GFD) with_mongo_collection(lambda c: c.delete_many({'BrokerID': '123'}), 'InputOrder') dic = ApiBase.insert_one_2_db(p_struct) # deal_with_mongo_collection(lambda c:c.insert_one(json_str),'InputOrder') with_mongo_collection( lambda c: self.assertEqual( len([raw for raw in c.find({'LimitPrice': price})]), 1), 'InputOrder') with_mongo_collection(lambda c: c.delete_many({'BrokerID': '123'}), 'InputOrder')
def ReqOrderInsert(self, instrumentid, comboffsetflag, direction, limitprice, volumetotaloriginal=1): #instrumentid = raw_input('请输入合约号:') #orderpricetype = raw_input('任意价1 限价2 最优价3 最新价4:') #comboffsetflag = raw_input('开仓0平仓1平今3平昨4:') #direction = raw_input('买0 卖1:') #limitprice = input('价格:') #volumetotaloriginal = raw_input('数量:') req = ApiStruct.InputOrder( BrokerID=self.brokerID, InvestorID=self.userID, InstrumentID=instrumentid, UserID=self.userID, OrderPriceType=str(2), Direction=str(direction), CombOffsetFlag=str(comboffsetflag), CombHedgeFlag='1', LimitPrice=float(limitprice), VolumeTotalOriginal=int(volumetotaloriginal), TimeCondition='3', VolumeCondition='1', MinVolume=0, ContingentCondition='1', StopPrice=0.0, ForceCloseReason='0', IsAutoSuspend=0) self.requestID += 1 TraderApi.ReqOrderInsert(self, req, self.requestID)
def test_insert_one_2_db_2(self): price = np.random.random(1)[0] * 10000 p_struct = ApiStruct.InputOrder( BrokerID=b'123', # 这一项作为标示,用于完成assert后的删除操作,因此要前后一致 InvestorID=b'', InstrumentID=b'rb1710', UserID=b'asdf', OrderPriceType=ApiStruct.OPT_LimitPrice, Direction=ApiStruct.D_Buy, CombOffsetFlag=ApiStruct.OF_Open, CombHedgeFlag=ApiStruct.HF_Speculation, LimitPrice=price, VolumeTotalOriginal=1, TimeCondition=ApiStruct.TC_GFD) with_mongo_collection(lambda c: c.delete_many({'BrokerID': '123'}), 'InputOrder') dic = ApiBase.insert_one_2_db(p_struct, **{ 'FrontID': 1, 'SessionID': 423 }) def check(collection): n = -1 for n, raw in enumerate(collection.find({'LimitPrice': price})): print(raw) self.assertEqual(raw['FrontID'], 1) self.assertEqual(raw['SessionID'], 423) self.assertEqual(n, 0) with_mongo_collection(check, 'InputOrder') with_mongo_collection(lambda c: c.delete_many({'BrokerID': '123'}), 'InputOrder')
def ReqQrySettlementInfo(self): req = ApiStruct.SettlementInfo(BrokerID=self.brokerID, UserID=self.userID) self.requestID += 1 answer = TraderApi.ReqQrySettlementInfo(self, req, self.requestID) if answer == 0: print "结算查询发送成功" pass
def ReqUserPasswordUpdate(self, oldpass, newpass): req = ApiStruct.UserPasswordUpdate(BrokerID=self.brokerID, InvestorID=self.userID, OldPassword=oldpass, NewPassword=newpass) self.requestID += 1 answer = TraderApi.ReqUserPasswordUpdate(self, req, self.requestID) print 'UserPasswordUpdate...' if answer == 0 else 'error on UserPasswordUpdate'
def ReqSettlementInfoConfirm(self): req = ApiStruct.SettlementInfoConfirm(BrokerID=self.brokerID, InvestorID=self.userID) self.requestID += 1 answer = TraderApi.ReqSettlementInfoConfirm(self, req, self.requestID) if answer == 0: print '结算单确认成功' else: '结算单确认错误'
def qry_accounts(self): """ 查询账户 """ print('ReqQryTradingAccount') self._qry_lock = True reqid = self.get_requestid() req = ApiStruct.QryTradingAccount(BrokerID=self.broker_id, InvestorID=self.investor_id) self.ReqQryTradingAccount(req, reqid) self.wait_qry_finish(message='ReqQryTradingAccount')
def settlement_confirm(self): """ 结算单确认 """ print('ReqSettlementInfoConfirm') self._qry_lock = True reqid = self.get_requestid() req = ApiStruct.SettlementInfoConfirm(BroketID=self.broker_id, InvestorID=self.investor_id) self.ReqSettlementInfoConfirm(req, reqid) self.wait_qry_finish(message='ReqSettlementInfoConfirm')
def order_action(self, orderref): reqid = self.get_requestid() req = ApiStruct.InputOrderAction(BrokerID=self.broker_id,\ InvestorID=self.investor_id,\ OrderRef=orderref,\ ActionFlag=ApiStruct.AF_Delete,\ RequestID=reqid) print("OrderAction: ", req) self.ReqOrderAction(req, reqid)
def qry_holdings(self): """ 查询持仓 """ print('ReqQryInvestorPosition') self._qry_lock = True reqid = self.get_requestid() req = ApiStruct.QryInvestorPosition(BrokerID=self.broker_id, InvestorID=self.investor_id, InstrumentID='') self.ReqQryInvestorPosition(req, reqid) self.wait_qry_finish(message='ReqQryInvestorPosition')
def OnRspUserLogin(self, pRspUserLogin, pRspInfo, nRequestID, bIsLast): print('OnRspUserLogin:'******'GetTradingDay:', self.GetTradingDay()) print('ReqQryInstrument') requestid = self.get_requestid() self.ReqQryInstrument(ApiStruct.Instrument(''), requestid) else: print('login failed:', pRspInfo.ErrorID) sys.exit(-1)
def qry_settlement_info(self): """ 查询结算单 """ print('ReqQrySettlementInfo') self._qry_lock = True reqid = self.get_requestid() req = ApiStruct.QrySettlementInfo(BroketID=self.broker_id, InvestorID=self.investor_id, TradingDay=self._trading_day) self.ReqQrySettlementInfo(req, reqid) self.wait_qry_finish(message='ReqQrySettlementInfo')
def refer(self, instrument_id, exchange_id, order_sys_id): order_action = ApiStruct.InputOrderAction( BrokerID=self.broker_id, InvestorID=self.user_id, InstrumentID=instrument_id, ActionFlag=ApiStruct.AF_Delete, ExchangeID=exchange_id, OrderSysID=order_sys_id) self.request_id += 1 return self.api.ReqOrderAction(order_action, self.request_id) == 0
def query_settlement_info(self, timeout=3): req = ApiStruct.QrySettlementInfo(BrokerID=self.broker_id, InvestorID=self.user_id) self.request_id += 1 request_id = self.request_id ret = self.api.ReqQrySettlementInfo(req, request_id) if ret != 0: print 'query settlement info failed', ret return None results = self._get_results(timeout, request_id) return results
def query_position_detail(self, timeout=3): req = ApiStruct.QryInvestorPositionDetail(BrokerID=self.broker_id, InvestorID=self.user_id) self.request_id += 1 request_id = self.request_id ret = self.api.ReqQryInvestorPositionDetail(req, request_id) if ret != 0: print 'query position detail failed', ret return None results = self._get_results(timeout, request_id) return results
def ReqOrderAction(self, ordersysid, exchangeid): #ordersysid = raw_input("请输入系统报单号:") #exchangeid = raw_input("请输入交易所SHFE/DCE/CFFE/CZCE:") #req = ApiStruct.OrderAction(InstrumentID=self.instrumentIDs, BrokerID=self.brokerID, InvestorID=self.userID, ActionFlag=b'0', FrontID=1, SessionID=865534192, OrderRef=' 2', ExchangeID='SHFE', LimitPrice=52100.0, RequestID=65537, OrderSysID=' 1036148') req = ApiStruct.OrderAction(BrokerID=self.brokerID, InvestorID=self.userID, ActionFlag=b'0', OrderSysID=str(ordersysid).rjust(12), ExchangeID=str(exchangeid).upper()) self.requestID += 1 TraderApi.ReqOrderAction(self, req, self.requestID)
def refer_local(self, instrument_id, order_ref): order_action = ApiStruct.InputOrderAction( BrokerID=self.broker_id, InvestorID=self.user_id, InstrumentID=instrument_id, ActionFlag=ApiStruct.AF_Delete, FrontID=self.front_id, SessionID=self.session_id, OrderRef=order_ref) self.request_id += 1 return self.api.ReqOrderAction(order_action, self.request_id) == 0
def qry_settlement_confirm(self): """ 查询结算单确认 """ print('ReqQrySettlementConfirm') self._qry_lock = True reqid = self.get_requestid() req = ApiStruct.QrySettlementInfo(BroketID=self.broker_id, InvestorID=self.investor_id) self.ReqQrySettlementInfoConfirm(req, reqid) self.wait_qry_finish(message='ReqQrySettlementInfoConfirm') if not self._settlement_info_confirm: self.qry_settlement_info() self.settlement_confirm()
def query_depth_market_data(self, instrument_id, timeout=3): req = ApiStruct.QryDepthMarketData(InstrumentID=instrument_id) self.request_id += 1 request_id = self.request_id ret = self.api.ReqQryDepthMarketData(req, request_id) if ret != 0: print 'query {} depth market data failed'.format( instrument_id), ret return None results = self._get_results(timeout, request_id) if not results: return None return results[0]
def query_instrument(self, instrument_id, timeout=3): req = ApiStruct.QryInstrument(InstrumentID=instrument_id) self.request_id += 1 request_id = self.request_id ret = self.api.ReqQryInstrument(req, request_id) if ret != 0: print 'query instrument {} failed'.format(instrument_id), ret return None results = self._get_results(timeout, request_id) if not results: return None self.instrument_dict[instrument_id] = results[0] print results[0] return results[0]
def query_trading_account(self, timeout=3): req = ApiStruct.QryTradingAccount(BrokerID=self.broker_id, InvestorID=self.user_id) self.request_id += 1 request_id = self.request_id ret = self.api.ReqQryTradingAccount(req, request_id) if ret != 0: print 'query trading account failed', ret return None results = self._get_results(timeout, request_id) if not results: return None self.trading_account = results[0] return self.trading_account
def query_settlement_info_confirm(self, timeout=3): req = ApiStruct.QrySettlementInfoConfirm(BrokerID=self.broker_id, InvestorID=self.user_id) self.request_id += 1 request_id = self.request_id ret = self.api.ReqQrySettlementInfoConfirm(req, request_id) if ret != 0: print 'query settlement info confirm failed', ret return None results = self._get_results(timeout, request_id) if results: print results[0] print 'settlement info already confirmed.' return results
def settlement_info_confirm(self, timeout=3): req = ApiStruct.SettlementInfoConfirm(BrokerID=self.broker_id, InvestorID=self.user_id) self.request_id += 1 request_id = self.request_id ret = self.api.ReqSettlementInfoConfirm(req, request_id) if ret != 0: print 'settlement info confirm failed', ret return False results = self._get_results(timeout, request_id) if results is None: return False print results[0] print 'settlement info confirm succeed.' return True
def query_trade(self, timeout=3): req = ApiStruct.QryTrade(BrokerID=self.broker_id, InvestorID=self.user_id) self.request_id += 1 request_id = self.request_id ret = self.api.ReqQryTrade(req, request_id) if ret != 0: print 'query trade failed', ret return None results = self._get_results(timeout, request_id) if results is None: return None self.trade_dict = {(result.ExchangeID, result.TradeID): result for result in results} return self.trade_dict