Пример #1
0
 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)
Пример #2
0
 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)
Пример #3
0
 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
Пример #4
0
 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)
Пример #5
0
 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)
Пример #6
0
    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)
Пример #7
0
    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')
Пример #8
0
 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)
Пример #9
0
    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')
Пример #10
0
 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
Пример #11
0
 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'
Пример #12
0
 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:
         '结算单确认错误'
Пример #13
0
 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')
Пример #14
0
 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')
Пример #15
0
 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)
Пример #16
0
 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')
Пример #17
0
 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)
Пример #18
0
 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')
Пример #19
0
 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
Пример #20
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
Пример #21
0
 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
Пример #22
0
 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)
Пример #23
0
 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
Пример #24
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()
Пример #25
0
 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]
Пример #26
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]
Пример #27
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
Пример #28
0
 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
Пример #29
0
 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
Пример #30
0
 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