def OnRtnOrder(self, pOrder): print 'ks_OnRtnOrder:', repr(pOrder) #报单操作请求 pOrder = KSUserApiStruct.CThostFtdcOrderField() if pOrder.OrderStatus == KSUserApiType.THOST_FTDC_OST_NoTradeQueueing and int( PyString_AsString(pOrder.OrderSysID)) != 0: ord = KSUserApiStruct.CThostFtdcInputOrderActionField() # broker id ord.BrokerID = broker_id # investor ID ord.InvestorID = investor_id # order action refernce ord.OrderActionRef = 000000000001 # order reference ord.OrderRef = pOrder.OrderRef # *必传1 # front id ord.FrontID = pOrder.FrontID # *必传2 # session id ord.SessionID = pOrder.SessionID # *必传3 # 或者 # exchange ID ord.ExchangeID = pOrder.ExchangeID # *必传1 # action order ID ord.OrderSysID = pOrder.OrderSysID # *必传2 # action order num(unavailable yet) ord.VolumeChange = 0 # instrument ID ord.InstrumentID = pOrder.InstrumentID # user id ord.UserID = investor_id self.requestid r = self.api.ReqOrderAction(ord, self.requestid) if r == 0: print u"报单操作请求: 成功\n" else: print u"报单操作请求: 失败\n"
def Req_QryExchange(self, investor_id): req = KSUserApiStruct.CThostFtdcQryExchangeField() req.ExchangeID = investor_id self.requestid += 1 r = self.api.ReqQryExchange(req, self.requestid) if r == 0: print u"请求查询交易所: 成功\n" else: print u"请求查询交易所: 失败\n"
def Req_QryDepthMarketData(self, instrument_id): req = KSUserApiStruct.CThostFtdcQryDepthMarketDataField() req.InstrumentID = instrument_id self.requestid += 1 r = self.api.ReqQryDepthMarketData(req, self.requestid) if r == 0: print u"请求查询行情: 成功\n" else: print u"请求查询行情: 失败\n"
def Req_QryAccountregister(self, broker_id): req = KSUserApiStruct.CThostFtdcQryAccountregisterField() req.BrokerID = broker_id self.requestid += 1 r = self.api.ReqQryAccountregister(req, self.requestid) if r == 0: print u"请求查询银期签约关系: 成功\n" else: print u"请求查询银期签约关系: 失败\n"
def Req_QryBrokerTradingAlgos(self, broker_id): req = KSUserApiStruct.CThostFtdcQryBrokerTradingAlgosField() req.BrokerID = broker_id self.requestid += 1 r = self.api.ReqQryBrokerTradingAlgos(req, self.requestid) if r == 0: print u"请求查询经纪公司交易算法: 成功\n" else: print u"请求查询经纪公司交易算法: 失败\n"
def Req_QryNotice(self, broker_id): req = KSUserApiStruct.CThostFtdcQryNoticeField() req.BrokerID = broker_id self.requestid += 1 r = self.api.ReqQryNotice(req, self.requestid) if r == 0: print u"请求查询客户通知: 成功\n" else: print u"请求查询客户通知: 失败\n"
def Req_QryContractBank(self, broker_id): req = KSUserApiStruct.CThostFtdcQryContractBankField() req.BrokerID = broker_id self.requestid += 1 r = self.api.ReqQryContractBank(req, self.requestid) if r == 0: print u"请求查询签约银行: 成功\n" else: print u"请求查询签约银行: 失败\n"
def Req_UserLogout(self, broker_id, investor_id): req = KSUserApiStruct.CThostFtdcUserLogoutField(BrokerID=broker_id, UserID=investor_id) self.requestid += 1 r = self.api.ReqUserLogout(req, self.requestid) if r == 0: print u"发送用户录出请求: 成功\n" else: print u"发送用户录出请求: 失败\n"
def Req_QueryInvestorOpenPosition(self, broker_id, investor_id): req = KSUserApiStruct.CThostFtdcQryInvestorPositionDetailField() req.BrokerID = broker_id req.InvestorID = investor_id self.requestid += 1 r = self.api.ReqQueryInvestorOpenPosition(req, self.requestid) if r == 0: print u"请求查询开盘前持仓: 成功\n" else: print u"请求查询开盘前持仓: 失败\n"
def Req_UserLogin(self, broker_id, investor_id, passwd): req = KSUserApiStruct.CThostFtdcReqUserLoginField(BrokerID=broker_id, UserID=investor_id, Password=passwd) self.requestid += 1 r = self.api.ReqUserLogin(req, self.requestid) if r == 0: print u"发送用户登录请求: 成功\n" else: print u"发送用户登录请求: 失败\n"
def Req_QryTradingAccount(self, broker_id, investor_id): req = KSUserApiStruct.CThostFtdcQryTradingAccountField() req.BrokerID = broker_id req.InvestorID = investor_id self.requestid += 1 r = self.api.ReqQryTradingAccount(req, self.requestid) if r == 0: print u"请求查询资金账户: 成功\n" else: print u"请求查询资金账户: 失败\n"
def Req_QryInstrument(self, instrument_id): req = KSUserApiStruct.CThostFtdcQryInstrumentField() req.InstrumentID = '' req.ExchangeID = "SHFE" self.requestid += 1 r = self.api.ReqQryInstrument(req, self.requestid) if r == 0: print u"ReqQryInstrument\n" else: print u"请求查询合约: 失败\n"
def Req_QryBrokerTradingParams(self, broker_id, investor_id): req = KSUserApiStruct.CThostFtdcQryBrokerTradingParamsField() req.BrokerID = broker_id req.InvestorID = investor_id self.requestid += 1 r = self.api.ReqQryBrokerTradingParams(req, self.requestid) if r == 0: print u"请求查询经纪公司交易参数: 成功\n" else: print u"请求查询经纪公司交易参数: 失败\n"
def Req_QryInvestor(self, broker_id, investor_id): req = KSUserApiStruct.CThostFtdcQryInvestorField() req.BrokerID = broker_id req.InvestorID = investor_id self.requestid += 1 r = self.api.ReqQryInvestor(req, self.requestid) if r == 0: print u"请求查询投资者: 成功\n" else: print u"请求查询投资者: 失败\n"
def Req_QrySettlementInfoConfirm(self, broker_id, investor_id): req = KSUserApiStruct.CThostFtdcSettlementInfoField() req.BrokerID = broker_id req.InvestorID = investor_id self.requestid += 1 r = self.api.ReqQrySettlementInfoConfirm(req, self.requestid) if r == 0: print u"请求查询结算信息确认: 成功\n" else: print u"请求查询结算信息确认: 失败\n"
def Req_QryCFMMCTradingAccountKey(self, broker_id, investor_id): req = KSUserApiStruct.CThostFtdcQryCFMMCTradingAccountKeyField() req.BrokerID = broker_id req.InvestorID = investor_id self.requestid += 1 r = self.api.ReqQryCFMMCTradingAccountKey(req, self.requestid) if r == 0: print u"请求查询保证金监管系统经纪公司资金账户密钥: 成功\n" else: print u"请求查询保证金监管系统经纪公司资金账户密钥: 失败\n"
def Req_QryEWarrantOffset(self, broker_id, investor_id): req = KSUserApiStruct.CThostFtdcQryEWarrantOffsetField() req.BrokerID = broker_id req.InvestorID = investor_id self.requestid += 1 r = self.api.ReqQryEWarrantOffset(req, self.requestid) if r == 0: print u"请求查询仓单折抵信息: 成功\n" else: print u"请求查询仓单折抵信息: 失败\n"
def Req_QryInvestorPositionCombineDetail(self, broker_id, investor_id): req = KSUserApiStruct.CThostFtdcQryInvestorPositionCombineDetailField() req.BrokerID = broker_id req.InvestorID = investor_id self.requestid += 1 r = self.api.ReqQryInvestorPositionCombineDetail(req, self.requestid) if r == 0: print u"请求查询投资者持仓明细: 成功\n" else: print u"请求查询投资者持仓明细: 失败\n"
def Req_QueryMaxOrderVolume(self, broker_id, investor_id, instrument_id): req = KSUserApiStruct.CThostFtdcQueryMaxOrderVolumeField() req.BrokerID = broker_id req.InvestorID = investor_id req.InstrumentID = instrument_id self.requestid += 1 r = self.api.ReqQueryMaxOrderVolume(req, self.requestid) if r == 0: print u"请求查询最大报单数量: 成功\n" else: print u"请求查询最大报单数量: 失败\n"
def Req_QryTransferSerial(self, broker_id, investor_id): req = KSUserApiStruct.CThostFtdcQryTransferSerialField() req.AccountID = investor_id req.BrokerID = broker_id #银行代码 req.BankID = "5" self.requestid += 1 r = self.api.ReqQryTransferSerial(req, self.requestid) if r == 0: print u"请求查询转帐流水: 成功\n" else: print u"请求查询转帐流水: 失败\n"
def Req_QryTrade(self, broker_id, investor_id, instrument_id): req = KSUserApiStruct.CThostFtdcQryTradeField() req.BrokerID = broker_id req.ExchangeID = investor_id req.InstrumentID = instrument_id req.InvestorID = investor_id self.requestid += 1 r = self.api.ReqQryTrade(req, self.requestid) if r == 0: print u"交易查询请求: 成功\n" else: print u"交易查询请求: 失败\n"
def Req_TradingAccountPasswordUpdate(self, broker_id, investor_id, passwd): req = KSUserApiStruct.CThostFtdcTradingAccountPasswordUpdateField() req.BrokerID = broker_id req.AccountID = investor_id req.OldPassword = passwd req.NewPassword = passwd self.requestid += 1 r = self.api.ReqTradingAccountPasswordUpdate(req, self.requestid) if r == 0: print u"资金账户口令更新请求: 成功\n" else: print u"资金账户口令更新请求: 失败\n"
def Req_QryInstrumentMarginRate(self, broker_id, investor_id, instrument_id): req = KSUserApiStruct.CThostFtdcQryInstrumentMarginRateField() req.BrokerID = broker_id req.InstrumentID = instrument_id req.InvestorID = investor_id self.requestid += 1 r = self.api.ReqQryInstrumentMarginRate(req, self.requestid) if r == 0: print u"请求查询合约保证金率: 成功\n" else: print u"请求查询合约保证金率: 失败\n"
def Req_UserPasswordUpdate(self, broker_id, investor_id, passwd): req = KSUserApiStruct.CThostFtdcUserPasswordUpdateField() req.BrokerID = broker_id req.UserID = investor_id req.OldPassword = passwd req.NewPassword = passwd self.requestid += 1 r = self.api.ReqUserPasswordUpdate(req, self.requestid) if r == 0: print u"用户口令变更请求: 成功\n" else: print u"用户口令变更请求: 失败\n"
def OnRtnOrder(self, pOrder): print 'ks_OnRtnOrder:', repr(pOrder) #插入报单数据库 ''' connection=pymongo.Connection('localhost',27017) db=connection.commodityTrading res={"CombOffsetFlag":pOrder.CombOffsetFlag,"CombHedgeFlag":pOrder.CombHedgeFlag,"InstrumentID":pOrder.InstrumentID,"OrderPriceType":pOrder.OrderPriceType,"Direction":pOrder.Direction,"OrderRef":pOrder.OrderRef,"LimitPrice":pOrder.LimitPrice,"VolumeTotalOriginal":pOrder.VolumeTotalOriginal,"RequestID":pOrder.RequestID,"InsertTime":pOrder.InsertTime,"InsertDate":pOrder.InsertDate} db.RtnOrder.insert(res) ''' #报单操作请求 pOrder = KSUserApiStruct.CThostFtdcOrderField() if pOrder.OrderStatus == KSUserApiType.THOST_FTDC_OST_NoTradeQueueing and int( str(pOrder.OrderSysID)) != 0: ord = KSUserApiStruct.CThostFtdcInputOrderActionField() # broker id ord.BrokerID = self.broker_id # investor ID ord.InvestorID = self.investor_id # order action refernce ord.OrderActionRef = 000000000001 # order reference ord.OrderRef = pOrder.OrderRef # *必传1 # front id ord.FrontID = pOrder.FrontID # *必传2 # session id ord.SessionID = pOrder.SessionID # *必传3 # 或者 # exchange ID ord.ExchangeID = pOrder.ExchangeID # *必传1 # action order ID ord.OrderSysID = pOrder.OrderSysID # *必传2 # action order num(unavailable yet) ord.VolumeChange = 0 # instrument ID ord.InstrumentID = pOrder.InstrumentID # user id ord.UserID = investor_id self.requestid r = self.api.ReqOrderAction(ord, self.requestid) if r == 0: print u"报单操作请求: 成功\n" else: print u"报单操作请求: 失败\n"
def Req_OrderInsert(self, broker_id, investor_id): data = KSUserApiStruct.CThostFtdcInputOrderField() #经纪公司代码 data.BrokerID = broker_id #投资者代码 data.InvestorID = investor_id #合约代码 data.InstrumentID = "IF1312" #instrument_id #报单引用 data.OrderRef = "9" #报单价格条件: 限价 data.OrderPriceType = KSUserApiType.THOST_FTDC_OPT_LimitPrice #买卖方向: data.Direction = KSUserApiType.THOST_FTDC_D_Buy #组合开平标志: 开仓 data.CombOffsetFlag = KSUserApiType.THOST_FTDC_OF_Open #组合投机套保标志 data.CombHedgeFlag = KSUserApiType.THOST_FTDC_HF_Speculation #价格 data.LimitPrice = 2450 #数量: 1 data.VolumeTotalOriginal = 1 #有效期类型: 当日有效 data.TimeCondition = KSUserApiType.THOST_FTDC_TC_GFD #成交量类型: 任何数量 data.VolumeCondition = KSUserApiType.THOST_FTDC_VC_AV #最小成交量: 0 data.MinVolume = 0 #触发条件: 立即 data.ContingentCondition = KSUserApiType.THOST_FTDC_CC_Immediately #强平原因: 非强平 data.ForceCloseReason = KSUserApiType.THOST_FTDC_FCC_NotForceClose #自动挂起标志: 否 data.IsAutoSuspend = 0 #请求编号 data.RequestID = self.requestid #用户强评标志: 否 data.UserForceClose = 0 self.requestid += 1 print repr(data) r = self.api.ReqOrderInsert(data, self.requestid) if r == 0: print u"报单录入请求: 成功\n" else: print u"报单录入请求: 失败\n"
def inputOrderField(self, broker_id, investor_id, instrument_id, volume, limitPrice, orderPriceType, direction, combOffSetFlag, combHedgeFlag): data = KSUserApiStruct.CThostFtdcInputOrderField() #经纪公司代码 data.BrokerID = broker_id #投资者代码 data.InvestorID = investor_id #合约代码 data.InstrumentID = instrument_id #instrument_id #报单引用 data.OrderRef = self.orderRef #报单价格条件: 限价 data.OrderPriceType = orderPriceType #买卖方向: data.Direction = direction #组合开平标志: 开仓 data.CombOffsetFlag = combOffSetFlag #组合投机套保标志 data.CombHedgeFlag = combHedgeFlag #价格 data.LimitPrice = limitPrice #数量: 1 data.VolumeTotalOriginal = volume #有效期类型: 当日有效 data.TimeCondition = KSUserApiType.THOST_FTDC_TC_GFD #成交量类型: 任何数量 data.VolumeCondition = KSUserApiType.THOST_FTDC_VC_AV #最小成交量: 0 data.MinVolume = 0 #触发条件: 立即 data.ContingentCondition = KSUserApiType.THOST_FTDC_CC_Immediately #强平原因: 非强平 data.ForceCloseReason = KSUserApiType.THOST_FTDC_FCC_NotForceClose #自动挂起标志: 否 data.IsAutoSuspend = 0 #请求编号 self.spi.requestid += 1 data.RequestID = self.spi.requestid #用户强评标志: 否 data.UserForceClose = 0 #用户强评标志: 否 data.UserForceClose = 0 #continue to insert to the table of tradingRecord connection = pymongo.Connection('localhost', 27017) db = connection.commodityTrading res = { "InvestorID": data.InvestorID, "BrokerID": data.BrokerID, "StrategyName": self.strategyName, "OrderRef": self.orderRef, "TradingDay": self.tradingDay, "Volume": data.VolumeTotalOriginal, "InstrumentID": data.InstrumentID, "Direction": data.Direction, "OrderPriceType": data.OrderPriceType, "CombOffsetFlag": data.CombOffsetFlag } db.tradingRecord.insert(res) return data
def ks_spi_init(): user = KSTraderApi.CreateKSTraderApi("log_cos") #global spi spi = myTraderSpi(instruments="IF1303", broker_id="6A89B428", investor_id="80006", passwd="123456") user.RegisterSpi(spi) user.SubscribePublicTopic(2) user.SubscribePrivateTopic(2) user.RegisterFront("tcp://10.253.117.107:13153") user.Init() time.sleep(3) cosspi = myCosSpi(broker_id="6A89B428", investor_id="80006", passwd="123456") cosapi = user.LoadExtApi(cosspi, "KSCosApi") #条件单录入请求 req = KSUserApiStruct.CTKSConditionalOrderInitInsert() #print req req.BrokerID = "6A89B428" req.ExchangeID = "CFFEX" req.InvestorID = "80006" req.InstrumentID = "IF1303" req.Direction = '0' req.CombOffsetFlag = '0' req.CombHedgeFlag = '1' req.VolumeTotalOriginal = 2 req.LimitPrice = 200 req.OrderPriceType = '1' req.ConditionalType = '1' req.ConditionalPrice = 300 req.TriggeredTimes = 2 req.OrderType = '1' req.ActiveTime = "142010" req.InActiveTime = "162010" req.CurrencyID = "RMB" #print req requestid = 1 requestid += 1 r = cosapi.ReqInitInsertConditionalOrder(req, requestid) if r == 0: print "ReqInitInsertConditionalOrder succeed\n" else: print "ReqInitInsertConditionalOrder failed\n" #条件单查询请求 req = KSUserApiStruct.CTKSConditionalOrderQuery(BrokerID="6A89B428", InvestorID="80006") print req requestid += 1 r = cosapi.ReqQueryConditionalOrder(req, requestid) if r == 0: print "ReqQueryConditionalOrder succeed\n" else: print "ReqQueryConditionalOrder failed\n" #条件单修改请求 req = KSUserApiStruct.CTKSConditionalOrderModify() print req req.BrokerID = "6A89B428" req.ExchangeID = "CFFEX" req.InvestorID = "80006" req.ConditionalOrderID = 16 req.InstrumentID = "IF1303" req.Direction = '1' req.CombOffsetFlag = '3' req.CombHedgeFlag = '1' req.VolumeTotalOriginal = 9 req.LimitPrice = 1000 req.OrderPriceType = '1' req.ConditionalType = '1' req.ConditionalPrice = 3000 req.TriggeredTimes = 10 req.OrderType = '1' requestid += 1 r = cosapi.ReqModifyConditionalOrder(req, requestid) if r == 0: print "ReqModifyConditionalOrder succeed\n" else: print "ReqModifyConditionalOrder failed\n" #条件单删除请求 req = KSUserApiStruct.CTKSConditionalOrderRemove(BrokerID="6A89B428", InvestorID="80006", ConditionalOrderID=5) print req requestid += 1 r = cosapi.ReqRemoveConditionalOrder(req, requestid) if r == 0: print "ReqRemoveConditionalOrder succeed\n" else: print "ReqRemoveConditionalOrder failed\n" #条件单暂停或激活请求 req = KSUserApiStruct.CTKSConditionalOrderStateAlter() print req req.BrokerID = "6A89B428" req.InvestorID = "80006" req.ConditionalOrderID = 18 req.ConditionalOrderStateAlter = '0' requestid += 1 r = cosapi.ReqStateAlterConditionalOrder(req, requestid) if r == 0: print "ReqStateAlterConditionalOrder succeed\n" else: print "ReqStateAlterConditionalOrder failed\n" #选择条件单请求 req = KSUserApiStruct.CTKSConditionalOrderSelect() print req req.BrokerID = "6A89B428" req.InvestorID = "80006" req.ConditionalOrderID = 2 req.SelectResult = KSUserApiType.KSCOS_Select_AGAIN requestid += 1 r = cosapi.ReqSelectConditionalOrder(req, requestid) if r == 0: print "ReqSelectConditionalOrder succeed\n" else: print "ReqSelectConditionalOrder failed\n" #止损止盈单录入请求 req = KSUserApiStruct.CTKSProfitAndLossOrderInsert() print req req.BrokerID = "6A89B428" req.ExchangeID = "CFFEX" req.InvestorID = "80006" req.OrderLocalID = '6' req.StopLossPrice = 2100 req.TakeProfitPrice = 2500 req.BusinessUnit = "cffex" req.TriggeredTimes = 2 req.CloseMode = '1' req.FiguresPrice = 0.2 req.OffsetValue = '0' req.SpringType = '1' req.CurrencyID = "RMB" requestid += 1 r = cosapi.ReqInsertProfitAndLossOrder(req, requestid) if r == 0: print "ReqInsertProfitAndLossOrder succeed\n" else: print "ReqInsertProfitAndLossOrder failed\n" #止损止盈单修改请求 req = KSUserApiStruct.CTKSProfitAndLossOrderModify() print req req.BrokerID = "6A89B428" req.InvestorID = "80006" req.ProfitAndLossOrderID = 9 req.StopLossPrice = 2999 req.TakeProfitPrice = 3999 req.CloseMode = '1' req.FiguresPrice = 0.2 req.OffsetValue = '0' req.SpringType = '1' req.TriggeredTimes = 30 requestid += 1 r = cosapi.ReqModifyProfitAndLossOrder(req, requestid) if r == 0: print "ReqModifyProfitAndLossOrder succeed\n" else: print "ReqModifyProfitAndLossOrder failed\n" #止损止盈单删除请求 req = KSUserApiStruct.CTKSProfitAndLossOrderRemove() print req req.BrokerID = "6A89B428" req.InvestorID = "80006" req.ProfitAndLossOrderID = 2 req.OrderLocalID = "8" req.ExchangeID = "CFFEX" req.BusinessUnit = "cffex" requestid = 1 requestid += 1 r = cosapi.ReqRemoveProfitAndLossOrder(req, requestid) if r == 0: print "ReqRemoveProfitAndLossOrder succeed\n" else: print "ReqRemoveProfitAndLossOrder failed\n" time.sleep(3)