Example #1
0
    def __init__(self, _brokder_id, _user_id, _password, _flow_path, _front_address):
        # request index
        self.mRequestId = 0

        # account info
        self.mBrokerId = _brokder_id
        self.mUserId = _user_id
        self.mPassword = _password
        self.mFlowPath = _flow_path
        self.mFrontAddress = _front_address

        # init socket
        self.mSocketClient = MySocketClient()

        # init functions
        self.Create()
        self.Init()
        self.mSocketClient.send(self.DEF_INIT_FINISH)
Example #2
0
class MyMd(MdApi):
    DEF_CREATE_FINISH = 'md_create_finish'
    DEF_INIT_FINISH = 'md_init_finish'
    DEF_FRONT_CONNECTED = 'md_front_connected'
    DEF_FRONT_DISCONNECTED = 'md_front_disconnected'
    DEF_LOGIN = '******'
    DEF_DEPTH_MARKET = 'depth_market'

    def __init__(self, _brokder_id, _user_id, _password, _flow_path, _front_address):
        # request index
        self.mRequestId = 0

        # account info
        self.mBrokerId = _brokder_id
        self.mUserId = _user_id
        self.mPassword = _password
        self.mFlowPath = _flow_path
        self.mFrontAddress = _front_address

        # init socket
        self.mSocketClient = MySocketClient()

        # init functions
        self.Create()
        self.Init()
        self.mSocketClient.send(self.DEF_INIT_FINISH)

    def Create(self):
        super(MdApi, self).Create(self.mFlowPath)

    def Init(self):
        logging.info('')
        super(MdApi, self).Init()

    # register front
    def RegisterFront(self):
        logging.info('')
        super(MdApi, self).RegisterFront(self.mFrontAddress)

    def OnFrontConnected(self):
        logging.info('')
        self.mSocketClient.send(self.DEF_FRONT_CONNECTED)

    def OnFrontDisconnected(self, _reason):
        logging.warning('reason: 0x%x' % (_reason))
        self.mSocketClient.send(self.DEF_FRONT_DISCONNECTED)

    # login
    def ReqUserLogin(self):
        logging.info('')
        req = ApiStruct.ReqUserLogin(
            BrokerID=self.mBrokerId,
            UserID=self.mUserId,
            Password=self.mPassword
        )
        super(MdApi, self).ReqUserLogin(req, self.mRequestId)
        self.mRequestId += 1

    def OnRspUserLogin(self, _rsp_user_login, _rsp_info, _request_id, _is_last):
        logging.info("ErrorID: " + str(_rsp_info.ErrorID) +
                     ", ErrorMsg: " + _rsp_info.ErrorMsg.decode('gbk'))
        self.mSocketClient.send(self.DEF_LOGIN)

    def OnRspUserLogout(self, _user_logout, _rsp_info, _request_id, _is_last):
        logging.info(str(_user_logout))

    # Subscribe
    def SubscribeMarketData(self, _instrument_ids):
        super(MdApi, self).SubscribeMarketData(_instrument_ids)

    def OnRspSubMarketData(self, _specific_instrument, _rsp_info, _request_id, _is_last):
        logging.info(_specific_instrument.InstrumentID)

    def OnRtnDepthMarketData(self, _depth_market_data):
        Datetime = _depth_market_data.ActionDay + _depth_market_data.UpdateTime
        format = "%Y%m%d%H:%M:%S"
        Datetime = datetime.strptime(Datetime, format)
        delta = timedelta(milliseconds=_depth_market_data.UpdateMillisec)
        Datetime = Datetime + delta
        data = {
            "Datetime": Datetime,
            "LastPrice": _depth_market_data.LastPrice,
            "Volume": _depth_market_data.Volume,
            "Turnover": _depth_market_data.Turnover,
            "OpenInterest": _depth_market_data.OpenInterest,
        }
        if _depth_market_data.AskVolume1 > 0:
            data["AskVolume1"] = _depth_market_data.AskVolume1
            data["AskPrice1"] = _depth_market_data.AskPrice1
        if _depth_market_data.AskVolume2 > 0:
            data["AskVolume2"] = _depth_market_data.AskVolume2
            data["AskPrice2"] = _depth_market_data.AskPrice2
        if _depth_market_data.AskVolume3 > 0:
            data["AskVolume3"] = _depth_market_data.AskVolume3
            data["AskPrice3"] = _depth_market_data.AskPrice3
        if _depth_market_data.AskVolume4 > 0:
            data["AskVolume4"] = _depth_market_data.AskVolume4
            data["AskPrice4"] = _depth_market_data.AskPrice4
        if _depth_market_data.AskVolume5 > 0:
            data["AskVolume5"] = _depth_market_data.AskVolume5
            data["AskPrice5"] = _depth_market_data.AskPrice5
        if _depth_market_data.AskVolume1 > 0:
            data["BidVolume1"] = _depth_market_data.BidVolume1
            data["BidPrice1"] = _depth_market_data.BidPrice1
        if _depth_market_data.BidVolume2 > 0:
            data["BidVolume2"] = _depth_market_data.BidVolume2
            data["BidPrice2"] = _depth_market_data.BidPrice2
        if _depth_market_data.BidVolume3 > 0:
            data["BidVolume3"] = _depth_market_data.BidVolume3
            data["BidPrice3"] = _depth_market_data.BidPrice3
        if _depth_market_data.BidVolume4 > 0:
            data["BidVolume4"] = _depth_market_data.BidVolume4
            data["BidPrice4"] = _depth_market_data.BidPrice4
        if _depth_market_data.BidVolume5 > 0:
            data["BidVolume5"] = _depth_market_data.BidVolume5
            data["BidPrice5"] = _depth_market_data.BidPrice5
        self.mSocketClient.send(
            self.DEF_DEPTH_MARKET,
            data={'inst_id': _depth_market_data.InstrumentID, 'data': data}
        )
Example #3
0
class MyTrader(TraderApi):
    DEF_CREATE_FINISH = 'trader_create_finish'
    DEF_INIT_FINISH = 'trader_init_finish'
    DEF_FRONT_CONNECTED = 'trader_front_connected'
    DEF_FRONT_DISCONNECTED = 'trader_front_disconnected'
    DEF_LOGIN = '******'
    DEF_INSTRUMENT = 'trader_instrument'
    DEF_QRY_SETTLEMENT_INFO = 'trader_qry_settlement_info'
    DEF_SETTLEMENT_INFO_CONFIRM = 'trader_settlement_info_confirm'

    DIRECTION_BUY = 'buy'
    DIRECTION_SELL = 'sell'

    def __init__(self, _brokder_id, _user_id, _password, _flow_path,  _front_address):
        # request index
        self.mRequestId = 0
        self.mOrderRef = 0

        # account info
        self.mBrokerId = _brokder_id
        self.mUserId = _user_id
        self.mPassword = _password
        self.mFlowPath = _flow_path
        self.mFrontAddress = _front_address

        # init socket
        self.mSocketClient = MySocketClient()

        # init functions
        self.Create()
        self.Init()
        self.mSocketClient.send(self.DEF_INIT_FINISH)

    def Create(self):
        super(TraderApi, self).Create(self.mFlowPath)

    def Init(self):
        logging.info('')
        super(TraderApi, self).SubscribePublicTopic(ApiStruct.TERT_RESUME)
        super(TraderApi, self).SubscribePrivateTopic(ApiStruct.TERT_RESUME)
        super(TraderApi, self).Init()

    # register front
    def RegisterFront(self):
        logging.info('')
        super(TraderApi, self).RegisterFront(self.mFrontAddress)

    def OnFrontConnected(self):
        logging.info('')
        self.mSocketClient.send(self.DEF_FRONT_CONNECTED)

    def OnFrontDisconnected(self, _reason):
        logging.warning('reason: 0x%x' % (_reason))
        self.mSocketClient.send(self.DEF_FRONT_DISCONNECTED)

    # login
    def ReqUserLogin(self):
        logging.info('')
        req = ApiStruct.ReqUserLogin(
            BrokerID=self.mBrokerId,
            UserID=self.mUserId,
            Password=self.mPassword
        )
        super(TraderApi, self).ReqUserLogin(req, self.mRequestId)
        self.mRequestId += 1

    def OnRspUserLogin(self, _rsp_user_login, _rsp_info, _request_id, _is_last):
        logging.info("ErrorID: " + str(_rsp_info.ErrorID) +
                     ", ErrorMsg: " + _rsp_info.ErrorMsg.decode('gbk'))
        self.mSocketClient.send(self.DEF_LOGIN, data=_rsp_info.ErrorID)

    def OnRspUserLogout(self, _user_logout, _rsp_info, _request_id, _is_last):
        logging.info(str(_user_logout))

    # qry instrument
    def ReqQryInstrument(self, _instrument_id):
        req = ApiStruct.QryInstrument(
            InstrumentID=_instrument_id
        )
        super(TraderApi, self).ReqQryInstrument(req, self.mRequestId)
        self.mRequestId += 1

    def OnRspQryInstrument(self, _instrument, _rsp_info, _request_id, _is_last):
        format = "%Y%m%d"
        open_date = datetime.strptime(_instrument.OpenDate, format)
        expire_date = datetime.strptime(_instrument.ExpireDate, format)
        data = {'InstrumentID': _instrument.InstrumentID,
                'ProductID': _instrument.ProductID,
                'OpenDate': open_date,
                'ExpireDate': expire_date,
                'MaxMarketOrderVolume': _instrument.MaxMarketOrderVolume,
                'MinMarketOrderVolume': _instrument.MinMarketOrderVolume,
                'MaxLimitOrderVolume': _instrument.MaxLimitOrderVolume,
                'MinLimitOrderVolume': _instrument.MinLimitOrderVolume,
                'VolumeMultiple': _instrument.VolumeMultiple,
                'PriceTick': _instrument.PriceTick,
                'LongMarginRatio': _instrument.LongMarginRatio,
                'ShortMarginRatio': _instrument.ShortMarginRatio
                }
        self.mSocketClient.send(self.DEF_INSTRUMENT, data=data)

    def ReqQryTradingAccount(self):
        logging.info('')
        req = ApiStruct.QryTradingAccount(
            BrokerID=self.mBrokerId,
            InvestorID=self.mUserId
        )
        super(TraderApi, self).ReqQryTradingAccount(req, self.mRequestId)
        self.mRequestId += 1

    def OnRspQryTradingAccount(self, _trading_account, _rsp_info, _request_id, _is_last):
        print _trading_account

    def ReqQrySettlementInfo(self):
        logging.info('')
        req = ApiStruct.SettlementInfo(
            BrokerID=self.mBrokerId,
            InvestorID=self.mUserId,
            TradingDay=''
        )
        super(TraderApi, self).ReqQrySettlementInfo(req, self.mRequestId)
        self.mRequestId += 1

    def OnRspQrySettlementInfo(self, _settlement_info, _rsp_info, _request_id, _is_last):
        logging.info('')
        print _settlement_info
        self.mSocketClient.send(self.DEF_QRY_SETTLEMENT_INFO)

    def ReqSettlementInfoConfirm(self):
        logging.info('')
        req = ApiStruct.SettlementInfoConfirm(
            BrokerID=self.mBrokerId,
            InvestorID=self.mUserId
        )
        super(TraderApi, self).ReqSettlementInfoConfirm(req, self.mRequestId)
        self.mRequestId += 1

    def OnRspSettlementInfoConfirm(self, _settlement_info_confirm, _rsp_info, _request_id, _is_last):
        logging.info('')
        print _settlement_info_confirm
        self.mSocketClient.send(self.DEF_SETTLEMENT_INFO_CONFIRM)

    def ReqOrderInsert(self, _instrument_id, _direction, _volume):
        logging.info(_instrument_id + ' ' + _direction + ' ' + str(_volume))
        self.mOrderRef += 1
        req = ApiStruct.InputOrder(
            BrokerID=self.mBrokerId,
            InvestorID=self.mUserId,
            InstrumentID=_instrument_id,
            OrderRef=str(self.mOrderRef),

            Direction=ApiStruct.D_Buy if _direction == self.DIRECTION_BUY else ApiStruct.D_Sell,
            CombOffsetFlag=ApiStruct.OF_Open,
            CombHedgeFlag=ApiStruct.HF_Speculation,

            VolumeTotalOriginal=_volume,
            VolumeCondition=ApiStruct.VC_AV,
            MinVolume=1,

            ForceCloseReason=ApiStruct.FCC_NotForceClose,
            IsAutoSuspend=0,
            UserForceClose=0,

            OrderPriceType=ApiStruct.OPT_LimitPrice,
            LimitPrice=0,
            TimeCondition=ApiStruct.TC_IOC
        )
        super(TraderApi, self).ReqOrderInsert(req, self.mRequestId)
        self.mRequestId += 1

    def OnRspOrderInsert(self, _input_order,  _rsp_info, _request_id, _is_last):
        logging.info('')
        print _input_order
        print _rsp_info.ErrorMsg.decode('gbk')

    def OnRtnOrder(self, _order):
        logging.info('')
        print _order

    def OnErrRtnOrderInsert(self, _input_order, _rsp_info):
        logging.info('')
        print _rsp_info

    def OnRtnTrade(self, _trade):
        logging.info('')
        print _trade

    def ReqQryInvestorPositionDetail(self, _instrument_id):
        logging.info('')
        req = ApiStruct.QryInvestorPosition(
            BrokerID=self.mBrokerId,
            InvestorID=self.mUserId,
            InstrumentID=_instrument_id
        )
        super(TraderApi, self).ReqQryInvestorPositionDetail(req, self.mRequestId)
        self.mRequestId += 1

    def OnRspQryInvestorPositionDetail(self, _investor_position_detail, _rsp_info, _request_id, _is_last):
        print _investor_position_detail