日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

上期技术CTPAPI封装COM组件ctp开放平台openctp环境7_24小时x64组件python_delphi调用演示程序

發(fā)布時(shí)間:2024/3/26 56 豆豆
生活随笔 收集整理的這篇文章主要介紹了 上期技术CTPAPI封装COM组件ctp开放平台openctp环境7_24小时x64组件python_delphi调用演示程序 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

源碼下載地址:https://gitee.com/topview999/TopViewQHTCtpCom

新修改后的python調(diào)用COM組件,pyside2制作的UI界面。體驗(yàn)一下遠(yuǎn)超VeighNaStation(VNPY)的訂單及持倉(cāng)刷新速度。陽(yáng)了的時(shí)候無(wú)聊,攻了攻pyside2,算是入了門。pyside2界面簡(jiǎn)潔大方,功能強(qiáng)大,性能不錯(cuò)。源代碼全部公開,COM組件免費(fèi),所有涉及到的代碼都免費(fèi),拿去簡(jiǎn)單修改就可以搭建自己的量化平臺(tái)。代碼中大量的使用線程多任務(wù)用以更新界面、操作開平倉(cāng),性能、速度、穩(wěn)定性沒的說(shuō)。話說(shuō)python pyside2的性能有時(shí)確實(shí)不俗,查詢?nèi)袌?chǎng)合約時(shí),python pyside2界面下線程幾秒鐘完成。

# -*- coding: utf-8 -*-# Form implementation generated from reading ui file 'TvQhtCtpComPYClient.ui' # # Created by: PyQt5 UI code generator 5.15.7 # # WARNING: Any manual changes made to this file will be lost when pyuic5 is # run again. Do not edit this file unless you know what you are doing.import win32com.client.CLSIDToClass, pythoncom, pywintypes import win32com.client.util from pywintypes import IID from win32com.client import Dispatch from threading import Thread import random import time import datetime import ctypes import numpy as np import traceback #import tracemalloc #進(jìn)行內(nèi)存分析追蹤from TVQHTCTPCOM import * from TVQHTCTPCOM import ITVQhtICtpClientAPI from PySide2.QtWidgets import QApplication,QWidget,QLabel,QProgressBar,QTableView,QTextEdit,QLabel #引用的 是pyside6時(shí),線程無(wú)法觸及信號(hào)發(fā)送。不知為何。 from PySide2.QtUiTools import QUiLoader from PySide2.QtCore import QFile,QTimer from PySide2.QtGui import QStandardItemModel from PySide2.QtGui import QStandardItem from PySide2.QtCore import Signal,QObject # 導(dǎo)入信號(hào)類 DescendingOrder import sys class TMyPostion:def __init__(self):self.LongPostion = 0 self.LongYDPostion = 0 self.LongFrozen = 0 self.LongOrder = 0self.LongOrder1 = 0 self.LongOrderFlag = 0 self.ShortPostion = 0 self.ShortYDPostion = 0 self.ShortFrozen = 9self.ShortOrder = 0self.ShortOrder1 = 0 self.ShortOrderFlag = 0 class TvMyUseVar:def __init__(self):self.sInstrumentID = 'IF2212' self.sUserId = '4100' self.sPassWord = '750' self.iRefMin = 0 self.iMin = 0 self.IsDoit = 0 self.iBeginTest = 0 self.iVolT = 9self.vloop = 0 #循環(huán)時(shí)循環(huán)步驟標(biāo)志self.vWaitOrderInt= 60 #下訂單時(shí)間間隔self.vWaitInOrder =0 #下訂單時(shí)間計(jì)數(shù)器self.vWaitInCancle = 0 #撤單后時(shí)間計(jì)數(shù)器self.vWaitCancleInt = 6 #撤單后時(shí)間間隔self.RunFlag = 0self.Interval = 1 #循環(huán)時(shí)間間隔self.RefSec = -1 #上一秒數(shù)self.BeginOpenClose = 0 #開始進(jìn)行循環(huán)開平倉(cāng)測(cè)試self.vMyBidPrice = .0self.vMyAskPrice = .0self.vIsCanC = 0self.vIsCanC1 = 0self.vIsCanC2 = 0self.vIsCanC3 = 0self.MinDouble = -99999.99self.MyPostion = TMyPostion() MyUseVar = TvMyUseVar()class MySignals(QObject):# 定義一種信號(hào),因?yàn)橛形谋究蚝瓦M(jìn)度條兩個(gè)類,此處要四個(gè)參數(shù),類型分別是: QPlainTextEdit 、 QProgressBar、字符串和整形數(shù)字# 調(diào)用 emit方法發(fā)信號(hào)時(shí),傳入?yún)?shù)必須是這里指定的參數(shù)類型# 此處也可分開寫兩個(gè)函數(shù),一個(gè)是文本框輸出的,一個(gè)是給進(jìn)度條賦值的text_print = Signal(QLabel,QProgressBar,str,int) #刷新登錄獲取數(shù)據(jù)信息進(jìn)度信號(hào) text_MarketData = Signal(QTableView,str,float,int,float,int,float,int,float,int,float,int,str)#行情信息信號(hào)text_Account = Signal(ITVQhtICtpClientAPI,QTableView,QLabel) #每秒刷新賬戶資金信號(hào)text_PositionProfit = Signal(ITVQhtICtpClientAPI,QTableView) # 每秒刷新持倉(cāng)盈虧數(shù)據(jù)信號(hào)text_OnOrder = Signal(ITVQhtICtpClientAPI,QTableView,str) #ITVQhtICtpClientAPI 訂單信號(hào)text_OnOrderLst = Signal(QTableView,int,str,str,int,str,int,int,int,int,int,float,int,str,str) #訂單推送后將訂單信息添加到表格信號(hào)text_OpenClose = Signal(ITVQhtICtpClientAPI,QTextEdit) #開平倉(cāng)循環(huán)測(cè)試信號(hào)text_OutBars = Signal(ITVQhtICtpClientAPI,QTextEdit,str,int,int,float,float,float,float,str) #輸出K線Bars數(shù)據(jù)時(shí) ,InstrumentID,Period,Counts,Hight,Low,Open,Close,CreatTimetext_OuttextEdit = Signal(QTextEdit,str) ##一個(gè)參數(shù)要寫成元數(shù)組的形式class myevents:# Event Handlers 事件回調(diào)函數(shù)列表 ,執(zhí)行操作后的響應(yīng)事件 都在以下函數(shù)中操作。# If you create handlers, they should have the following prototypes:def OnMarketData(self, InstrumentID=defaultNamedNotOptArg, BidPrice1=defaultNamedNotOptArg, BidVolume1=defaultNamedNotOptArg, AskPrice1=defaultNamedNotOptArg, AskVolume1=defaultNamedNotOptArg, OpenPrice=defaultNamedNotOptArg, HighestPrice=defaultNamedNotOptArg, LowestPrice=defaultNamedNotOptArg, LastPrice=defaultNamedNotOptArg, OpenInterest=defaultNamedNotOptArg, Volume=defaultNamedNotOptArg, UpperLimitPrice=defaultNamedNotOptArg, LowerLimitPrice=defaultNamedNotOptArg, PreSettlementPrice=defaultNamedNotOptArg, AveragePrice=defaultNamedNotOptArg, UpdateTime=defaultNamedNotOptArg, UpdateMilliSecond=defaultNamedNotOptArg):MyUseVar.vMyBidPrice = BidPrice1MyUseVar.vMyAskPrice = AskPrice1 for row in range(2):j = 0 for column in [InstrumentID,LastPrice,Volume,BidPrice1,BidVolume1,AskPrice1,AskVolume1,BidPrice1,-99999,AskPrice1,-99999,UpdateTime]:item = QStandardItem(f"{column}")Mui.model4.setItem(row,j,item)j = j+1Mui.AppText([j,column])def OnEventsInfo(self, InfoID=defaultNamedNotOptArg, MsgInfo=defaultNamedNotOptArg):thread = Thread(target=Mui.printFunc_OuttextEdit,args=(str(["OnEventsInfo:",InfoID,MsgInfo]),))#一個(gè)參數(shù)要寫成元數(shù)組的形式thread.start()def OnInstrumentStatus(self, InstrumentID=defaultNamedNotOptArg, ExchangeID=defaultNamedNotOptArg, EnterTime=defaultNamedNotOptArg, NewState=defaultNamedNotOptArg):Mui.AppText2(["OnInstrumentStatus:",InstrumentID, ExchangeID, EnterTime,NewState])def OnTradeConnected(self):Mui.AppText2(["OnTradeConnected"])def OnTradeDisconnected(self):Mui.AppText2(["OnTradeDisconnected"])def OnMDConnected(self):Mui.AppText2(["OnMDConnected"])def OnMDDisconnected(self):Mui.AppText2(["OnMDDisconnected"])def OnOrder(self, OrderID=defaultNamedNotOptArg, InstrumentID=defaultNamedNotOptArg, IsBuy=defaultNamedNotOptArg, IsOpen=defaultNamedNotOptArg, Volume=defaultNamedNotOptArg, Price=defaultNamedNotOptArg, TradedVolume=defaultNamedNotOptArg, AvgTradePrice=defaultNamedNotOptArg, OrderStatus=defaultNamedNotOptArg, OrderSysID=defaultNamedNotOptArg, BrokerOrderSeq=defaultNamedNotOptArg, OrderLocalID=defaultNamedNotOptArg, InsertTime=defaultNamedNotOptArg, ErrorID=defaultNamedNotOptArg, ErrorMsg=defaultNamedNotOptArg, HedgeType=defaultNamedNotOptArg):threadOnOrder = Thread(target=Mui.printFunc_OnOrder,args=(InstrumentID,)) # 訂單信號(hào)線程threadOnOrder.start()threadOnOrderLst = Thread(target=Mui.printFunc_OnOrderLst,args=(OrderID,OrderLocalID,OrderSysID,BrokerOrderSeq,InstrumentID,IsBuy,IsOpen,OrderStatus, Volume,TradedVolume,Price,ErrorID,InsertTime,ErrorMsg))threadOnOrderLst.start() #訂單推送后將訂單信息添加到表格信號(hào)線程def OnTrade(self, OrderID=defaultNamedNotOptArg, OrderSysID=defaultNamedNotOptArg, OrderLocalID=defaultNamedNotOptArg, TradeID=defaultNamedNotOptArg, InstrumentID=defaultNamedNotOptArg, IsBuy=defaultNamedNotOptArg, IsOpen=defaultNamedNotOptArg, Volume=defaultNamedNotOptArg, ThisTradePrice=defaultNamedNotOptArg, TradeTime=defaultNamedNotOptArg, OrderStatus=defaultNamedNotOptArg):thread = Thread(target=Mui.printFunc_OuttextEdit,args=(str(["OnTrade:",TradeTime,OrderID,OrderLocalID,OrderSysID,InstrumentID,IsBuy, IsOpen, Volume,ThisTradePrice]),))#一個(gè)參數(shù)要寫成元數(shù)組的形式thread.start()def OnRtnQuote(self, BrokerID=defaultNamedNotOptArg, UserID=defaultNamedNotOptArg, InstrumentID=defaultNamedNotOptArg, ExchangeInstID=defaultNamedNotOptArg):print("OnRtnQuote")def OnOrderCanceled(self, OrderID=defaultNamedNotOptArg, ErrorID=defaultNamedNotOptArg, ErrorMsg=defaultNamedNotOptArg):thread = Thread(target=Mui.printFunc_OuttextEdit,args=(str([OrderID,ErrorID,ErrorMsg]),))#一個(gè)參數(shù)要寫成元數(shù)組的形式thread.start()def OnOrderActionFailed(self, OrderID=defaultNamedNotOptArg, ErrorID=defaultNamedNotOptArg, ErrorMsg=defaultNamedNotOptArg):thread = Thread(target=Mui.printFunc_OuttextEdit,args=(str(["OnOrderActionFailed:",OrderID,ErrorID,ErrorMsg]),))#一個(gè)參數(shù)要寫成元數(shù)組的形式thread.start()def OnInitFinished(self):Mui.AppText2(["OnInitFinished:","初始化完成!"])MyUseVar.RunFlag = 1thread_OpenClose = Thread(target=Mui.printFunc_OpenClose) #進(jìn)行每秒刷新賬戶資金 持倉(cāng)盈虧數(shù)據(jù)線程 登錄完成后開始thread_OpenClose.start() def OnGetPositionDetail(self, InstrumentID=defaultNamedNotOptArg, OpenDate=defaultNamedNotOptArg, OrderID=defaultNamedNotOptArg, TradeID=defaultNamedNotOptArg, Direction=defaultNamedNotOptArg, Volume=defaultNamedNotOptArg, CloseVolume=defaultNamedNotOptArg, OpenPrice=defaultNamedNotOptArg, PositionProfitByDate=defaultNamedNotOptArg, PositionProfitByTrade=defaultNamedNotOptArg, Margin=defaultNamedNotOptArg, LastSettlementPrice=defaultNamedNotOptArg, SettlementPrice=defaultNamedNotOptArg,CloseProfitByDate=defaultNamedNotOptArg, CloseProfitByTrade=defaultNamedNotOptArg, CloseAmount=defaultNamedNotOptArg, TimeFirstVolume=defaultNamedNotOptArg,MarginRateByMoney=defaultNamedNotOptArg, MarginRateByVolume=defaultNamedNotOptArg):Mui.AppText3(["OnGetPositionDetail:",InstrumentID, OpenDate, TradeID, Direction,Volume,CloseVolume, OpenPrice, PositionProfitByDate, PositionProfitByTrade,Margin,LastSettlementPrice,SettlementPrice,CloseProfitByDate,CloseProfitByTrade, CloseAmount, TimeFirstVolume,MarginRateByMoney, MarginRateByVolume])def OnGetInstrument(self, ExchangeID=defaultNamedNotOptArg, InstrumentID=defaultNamedNotOptArg, ExchangeInstID=defaultNamedNotOptArg, InstrumentName=defaultNamedNotOptArg, ProductClass=defaultNamedNotOptArg, MaxMarketOrderVolume=defaultNamedNotOptArg, MinMarketOrderVolume=defaultNamedNotOptArg, MaxLimitOrderVolume=defaultNamedNotOptArg, MinLimitOrderVolume=defaultNamedNotOptArg, VolumeMultiple=defaultNamedNotOptArg, PriceTick=defaultNamedNotOptArg, ExpireDate=defaultNamedNotOptArg, IsTrading=defaultNamedNotOptArg, LongMarginRatio=defaultNamedNotOptArg, ShortMarginRatio=defaultNamedNotOptArg, OptionsType=defaultNamedNotOptArg, ProductID=defaultNamedNotOptArg, CombinationType=defaultNamedNotOptArg, bIsLast=defaultNamedNotOptArg):thread = Thread(target=Mui.printFunc_OuttextEdit,args=(str(["OnGetInstrument:",ExchangeID,InstrumentID,InstrumentName,ExpireDate,IsTrading]),))#一個(gè)參數(shù)要寫成元數(shù)組的形式thread.start()def OnRspError(self, ErrorID=defaultNamedNotOptArg, ErrorMsg=defaultNamedNotOptArg):thread = Thread(target=Mui.printFunc_OuttextEdit,args=(str(["OnRspError:",ErrorID,ErrorMsg]),))#一個(gè)參數(shù)要寫成元數(shù)組的形式thread.start()def OnRspQryTrade(self, OrderID=defaultNamedNotOptArg, TradeID=defaultNamedNotOptArg, InstrumentID=defaultNamedNotOptArg, OrderSysID=defaultNamedNotOptArg, OrderLocalID=defaultNamedNotOptArg, BrokerOrderSeq=defaultNamedNotOptArg, IsBuy=defaultNamedNotOptArg, IsOpen=defaultNamedNotOptArg, Volume=defaultNamedNotOptArg, Price=defaultNamedNotOptArg, TradeDate=defaultNamedNotOptArg, TradeTime=defaultNamedNotOptArg):thread = Thread(target=Mui.printFunc_OuttextEdit,args=(str(["OnRspQryTrade:",TradeDate,TradeTime,InstrumentID,OrderID,TradeID,BrokerOrderSeq,OrderLocalID,OrderSysID,IsBuy, IsOpen, Volume,Price]),))#一個(gè)參數(shù)要寫成元數(shù)組的形式thread.start()def OnOutPosition(self, InstrumentID=defaultNamedNotOptArg, LongPostion=defaultNamedNotOptArg, LongYDPostion=defaultNamedNotOptArg, LongFrozen=defaultNamedNotOptArg, LongSuspendPostion=defaultNamedNotOptArg, LongPositionPrice=defaultNamedNotOptArg, LongProfit=defaultNamedNotOptArg, ShortPostion=defaultNamedNotOptArg, ShortYDPostion=defaultNamedNotOptArg, ShortFrozen=defaultNamedNotOptArg, ShortSuspendPostion=defaultNamedNotOptArg, ShortPositionPrice=defaultNamedNotOptArg, ShortProfit=defaultNamedNotOptArg):finded = 0findrow = -1tmpmodel = Mui.ui.gridpositions.model()j = tmpmodel.rowCount()#print("tmpmodel.rowCount ",j)#print("tmpmodel.rowCount ",tmpmodel.item(0,0).text())for row in range(j):#print("row ",row)if ((tmpmodel.item(row,0).text()==InstrumentID and tmpmodel.item(row,1).text()==" 賣") or tmpmodel.item(row,0).text()==""):#print("tmpmodel.item(row,0).text() ",tmpmodel.item(row,0).text())finded = 1findrow = rowbreakbidprice = 0.0askprice =0.0 if (finded==1):j = 0for column in [InstrumentID," 賣",ShortPostion,ShortYDPostion,ShortFrozen,ShortSuspendPostion,ShortPositionPrice,ShortProfit,bidprice,askprice]:item = QStandardItem(f"{column}")tmpmodel.setItem(findrow,j,item)j = j+1j = 0for column in [InstrumentID,"買 ",LongPostion, LongYDPostion, LongFrozen, LongSuspendPostion,LongPositionPrice,LongProfit,bidprice,askprice]:item = QStandardItem(f"{column}")tmpmodel.setItem(findrow+1,j,item)j = j+1else:item0 = QStandardItem('%s' % InstrumentID)item1 = QStandardItem('%s' % " 賣")item2 = QStandardItem('%d' % ShortPostion)item3 = QStandardItem('%d' % ShortYDPostion)item4 = QStandardItem('%d' % ShortFrozen)item5 = QStandardItem('%d' % ShortSuspendPostion)item6 = QStandardItem('%.2f' % ShortPositionPrice)item7 = QStandardItem('%.2f' % ShortProfit)item8 = QStandardItem('%.2f' % bidprice)item9 = QStandardItem('%.2f' % askprice)tmpmodel.appendRow([item0,item1,item2,item3,item4,item5,item6,item7,item8,item9])item0 = QStandardItem('%s' % InstrumentID)item1 = QStandardItem('%s' % "買 ")item2 = QStandardItem('%d' % LongPostion)item3 = QStandardItem('%d' % LongYDPostion)item4 = QStandardItem('%d' % LongFrozen)item5 = QStandardItem('%d' % LongSuspendPostion)item6 = QStandardItem('%.2f' % LongPositionPrice)item7 = QStandardItem('%.2f' % LongProfit)item8 = QStandardItem('%.2f' % bidprice)item9 = QStandardItem('%.2f' % askprice)tmpmodel.appendRow([item0,item1,item2,item3,item4,item5,item6,item7,item8,item9])def OnDepthMarketData(self, InstrumentID=defaultNamedNotOptArg, BidPrice1=defaultNamedNotOptArg, BidVolume1=defaultNamedNotOptArg, AskPrice1=defaultNamedNotOptArg, AskVolume1=defaultNamedNotOptArg, BidPrice2=defaultNamedNotOptArg, BidVolume2=defaultNamedNotOptArg, AskPrice2=defaultNamedNotOptArg, AskVolume2=defaultNamedNotOptArg, BidPrice3=defaultNamedNotOptArg, BidVolume3=defaultNamedNotOptArg, AskPrice3=defaultNamedNotOptArg, AskVolume3=defaultNamedNotOptArg, BidPrice4=defaultNamedNotOptArg, BidVolume4=defaultNamedNotOptArg, AskPrice4=defaultNamedNotOptArg, AskVolume4=defaultNamedNotOptArg, BidPrice5=defaultNamedNotOptArg, BidVolume5=defaultNamedNotOptArg, AskPrice5=defaultNamedNotOptArg, AskVolume5=defaultNamedNotOptArg, OpenPrice=defaultNamedNotOptArg, HighestPrice=defaultNamedNotOptArg, LowestPrice=defaultNamedNotOptArg, LastPrice=defaultNamedNotOptArg, OpenInterest=defaultNamedNotOptArg, Volume=defaultNamedNotOptArg, UpperLimitPrice=defaultNamedNotOptArg, LowerLimitPrice=defaultNamedNotOptArg, PreSettlementPrice=defaultNamedNotOptArg, AveragePrice=defaultNamedNotOptArg, UpdateTime=defaultNamedNotOptArg, UpdateMilliSecond=defaultNamedNotOptArg):threadDepthMarketData = Thread(target=Mui.printFunc_MarketData,args=(InstrumentID,LastPrice,Volume,BidPrice1,BidVolume1,AskPrice1,AskVolume1,BidPrice5,BidVolume5,AskPrice5,AskVolume5,UpdateTime))threadDepthMarketData.start() #行情信息 刷新到表格線程MyUseVar.vMyBidPrice = BidPrice1MyUseVar.vMyAskPrice = AskPrice1def OnPushCancleOrder(self, OrderID=defaultNamedNotOptArg, InsertTime=defaultNamedNotOptArg, InstrumentID=defaultNamedNotOptArg, IsBuy=defaultNamedNotOptArg, IsOpen=defaultNamedNotOptArg, Volume=defaultNamedNotOptArg, TradedVolume=defaultNamedNotOptArg, Price=defaultNamedNotOptArg, OrderStatus=defaultNamedNotOptArg):thread = Thread(target=Mui.printFunc_OuttextEdit,args=(str(["OnPushCancleOrder",InsertTime,InstrumentID,OrderID,IsBuy,IsOpen, Volume,TradedVolume,Price,OrderStatus]),))#一個(gè)參數(shù)要寫成元數(shù)組的形式thread.start()def OnOutProgress(self, ProFlag=defaultNamedNotOptArg, MaxInt=defaultNamedNotOptArg, Position=defaultNamedNotOptArg):str1 = ""if (ProFlag==1):str1 = "獲取全市場(chǎng)合約信息進(jìn)度"elif (ProFlag==2):str1 = "獲取歷史訂單信息進(jìn)度"elif (ProFlag==3):str1 = "獲取持倉(cāng)信息進(jìn)度"elif (ProFlag==4):str1 = "獲取持倉(cāng)明細(xì)信息進(jìn)度"elif (ProFlag==5):str1 = "讀取歷史K線數(shù)據(jù)進(jìn)度"elif (ProFlag==9):str1 = "登錄初始化完成"thread = Thread(target=Mui.printFunc,args=(str1,((Position-1) % 100) +1))#登錄獲取數(shù)據(jù)進(jìn)度信息 刷新到progress線程thread.start()def OnOutBars(self, InstrumentID=defaultNamedNotOptArg, Period=defaultNamedNotOptArg, Counts=defaultNamedNotOptArg, Hight=defaultNamedNotOptArg, Low=defaultNamedNotOptArg, Open=defaultNamedNotOptArg, Close=defaultNamedNotOptArg, CreatTime=defaultNamedNotOptArg):thread = Thread(target=Mui.printFunc_OutBars,args=(InstrumentID,Period,Counts,Hight,Low,Open,Close,CreatTime))thread.start()def OnOutExchangeTradeTimes(self, ExchangeID=defaultNamedNotOptArg, InstrumentID=defaultNamedNotOptArg, OpenTime=defaultNamedNotOptArg, CloseTime=defaultNamedNotOptArg, TradeMins=defaultNamedNotOptArg, Flag=defaultNamedNotOptArg):Mui.AppText3("ExchangeID:{0} InstrumentID:{1} OpenTime:{2} CloseTime:{3} TradeMins:{4} Flag:{5}\n".format(ExchangeID,InstrumentID, OpenTime, CloseTime,TradeMins,Flag))thread = Thread(target=Mui.printFunc_OuttextEdit,args=("ExchangeID:{0} InstrumentID:{1} OpenTime:{2} CloseTime:{3} TradeMins:{4} Flag:{5}\n".format(ExchangeID,InstrumentID, OpenTime, CloseTime,TradeMins,Flag),))#一個(gè)參數(shù)要寫成元數(shù)組的形式thread.start()class Ui_UiMainWindow(QWidget): #objectdef __init__(self):super(Ui_UiMainWindow,self).__init__()#先導(dǎo)入.ui文件,存在qfile_UIUI。然后關(guān)閉qfile_UIUI = QFile("TvQhtCtpComPYClient.ui")qfile_UIUI.open(QFile.ReadOnly)qfile_UIUI.close()# 導(dǎo)入加載的UI類(返回的就是UI界面對(duì)應(yīng)的QWidget窗體對(duì)象)self.ui = QUiLoader().load(qfile_UIUI) # 界面對(duì)象if not self.ui:print(QUiLoader().errorString())print("LoadO error")sys.exit(-1)else:print("LoadOk")# 加入界面按鈕點(diǎn)擊事件對(duì)應(yīng)的過(guò)程回調(diào)映射。self.ui.BtnLogin.clicked.connect(self.Login) # type: ignoreself.ui.SubIns.clicked.connect(self.bSubIns) # type: ignore bUnSubInsself.ui.UnSubIns.clicked.connect(self.bUnSubIns) # type: ignoreself.ui.BtnRSQ.clicked.connect(self.callbacklog) # LogOutself.ui.BtnLogout.clicked.connect(self.LogOut) # LogOutself.ui.btnorder.clicked.connect(self.btnorder) # LogOutself.ui.rb0_4.clicked.connect(self.rb0_4click) # LogOutself.ui.rb1_4.clicked.connect(self.rb0_4click) # LogOutself.ui.rb0_5.clicked.connect(self.rb0_5click) # LogOutself.ui.rb1_5.clicked.connect(self.rb0_5click) # LogOut self.ui.btnopenclose.clicked.connect(self.btnopencloseclick) # LogOut global BeginOpenClose #開始進(jìn)行循環(huán)開平倉(cāng)測(cè)試 self.ui.btnChinv.clicked.connect(self.btnChinvclick) # LogOut global BeginOpenClose #開始進(jìn)行循環(huán)開平倉(cāng)測(cè)試 self.ms = MySignals() #引入信號(hào)函數(shù)self.ms.text_print.connect(self.pF) #將信號(hào)傳遞給主程序中pF函數(shù)進(jìn)行處理self.ms.text_MarketData.connect(self.pF_MarketData) #將信號(hào)傳遞給主程序中pF函數(shù)進(jìn)行處理self.ms.text_Account.connect(self.pF_Account) #將信號(hào)傳遞給主程序中pF函數(shù)進(jìn)行處理self.ms.text_PositionProfit.connect(self.pF_PositionProfit) #將信號(hào)傳遞給主程序中pF函數(shù)進(jìn)行處理self.ms.text_OnOrder.connect(self.pF_OnOrder) #將信號(hào)傳遞給主程序中pF函數(shù)進(jìn)行處理 self.ms.text_OnOrderLst.connect(self.pF_OnOrderLst) #將信號(hào)傳遞給主程序中pF函數(shù)進(jìn)行處理self.ms.text_OpenClose.connect(self.pF_OpenClose) #將信號(hào)傳遞給主程序中pF函數(shù)進(jìn)行處理self.ms.text_OutBars.connect(self.pF_OutBars) #將信號(hào)傳遞給主程序中pF函數(shù)進(jìn)行處理 self.ms.text_OuttextEdit.connect(self.pF_OuttextEdit) #將信號(hào)傳遞給主程序中pF函數(shù)進(jìn)行處理 self.model4 = QStandardItemModel(1, 12) # 行情信息表格 設(shè)置行數(shù) 列數(shù)self.model4.setHorizontalHeaderLabels(['合約名稱','最新','數(shù)量','買一','買量','賣一','賣量','買五','買量','賣五','賣量','時(shí)間'])self.ui.tableView_4.setModel(self.model4)for row in range(1):for column in range(12):item = QStandardItem("") #如果不開始進(jìn)行表格賦值,.item(row,0).text()會(huì)提示錯(cuò)誤 無(wú)text()這個(gè)屬性。self.model4.setItem(row,column,item)self.model = QStandardItemModel(1, 8) #賬戶資金表格設(shè)置行數(shù) 列數(shù)self.model.setHorizontalHeaderLabels(["靜態(tài)權(quán)益","結(jié)算準(zhǔn)備金","占用保證金","可用資金","可取資金","交易所保證金","浮動(dòng)[持倉(cāng)]盈虧","平倉(cāng)盈虧"])self.ui.tableView.setModel(self.model)for row in range(1):for column in range(8):item = QStandardItem("") #如果不開始進(jìn)行表格賦值,.item(row,0).text()會(huì)提示錯(cuò)誤 無(wú)text()這個(gè)屬性。self.model.setItem(row,column,item)self.model1 = QStandardItemModel(2, 10) #持倉(cāng)數(shù)據(jù)表格 設(shè)置行數(shù) 列數(shù)self.model1.setHorizontalHeaderLabels(["合約名稱","買賣","總持倉(cāng)","昨倉(cāng)","平倉(cāng)凍結(jié)","開倉(cāng)掛起","開倉(cāng)均價(jià)","持倉(cāng)盈虧","BidPrice","AskPrice"])self.ui.gridpositions.setModel(self.model1)for row in range(2):for column in range(10):item = QStandardItem("") #如果不開始進(jìn)行表格賦值,.item(row,0).text()會(huì)提示錯(cuò)誤 無(wú)text()這個(gè)屬性。self.model1.setItem(row,column,item)self.model2 = QStandardItemModel(1, 10) #訂單列表表格 設(shè)置行數(shù) 列數(shù)self.model2.setHorizontalHeaderLabels(["訂單編號(hào)","合約名稱","買賣","開平","手?jǐn)?shù)","已成交","報(bào)單價(jià)格","成交均價(jià)","報(bào)單時(shí)間","報(bào)單狀態(tài)"])self.ui.tableView_2.setModel(self.model2)for row in range(1):for column in range(10):item = QStandardItem("") #如果不開始進(jìn)行表格賦值,.item(row,0).text()會(huì)提示錯(cuò)誤 無(wú)text()這個(gè)屬性。self.model2.setItem(row,column,item)MyUseVar.RunFlag = 0MyUseVar.Interval = 1MyUseVar.vWaitOrderInt = 60MyUseVar.RefSec = -1MyUseVar.vloop = 0MyUseVar.vWaitCancleInt = 6MyUseVar.vVolT = 9MyUseVar.BeginOpenClose = 0MyUseVar.vWaitInOrder = 0#tracemalloc.start() #啟用內(nèi)存分析追蹤#self.snapshot1 = tracemalloc.take_snapshot() #建立一個(gè)內(nèi)存快照def rb0_4click(self):errid = 0if (self.ui.rb0_4.isChecked()):tvapi1.SetOrderCloseMode(0,errid) #"設(shè)置登錄模式為:0 設(shè)置返回值:{0} 0設(shè)置成功 1設(shè)置失敗\n".format(errid)self.ui.textEdit_3.append("設(shè)置平倉(cāng)時(shí)的優(yōu)先順序模式為:0 【0 先平昨再平今 1 先平今再平昨】 設(shè)置返回值:{0} 【0設(shè)置成功 1設(shè)置失敗】\n".format(errid))else:tvapi1.SetOrderCloseMode(1,errid) #"設(shè)置登錄模式為:0 設(shè)置返回值:{0} 0設(shè)置成功 1設(shè)置失敗\n".format(errid)self.ui.textEdit_3.append("設(shè)置平倉(cāng)時(shí)的優(yōu)先順序模式為:1 【0 先平昨再平今 1 先平今再平昨】 設(shè)置返回值:{0} 【0設(shè)置成功 1設(shè)置失敗】\n".format(errid))def btnChinvclick(self): if (self.ui.rb0_5.isChecked()):MyUseVar.vWaitOrderInt = self.ui.spinBox.value()if (MyUseVar.vWaitOrderInt<1):MyUseVar.vWaitOrderInt = 1self.ui.spinBox.setValue(1)else:MyUseVar.vWaitOrderInt = self.ui.spinBox.value()/50if (MyUseVar.vWaitOrderInt<1):MyUseVar.vWaitOrderInt = 1self.ui.spinBox.setValue(50)self.ui.textEdit.append("設(shè)置開平倉(cāng)循環(huán)測(cè)試時(shí)的時(shí)間間隔:{0} {1}\n".format(self.ui.spinBox.value(),self.ui.label_9.text()))def rb0_5click(self): if (self.ui.rb0_5.isChecked()): #設(shè)置刷新時(shí)間間隔 毫秒為單位MyUseVar.Interval = 1self.ui.label_9.setText("秒")else:MyUseVar.Interval = 0.05self.ui.label_9.setText("毫秒")def btnorder(self): #自定義一下 單按鈕事件isopen = -1isbuy = -1#//IsBuy 0.多頭 1.空頭#//IsOpen 0.開倉(cāng) 1.平倉(cāng) 2.強(qiáng)平 3.平今 4.平昨 5.強(qiáng)減 6.本地強(qiáng)平;vol = int(self.ui.edtvol.text())if (vol<=0):vol = 1 if (self.ui.rb0_2.isChecked()):isopen = 0elif (self.ui.rb1_2.isChecked()):isopen = 1elif (self.ui.rb3_2.isChecked()):isopen = 3elif (self.ui.rb4_2.isChecked()):isopen = 4if (self.ui.rb0_3.isChecked()):isbuy = 0elif (self.ui.rb1_3.isChecked()):isbuy = 1vMyBidPrice=0.0if (isbuy>=0 and isbuy<=1 and isopen>=0 and isopen<=6):MyUseVar.MyPostion.LongOrder = tvapi1.PlaceOrder(self.ui.edtIns.text(),isbuy,isopen,vol,vMyBidPrice,MyUseVar.MyPostion.LongOrder)self.ui.textEdit_3.append("{} 下訂單 order: {} Price:{} \n".format(self.ui.edtIns.text(),MyUseVar.MyPostion.LongOrder,vMyBidPrice))# 查詢操作代碼def callbacklog(self):if (self.ui.rb0.isChecked()):vMultiply = 0vPriceUnit = 0vMarginRate = 0vExpireDate = ''vMultiply, vPriceUnit, vMarginRate, vExpireDate = tvapi1.GetInstrumentInfo(self.ui.edtIns.text(), vMultiply, vPriceUnit, vMarginRate, vExpireDate)self.ui.textEdit_3.append("查詢合約:{} 合約乘數(shù):{} 最小變動(dòng)單位:{} 保證金比率:{} 合約到期日:{}\n".format(self.ui.edtIns.text(),vMultiply, vPriceUnit, vMarginRate, vExpireDate))elif (self.ui.rb1.isChecked()):tvapi1.GetPositionDetail(self.ui.edtIns.text())self.ui.textEdit_3.append("查詢合約:%s 持倉(cāng)成交明細(xì)\n".format(self.ui.edtIns.text()))elif (self.ui.rb2.isChecked()):PreBalance = .0Balance = .0PreMargin =.0Available =.0WithdrawQuota =.0ExchangeMargin =.0CloseProfit =.0PositionProfit =.0PreBalance,Balance,PreMargin,Available,WithdrawQuota,ExchangeMargin,CloseProfit,PositionProfit = tvapi1.GetAccount(PreBalance,Balance,PreMargin,Available,WithdrawQuota,ExchangeMargin,CloseProfit ,PositionProfit)self.ui.textEdit_3.append("靜態(tài)權(quán)益:{0} 結(jié)算保證金:{1} 占用保證金:{2} 可用資金:{3} 可取資金:{4} 交易所保證金:{5} 平倉(cāng)盈虧:{6} 持倉(cāng)盈虧:{7}\n".format(PreBalance, Balance, PreMargin, Available, WithdrawQuota, ExchangeMargin,CloseProfit,PositionProfit))elif (self.ui.rb3.isChecked()):tvapi1.GetTradeInfo(self.ui.edtIns.text())self.ui.textEdit_3.append("查詢:{0} 成交信息\n".format(self.ui.edtIns.text()))elif (self.ui.rb4.isChecked()):tvapi1.SettlementInfoConfirm()self.ui.textEdit_3.append("確認(rèn)結(jié)算單 !\n")elif (self.ui.rb5.isChecked()):vMultiply=0vPriceUnit=0vMarginRate=0vExpireDate=""tvapi1.GetInstrumentInfo("",vMultiply, vPriceUnit, vMarginRate, vExpireDate)self.ui.textEdit_3.append("查詢?nèi)袌?chǎng)合約\n")elif (self.ui.rb6.isChecked()):if (len(self.ui.edtorderid.text())==0):vOrderId = 0else:vOrderId = int(self.ui.edtorderid.text())vIsCanC = 0vIsCanC = tvapi1.IsOrderOpen(vOrderId,vIsCanC)self.ui.textEdit_3.append("訂單:{0} 是否可撤:{1} (0 :不可撤 1:可撤)\n".format(vOrderId,vIsCanC))elif (self.ui.rb7.isChecked()):lsp = 0ssp = 0lpp = .0spp=.0vd1=.0vd2=.0bid=.0ask=.0MyUseVar.MyPostion.LongPostion,MyUseVar.MyPostion.LongYDPostion,MyUseVar.MyPostion.LongFrozen,lsp,vd1,lpp,MyUseVar.MyPostion.ShortPostion,MyUseVar.MyPostion.ShortYDPostion,\MyUseVar.MyPostion.ShortFrozen,ssp,vd2,spp,bid,ask = tvapi1.GetPositionPlus(self.ui.edtIns.text(),\MyUseVar.MyPostion.LongPostion,MyUseVar.MyPostion.LongYDPostion,MyUseVar.MyPostion.LongFrozen,lsp,vd1,lpp,MyUseVar.MyPostion.ShortPostion,MyUseVar.MyPostion.ShortYDPostion,\MyUseVar.MyPostion.ShortFrozen,ssp,vd2,spp,bid,ask)self.ui.textEdit_3.append("{12} 多頭倉(cāng)位:{0} 昨倉(cāng):{1} 凍結(jié)倉(cāng)位:{2} 開倉(cāng)掛起:{3} 持倉(cāng)價(jià)格:{4} 持倉(cāng)盈虧:{5} bid:{13} 空頭倉(cāng)位:{6} 昨倉(cāng):{7} 凍結(jié)倉(cāng)位:{8} 開倉(cāng)掛起:{9} 持倉(cāng)價(jià)格:{10} 持倉(cāng)盈虧:{11} ask:{14}\n".\format(MyUseVar.MyPostion.LongPostion,MyUseVar.MyPostion.LongYDPostion,MyUseVar.MyPostion.LongFrozen,lsp,vd1,lpp,MyUseVar.MyPostion.ShortPostion,MyUseVar.MyPostion.ShortYDPostion,\MyUseVar.MyPostion.ShortFrozen,ssp,vd2,spp,self.ui.edtIns.text(),bid,ask))elif (self.ui.rb8.isChecked()):vi1=0vi1 = tvapi1.GetHisOrderList("",vi1)#查詢歷史訂單信息 不為空查詢指定合約。self.ui.textEdit_3.append("查詢歷史訂單信息,返回值:{0} (0 :成功 1:查詢歷史訂單不成功 2:查詢?nèi)袌?chǎng)合約不成功)\n".format(vi1))elif (self.ui.rb9.isChecked()):YdClose = 0YdSettlement = 0Open = 0Last = 0Bid1 = 0Ask1 = 0Bid1Volume = 0Ask1Volume = 0Highest = 0Lowest = 0TradedVolume = 0TradedAmmount = 0YdClose, YdSettlement,Open,Last,Bid1,Ask1,Bid1Volume, Ask1Volume,Highest,Lowest,TradedVolume,TradedAmmount = tvapi1.GetMarketData(self.ui.edtIns.text(), YdClose, \YdSettlement,Open,Last,Bid1,Ask1,Bid1Volume, Ask1Volume,Highest,Lowest,TradedVolume,TradedAmmount)self.ui.textEdit_3.append("{0} YdClose:{1:.2f} YdSettlement:{2:.2f} Open:{3:.2f} Last:{4:.2f} Bid1:{5:.2f} Ask1:{6:.2f} Bid1Volume:{7} Ask1Volume:{8} Highest:{9:.2f} Lowest:{10:.2f} TradedVolume:{11} TradedAmmount:{12:.2f}\n".format(MyUseVar.sInstrumentID,YdClose, YdSettlement, Open, Last, Bid1, Ask1, Bid1Volume,Ask1Volume, Highest, Lowest,TradedVolume, TradedAmmount))elif (self.ui.rb10.isChecked()):tvapi1.PrintOrderInfo ()self.ui.textEdit_3.append("輸出信息到:{0} 目錄的{0}.txt文件中完成!\n".format(self.ui.UserName.text()))elif (self.ui.rb11.isChecked()):OpenRatioByMoney = 0.0OpenRatioByVolume = 0.0 CloseRatioByMoney = 0.0 CloseRatioByVolume = 0.0 CloseTodayRatioByMoney = 0.0 CloseTodayRatioByVolume = 0.0 OpenRatioByMoney,OpenRatioByVolume, CloseRatioByMoney, CloseRatioByVolume,CloseTodayRatioByMoney , CloseTodayRatioByVolume = tvapi1.GetInstrumentRatio(self.ui.edtIns.text(), OpenRatioByMoney,OpenRatioByVolume, CloseRatioByMoney,\CloseRatioByVolume,CloseTodayRatioByMoney , CloseTodayRatioByVolume)self.ui.textEdit_3.append('{0} OpenRatioByMoney:{1:.7f} OpenRatioByVolume:{2:.7f} CloseRatioByMoney:{3:.7f} CloseRatioByVolume:{4:.7f} CloseTodayRatioByMoney :{5:.7f} CloseTodayRatioByVolume:{6:.7f}'.format(self.ui.edtIns.text(), OpenRatioByMoney,OpenRatioByVolume, CloseRatioByMoney, CloseRatioByVolume, CloseTodayRatioByMoney , CloseTodayRatioByVolume))elif (self.ui.rb12.isChecked()):PreBalance = .0Balance = .0PreMargin =.0Available =.0WithdrawQuota =.0ExchangeMargin =.0CloseProfit =.0PositionProfit =.0PreBalance,Balance,PreMargin,Available,WithdrawQuota,ExchangeMargin,CloseProfit,PositionProfit = tvapi1.GetRealAccount(PreBalance,Balance,PreMargin,Available,WithdrawQuota,ExchangeMargin,CloseProfit ,PositionProfit)self.ui.textEdit_3.append("靜態(tài)權(quán)益:{0} 結(jié)算保證金:{1} 占用保證金:{2} 可用資金:{3} 可取資金:{4} 交易所保證金:{5} 平倉(cāng)盈虧:{6} 持倉(cāng)盈虧:{7}\n".format(PreBalance, Balance, PreMargin, Available, WithdrawQuota, ExchangeMargin,CloseProfit,PositionProfit))elif (self.ui.rb13.isChecked()):lsp = 0ssp = 0lpp = .0spp=.0vd1=.0vd2=.0bid=.0ask=.0MyUseVar.MyPostion.LongPostion,MyUseVar.MyPostion.LongYDPostion,MyUseVar.MyPostion.LongFrozen,lsp,MyUseVar.MyPostion.ShortPostion,MyUseVar.MyPostion.ShortYDPostion,\MyUseVar.MyPostion.ShortFrozen,ssp = tvapi1.GetRealPosition(self.ui.edtIns.text(),\MyUseVar.MyPostion.LongPostion,MyUseVar.MyPostion.LongYDPostion,MyUseVar.MyPostion.LongFrozen,lsp,MyUseVar.MyPostion.ShortPostion,MyUseVar.MyPostion.ShortYDPostion,\MyUseVar.MyPostion.ShortFrozen,ssp)self.ui.textEdit_3.append("{0} 多頭倉(cāng)位:{1} 昨倉(cāng):{2} 凍結(jié)倉(cāng)位:{3} 持倉(cāng)價(jià)格:{4} 空頭倉(cāng)位:{5} 昨倉(cāng):{6} 凍結(jié)倉(cāng)位:{7} 持倉(cāng)價(jià)格:{8} \n".\format(self.ui.edtIns.text(),MyUseVar.MyPostion.LongPostion,MyUseVar.MyPostion.LongYDPostion,MyUseVar.MyPostion.LongFrozen,lsp,MyUseVar.MyPostion.ShortPostion,MyUseVar.MyPostion.ShortYDPostion,\MyUseVar.MyPostion.ShortFrozen,ssp))elif (self.ui.rb14.isChecked()):vOrderId = int(self.ui.edtorderid.text())vIsCanC = 0vIsCanC = tvapi1.CancelOrder(vOrderId, vIsCanC)self.ui.textEdit_3.append("訂單:{0} 撤單狀態(tài):{1}【0:撤單成功 其它:撤單不成功】\n".format(vOrderId,vIsCanC))elif (self.ui.rb15.isChecked()):IsOk = 0Period = 1IsOk = tvapi1.CreateBars(self.ui.edtIns.text(),Period,IsOk)self.ui.textEdit_3.append("合約:{0} 創(chuàng)建{1}分鐘周期BARS完成:{2} 【1:創(chuàng)建成功 2:此周期已創(chuàng)建 -1:創(chuàng)建不成功】\n".format(self.ui.edtIns.text(),Period,IsOk))if (IsOk==2):IsOk = tvapi1.DeleteBars(self.ui.edtIns.text(),Period,IsOk)self.ui.textEdit_3.append("合約:{0} 刪除{1}分鐘周期BARS完成:{2} 【1:刪除成功 -1:刪除不成功】\n".format(self.ui.edtIns.text(),Period,IsOk))elif (self.ui.rb16.isChecked()):vMultiply = 0vPriceUnit = 0vMarginRate = 0vExpireDate = ''vMultiply, vPriceUnit, vMarginRate, vExpireDate = tvapi1.GetInstrumentInfoOut(self.ui.edtIns.text(), vMultiply, vPriceUnit, vMarginRate, vExpireDate)self.ui.textEdit_3.append("查詢合約:{} 合約乘數(shù):{} 最小變動(dòng)單位:{} 保證金比率:{} 合約到期日:{}\n".format(self.ui.edtIns.text(),vMultiply, vPriceUnit, vMarginRate, vExpireDate))elif (self.ui.rb17.isChecked()):vmaxi=0vopen=.0vhight=.0vclose=.0vlow=.0vvloumes=0vuptime=""tmppe=1counts=0vmaxi,vopen,vclose,vhight,vlow,vvloumes,counts,vuptime = tvapi1.GetBars(self.ui.edtIns.text(),tmppe,0,vmaxi,vopen,vclose,vhight,vlow,vvloumes,counts,vuptime)self.ui.textEdit_3.append("合約{}K線數(shù)據(jù) 周期:{} 計(jì)數(shù)器:{} 長(zhǎng)度:{} 序號(hào):{} open:{} vclose:{} vhight:{} vlow:{} vvloumes:{} counts{} vuptime:{}\n".format(self.ui.edtIns.text(),tmppe,counts,vmaxi,0,vopen,vclose,vhight,vlow,vvloumes,counts,vuptime))if (vmaxi>=1):for row in range(vmaxi):vmaxi,vopen,vclose,vhight,vlow,vvloumes,counts,vuptime = tvapi1.GetBars(self.ui.edtIns.text(),tmppe,row,vmaxi,vopen,vclose,vhight,vlow,vvloumes,counts,vuptime)self.ui.textEdit_3.append("合約{}K線數(shù)據(jù) 周期:{} 計(jì)數(shù)器:{} 長(zhǎng)度:{} 序號(hào):{} open:{} vclose:{} vhight:{} vlow:{} vvloumes:{} counts{} vuptime:{}\n".format(self.ui.edtIns.text(),tmppe,counts,vmaxi,row,vopen,vclose,vhight,vlow,vvloumes,counts,vuptime))elif (self.ui.rb18.isChecked()):vinfoid=0vinfo =""self.ui.textEdit_3.append("==========CZCE======添加蘋果AP2305合約交易時(shí)間段=========================\n")vinfoid,vinfo = tvapi1.AppendExchangeTradeTimes("CZCE","AP2305",9,0,75,0,vinfoid,vinfo); #開盤時(shí)間段 標(biāo)志位是 0 收盤時(shí)間段標(biāo)志位是9 其他為1self.ui.textEdit_3.append("添加{} 合約{}交易時(shí)間段{}:{} :{} vinfoid:{}\n".format("CZCE","AP2305",9,0,vinfo,vinfoid)) vinfoid,vinfo = tvapi1.AppendExchangeTradeTimes("CZCE","AP2305",10,30,60,1,vinfoid,vinfo); #開盤時(shí)間段 標(biāo)志位是 0 收盤時(shí)間段標(biāo)志位是9 其他為1self.ui.textEdit_3.append("添加{} 合約{}交易時(shí)間段{}:{} :{} vinfoid:{}\n".format("CZCE","AP2305",9,0,vinfo,vinfoid))vinfoid,vinfo = tvapi1.AppendExchangeTradeTimes("CZCE","AP2305",13,30,90,9,vinfoid,vinfo); #開盤時(shí)間段 標(biāo)志位是 0 收盤時(shí)間段標(biāo)志位是9 其他為1self.ui.textEdit_3.append("添加{} 合約{}交易時(shí)間段{}:{} :{} vinfoid:{}\n".format("CZCE","AP2305",9,0,vinfo,vinfoid)) self.ui.textEdit_3.append("==========CZCE======添加蘋果所有合約交易時(shí)間段=========================\n")vinfoid,vinfo = tvapi1.AppendExchangeTradeTimes("CZCE","AP999",9,0,75,0,vinfoid,vinfo); #開盤時(shí)間段 標(biāo)志位是 0 收盤時(shí)間段標(biāo)志位是9 其他為1self.ui.textEdit_3.append("添加{} 合約{}交易時(shí)間段{}:{} :{} vinfoid:{}\n".format("CZCE","AP999",9,0,vinfo,vinfoid)) vinfoid,vinfo = tvapi1.AppendExchangeTradeTimes("CZCE","AP999",10,30,60,1,vinfoid,vinfo); #開盤時(shí)間段 標(biāo)志位是 0 收盤時(shí)間段標(biāo)志位是9 其他為1self.ui.textEdit_3.append("添加{} 合約{}交易時(shí)間段{}:{} :{} vinfoid:{}\n".format("CZCE","AP999",9,0,vinfo,vinfoid))vinfoid,vinfo = tvapi1.AppendExchangeTradeTimes("CZCE","AP999",13,30,90,9,vinfoid,vinfo); #開盤時(shí)間段 標(biāo)志位是 0 收盤時(shí)間段標(biāo)志位是9 其他為1self.ui.textEdit_3.append("添加{} 合約{}交易時(shí)間段{}:{} :{} vinfoid:{}\n".format("CZCE","AP999",9,0,vinfo,vinfoid))self.ui.textEdit_3.append("==========CZCE======刪除合約蘋果2305交易時(shí)間段=========================\n")vinfoid,vinfo = tvapi1.DeleteExchangeTradeTimes("CZCE","AP2305",vinfoid,vinfo)self.ui.textEdit_3.append("刪除{} 合約{}交易時(shí)間段{}:{} :{} vinfoid:{}\n".format("CZCE","AP999",9,0,vinfo,vinfoid))elif (self.ui.rb19.isChecked()):self.ui.textEdit_3.append("==========SHFE======螺紋合約交易時(shí)間段=========================\n")tvapi1.GetOutExchangeTradeTimes("SHFE","rb9999") self.ui.textEdit_3.append('================獲取全部交易所全部合約交易時(shí)間段=========================')tvapi1.GetOutExchangeTradeTimes("","")# 查詢操作結(jié)束def printFunc_OuttextEdit(self,vstr): self.ms.text_OuttextEdit.emit(self.ui.textEdit_3,vstr)def pF_OuttextEdit(self,pt,vstr):#pt.append(vstr)def printFunc(self,vstr,vint): #登錄過(guò)程中查詢相關(guān)信息時(shí)的進(jìn)度條顯示 線程調(diào)用顯示進(jìn)度條。self.ms.text_print.emit(self.ui.label_7,self.ui.progressBar,vstr,vint)def pF(self,pt,pb,vstr,int1):pt.setText(vstr)pb.setValue(int1)def printFunc_MarketData(self,InstrumentID,LastPrice,Volume,BidPrice1,BidVolume1,AskPrice1,AskVolume1,BidPrice5,BidVolume5,AskPrice5,AskVolume5,UpdateTime): #訂閱行情推送信息的 線程調(diào)用刷新行情表格。self.ms.text_MarketData.emit(self.ui.tableView_4,InstrumentID,LastPrice,Volume,BidPrice1,BidVolume1,AskPrice1,AskVolume1,BidPrice5,BidVolume5,AskPrice5,AskVolume5,UpdateTime)def pF_MarketData(self,ptv,InstrumentID,LastPrice,Volume,BidPrice1,BidVolume1,AskPrice1,AskVolume1,BidPrice5,BidVolume5,AskPrice5,AskVolume5,UpdateTime):finded = 0findrow = -1tmpmodel = ptv.model()j = tmpmodel.rowCount()for row in range(j):if (tmpmodel.item(row,0).text()==InstrumentID or tmpmodel.item(row,0).text()==""):k = 0 for column in [InstrumentID,LastPrice,Volume,BidPrice1,BidVolume1,AskPrice1,AskVolume1,BidPrice5,BidVolume5,AskPrice5,AskVolume5,UpdateTime]:#item = QStandardItem(f"{column}")#tmpmodel.setItem(findrow,k,QStandardItem(f"{column}"))tmpmodel.item(row,k).setText(f"{column}")k = k+1finded = 1breakj = 0if (finded==0):item0 = QStandardItem('%s' % InstrumentID)item1 = QStandardItem('%.2f' % LastPrice)item2 = QStandardItem('%d' % Volume)item3 = QStandardItem('%.2f' % BidPrice1)item4 = QStandardItem('%d' % BidVolume1)item5 = QStandardItem('%.2f' % AskPrice1)item6 = QStandardItem('%d' % AskVolume1)item7 = QStandardItem('%.2f' % BidPrice5)item8 = QStandardItem('%d' % BidVolume5)item9 = QStandardItem('%.2f' % AskPrice5)item10 = QStandardItem('%d' % AskVolume5)item11 = QStandardItem('%s' % UpdateTime)tmpmodel.appendRow([item0,item1,item2,item3,item4,item5,item6,item7,item8,item9,item10,item11])def AppText(self,*args):try:self.ui.textEdit_3.append(str(args))except BaseException as e:traceback.print_exc()def AppText2(self,*args):try:self.ui.textEdit_3.append(str(args))except BaseException as e:traceback.print_exc()def AppText3(self,*args):try:self.ui.textEdit_3.append(str(args))except BaseException as e:traceback.print_exc()def Login(self): #登錄按鈕事件errmsg=""errid = 1errid,errmsg = tvapi1.Login("config.ini",self.ui.UserName.text(),self.ui.PassWord.text(),errid,errmsg)Mui.AppText([errid,errmsg])def LogOut(self):#退出登錄按鈕事件tvapi1.LogOut()self.ui.textEdit_3.clear()def bSubIns(self):tvapi1.SubscribeDepthMD(self.ui.edtIns.text());#訂閱深度五檔行情def bUnSubIns(self):tvapi1.UnSubscribeMD(self.ui.edtIns.text());#訂閱深度五檔行情def printFunc_OnOrder(self,vins): #根據(jù)訂單回報(bào)推送的合約信息 線程調(diào)用刷新此合約持倉(cāng)數(shù)據(jù)表格。self.ms.text_OnOrder.emit(tvapi1,self.ui.gridpositions,vins)def pF_OnOrder(self,vtv,ptv,vins):LongPostion = 0LongYdPostion = 0LongFrozen = 0LongSuspendPostion = 0LPrice = 0.0LongProfit =0.0ShortPostion =0ShortYDPostion = 0ShortFrozen = 0ShortSuspendPostion = 0SPrice= 0.0shortfit= 0.0bidprice= 0.0askprice =0.0try:LongPostion, LongYdPostion, LongFrozen, LongSuspendPostion,LPrice,LongProfit,ShortPostion,ShortYDPostion,ShortFrozen,\ShortSuspendPostion,SPrice,shortfit,bidprice,askprice = vtv.GetPositionPlus(vins,LongPostion,\LongYdPostion, LongFrozen,LongSuspendPostion,LPrice,LongProfit,ShortPostion,ShortYDPostion,ShortFrozen,ShortSuspendPostion,SPrice,shortfit,bidprice,askprice)finded = 0findrow = -1tmpmodel = ptv.model()j = tmpmodel.rowCount()finded = 0for row in range(j):if (tmpmodel.item(row,0).text()==vins and tmpmodel.item(row,1).text()==" 賣"):k = 2for column in [ShortPostion,ShortYDPostion,ShortFrozen,ShortSuspendPostion,SPrice,shortfit]:#item = QStandardItem(f"{column}") #持續(xù)增加內(nèi)存 不采用。#tmpmodel.setItem(row,k,item)tmpmodel.item(row,k).setText(f"{column}")k = k+1m = 2for column in [LongPostion, LongYdPostion, LongFrozen, LongSuspendPostion,LPrice,LongProfit]:#item = QStandardItem(f"{column}") #持續(xù)增加內(nèi)存 不采用。#tmpmodel.setItem(row+1,m,item)tmpmodel.item(row+1,m).setText(f"{column}")m = m+1finded = 1breakif (tmpmodel.item(row,0).text()==""):k = 0for column in [vins," 賣",ShortPostion,ShortYDPostion,ShortFrozen,ShortSuspendPostion,SPrice,shortfit]:#item = QStandardItem(f"{column}") #持續(xù)增加內(nèi)存 不采用。#tmpmodel.setItem(row,k,item)tmpmodel.item(row,k).setText(f"{column}")k = k+1m = 0for column in [vins,"買 ",LongPostion, LongYdPostion, LongFrozen, LongSuspendPostion,LPrice,LongProfit]:#item = QStandardItem(f"{column}") #持續(xù)增加內(nèi)存 不采用。#tmpmodel.setItem(row+1,m,item)tmpmodel.item(row+1,m).setText(f"{column}")m = m+1finded = 1breakif (finded==0):item0 = QStandardItem('%s' % vins)item1 = QStandardItem('%s' % " 賣")item2 = QStandardItem('%d' % ShortPostion)item3 = QStandardItem('%d' % ShortYDPostion)item4 = QStandardItem('%d' % ShortFrozen)item5 = QStandardItem('%d' % ShortSuspendPostion)item6 = QStandardItem('%.2f' % SPrice)item7 = QStandardItem('%.2f' % shortfit)item8 = QStandardItem('%.2f' % bidprice)item9 = QStandardItem('%.2f' % askprice)tmpmodel.appendRow([item0,item1,item2,item3,item4,item5,item6,item7,item8,item9])item0 = QStandardItem('%s' % vins)item1 = QStandardItem('%s' % "買 ")item2 = QStandardItem('%d' % LongPostion)item3 = QStandardItem('%d' % LongYdPostion)item4 = QStandardItem('%d' % LongFrozen)item5 = QStandardItem('%d' % LongSuspendPostion)item6 = QStandardItem('%.2f' % LPrice)item7 = QStandardItem('%.2f' % LongProfit)item8 = QStandardItem('%.2f' % bidprice)item9 = QStandardItem('%.2f' % askprice)tmpmodel.appendRow([item0,item1,item2,item3,item4,item5,item6,item7,item8,item9])except BaseException as e:traceback.print_exc()def printFunc_PositionProfit(self): #每秒定時(shí)刷新持倉(cāng)盈虧的 線程調(diào)用刷新持倉(cāng)表格。self.ms.text_PositionProfit.emit(tvapi1,self.ui.gridpositions)def pF_PositionProfit(self,vtv,ptv):finded = 0findrow = -1tmpmodel = ptv.model()j = tmpmodel.rowCount()LongPostion = 0LongYdPostion = 0LongFrozen = 0LongSuspendPostion = 0LPrice = 0.0LongProfit =0.0ShortPostion =0ShortYDPostion = 0ShortFrozen = 0ShortSuspendPostion = 0SPrice= 0.0shortfit= 0.0bidprice= 0.0askprice =0.0for row in range(j):if (tmpmodel.item(row,1).text()==" 賣"):LongPostion, LongYdPostion, LongFrozen, LongSuspendPostion,LPrice,LongProfit,ShortPostion,ShortYDPostion,ShortFrozen,\ShortSuspendPostion,SPrice,shortfit,bidprice,askprice = vtv.GetPositionPlus(tmpmodel.item(row,0).text(),LongPostion,\LongYdPostion, LongFrozen,LongSuspendPostion,LPrice,LongProfit,ShortPostion,ShortYDPostion,ShortFrozen,ShortSuspendPostion,SPrice,shortfit,bidprice,askprice)k = 6for column in [SPrice,shortfit,bidprice,askprice]:#item = QStandardItem(f"{column}") #持續(xù)增加內(nèi)存 不采用。#tmpmodel.setItem(row,k,item)tmpmodel.item(row,k).setText(f"{column}")k = k+1m = 6for column in [LPrice,LongProfit,bidprice,askprice]:#item = QStandardItem(f"{column}") #持續(xù)增加內(nèi)存 不采用。#tmpmodel.setItem(row+1,m,item)tmpmodel.item(row+1,m).setText(f"{column}")m = m+1def printFunc_OnOrderLst(self,OrderID,OrderLocalID,OrderSysID,BrokerOrderSeq,InstrumentID,IsBuy,IsOpen,OrderStatus, Volume,TradedVolume,Price,ErrorID,InsertTime,ErrorMsg): #訂單回報(bào)信息推送后添加到訂單列表表格 的線程調(diào)用刷新訂單列表表格self.ms.text_OnOrderLst.emit(self.ui.tableView_2,OrderID,OrderLocalID,OrderSysID,BrokerOrderSeq,InstrumentID,IsBuy,IsOpen,OrderStatus, Volume,TradedVolume,Price,ErrorID,InsertTime,ErrorMsg)def pF_OnOrderLst(self,ptv,OrderID,OrderLocalID,OrderSysID,BrokerOrderSeq,InstrumentID,IsBuy,IsOpen,OrderStatus, Volume,TradedVolume,Price,ErrorID,InsertTime,ErrorMsg):if (IsBuy==0):tmpbuy = '買 'else:tmpbuy = ' 賣'if (IsOpen==0):tmpopen = '開 'else:tmpopen = ' 平'tmpmodel = ptv.model()j = tmpmodel.rowCount()finded = 0for row in range(j):if (tmpmodel.item(row,0).text()==""):k = 0for column in [OrderID,InstrumentID,IsBuy,IsOpen,Volume,TradedVolume,Price,Price,InsertTime,ErrorMsg]:#item = QStandardItem(f"{column}") #持續(xù)增加內(nèi)存 不采用。#tmpmodel.setItem(row,k,item)tmpmodel.item(row,k).setText(f"{column}")k = k+1finded = 1breakif (tmpmodel.item(row,0).text()==str(OrderID)):k = 4for column in [Volume,TradedVolume,Price,Price,InsertTime,ErrorMsg]:#item = QStandardItem(f"{column}") #持續(xù)增加內(nèi)存 不采用。#tmpmodel.setItem(row,k,item)tmpmodel.item(row,k).setText(f"{column}")k = k+1finded = 1breakif (finded==0):"""item0 = QStandardItem('%d' % OrderID)item1 = QStandardItem('%s' % InstrumentID)item2 = QStandardItem('%s' % tmpbuy)item3 = QStandardItem('%s' % tmpopen)item4 = QStandardItem('%d' % Volume)item5 = QStandardItem('%d' % TradedVolume)item6 = QStandardItem('%.2f' % Price)item7 = QStandardItem('%.2f' % Price)item8 = QStandardItem('%s' % InsertTime)item9 = QStandardItem('%s' % ErrorMsg)"""#tmpmodel.appendRow([item0,item1,item2,item3,item4,item5,item6,item7,item8,item9])tmpmodel.insertRow(0,[QStandardItem('%d' % OrderID),QStandardItem('%s' % InstrumentID),QStandardItem('%s' % tmpbuy),QStandardItem('%s' % tmpopen),\QStandardItem('%d' % Volume),QStandardItem('%d' % TradedVolume),QStandardItem('%.2f' % Price),QStandardItem('%.2f' % Price),\QStandardItem('%s' % InsertTime),QStandardItem('%s' % ErrorMsg)])def printFunc_OutBars(self,InstrumentID,Period,Counts,Hight,Low,Open,Close,CreatTime): #獲取賬戶資金信息的線程調(diào)用賬戶資金表格self.ms.text_OutBars.emit(tvapi1,self.ui.textEdit_3,InstrumentID,Period,Counts,Hight,Low,Open,Close,CreatTime)def pF_OutBars(self,vtv,vedt3,InstrumentID,Period,Counts,Hight,Low,Open,Close,CreatTime):vedt3.append(str(["OnOutBars:",InstrumentID,"周期",Period,"計(jì)數(shù)器",Counts,"最高",Hight,"最低",Low,"開",Open,"平",Close,"時(shí)間",CreatTime]))ma10 = .0 ma10 = vtv.MA(InstrumentID,Period,10,ma10);ema12 = .0 ema12 = vtv.EMA(InstrumentID,Period,12,ema12);ema26 = .0 ema26 = vtv.EMA(InstrumentID,Period,26,ema26);diff1 = .0dea1 = .0macd1 = MyUseVar.MinDoublediff1,dea1 = vtv.MACD(InstrumentID,Period,diff1,dea1);if ((diff1>MyUseVar.MinDouble) and (dea1>MyUseVar.MinDouble)):macd1 = 2*(diff1-dea1)Defdiff1 = .0Defdea1 = .0Defmacd1 = MyUseVar.MinDoubleDefdiff1,Defdea1 = vtv.DefMACD(InstrumentID,Period,12,26,9,Defdiff1,Defdea1);if ((Defdiff1>MyUseVar.MinDouble) and (Defdea1>MyUseVar.MinDouble)):Defmacd1 = 2*(Defdiff1-Defdea1)vedt3.append("InstrumentID:{0} Period:{1} Ma10:{2} ---macd:{3} ---diff:{4} ---dea:{5} ema12:{6} ema26:{7}\n".format(InstrumentID, Period, ma10,macd1,diff1,dea1,ema12,ema26))vedt3.append("InstrumentID:{0} Period:{1} Ma10:{2} Defmacd:{3} Defdiff:{4} Defdea:{5} ema12:{6} ema26:{7}\n".format(InstrumentID, Period, ma10, Defmacd1,Defdiff1,Defdea1,ema12,ema26))def printFunc_Account(self): #獲取賬戶資金信息的線程調(diào)用賬戶資金表格self.ms.text_Account.emit(tvapi1,self.ui.tableView,self.ui.label_10)def pF_Account(self,vtv,ptv,vlab):vlab.setText("當(dāng)前時(shí)間:%s" % time.strftime("%Y-%m_%d %H:%M:%S",time.localtime()))PreBalance = .0Balance = .0PreMargin =.0Available =.0WithdrawQuota =.0ExchangeMargin =.0CloseProfit =.0PositionProfit =.0tmpmodel = ptv.model()j = 0PreBalance,Balance,PreMargin,Available,WithdrawQuota,ExchangeMargin,CloseProfit,PositionProfit = vtv.GetAccount(PreBalance,Balance,PreMargin,Available,WithdrawQuota,ExchangeMargin,CloseProfit ,PositionProfit)for column in [PreBalance,Balance,PreMargin,Available,WithdrawQuota,ExchangeMargin ,PositionProfit,CloseProfit]:#item = QStandardItem(f"{column}") #持續(xù)增加內(nèi)存 不采用。#tmpmodel.setItem(0,j,item)tmpmodel.item(0,j).setText(f"{column}")j = j+1ptv.resizeColumnsToContents()def btnopencloseclick(self):MyUseVar.BeginOpenClose = 1 - MyUseVar.BeginOpenClose if (MyUseVar.BeginOpenClose==0):self.ui.btnopenclose.setText("開始進(jìn)行循環(huán)開平倉(cāng)測(cè)試")else:self.ui.btnopenclose.setText("停止進(jìn)行循環(huán)開平倉(cāng)測(cè)試")tvapi1.SubscribeDepthMD(self.ui.edtIns.text());#訂閱深度五檔行情#=============OnTmr()===================以下代碼為定時(shí)刷新賬戶資金、持倉(cāng)盈虧數(shù)據(jù)及循環(huán)開平倉(cāng)操作代碼====================================================#def OnInitFinished(self):事件中啟用printFunc_OpenClose線程循環(huán)def printFunc_OpenClose(self): #登錄過(guò)程中查詢相關(guān)信息時(shí)的進(jìn)度條顯示 線程調(diào)用顯示進(jìn)度條。while True:#print("Interval:",MyUseVar.Interval,"BeginOpenClose:",MyUseVar.BeginOpenClose,"RunFlag:",MyUseVar.RunFlag,"vWaitCancleInt:",MyUseVar.vWaitCancleInt,"vWaitOrderInt:",MyUseVar.vWaitOrderInt)time.sleep(MyUseVar.Interval)#延時(shí)1秒 #延時(shí)50毫秒#print("vWaitInOrder:",MyUseVar.vWaitInOrder,"BeginOpenClose:",MyUseVar.BeginOpenClose,"RunFlag:",MyUseVar.RunFlag,"vWaitCancleInt:",MyUseVar.vWaitCancleInt,"vWaitOrderInt:",MyUseVar.vWaitOrderInt)if (MyUseVar.RunFlag==1 and MyUseVar.BeginOpenClose==1):self.ms.text_OpenClose.emit(tvapi1,self.ui.textEdit) #加入此代碼后循環(huán)中占用內(nèi)存會(huì)逐步增大,不知為何NewSec = time.strftime("%S",time.localtime())if (MyUseVar.RefSec!=NewSec):MyUseVar.RefSec = NewSecif (MyUseVar.RunFlag==1):self.ms.text_Account.emit(tvapi1,self.ui.tableView,self.ui.label_10) #加入此代碼后循環(huán)中占用內(nèi)存會(huì)逐步增大,不知為何self.ms.text_PositionProfit.emit(tvapi1,self.ui.gridpositions) #加入此代碼后循環(huán)中占用內(nèi)存會(huì)逐步增大,不知為何#self.snapshot2 = tracemalloc.take_snapshot() #建立一個(gè)新的內(nèi)存快照#self.top_stats = self.snapshot2.compare_to(self.snapshot1, 'lineno') #比較兩個(gè)內(nèi)存快照#for stat in self.top_stats[:10]: #打印內(nèi)存快照區(qū)別# print(stat)def pF_OpenClose(self,vtv,vte):MyUseVar.sInstrumentID = self.ui.edtIns.text()if (MyUseVar.vloop==0): #獲取持倉(cāng)倉(cāng)位 訂單是否可撤 vd1=.0vd2=.0vte.append("===================================================================================")MyUseVar.MyPostion.LongPostion,MyUseVar.MyPostion.LongYDPostion,MyUseVar.MyPostion.LongFrozen,\vd1,MyUseVar.MyPostion.ShortPostion,MyUseVar.MyPostion.ShortYDPostion,\MyUseVar.MyPostion.ShortFrozen,vd2 = vtv.GetPosition(MyUseVar.sInstrumentID,\MyUseVar.MyPostion.LongPostion,MyUseVar.MyPostion.LongYDPostion,\MyUseVar.MyPostion.LongFrozen,vd1,MyUseVar.MyPostion.ShortPostion,MyUseVar.MyPostion.ShortYDPostion,\MyUseVar.MyPostion.ShortFrozen,vd2)vte.append("{6} 多頭倉(cāng)位:{0} 昨倉(cāng):{1} 凍結(jié)倉(cāng)位:{2} 空頭倉(cāng)位:{3} 昨倉(cāng):{4} 凍結(jié)倉(cāng)位:{5}".\format(MyUseVar.MyPostion.LongPostion,MyUseVar.MyPostion.LongYDPostion,MyUseVar.MyPostion.LongFrozen,\MyUseVar.MyPostion.ShortPostion,MyUseVar.MyPostion.ShortYDPostion,\MyUseVar.MyPostion.ShortFrozen,MyUseVar.sInstrumentID))MyUseVar.vIsCanC = 0MyUseVar.vIsCanC1 = 0MyUseVar.vIsCanC2 = 0MyUseVar.vIsCanC3 = 0if (MyUseVar.MyPostion.LongOrder > 0 or MyUseVar.MyPostion.LongOrder1 > 0 orMyUseVar.MyPostion.ShortOrder > 0 or MyUseVar.MyPostion.ShortOrder1 > 0 ): #有訂單號(hào)時(shí) 判斷是否有可撤訂單if (MyUseVar.MyPostion.LongOrder>0):MyUseVar.vIsCanC = vtv.IsOrderOpen(MyUseVar.MyPostion.LongOrder,MyUseVar.vIsCanC);vte.append("LongOrder訂單:{0} 是否可撤:{1} (0 :不可撤 1:可撤)".format(MyUseVar.MyPostion.LongOrder,MyUseVar.vIsCanC))if (MyUseVar.MyPostion.LongOrder1>0):MyUseVar.vIsCanC1 = vtv.IsOrderOpen(MyUseVar.MyPostion.LongOrder1,MyUseVar.vIsCanC1);vte.append("LongOrder1訂單:{0} 是否可撤:{1} (0 :不可撤 1:可撤)".format(MyUseVar.MyPostion.LongOrder1,MyUseVar.vIsCanC1))if (MyUseVar.MyPostion.ShortOrder>0):MyUseVar.vIsCanC2 = vtv.IsOrderOpen(MyUseVar.MyPostion.ShortOrder,MyUseVar.vIsCanC2);vte.append("ShortOrder訂單:{0} 是否可撤:{1} (0 :不可撤 1:可撤)".format(MyUseVar.MyPostion.ShortOrder,MyUseVar.vIsCanC2))if (MyUseVar.MyPostion.ShortOrder1>0):MyUseVar.vIsCanC3 = vtv.IsOrderOpen(MyUseVar.MyPostion.ShortOrder1,MyUseVar.vIsCanC3);vte.append("ShortOrder1訂單:{0} 是否可撤:{1} (0 :不可撤 1:可撤)".format(MyUseVar.MyPostion.ShortOrder1,MyUseVar.vIsCanC3))#結(jié)束判斷訂單是否可撤if (MyUseVar.vIsCanC==1 or MyUseVar.vIsCanC1==1 or MyUseVar.vIsCanC2==1 or MyUseVar.vIsCanC3==1 ):MyUseVar.vloop = 1else:MyUseVar.vloop = 4#結(jié)束vloop=0 步驟if (MyUseVar.vloop==1): #有訂單可撤時(shí) 等待時(shí)間MyUseVar.vWaitInCancle = MyUseVar.vWaitInCancle +1if (MyUseVar.vWaitInCancle>=MyUseVar.vWaitCancleInt):MyUseVar.vWaitInCancle = 0MyUseVar.vloop = 2#結(jié)束判斷撤單后時(shí)間間隔#結(jié)束vloop=1 步驟if (MyUseVar.vloop==2): #有訂單可撤 撤單if (MyUseVar.vIsCanC==1): #longorder可撤vtv.CancelOrder(MyUseVar.MyPostion.LongOrder, MyUseVar.vIsCanC)vte.append("LongOrder訂單:{0} 空頭撤單 狀態(tài):{1}【0:撤單成功 其它:撤單不成功】".format(MyUseVar.MyPostion.LongOrder,MyUseVar.vIsCanC))if (MyUseVar.vIsCanC1==1): #longorder可撤vtv.CancelOrder(MyUseVar.MyPostion.LongOrder1, MyUseVar.vIsCanC)vte.append("LongOrder1訂單:{0} 空頭撤單 狀態(tài):{1}【0:撤單成功 其它:撤單不成功】".format(MyUseVar.MyPostion.LongOrder1,MyUseVar.vIsCanC))if (MyUseVar.vIsCanC2==1): #longorder可撤vtv.CancelOrder(MyUseVar.MyPostion.ShortOrder, MyUseVar.vIsCanC)vte.append("ShortOrder訂單:{0} 空頭撤單 狀態(tài):{1}【0:撤單成功 其它:撤單不成功】".format(MyUseVar.MyPostion.ShortOrder,MyUseVar.vIsCanC))if (MyUseVar.vIsCanC3==1): #longorder可撤vtv.CancelOrder(MyUseVar.MyPostion.ShortOrder1, MyUseVar.vIsCanC)vte.append("ShortOrder1訂單:{0} 空頭撤單 狀態(tài):{1}【0:撤單成功 其它:撤單不成功】".format(MyUseVar.MyPostion.ShortOrder1,MyUseVar.vIsCanC))MyUseVar.vloop=3#有訂單可撤 撤單結(jié)束 vloop==2if (MyUseVar.vloop==3): #有訂單可撤時(shí) 等待時(shí)間MyUseVar.vWaitInCancle = MyUseVar.vWaitInCancle +1if (MyUseVar.vWaitInCancle>=MyUseVar.vWaitCancleInt):MyUseVar.vWaitInCancle = 0MyUseVar.vloop = 4#結(jié)束判斷撤單后時(shí)間間隔#結(jié)束vloop=1 步驟if (MyUseVar.vloop==4): #循環(huán)開平倉(cāng)開始 random.randint(1,10)vrandtvol = random.randint(1,MyUseVar.vVolT) # 產(chǎn)生隨機(jī)開平倉(cāng)手?jǐn)?shù)量#==================多頭開平倉(cāng)操作=================================if (MyUseVar.MyPostion.LongPostion>0 and MyUseVar.MyPostion.LongPostion<vrandtvol):if (MyUseVar.MyPostion.LongOrderFlag == 1 ) :#上次平倉(cāng)vrandvol = random.randint(1,MyUseVar.MyPostion.LongPostion); # 產(chǎn)生隨機(jī)開平倉(cāng)手?jǐn)?shù)量MyUseVar.MyPostion.LongOrder, MyUseVar.MyPostion.LongOrder1 = vtv.Sell(MyUseVar.sInstrumentID, vrandvol,MyUseVar.vMyBidPrice, MyUseVar.MyPostion.LongOrder, MyUseVar.MyPostion.LongOrder1)vte.append("訂單:{0} 訂單:{2} 繼續(xù)平多頭倉(cāng)位:{1} 價(jià)格:{3:.2f}".format(MyUseVar.MyPostion.LongOrder,vrandvol, MyUseVar.MyPostion.LongOrder1,MyUseVar.vMyBidPrice))else: # MyPostion.LongOrderFlag != 1時(shí)vrandvol = random.randint(1,MyUseVar.vVolT); # 產(chǎn)生隨機(jī)開平倉(cāng)手?jǐn)?shù)量MyUseVar.MyPostion.LongOrder = vtv.Buy(MyUseVar.sInstrumentID, vrandvol,MyUseVar.vMyAskPrice, MyUseVar.MyPostion.LongOrder)vte.append("訂單:{0} 繼續(xù)多頭買開倉(cāng):{1} 價(jià)格:{2:.2f}".format(MyUseVar.MyPostion.LongOrder,vrandvol,MyUseVar.vMyAskPrice))#結(jié)束 上次平倉(cāng) MyPostion.LongOrderFlag = 1else: # 條件:MyPostion.LongPostion>0 and MyPostion.LongPostion<vrandtvol不成立 時(shí)if (MyUseVar.MyPostion.LongPostion>vrandtvol):# 持倉(cāng)量多 平多頭多余倉(cāng)位vrandvol = random.randint(1,vrandtvol);MyUseVar.MyPostion.LongOrder, MyUseVar.MyPostion.LongOrder1 = vtv.Sell(MyUseVar.sInstrumentID, vrandvol,MyUseVar.vMyBidPrice,MyUseVar.MyPostion.LongOrder, MyUseVar.MyPostion.LongOrder1)vte.append("訂單:{0} 訂單:{2} 平多頭多余倉(cāng)位:{1} 價(jià)格:{3:.2f}".format(MyUseVar.MyPostion.LongOrder,vrandvol, MyUseVar.MyPostion.LongOrder1,MyUseVar.vMyBidPrice))# 結(jié)束 MyPostion.LongPostion>vrandtvolif (MyUseVar.MyPostion.LongPostion<=0): #無(wú)持倉(cāng)時(shí)vrandvol = random.randint(1,MyUseVar.vVolT);MyUseVar.MyPostion.LongOrder = vtv.Buy(MyUseVar.sInstrumentID, vrandvol ,MyUseVar.vMyAskPrice, MyUseVar.MyPostion.LongOrder)vte.append("訂單:{0} 多頭買開倉(cāng):{1} 價(jià)格:{2:.2f}".format(MyUseVar.MyPostion.LongOrder,vrandvol,MyUseVar.vMyAskPrice ))# 結(jié)束 無(wú)持倉(cāng)時(shí)if ((MyUseVar.MyPostion.LongPostion<=vrandtvol) and (MyUseVar.MyPostion.LongPostion>0)):vrandvol = random.randint(1,MyUseVar.MyPostion.LongPostion);MyUseVar.MyPostion.LongOrder, MyUseVar.MyPostion.LongOrder1 = vtv.Sell(MyUseVar.sInstrumentID, vrandvol,MyUseVar.vMyBidPrice, MyUseVar.MyPostion.LongOrder, MyUseVar.MyPostion.LongOrder1)MyUseVar.MyPostion.LongOrderFlag = 1;vte.append("訂單:{0} 訂單:{2} 多頭平倉(cāng):{1} 價(jià)格:{3:.2f}".format(MyUseVar.MyPostion.LongOrder,vrandvol , MyUseVar.MyPostion.LongOrder1,MyUseVar.vMyBidPrice))# 結(jié)束 持倉(cāng)時(shí)#結(jié)束 (MyPostion.LongPostion>0 and MyPostion.LongPostion<vrandtvol):#==================多頭開平倉(cāng)操作=================================#==================空頭開平倉(cāng)操作=================================if (MyUseVar.MyPostion.ShortPostion>0 and MyUseVar.MyPostion.ShortPostion<vrandtvol):if (MyUseVar.MyPostion.ShortOrderFlag == 1 ) :#上次平倉(cāng)vrandvol = random.randint(1,MyUseVar.MyPostion.ShortPostion); # 產(chǎn)生隨機(jī)開平倉(cāng)手?jǐn)?shù)量MyUseVar.MyPostion.ShortOrder, MyUseVar.MyPostion.ShortOrder1 = vtv.Cover(MyUseVar.sInstrumentID, vrandvol,MyUseVar.vMyAskPrice, MyUseVar.MyPostion.ShortOrder, MyUseVar.MyPostion.ShortOrder1)vte.append("訂單:{0} 訂單:{2} 繼續(xù)平空頭倉(cāng)位:{1} 價(jià)格:{3:.2f}".format(MyUseVar.MyPostion.ShortOrder,vrandvol, MyUseVar.MyPostion.ShortOrder1,MyUseVar.vMyAskPrice))else: # MyPostion.ShortOrderFlag != 1時(shí)vrandvol = random.randint(1,MyUseVar.vVolT); # 產(chǎn)生隨機(jī)開平倉(cāng)手?jǐn)?shù)量MyUseVar.MyPostion.ShortOrder = vtv.Short(MyUseVar.sInstrumentID, vrandvol,MyUseVar.vMyBidPrice, MyUseVar.MyPostion.ShortOrder)vte.append("訂單:{0} 繼續(xù)空頭賣開倉(cāng):{1} 價(jià)格:{2:.2f}".format(MyUseVar.MyPostion.ShortOrder,vrandvol,MyUseVar.vMyBidPrice))#結(jié)束 上次平倉(cāng) MyPostion.ShortOrderFlag = 1else: # 條件:MyPostion.ShortPostion>0 and MyPostion.ShortPostion<vrandtvol不成立 時(shí)if (MyUseVar.MyPostion.ShortPostion>vrandtvol):# 持倉(cāng)量多 平多頭多余倉(cāng)位vrandvol = random.randint(1,vrandtvol);MyUseVar.MyPostion.ShortOrder, MyUseVar.MyPostion.ShortOrder1 = vtv.Cover(MyUseVar.sInstrumentID, vrandvol,MyUseVar.vMyAskPrice,MyUseVar.MyPostion.ShortOrder, MyUseVar.MyPostion.ShortOrder1)vte.append("訂單:{0} 訂單:{2} 平空頭多余倉(cāng)位:{1} 價(jià)格:{3:.2f}".format(MyUseVar.MyPostion.ShortOrder,vrandvol, MyUseVar.MyPostion.ShortOrder1,MyUseVar.vMyAskPrice))# 結(jié)束 MyPostion.ShortPostion>vrandtvolif (MyUseVar.MyPostion.ShortPostion<=0): #無(wú)持倉(cāng)時(shí)vrandvol = random.randint(1,MyUseVar.vVolT);MyUseVar.MyPostion.ShortOrder = vtv.Short(MyUseVar.sInstrumentID, vrandvol ,MyUseVar.vMyBidPrice, MyUseVar.MyPostion.ShortOrder)vte.append("訂單:{0} 空頭賣開倉(cāng):{1} 價(jià)格:{2:.2f}".format(MyUseVar.MyPostion.ShortOrder,vrandvol,MyUseVar.vMyBidPrice ))# 結(jié)束 無(wú)持倉(cāng)時(shí)if ((MyUseVar.MyPostion.ShortPostion<=vrandtvol) and (MyUseVar.MyPostion.ShortPostion>0)):vrandvol = random.randint(1,MyUseVar.MyPostion.ShortPostion);MyUseVar.MyPostion.ShortOrder, MyUseVar.MyPostion.ShortOrder1 = vtv.Cover(MyUseVar.sInstrumentID, vrandvol,MyUseVar.vMyAskPrice, MyUseVar.MyPostion.ShortOrder, MyUseVar.MyPostion.ShortOrder1)MyUseVar.MyPostion.ShortOrderFlag = 1;vte.append("訂單:{0} 訂單:{2} 空頭平倉(cāng):{1} 價(jià)格:{3:.2f}".format(MyUseVar.MyPostion.ShortOrder,vrandvol , MyUseVar.MyPostion.ShortOrder1,MyUseVar.vMyAskPrice))# 結(jié)束 持倉(cāng)時(shí)#結(jié)束 (MyPostion.ShortPostion>0 and MyPostion.ShortPostion<vrandtvol):#==================空頭開平倉(cāng)操作=================================MyUseVar.vloop = 5#結(jié)束循環(huán)開平倉(cāng) vloop=4 步驟if (MyUseVar.vloop==5): #有等待時(shí)間MyUseVar.vWaitInOrder = MyUseVar.vWaitInOrder +1if (MyUseVar.vWaitInOrder>=MyUseVar.vWaitOrderInt):MyUseVar.vWaitInOrder = 0MyUseVar.vloop = 0vte.append("===================================================================================")#結(jié)束時(shí)間間隔#結(jié)束vloop=5 步驟 pass#try:#except BaseException as e:# traceback.print_exc()#=============OnTmr()===================以上代碼為定時(shí)刷新賬戶資金、持倉(cāng)盈虧數(shù)據(jù)及循環(huán)開平倉(cāng)操作代碼====================================================if __name__ == "__main__":app = QApplication([])#sys.argv#MainWindow = QtWidgets.QMainWindow()Mui = Ui_UiMainWindow()Mui.ui.show()Mui.ui.textEdit_3.append("QQ:426075")tvapi1 = win32com.client.DispatchWithEvents("TVQhtICtpClientAPI.com.1",myevents) #創(chuàng)建CTPCOM組件實(shí)例 并將事件回調(diào)映射到自定義類事件中sys.exit(app.exec_())#app.exec_() # -*- coding: mbcs -*- # Created by makepy.py version 0.5.01 # By python version 3.10.1 (tags/v3.10.1:2cd268a, Dec 6 2021, 19:10:37) [MSC v.1929 64 bit (AMD64)] # From type library 'TopViewQHTCtpCom.dll' # On Mon Jan 16 09:54:20 2023 '' makepy_version = '0.5.01' python_version = 0x30a01f0import win32com.client.CLSIDToClass, pythoncom, pywintypes import win32com.client.util from pywintypes import IID from win32com.client import Dispatch# The following 3 lines may need tweaking for the particular server # Candidates are pythoncom.Missing, .Empty and .ArgNotFound defaultNamedOptArg=pythoncom.Empty defaultNamedNotOptArg=pythoncom.Empty defaultUnnamedArg=pythoncom.EmptyCLSID = IID('{22113AE6-06DA-4875-AE8A-1F4AE4219D3B}') MajorVersion = 1 MinorVersion = 0 LibraryFlags = 8 LCID = 0x0from win32com.client import DispatchBaseClass class ITVQhtICtpClientAPI(DispatchBaseClass):CLSID = IID('{FD3E2400-1A18-45E4-8DAF-DE8840F22C8D}')coclass_clsid = IID('{4F356EF1-932E-48D1-B7A4-CFDE79752627}')def About(self):return self._oleobj_.InvokeTypes(20, LCID, 1, (24, 0), (),)def AppendExchangeTradeTimes(self, ExchangeID=defaultNamedNotOptArg, InstrumentID=defaultNamedNotOptArg, hour=defaultNamedNotOptArg, minute=defaultNamedNotOptArg, TradeTimes=defaultNamedNotOptArg, Flag=defaultNamedNotOptArg, InfoID=pythoncom.Missing, InfoMsg=pythoncom.Missing):return self._ApplyTypes_(40, 1, (24, 0), ((8, 1), (8, 1), (3, 1), (3, 1), (3, 1), (3, 1), (16387, 2), (16392, 2)), 'AppendExchangeTradeTimes', None,ExchangeID, InstrumentID, hour, minute, TradeTimes, Flag, InfoID, InfoMsg)def Buy(self, pszInstrumentID=defaultNamedNotOptArg, Volume=defaultNamedNotOptArg, Price=defaultNamedNotOptArg, OrderID=pythoncom.Missing):return self._ApplyTypes_(6, 1, (24, 0), ((8, 1), (3, 1), (5, 1), (16387, 2)), 'Buy', None,pszInstrumentID, Volume, Price, OrderID)def CancelOrder(self, OrderID=defaultNamedNotOptArg, Status=pythoncom.Missing):return self._ApplyTypes_(2, 1, (24, 0), ((3, 1), (16387, 2)), 'CancelOrder', None,OrderID, Status)def Cover(self, pszInstrumentID=defaultNamedNotOptArg, Volume=defaultNamedNotOptArg, Price=defaultNamedNotOptArg, OrderID=pythoncom.Missing, OrderID1=pythoncom.Missing):return self._ApplyTypes_(8, 1, (24, 0), ((8, 1), (3, 1), (5, 1), (16387, 2), (16387, 2)), 'Cover', None,pszInstrumentID, Volume, Price, OrderID, OrderID1)def CreateBars(self, InstrumentID=defaultNamedNotOptArg, Period=defaultNamedNotOptArg, Counts=pythoncom.Missing, IsOk=pythoncom.Missing):return self._ApplyTypes_(32, 1, (24, 0), ((8, 1), (3, 1), (16387, 2), (16387, 2)), 'CreateBars', None,InstrumentID, Period, Counts, IsOk)def DefMACD(self, InstrumentID=defaultNamedNotOptArg, Period=defaultNamedNotOptArg, Fast=defaultNamedNotOptArg, Slow=defaultNamedNotOptArg, Signal=defaultNamedNotOptArg, Diff=pythoncom.Missing, Dea=pythoncom.Missing):return self._ApplyTypes_(38, 1, (24, 0), ((8, 1), (3, 1), (3, 1), (3, 1), (3, 1), (16389, 2), (16389, 2)), 'DefMACD', None,InstrumentID, Period, Fast, Slow, Signal, Diff, Dea)def DeleteBars(self, InstrumentID=defaultNamedNotOptArg, Period=defaultNamedNotOptArg, IsOk=pythoncom.Missing):return self._ApplyTypes_(33, 1, (24, 0), ((8, 1), (3, 1), (16387, 2)), 'DeleteBars', None,InstrumentID, Period, IsOk)def DeleteExchangeTradeTimes(self, ExchangeID=defaultNamedNotOptArg, InstrumentID=defaultNamedNotOptArg, InfoID=pythoncom.Missing, InfoMsg=pythoncom.Missing):return self._ApplyTypes_(41, 1, (24, 0), ((8, 1), (8, 1), (16387, 2), (16392, 2)), 'DeleteExchangeTradeTimes', None,ExchangeID, InstrumentID, InfoID, InfoMsg)def EMA(self, InstrumentID=defaultNamedNotOptArg, Period=defaultNamedNotOptArg, Counts=defaultNamedNotOptArg, EMA=pythoncom.Missing):return self._ApplyTypes_(35, 1, (24, 0), ((8, 1), (3, 1), (3, 1), (16389, 2)), 'EMA', None,InstrumentID, Period, Counts, EMA)def Free(self):return self._oleobj_.InvokeTypes(22, LCID, 1, (24, 0), (),)def GetAPIVersion(self):# Result is a Unicode objectreturn self._oleobj_.InvokeTypes(3, LCID, 1, (8, 0), (),)def GetAccount(self, PreBalance=pythoncom.Missing, Balance=pythoncom.Missing, PreMargin=pythoncom.Missing, Available=pythoncom.Missing, WithdrawQuota=pythoncom.Missing, ExchangeMargin=pythoncom.Missing, CloseProfit=pythoncom.Missing, PositionProfit=pythoncom.Missing):return self._ApplyTypes_(14, 1, (24, 0), ((16389, 2), (16389, 2), (16389, 2), (16389, 2), (16389, 2), (16389, 2), (16389, 2), (16389, 2)), 'GetAccount', None,PreBalance, Balance, PreMargin, Available, WithdrawQuota, ExchangeMargin, CloseProfit, PositionProfit)def GetBars(self, InstrumentID=defaultNamedNotOptArg, Period=defaultNamedNotOptArg, index=defaultNamedNotOptArg, Max=pythoncom.Missing, Open=pythoncom.Missing, Close=pythoncom.Missing, Hight=pythoncom.Missing, Low=pythoncom.Missing, Volume=pythoncom.Missing, Counts=pythoncom.Missing, UpdateTime=pythoncom.Missing):return self._ApplyTypes_(39, 1, (24, 0), ((8, 1), (3, 1), (3, 1), (16387, 2), (16389, 2), (16389, 2), (16389, 2), (16389, 2), (16387, 2), (16387, 2), (16392, 2)), 'GetBars', None,InstrumentID, Period, index, Max, Open, Close, Hight, Low, Volume, Counts, UpdateTime)def GetHisOrderList(self, InstrumentID=defaultNamedNotOptArg, GetFlag=pythoncom.Missing):return self._ApplyTypes_(18, 1, (24, 0), ((8, 1), (16387, 2)), 'GetHisOrderList', None,InstrumentID, GetFlag)def GetInstrumentInfo(self, InstrumentID=defaultNamedNotOptArg, Multiply=pythoncom.Missing, PriceUnit=pythoncom.Missing, MarginRate=pythoncom.Missing, ExpireDate=pythoncom.Missing):return self._ApplyTypes_(12, 1, (24, 0), ((8, 1), (16389, 2), (16389, 2), (16389, 2), (16392, 2)), 'GetInstrumentInfo', None,InstrumentID, Multiply, PriceUnit, MarginRate, ExpireDate)def GetInstrumentInfoOut(self, InstrumentID=defaultNamedNotOptArg, Multiply=pythoncom.Missing, PriceUnit=pythoncom.Missing, MarginRate=pythoncom.Missing, ExpireDate=pythoncom.Missing):return self._ApplyTypes_(37, 1, (24, 0), ((8, 1), (16389, 2), (16389, 2), (16389, 2), (16392, 2)), 'GetInstrumentInfoOut', None,InstrumentID, Multiply, PriceUnit, MarginRate, ExpireDate)def GetInstrumentRatio(self, InstrumentID=defaultNamedNotOptArg, OpenRatioByMoney=pythoncom.Missing, OpenRatioByVolume=pythoncom.Missing, CloseRatioByMoney=pythoncom.Missing, CloseRatioByVolume=pythoncom.Missing, CloseTodayRatioByMoney=pythoncom.Missing, CloseTodayRatioByVolume=pythoncom.Missing):return self._ApplyTypes_(26, 1, (24, 0), ((8, 1), (16389, 2), (16389, 2), (16389, 2), (16389, 2), (16389, 2), (16389, 2)), 'GetInstrumentRatio', None,InstrumentID, OpenRatioByMoney, OpenRatioByVolume, CloseRatioByMoney, CloseRatioByVolume, CloseTodayRatioByMoney, CloseTodayRatioByVolume)def GetMarketData(self, InstrumentID=defaultNamedNotOptArg, YdClose=pythoncom.Missing, YdSettlement=pythoncom.Missing, Open=pythoncom.Missing, Last=pythoncom.Missing, Bid1=pythoncom.Missing, Ask1=pythoncom.Missing, Bid1Volume=pythoncom.Missing, Ask1Volume=pythoncom.Missing, Highest=pythoncom.Missing, Lowest=pythoncom.Missing, TradedVolume=pythoncom.Missing, TradedAmmount=pythoncom.Missing):return self._ApplyTypes_(23, 1, (24, 0), ((8, 1), (16389, 2), (16389, 2), (16389, 2), (16389, 2), (16389, 2), (16389, 2), (16387, 2), (16387, 2), (16389, 2), (16389, 2), (16387, 2), (16389, 2)), 'GetMarketData', None,InstrumentID, YdClose, YdSettlement, Open, Last, Bid1, Ask1, Bid1Volume, Ask1Volume, Highest, Lowest, TradedVolume, TradedAmmount)def GetOutExchangeTradeTimes(self, ExchangeID=defaultNamedNotOptArg, InstrumentID=defaultNamedNotOptArg):return self._oleobj_.InvokeTypes(42, LCID, 1, (24, 0), ((8, 1), (8, 1)),ExchangeID, InstrumentID)def GetPosition(self, InstrumentID=defaultNamedNotOptArg, LongPosition=pythoncom.Missing, LongYdPosition=pythoncom.Missing, LongFrozen=pythoncom.Missing, LongPositionPrice=pythoncom.Missing, ShortPosition=pythoncom.Missing, ShortYdPosition=pythoncom.Missing, ShortFrozen=pythoncom.Missing, ShortPositionPrice=pythoncom.Missing):return self._ApplyTypes_(17, 1, (24, 0), ((8, 1), (16387, 2), (16387, 2), (16387, 2), (16389, 2), (16387, 2), (16387, 2), (16387, 2), (16389, 2)), 'GetPosition', None,InstrumentID, LongPosition, LongYdPosition, LongFrozen, LongPositionPrice, ShortPosition, ShortYdPosition, ShortFrozen, ShortPositionPrice)def GetPositionDetail(self, InstrumentID=defaultNamedNotOptArg):return self._oleobj_.InvokeTypes(13, LCID, 1, (24, 0), ((8, 1),),InstrumentID)def GetPositionPlus(self, InstrumentID=defaultNamedNotOptArg, LongPosition=pythoncom.Missing, LongYdPosition=pythoncom.Missing, LongFrozen=pythoncom.Missing, LongSuspendPostion=pythoncom.Missing, LongPositionPrice=pythoncom.Missing, LongPositionProfit=pythoncom.Missing, ShortPosition=pythoncom.Missing, ShortYdPosition=pythoncom.Missing, ShortFrozen=pythoncom.Missing, ShortSuspendPostion=pythoncom.Missing, ShortPositionPrice=pythoncom.Missing, ShortPositionProfit=pythoncom.Missing, BidPrice=pythoncom.Missing, AskPrice=pythoncom.Missing):return self._ApplyTypes_(31, 1, (24, 0), ((8, 1), (16387, 2), (16387, 2), (16387, 2), (16387, 2), (16389, 2), (16389, 2), (16387, 2), (16387, 2), (16387, 2), (16387, 2), (16389, 2), (16389, 2), (16389, 2), (16389, 2)), 'GetPositionPlus', None,InstrumentID, LongPosition, LongYdPosition, LongFrozen, LongSuspendPostion, LongPositionPrice, LongPositionProfit, ShortPosition, ShortYdPosition, ShortFrozen, ShortSuspendPostion, ShortPositionPrice, ShortPositionProfit, BidPrice, AskPrice)def GetRealAccount(self, PreBalance=pythoncom.Missing, Balance=pythoncom.Missing, PreMargin=pythoncom.Missing, Available=pythoncom.Missing, WithdrawQuota=pythoncom.Missing, ExchangeMargin=pythoncom.Missing, CloseProfit=pythoncom.Missing, PositionProfit=pythoncom.Missing):return self._ApplyTypes_(27, 1, (24, 0), ((16389, 2), (16389, 2), (16389, 2), (16389, 2), (16389, 2), (16389, 2), (16389, 2), (16389, 2)), 'GetRealAccount', None,PreBalance, Balance, PreMargin, Available, WithdrawQuota, ExchangeMargin, CloseProfit, PositionProfit)def GetRealPosition(self, InstrumentID=defaultNamedNotOptArg, LongPosition=pythoncom.Missing, LongYdPosition=pythoncom.Missing, LongFrozen=pythoncom.Missing, LongPositionPrice=pythoncom.Missing, ShortPosition=pythoncom.Missing, ShortYdPosition=pythoncom.Missing, ShortFrozen=pythoncom.Missing, ShortPositionPrice=pythoncom.Missing):return self._ApplyTypes_(28, 1, (24, 0), ((8, 1), (16387, 2), (16387, 2), (16387, 2), (16389, 2), (16387, 2), (16387, 2), (16387, 2), (16389, 2)), 'GetRealPosition', None,InstrumentID, LongPosition, LongYdPosition, LongFrozen, LongPositionPrice, ShortPosition, ShortYdPosition, ShortFrozen, ShortPositionPrice)def GetTradeInfo(self, InstrumentID=defaultNamedNotOptArg):return self._oleobj_.InvokeTypes(15, LCID, 1, (24, 0), ((8, 1),),InstrumentID)def GetTradingDay(self):# Result is a Unicode objectreturn self._oleobj_.InvokeTypes(10, LCID, 1, (8, 0), (),)def IsOrderOpen(self, OrderID=defaultNamedNotOptArg, CanCacel=pythoncom.Missing):return self._ApplyTypes_(11, 1, (24, 0), ((3, 1), (16387, 2)), 'IsOrderOpen', None,OrderID, CanCacel)def LogOut(self):return self._oleobj_.InvokeTypes(21, LCID, 1, (24, 0), (),)def Login(self, vConfigIiniFile=defaultNamedNotOptArg, vuserid=defaultNamedNotOptArg, vpassword=defaultNamedNotOptArg, ErrorID=pythoncom.Missing, RegResultInfo=pythoncom.Missing):return self._ApplyTypes_(1, 1, (24, 0), ((8, 1), (8, 1), (8, 1), (16387, 2), (16392, 2)), 'Login', None,vConfigIiniFile, vuserid, vpassword, ErrorID, RegResultInfo)def MA(self, InstrumentID=defaultNamedNotOptArg, Period=defaultNamedNotOptArg, Counts=defaultNamedNotOptArg, MA=pythoncom.Missing):return self._ApplyTypes_(34, 1, (24, 0), ((8, 1), (3, 1), (3, 1), (16389, 2)), 'MA', None,InstrumentID, Period, Counts, MA)def MACD(self, InstrumentID=defaultNamedNotOptArg, Period=defaultNamedNotOptArg, Diff=pythoncom.Missing, Dea=pythoncom.Missing):return self._ApplyTypes_(36, 1, (24, 0), ((8, 1), (3, 1), (16389, 2), (16389, 2)), 'MACD', None,InstrumentID, Period, Diff, Dea)def PasswordUpdate(self, NewPassWord=defaultNamedNotOptArg):return self._oleobj_.InvokeTypes(24, LCID, 1, (24, 0), ((8, 1),),NewPassWord)def PlaceOrder(self, pszInstrumentID=defaultNamedNotOptArg, IsBuy=defaultNamedNotOptArg, IsOpen=defaultNamedNotOptArg, Volume=defaultNamedNotOptArg, Price=defaultNamedNotOptArg, OrderID=pythoncom.Missing):return self._ApplyTypes_(19, 1, (24, 0), ((8, 1), (3, 1), (3, 1), (3, 1), (5, 1), (16387, 2)), 'PlaceOrder', None,pszInstrumentID, IsBuy, IsOpen, Volume, Price, OrderID)def PrintOrderInfo(self):return self._oleobj_.InvokeTypes(25, LCID, 1, (24, 0), (),)def Sell(self, pszInstrumentID=defaultNamedNotOptArg, Volume=defaultNamedNotOptArg, Price=defaultNamedNotOptArg, OrderID=pythoncom.Missing, OrderID1=pythoncom.Missing):return self._ApplyTypes_(9, 1, (24, 0), ((8, 1), (3, 1), (5, 1), (16387, 2), (16387, 2)), 'Sell', None,pszInstrumentID, Volume, Price, OrderID, OrderID1)def SetOrderCloseMode(self, CloseMode=defaultNamedNotOptArg, SetOk=pythoncom.Missing):return self._ApplyTypes_(30, 1, (24, 0), ((3, 1), (16387, 2)), 'SetOrderCloseMode', None,CloseMode, SetOk)def SettlementInfoConfirm(self):return self._oleobj_.InvokeTypes(16, LCID, 1, (24, 0), (),)def Short(self, pszInstrumentID=defaultNamedNotOptArg, Volume=defaultNamedNotOptArg, Price=defaultNamedNotOptArg, OrderID=pythoncom.Missing):return self._ApplyTypes_(7, 1, (24, 0), ((8, 1), (3, 1), (5, 1), (16387, 2)), 'Short', None,pszInstrumentID, Volume, Price, OrderID)def SubscribeDepthMD(self, InstrumentID=defaultNamedNotOptArg):return self._oleobj_.InvokeTypes(29, LCID, 1, (24, 0), ((8, 1),),InstrumentID)def SubscribeMD(self, InstrumentID=defaultNamedNotOptArg):return self._oleobj_.InvokeTypes(4, LCID, 1, (24, 0), ((8, 1),),InstrumentID)def UnSubscribeMD(self, InstrumentID=defaultNamedNotOptArg):return self._oleobj_.InvokeTypes(5, LCID, 1, (24, 0), ((8, 1),),InstrumentID)_prop_map_get_ = {}_prop_map_put_ = {}def __iter__(self):"Return a Python iterator for this object"try:ob = self._oleobj_.InvokeTypes(-4,LCID,3,(13, 10),())except pythoncom.error:raise TypeError("This object does not support enumeration")return win32com.client.util.Iterator(ob, None)class _ITVQhtICtpClientAPIEvents:CLSID = CLSID_Sink = IID('{BF886C94-57F1-4532-B4A4-3ADA86317BDC}')coclass_clsid = IID('{4F356EF1-932E-48D1-B7A4-CFDE79752627}')_public_methods_ = [] # For COM Server support_dispid_to_func_ = {1 : "OnMarketData",2 : "OnEventsInfo",3 : "OnInstrumentStatus",4 : "OnTradeConnected",5 : "OnTradeDisconnected",6 : "OnMDConnected",7 : "OnMDDisconnected",8 : "OnOrder",9 : "OnTrade",10 : "OnOrderCanceled",11 : "OnOrderActionFailed",12 : "OnInitFinished",13 : "OnGetPositionDetail",14 : "OnGetInstrument",15 : "OnRspError",16 : "OnOutPosition",17 : "OnDepthMarketData",18 : "OnPushCancleOrder",19 : "OnRspQryOrder",20 : "OnRspQryTrade",21 : "OnOutProgress",22 : "OnOutBars",23 : "OnOutExchangeTradeTimes",}def __init__(self, oobj = None):if oobj is None:self._olecp = Noneelse:import win32com.server.utilfrom win32com.server.policy import EventHandlerPolicycpc=oobj._oleobj_.QueryInterface(pythoncom.IID_IConnectionPointContainer)cp=cpc.FindConnectionPoint(self.CLSID_Sink)cookie=cp.Advise(win32com.server.util.wrap(self, usePolicy=EventHandlerPolicy))self._olecp,self._olecp_cookie = cp,cookiedef __del__(self):try:self.close()except pythoncom.com_error:passdef close(self):if self._olecp is not None:cp,cookie,self._olecp,self._olecp_cookie = self._olecp,self._olecp_cookie,None,Nonecp.Unadvise(cookie)def _query_interface_(self, iid):import win32com.server.utilif iid==self.CLSID_Sink: return win32com.server.util.wrap(self)# Event Handlers# If you create handlers, they should have the following prototypes: # def OnMarketData(self, InstrumentID=defaultNamedNotOptArg, BidPrice1=defaultNamedNotOptArg, BidVolume1=defaultNamedNotOptArg, AskPrice1=defaultNamedNotOptArg # , AskVolume1=defaultNamedNotOptArg, OpenPrice=defaultNamedNotOptArg, HighestPrice=defaultNamedNotOptArg, LowestPrice=defaultNamedNotOptArg, LastPrice=defaultNamedNotOptArg # , OpenInterest=defaultNamedNotOptArg, Volume=defaultNamedNotOptArg, UpperLimitPrice=defaultNamedNotOptArg, LowerLimitPrice=defaultNamedNotOptArg, PreSettlementPrice=defaultNamedNotOptArg # , AveragePrice=defaultNamedNotOptArg, UpdateTime=defaultNamedNotOptArg, UpdateMilliSecond=defaultNamedNotOptArg): # def OnEventsInfo(self, InfoID=defaultNamedNotOptArg, MsgInfo=defaultNamedNotOptArg): # def OnInstrumentStatus(self, InstrumentID=defaultNamedNotOptArg, ExchangeID=defaultNamedNotOptArg, EnterTime=defaultNamedNotOptArg, NewState=defaultNamedNotOptArg): # def OnTradeConnected(self): # def OnTradeDisconnected(self): # def OnMDConnected(self): # def OnMDDisconnected(self): # def OnOrder(self, OrderID=defaultNamedNotOptArg, InstrumentID=defaultNamedNotOptArg, IsBuy=defaultNamedNotOptArg, IsOpen=defaultNamedNotOptArg # , Volume=defaultNamedNotOptArg, Price=defaultNamedNotOptArg, TradedVolume=defaultNamedNotOptArg, AvgTradePrice=defaultNamedNotOptArg, OrderStatus=defaultNamedNotOptArg # , OrderSysID=defaultNamedNotOptArg, BrokerOrderSeq=defaultNamedNotOptArg, OrderLocalID=defaultNamedNotOptArg, InsertTime=defaultNamedNotOptArg, ErrorID=defaultNamedNotOptArg # , ErrorMsg=defaultNamedNotOptArg, HedgeType=defaultNamedNotOptArg): # def OnTrade(self, OrderID=defaultNamedNotOptArg, OrderSysID=defaultNamedNotOptArg, OrderLocalID=defaultNamedNotOptArg, TradeID=defaultNamedNotOptArg # , InstrumentID=defaultNamedNotOptArg, IsBuy=defaultNamedNotOptArg, IsOpen=defaultNamedNotOptArg, Volume=defaultNamedNotOptArg, ThisTradePrice=defaultNamedNotOptArg # , TradeTime=defaultNamedNotOptArg, OrderStatus=defaultNamedNotOptArg): # def OnOrderCanceled(self, OrderID=defaultNamedNotOptArg, ErrorID=defaultNamedNotOptArg, ErrorMsg=defaultNamedNotOptArg): # def OnOrderActionFailed(self, OrderID=defaultNamedNotOptArg, ErrorID=defaultNamedNotOptArg, ErrorMsg=defaultNamedNotOptArg): # def OnInitFinished(self): # def OnGetPositionDetail(self, InstrumentID=defaultNamedNotOptArg, OpenDate=defaultNamedNotOptArg, OrderID=defaultNamedNotOptArg, TradeID=defaultNamedNotOptArg # , Direction=defaultNamedNotOptArg, Volume=defaultNamedNotOptArg, CloseVolume=defaultNamedNotOptArg, OpenPrice=defaultNamedNotOptArg, PositionProfitByDate=defaultNamedNotOptArg # , PositionProfitByTrade=defaultNamedNotOptArg, Margin=defaultNamedNotOptArg, LastSettlementPrice=defaultNamedNotOptArg, SettlementPrice=defaultNamedNotOptArg, CloseProfitByDate=defaultNamedNotOptArg # , CloseProfitByTrade=defaultNamedNotOptArg, CloseAmount=defaultNamedNotOptArg, TimeFirstVolume=defaultNamedNotOptArg, MarginRateByMoney=defaultNamedNotOptArg, MarginRateByVolume=defaultNamedNotOptArg): # def OnGetInstrument(self, ExchangeID=defaultNamedNotOptArg, InstrumentID=defaultNamedNotOptArg, ExchangeInstID=defaultNamedNotOptArg, InstrumentName=defaultNamedNotOptArg # , ProductClass=defaultNamedNotOptArg, MaxMarketOrderVolume=defaultNamedNotOptArg, MinMarketOrderVolume=defaultNamedNotOptArg, MaxLimitOrderVolume=defaultNamedNotOptArg, MinLimitOrderVolume=defaultNamedNotOptArg # , VolumeMultiple=defaultNamedNotOptArg, PriceTick=defaultNamedNotOptArg, ExpireDate=defaultNamedNotOptArg, IsTrading=defaultNamedNotOptArg, LongMarginRatio=defaultNamedNotOptArg # , ShortMarginRatio=defaultNamedNotOptArg, OptionsType=defaultNamedNotOptArg, ProductID=defaultNamedNotOptArg, CombinationType=defaultNamedNotOptArg, bIsLast=defaultNamedNotOptArg): # def OnRspError(self, ErrorID=defaultNamedNotOptArg, ErrorMsg=defaultNamedNotOptArg): # def OnOutPosition(self, InstrumentID=defaultNamedNotOptArg, LongPostion=defaultNamedNotOptArg, LongYDPostion=defaultNamedNotOptArg, LongFrozen=defaultNamedNotOptArg # , LongSuspendPostion=defaultNamedNotOptArg, LongPositionPrice=defaultNamedNotOptArg, LongProfit=defaultNamedNotOptArg, ShortPostion=defaultNamedNotOptArg, ShortYDPostion=defaultNamedNotOptArg # , ShortFrozen=defaultNamedNotOptArg, ShortSuspendPostion=defaultNamedNotOptArg, ShortPositionPrice=defaultNamedNotOptArg, ShortProfit=defaultNamedNotOptArg): # def OnDepthMarketData(self, InstrumentID=defaultNamedNotOptArg, BidPrice1=defaultNamedNotOptArg, BidVolume1=defaultNamedNotOptArg, AskPrice1=defaultNamedNotOptArg # , AskVolume1=defaultNamedNotOptArg, BidPrice2=defaultNamedNotOptArg, BidVolume2=defaultNamedNotOptArg, AskPrice2=defaultNamedNotOptArg, AskVolume2=defaultNamedNotOptArg # , BidPrice3=defaultNamedNotOptArg, BidVolume3=defaultNamedNotOptArg, AskPrice3=defaultNamedNotOptArg, AskVolume3=defaultNamedNotOptArg, BidPrice4=defaultNamedNotOptArg # , BidVolume4=defaultNamedNotOptArg, AskPrice4=defaultNamedNotOptArg, AskVolume4=defaultNamedNotOptArg, BidPrice5=defaultNamedNotOptArg, BidVolume5=defaultNamedNotOptArg # , AskPrice5=defaultNamedNotOptArg, AskVolume5=defaultNamedNotOptArg, OpenPrice=defaultNamedNotOptArg, HighestPrice=defaultNamedNotOptArg, LowestPrice=defaultNamedNotOptArg # , LastPrice=defaultNamedNotOptArg, OpenInterest=defaultNamedNotOptArg, Volume=defaultNamedNotOptArg, UpperLimitPrice=defaultNamedNotOptArg, LowerLimitPrice=defaultNamedNotOptArg # , PreSettlementPrice=defaultNamedNotOptArg, AveragePrice=defaultNamedNotOptArg, UpdateTime=defaultNamedNotOptArg, UpdateMilliSecond=defaultNamedNotOptArg): # def OnPushCancleOrder(self, OrderID=defaultNamedNotOptArg, InsertTime=defaultNamedNotOptArg, InstrumentID=defaultNamedNotOptArg, IsBuy=defaultNamedNotOptArg # , IsOpen=defaultNamedNotOptArg, Volume=defaultNamedNotOptArg, TradedVolume=defaultNamedNotOptArg, Price=defaultNamedNotOptArg, OrderStatus=defaultNamedNotOptArg): # def OnRspQryOrder(self, OrderID=defaultNamedNotOptArg, InstrumentID=defaultNamedNotOptArg, IsBuy=defaultNamedNotOptArg, IsOpen=defaultNamedNotOptArg # , Volume=defaultNamedNotOptArg, Price=defaultNamedNotOptArg, TradedVolume=defaultNamedNotOptArg, AvgTradePrice=defaultNamedNotOptArg, OrderStatus=defaultNamedNotOptArg # , OrderSysID=defaultNamedNotOptArg, BrokerOrderSeq=defaultNamedNotOptArg, OrderLocalID=defaultNamedNotOptArg, InsertTime=defaultNamedNotOptArg, ErrorID=defaultNamedNotOptArg # , ErrorMsg=defaultNamedNotOptArg, HedgeType=defaultNamedNotOptArg): # def OnRspQryTrade(self, OrderID=defaultNamedNotOptArg, TradeID=defaultNamedNotOptArg, InstrumentID=defaultNamedNotOptArg, OrderSysID=defaultNamedNotOptArg # , OrderLocalID=defaultNamedNotOptArg, BrokerOrderSeq=defaultNamedNotOptArg, IsBuy=defaultNamedNotOptArg, IsOpen=defaultNamedNotOptArg, Volume=defaultNamedNotOptArg # , Price=defaultNamedNotOptArg, TradeDate=defaultNamedNotOptArg, TradeTime=defaultNamedNotOptArg): # def OnOutProgress(self, ProFlag=defaultNamedNotOptArg, MaxInt=defaultNamedNotOptArg, Position=defaultNamedNotOptArg): # def OnOutBars(self, InstrumentID=defaultNamedNotOptArg, Period=defaultNamedNotOptArg, Counts=defaultNamedNotOptArg, Hight=defaultNamedNotOptArg # , Low=defaultNamedNotOptArg, Open=defaultNamedNotOptArg, Close=defaultNamedNotOptArg, CreatTime=defaultNamedNotOptArg): # def OnOutExchangeTradeTimes(self, ExchangeID=defaultNamedNotOptArg, InstrumentID=defaultNamedNotOptArg, OpenTime=defaultNamedNotOptArg, CloseTime=defaultNamedNotOptArg # , TradeMins=defaultNamedNotOptArg, Flag=defaultNamedNotOptArg):from win32com.client import CoClassBaseClass # This CoClass is known by the name 'TVQhtICtpClientAPI.com.1' class TVQhtICtpClientAPI(CoClassBaseClass): # A CoClassCLSID = IID('{4F356EF1-932E-48D1-B7A4-CFDE79752627}')coclass_sources = [_ITVQhtICtpClientAPIEvents,]default_source = _ITVQhtICtpClientAPIEventscoclass_interfaces = [ITVQhtICtpClientAPI,]default_interface = ITVQhtICtpClientAPIITVQhtICtpClientAPI_vtables_dispatch_ = 1 ITVQhtICtpClientAPI_vtables_ = [(( 'Login' , 'vConfigIiniFile' , 'vuserid' , 'vpassword' , 'ErrorID' , 'RegResultInfo' , ), 1, (1, (), [ (8, 1, None, None) , (8, 1, None, None) , (8, 1, None, None) , (16387, 2, None, None) , (16392, 2, None, None) , ], 1 , 1 , 4 , 0 , 56 , (3, 0, None, None) , 0 , )),(( 'CancelOrder' , 'OrderID' , 'Status' , ), 2, (2, (), [ (3, 1, None, None) , (16387, 2, None, None) , ], 1 , 1 , 4 , 0 , 64 , (3, 0, None, None) , 0 , )),(( 'GetAPIVersion' , 'vVersion' , ), 3, (3, (), [ (16392, 10, None, None) , ], 1 , 1 , 4 , 0 , 72 , (3, 0, None, None) , 0 , )),(( 'SubscribeMD' , 'InstrumentID' , ), 4, (4, (), [ (8, 1, None, None) , ], 1 , 1 , 4 , 0 , 80 , (3, 0, None, None) , 0 , )),(( 'UnSubscribeMD' , 'InstrumentID' , ), 5, (5, (), [ (8, 1, None, None) , ], 1 , 1 , 4 , 0 , 88 , (3, 0, None, None) , 0 , )),(( 'Buy' , 'pszInstrumentID' , 'Volume' , 'Price' , 'OrderID' , ), 6, (6, (), [ (8, 1, None, None) , (3, 1, None, None) , (5, 1, None, None) , (16387, 2, None, None) , ], 1 , 1 , 4 , 0 , 96 , (3, 0, None, None) , 0 , )),(( 'Short' , 'pszInstrumentID' , 'Volume' , 'Price' , 'OrderID' , ), 7, (7, (), [ (8, 1, None, None) , (3, 1, None, None) , (5, 1, None, None) , (16387, 2, None, None) , ], 1 , 1 , 4 , 0 , 104 , (3, 0, None, None) , 0 , )),(( 'Cover' , 'pszInstrumentID' , 'Volume' , 'Price' , 'OrderID' , 'OrderID1' , ), 8, (8, (), [ (8, 1, None, None) , (3, 1, None, None) , (5, 1, None, None) , (16387, 2, None, None) , (16387, 2, None, None) , ], 1 , 1 , 4 , 0 , 112 , (3, 0, None, None) , 0 , )),(( 'Sell' , 'pszInstrumentID' , 'Volume' , 'Price' , 'OrderID' , 'OrderID1' , ), 9, (9, (), [ (8, 1, None, None) , (3, 1, None, None) , (5, 1, None, None) , (16387, 2, None, None) , (16387, 2, None, None) , ], 1 , 1 , 4 , 0 , 120 , (3, 0, None, None) , 0 , )),(( 'GetTradingDay' , 'TradingDay' , ), 10, (10, (), [ (16392, 10, None, None) , ], 1 , 1 , 4 , 0 , 128 , (3, 0, None, None) , 0 , )),(( 'IsOrderOpen' , 'OrderID' , 'CanCacel' , ), 11, (11, (), [ (3, 1, None, None) , (16387, 2, None, None) , ], 1 , 1 , 4 , 0 , 136 , (3, 0, None, None) , 0 , )),(( 'GetInstrumentInfo' , 'InstrumentID' , 'Multiply' , 'PriceUnit' , 'MarginRate' , 'ExpireDate' , ), 12, (12, (), [ (8, 1, None, None) , (16389, 2, None, None) , (16389, 2, None, None) , (16389, 2, None, None) , (16392, 2, None, None) , ], 1 , 1 , 4 , 0 , 144 , (3, 0, None, None) , 0 , )),(( 'GetPositionDetail' , 'InstrumentID' , ), 13, (13, (), [ (8, 1, None, None) , ], 1 , 1 , 4 , 0 , 152 , (3, 0, None, None) , 0 , )),(( 'GetAccount' , 'PreBalance' , 'Balance' , 'PreMargin' , 'Available' , 'WithdrawQuota' , 'ExchangeMargin' , 'CloseProfit' , 'PositionProfit' , ), 14, (14, (), [ (16389, 2, None, None) , (16389, 2, None, None) , (16389, 2, None, None) , (16389, 2, None, None) , (16389, 2, None, None) , (16389, 2, None, None) , (16389, 2, None, None) , (16389, 2, None, None) , ], 1 , 1 , 4 , 0 , 160 , (3, 0, None, None) , 0 , )),(( 'GetTradeInfo' , 'InstrumentID' , ), 15, (15, (), [ (8, 1, None, None) , ], 1 , 1 , 4 , 0 , 168 , (3, 0, None, None) , 0 , )),(( 'SettlementInfoConfirm' , ), 16, (16, (), [ ], 1 , 1 , 4 , 0 , 176 , (3, 0, None, None) , 0 , )),(( 'GetPosition' , 'InstrumentID' , 'LongPosition' , 'LongYdPosition' , 'LongFrozen' , 'LongPositionPrice' , 'ShortPosition' , 'ShortYdPosition' , 'ShortFrozen' , 'ShortPositionPrice' , ), 17, (17, (), [ (8, 1, None, None) , (16387, 2, None, None) , (16387, 2, None, None) , (16387, 2, None, None) , (16389, 2, None, None) , (16387, 2, None, None) , (16387, 2, None, None) , (16387, 2, None, None) , (16389, 2, None, None) , ], 1 , 1 , 4 , 0 , 184 , (3, 0, None, None) , 0 , )),(( 'GetHisOrderList' , 'InstrumentID' , 'GetFlag' , ), 18, (18, (), [ (8, 1, None, None) , (16387, 2, None, None) , ], 1 , 1 , 4 , 0 , 192 , (3, 0, None, None) , 0 , )),(( 'PlaceOrder' , 'pszInstrumentID' , 'IsBuy' , 'IsOpen' , 'Volume' , 'Price' , 'OrderID' , ), 19, (19, (), [ (8, 1, None, None) , (3, 1, None, None) , (3, 1, None, None) , (3, 1, None, None) , (5, 1, None, None) , (16387, 2, None, None) , ], 1 , 1 , 4 , 0 , 200 , (3, 0, None, None) , 0 , )),(( 'About' , ), 20, (20, (), [ ], 1 , 1 , 4 , 0 , 208 , (3, 0, None, None) , 0 , )),(( 'LogOut' , ), 21, (21, (), [ ], 1 , 1 , 4 , 0 , 216 , (3, 0, None, None) , 0 , )),(( 'Free' , ), 22, (22, (), [ ], 1 , 1 , 4 , 0 , 224 , (3, 0, None, None) , 0 , )),(( 'GetMarketData' , 'InstrumentID' , 'YdClose' , 'YdSettlement' , 'Open' , 'Last' , 'Bid1' , 'Ask1' , 'Bid1Volume' , 'Ask1Volume' , 'Highest' , 'Lowest' , 'TradedVolume' , 'TradedAmmount' , ), 23, (23, (), [ (8, 1, None, None) , (16389, 2, None, None) , (16389, 2, None, None) , (16389, 2, None, None) , (16389, 2, None, None) , (16389, 2, None, None) , (16389, 2, None, None) , (16387, 2, None, None) , (16387, 2, None, None) , (16389, 2, None, None) , (16389, 2, None, None) , (16387, 2, None, None) , (16389, 2, None, None) , ], 1 , 1 , 4 , 0 , 232 , (3, 0, None, None) , 0 , )),(( 'PasswordUpdate' , 'NewPassWord' , ), 24, (24, (), [ (8, 1, None, None) , ], 1 , 1 , 4 , 0 , 240 , (3, 0, None, None) , 0 , )),(( 'PrintOrderInfo' , ), 25, (25, (), [ ], 1 , 1 , 4 , 0 , 248 , (3, 0, None, None) , 0 , )),(( 'GetInstrumentRatio' , 'InstrumentID' , 'OpenRatioByMoney' , 'OpenRatioByVolume' , 'CloseRatioByMoney' , 'CloseRatioByVolume' , 'CloseTodayRatioByMoney' , 'CloseTodayRatioByVolume' , ), 26, (26, (), [ (8, 1, None, None) , (16389, 2, None, None) , (16389, 2, None, None) , (16389, 2, None, None) , (16389, 2, None, None) , (16389, 2, None, None) , (16389, 2, None, None) , ], 1 , 1 , 4 , 0 , 256 , (3, 0, None, None) , 0 , )),(( 'GetRealAccount' , 'PreBalance' , 'Balance' , 'PreMargin' , 'Available' , 'WithdrawQuota' , 'ExchangeMargin' , 'CloseProfit' , 'PositionProfit' , ), 27, (27, (), [ (16389, 2, None, None) , (16389, 2, None, None) , (16389, 2, None, None) , (16389, 2, None, None) , (16389, 2, None, None) , (16389, 2, None, None) , (16389, 2, None, None) , (16389, 2, None, None) , ], 1 , 1 , 4 , 0 , 264 , (3, 0, None, None) , 0 , )),(( 'GetRealPosition' , 'InstrumentID' , 'LongPosition' , 'LongYdPosition' , 'LongFrozen' , 'LongPositionPrice' , 'ShortPosition' , 'ShortYdPosition' , 'ShortFrozen' , 'ShortPositionPrice' , ), 28, (28, (), [ (8, 1, None, None) , (16387, 2, None, None) , (16387, 2, None, None) , (16387, 2, None, None) , (16389, 2, None, None) , (16387, 2, None, None) , (16387, 2, None, None) , (16387, 2, None, None) , (16389, 2, None, None) , ], 1 , 1 , 4 , 0 , 272 , (3, 0, None, None) , 0 , )),(( 'SubscribeDepthMD' , 'InstrumentID' , ), 29, (29, (), [ (8, 1, None, None) , ], 1 , 1 , 4 , 0 , 280 , (3, 0, None, None) , 0 , )),(( 'SetOrderCloseMode' , 'CloseMode' , 'SetOk' , ), 30, (30, (), [ (3, 1, None, None) , (16387, 2, None, None) , ], 1 , 1 , 4 , 0 , 288 , (3, 0, None, None) , 0 , )),(( 'GetPositionPlus' , 'InstrumentID' , 'LongPosition' , 'LongYdPosition' , 'LongFrozen' , 'LongSuspendPostion' , 'LongPositionPrice' , 'LongPositionProfit' , 'ShortPosition' , 'ShortYdPosition' , 'ShortFrozen' , 'ShortSuspendPostion' , 'ShortPositionPrice' , 'ShortPositionProfit' , 'BidPrice' , 'AskPrice' , ), 31, (31, (), [ (8, 1, None, None) , (16387, 2, None, None) , (16387, 2, None, None) , (16387, 2, None, None) , (16387, 2, None, None) , (16389, 2, None, None) , (16389, 2, None, None) , (16387, 2, None, None) , (16387, 2, None, None) , (16387, 2, None, None) , (16387, 2, None, None) , (16389, 2, None, None) , (16389, 2, None, None) , (16389, 2, None, None) , (16389, 2, None, None) , ], 1 , 1 , 4 , 0 , 296 , (3, 0, None, None) , 0 , )),(( 'CreateBars' , 'InstrumentID' , 'Period' , 'Counts' , 'IsOk' , ), 32, (32, (), [ (8, 1, None, None) , (3, 1, None, None) , (16387, 2, None, None) , (16387, 2, None, None) , ], 1 , 1 , 4 , 0 , 304 , (3, 0, None, None) , 0 , )),(( 'DeleteBars' , 'InstrumentID' , 'Period' , 'IsOk' , ), 33, (33, (), [ (8, 1, None, None) , (3, 1, None, None) , (16387, 2, None, None) , ], 1 , 1 , 4 , 0 , 312 , (3, 0, None, None) , 0 , )),(( 'MA' , 'InstrumentID' , 'Period' , 'Counts' , 'MA' , ), 34, (34, (), [ (8, 1, None, None) , (3, 1, None, None) , (3, 1, None, None) , (16389, 2, None, None) , ], 1 , 1 , 4 , 0 , 320 , (3, 0, None, None) , 0 , )),(( 'EMA' , 'InstrumentID' , 'Period' , 'Counts' , 'EMA' , ), 35, (35, (), [ (8, 1, None, None) , (3, 1, None, None) , (3, 1, None, None) , (16389, 2, None, None) , ], 1 , 1 , 4 , 0 , 328 , (3, 0, None, None) , 0 , )),(( 'MACD' , 'InstrumentID' , 'Period' , 'Diff' , 'Dea' , ), 36, (36, (), [ (8, 1, None, None) , (3, 1, None, None) , (16389, 2, None, None) , (16389, 2, None, None) , ], 1 , 1 , 4 , 0 , 336 , (3, 0, None, None) , 0 , )),(( 'GetInstrumentInfoOut' , 'InstrumentID' , 'Multiply' , 'PriceUnit' , 'MarginRate' , 'ExpireDate' , ), 37, (37, (), [ (8, 1, None, None) , (16389, 2, None, None) , (16389, 2, None, None) , (16389, 2, None, None) , (16392, 2, None, None) , ], 1 , 1 , 4 , 0 , 344 , (3, 0, None, None) , 0 , )),(( 'DefMACD' , 'InstrumentID' , 'Period' , 'Fast' , 'Slow' , 'Signal' , 'Diff' , 'Dea' , ), 38, (38, (), [ (8, 1, None, None) , (3, 1, None, None) , (3, 1, None, None) , (3, 1, None, None) , (3, 1, None, None) , (16389, 2, None, None) , (16389, 2, None, None) , ], 1 , 1 , 4 , 0 , 352 , (3, 0, None, None) , 0 , )),(( 'GetBars' , 'InstrumentID' , 'Period' , 'index' , 'Max' , 'Open' , 'Close' , 'Hight' , 'Low' , 'Volume' , 'Counts' , 'UpdateTime' , ), 39, (39, (), [ (8, 1, None, None) , (3, 1, None, None) , (3, 1, None, None) , (16387, 2, None, None) , (16389, 2, None, None) , (16389, 2, None, None) , (16389, 2, None, None) , (16389, 2, None, None) , (16387, 2, None, None) , (16387, 2, None, None) , (16392, 2, None, None) , ], 1 , 1 , 4 , 0 , 360 , (3, 0, None, None) , 0 , )),(( 'AppendExchangeTradeTimes' , 'ExchangeID' , 'InstrumentID' , 'hour' , 'minute' , 'TradeTimes' , 'Flag' , 'InfoID' , 'InfoMsg' , ), 40, (40, (), [ (8, 1, None, None) , (8, 1, None, None) , (3, 1, None, None) , (3, 1, None, None) , (3, 1, None, None) , (3, 1, None, None) , (16387, 2, None, None) , (16392, 2, None, None) , ], 1 , 1 , 4 , 0 , 368 , (3, 0, None, None) , 0 , )),(( 'DeleteExchangeTradeTimes' , 'ExchangeID' , 'InstrumentID' , 'InfoID' , 'InfoMsg' , ), 41, (41, (), [ (8, 1, None, None) , (8, 1, None, None) , (16387, 2, None, None) , (16392, 2, None, None) , ], 1 , 1 , 4 , 0 , 384 , (3, 0, None, None) , 0 , )),(( 'GetOutExchangeTradeTimes' , 'ExchangeID' , 'InstrumentID' , ), 42, (42, (), [ (8, 1, None, None) , (8, 1, None, None) , ], 1 , 1 , 4 , 0 , 392 , (3, 0, None, None) , 0 , )), ]RecordMap = {###'tagMyStructField1': '{00000000-0000-0000-0000-000000000000}', # Record disabled because it doesn't have a non-null GUID }CLSIDToClassMap = {'{BF886C94-57F1-4532-B4A4-3ADA86317BDC}' : _ITVQhtICtpClientAPIEvents,'{FD3E2400-1A18-45E4-8DAF-DE8840F22C8D}' : ITVQhtICtpClientAPI,'{4F356EF1-932E-48D1-B7A4-CFDE79752627}' : TVQhtICtpClientAPI, } CLSIDToPackageMap = {} win32com.client.CLSIDToClass.RegisterCLSIDsFromDict( CLSIDToClassMap ) VTablesToPackageMap = {} VTablesToClassMap = {'{FD3E2400-1A18-45E4-8DAF-DE8840F22C8D}' : 'ITVQhtICtpClientAPI', }NamesToIIDMap = {'_ITVQhtICtpClientAPIEvents' : '{BF886C94-57F1-4532-B4A4-3ADA86317BDC}','ITVQhtICtpClientAPI' : '{FD3E2400-1A18-45E4-8DAF-DE8840F22C8D}', }

總結(jié)

以上是生活随笔為你收集整理的上期技术CTPAPI封装COM组件ctp开放平台openctp环境7_24小时x64组件python_delphi调用演示程序的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

国产破处在线播放 | 特黄特黄的视频 | 九九免费在线观看 | 久久国产精品一区二区三区 | 在线观看成人国产 | 中文在线免费视频 | 久草久草久草久草 | 国产午夜精品在线 | 亚洲五月 | 婷婷久月 | 国产精品人成电影在线观看 | 久久精品精品电影网 | 91秒拍国产福利一区 | 美女视频久久黄 | 久久亚洲日本 | 日日操网站 | 又黄又刺激 | 91久久国产自产拍夜夜嗨 | 天天操天天综合网 | 99色资源 | 午夜精品久久久久久久爽 | 欧美亚洲专区 | 国产一区二区成人 | 国产流白浆高潮在线观看 | 伊人影院得得 | 三级免费黄色 | 久草精品电影 | 久久久久亚洲精品成人网小说 | av丝袜在线 | 欧美另类xxxxx | 欧美一级电影在线观看 | 亚洲视频精选 | 色噜噜在线观看 | 久久久久综合视频 | 97精品国产97久久久久久免费 | 99精品视频在线观看视频 | 91av99| 亚洲一区二区三区毛片 | 亚洲伊人网在线观看 | 亚洲理论电影 | 免费在线观看成人小视频 | 国产这里只有精品 | 午夜视频一区二区三区 | 夜夜天天干 | 最新日韩电影 | 久久久久久影视 | 综合黄色网 | 天天天插 | 色在线网 | 国产精品欧美一区二区三区不卡 | 国产精品 国内视频 | 韩日三级av| 国产精品入口麻豆www | 99久久精品国产亚洲 | 久久久久久久久久久久久久av | 夜夜操天天摸 | 色小说av| 亚洲伊人第一页 | 91视频首页 | 国产一区二区三区免费视频 | 天天操天天射天天舔 | 色天天综合久久久久综合片 | 日韩高清不卡在线 | 成人在线观看网址 | 福利网在线 | 美女免费视频黄 | 精品久久国产一区 | 少妇av网 | 99精品99| 天堂网在线视频 | 久久综合欧美精品亚洲一区 | 亚洲 欧洲 国产 精品 | 久久精品人人做人人综合老师 | 天天干天天射天天插 | 精品二区视频 | 久久精品激情 | 三级视频片 | 一区二区三区视频 | 日韩免费一级a毛片在线播放一级 | 中文字幕av全部资源www中文字幕在线观看 | 国产精品片| 中文字幕在线观看第二页 | 欧美日本在线视频 | 99性视频| 成人国产精品av | 久久久www | 国产成人一区二区三区免费看 | 韩国精品在线观看 | av在线播放观看 | 亚洲九九影院 | a级一a一级在线观看 | 亚洲日本黄色 | 五月花丁香婷婷 | 国产一区视频在线播放 | 成人h在线播放 | 亚洲视频六区 | 中文字幕乱码一区二区 | 国产一区二区在线播放 | 国产高清视频色在线www | 国产一线二线三线性视频 | 91av色 | 黄色三级网站在线观看 | 久久免费99精品久久久久久 | 99色资源| 99热这里只有精品在线观看 | 99精品视频网站 | 亚洲国产欧洲综合997久久, | 日韩精品一区二区电影 | 在线观看免费av网站 | 24小时日本在线www免费的 | 国产区网址 | 国际精品久久久久 | 91av在线免费看 | 色吧久久 | 亚洲 欧美 综合 在线 精品 | 午夜精品一区二区三区四区 | 友田真希x88av | 久久免费视频4 | 四虎免费av| 中文av在线播放 | 在线观看 亚洲 | 偷拍福利视频一区二区三区 | 精品国产99国产精品 | 91网免费看 | 久久午夜视频 | 911久久香蕉国产线看观看 | 日本中文字幕在线看 | 精品在线视频观看 | 日日夜夜av | 久久久久久欧美二区电影网 | www免费视频com | 国产不卡在线看 | 黄色网中文字幕 | 91成人精品一区在线播放69 | 国产精品麻豆99久久久久久 | 久久专区 | 麻花豆传媒一二三产区 | 一区二区三区四区精品 | 日韩免费视频播放 | 国产精品2019 | 麻豆播放 | 九九视频在线 | 手机看片99 | 精品色999 | 国产1级毛片 | 久久国产精品久久久 | 香蕉视频网站在线观看 | .国产精品成人自产拍在线观看6 | 免费看片日韩 | 黄色www免费| 亚洲成人软件 | 日韩激情视频在线观看 | 99日精品 | 黄色在线视频网址 | 99999精品| 国产96av | 国产精品女同一区二区三区久久夜 | 国产精品一区二区果冻传媒 | 天天干天天操人体 | 久久免费视频在线观看 | 中文字幕免费观看全部电影 | 亚洲国产精品一区二区久久,亚洲午夜 | 国产精品 中文字幕 亚洲 欧美 | 国产成人精品一区二区三区网站观看 | 国产成人一区二区精品非洲 | 久久视频这里有精品 | 伊人天堂久久 | 黄色成人av在线 | 黄色影院在线免费观看 | 973理论片235影院9 | 五月天综合在线 | 日韩高清网站 | 蜜臀久久99精品久久久久久网站 | 色www精品视频在线观看 | 91资源在线观看 | 国产一级片网站 | 精品久久在线 | 国内精品视频一区二区三区八戒 | 五月天国产 | 亚洲黄色影院 | 久久国产精品久久久久 | 人人爽人人爽人人片av | 天天想夜夜操 | 久久精品96 | 国产97色 | 日本精品视频一区二区 | 麻豆视频在线免费观看 | 天天爽人人爽夜夜爽 | 天堂成人在线 | 日韩在线不卡av | 精品国产一区二区三区久久 | 精品国产一区二区三区久久久蜜月 | 亚洲高清视频在线观看免费 | 国产精品免费看 | 狠狠色丁香婷婷综合 | av成人在线看 | 免费观看福利视频 | 久久麻豆视频 | 欧美在线1 | 日韩在线观看一区 | 97超视频免费观看 | 国产在线播放一区二区三区 | 一本一道波多野毛片中文在线 | 九九久久精品视频 | 亚洲成人免费观看 | 婷婷深爱 | 99精品视频在线 | 又粗又长又大又爽又黄少妇毛片 | 九九久久免费 | 国产一级二级三级在线观看 | 91精品亚洲影视在线观看 | 九九久久久久久久久激情 | 国产一区二区三区免费在线观看 | 精品久久久久久久久中文字幕 | 99久久精品视频免费 | 国产成人精品综合 | 国产精品精品视频 | 亚洲精品动漫成人3d无尽在线 | 久久久国产一区 | 欧美色黄 | 精品在线播放视频 | 午夜精品一区二区三区免费视频 | 在线观看欧美成人 | 亚洲成人黄色av | av电影在线免费观看 | 国产一级电影 | 国产精品欧美激情在线观看 | 黄污在线看 | 国产精品99久久久久人中文网介绍 | 免费看wwwwwwwwwww的视频 久久久久久99精品 91中文字幕视频 | 在线蜜桃视频 | 日韩视频在线播放 | 日韩在线播放视频 | 在线亚洲观看 | 精品久久久影院 | 国产精品二区在线观看 | 九九久久影院 | 久久一区二区三区日韩 | 免费午夜视频在线观看 | 久草在线免费在线观看 | 亚洲精品视频免费看 | 久久人操| 亚洲va在线va天堂va偷拍 | 在线观看国产永久免费视频 | 亚洲九九九在线观看 | 日日干网址 | 91爱爱中文字幕 | 麻豆系列在线观看 | 欧美精品亚洲精品日韩精品 | 国产精品手机在线观看 | 99久久er热在这里只有精品15 | 一区二区久久 | 97国产精品一区二区 | 91精品久久久久久久99蜜桃 | 亚洲区精品 | 免费日韩av电影 | 337p日本大胆噜噜噜噜 | 中文字幕观看av | www成人av| 97视频在线播放 | 91日韩在线播放 | av中文电影 | 香蕉91视频 | 日韩在线高清 | 波多野结衣电影一区二区 | 99在线视频精品 | 亚洲午夜精品久久久久久久久久久久 | av日韩精品| 成人av电影网址 | 三级毛片视频 | 91视频在线观看下载 | 国产69精品久久久久9999apgf | 在线观看精品 | 五月婷婷激情综合 | 久久久私人影院 | 欧美精品一区二区性色 | 欧美激情视频在线免费观看 | 香蕉视频在线观看免费 | 国产精品美女久久久久aⅴ 干干夜夜 | 久久婷婷国产色一区二区三区 | 日韩欧美视频免费观看 | 国产成人三级三级三级97 | 91精选| 香蕉视频在线观看免费 | 一区二区三区久久精品 | 中文av影院 | 六月丁香激情网 | 成年人电影毛片 | 四虎精品成人免费网站 | 国产在线a免费观看 | 天天玩夜夜操 | 五月激情天| 中文有码在线 | 911香蕉| 亚洲精品国偷拍自产在线观看蜜桃 | 在线观看亚洲国产 | 亚洲精品国产日韩 | 国产午夜精品理论片在线 | 麻豆视频免费在线观看 | 91视视频在线直接观看在线看网页在线看 | 国产区在线 | 精品在线观看一区二区 | 中文字幕资源在线观看 | 欧美日韩伦理一区 | 成人国产精品久久久春色 | 99在线观看视频 | 99在线免费观看视频 | 欧美日韩在线观看不卡 | 黄色免费网站下载 | 亚洲伊人av | 久久精品毛片基地 | 午夜av免费在线观看 | 久久黄色影视 | 1区2区3区在线观看 三级动图 | 91成人免费视频 | 国产精品美女久久久网av | 午夜aaaa | 波多野结衣视频一区二区三区 | 成年人app网址 | 久久香蕉电影 | 91精品国产自产91精品 | 五月天中文字幕mv在线 | 欧美99精品| a久久久久久 | 日韩激情中文字幕 | 精品福利片 | 中文字幕精品www乱入免费视频 | 97av视频在线| 日韩在线小视频 | 国产精品嫩草影院99网站 | 草久在线视频 | 日韩电影中文字幕在线 | 免费三级骚 | 久久精品99北条麻妃 | 日韩欧美在线一区 | 天堂激情网| 国产人免费人成免费视频 | 欧美一区二区伦理片 | 久久久免费高清视频 | 中文字幕资源网 | 久久精品一二三区 | 四虎影视8848aamm | 久草综合视频 | 精品欧美一区二区三区久久久 | 日日夜夜天天 | 免费成人av网站 | 日韩欧美一区二区三区视频 | 天堂在线一区二区三区 | 狠狠色噜噜狠狠狠狠2021天天 | 美女久久网站 | 国产精品一区二区三区免费看 | 久久久久久久久久久久久9999 | 天天干夜夜擦 | 欧美在线一级片 | 91一区二区三区久久久久国产乱 | 久久久久高清 | 99视频在线免费 | 美女网站黄免费 | 国产精品99久久久久人中文网介绍 | 一级性视频 | 日韩三级中文字幕 | 成年人视频在线免费 | 91九色综合 | 五月婷婷精品 | 国产精品视频一二三 | 91在线精品一区二区 | 在线观看黄色的网站 | 婷婷丁香自拍 | 久久久这里有精品 | 亚洲美女免费精品视频在线观看 | 国产对白av| 日韩欧美在线第一页 | 一级黄毛片 | 9i看片成人免费看片 | 男女激情免费网站 | 国产精品免费不 | 国产精品淫片 | 欧美日韩高清在线一区 | 精品国产亚洲日本 | 国产精品私人影院 | 中文字幕在线看视频国产中文版 | h视频在线看 | 中文字幕在线观看免费 | 久久久久国产成人免费精品免费 | 中文字幕专区高清在线观看 | 欧美一性一交一乱 | 久久久婷| 国产a网站 | 久久精品久久久久电影 | 国产破处在线播放 | 人人干人人超 | www成人精品 | 天天色棕合合合合合合 | 香蕉视频在线观看免费 | 日韩高清黄色 | 99热手机在线观看 | 国产视频一区二区在线观看 | 鲁一鲁影院 | 亚洲成人网av | 99热免费在线| 丝袜美腿在线 | 欧美午夜剧场 | 国产精品综合在线观看 | av在线电影播放 | 精品毛片一区二区免费看 | 欧美专区国产专区 | 免费看三级网站 | 精品乱码一区二区三四区 | 国产精品久久久久久久久久新婚 | 国产在线观看一 | 天天操狠狠干 | av大全在线看 | 激情深爱 | 人人舔人人舔 | 99在线精品免费视频九九视 | 免费a级黄色毛片 | 天天天在线综合网 | 五月天久久婷 | 97夜夜澡人人爽人人免费 | 色狠狠综合天天综合综合 | 午夜视频播放 | 久久久久亚洲精品男人的天堂 | 毛片激情永久免费 | 涩av在线 | 成年人视频在线免费观看 | 一级成人免费视频 | 四虎永久免费在线观看 | www.久久久精品| 一区二区视频在线观看免费 | 91亚洲在线观看 | 国产精品欧美久久久久久 | 国产精品久久综合 | 丁香婷婷色综合亚洲电影 | 丰满少妇一级 | 五月天堂网 | 久久国产精品一区二区三区四区 | 国产黄网站在线观看 | 九九久久免费视频 | 一区二区三区动漫 | 亚洲综合在线一区二区三区 | 欧美午夜一区二区福利视频 | 99热这里只有精品1 av中文字幕日韩 | 午夜视频在线观看欧美 | 精品日韩在线一区 | 少妇bbw揉bbb欧美 | 日韩免费小视频 | 亚洲经典视频在线观看 | 最近免费中文视频 | 国产黄免费看 | 亚洲久草在线 | 日本成人免费在线观看 | 久久伊人精品一区二区三区 | 欧美日韩一区二区免费在线观看 | 日本3级在线观看 | 在线播放视频一区 | 日日碰狠狠躁久久躁综合网 | 亚洲国产精品500在线观看 | 久久狠狠婷婷 | 久久久午夜电影 | 在线v片免费观看视频 | 国产在线资源 | 色偷偷88欧美精品久久久 | 五月婷婷在线观看 | 亚洲不卡av一区二区三区 | 亚洲视频在线免费看 | 一区二区不卡高清 | 午夜视频免费在线观看 | 亚洲电影院 | 亚洲精品在线观看不卡 | 亚洲永久在线 | 国产成人精品亚洲a | 日日日天天天 | 蜜臀精品久久久久久蜜臀 | 国产精品久久嫩一区二区免费 | 国产成人精品999在线观看 | 成人av直播 | 成人在线视频免费观看 | 中文字幕中文字幕在线中文字幕三区 | 国内少妇自拍视频一区 | 国产高清综合 | 97超碰人人澡人人爱学生 | 91.精品高清在线观看 | 日日夜夜网站 | 日韩免费在线网站 | 久久精品精品电影网 | 日日操天天操狠狠操 | 欧美大片在线看免费观看 | 最新黄色av网址 | x99av成人免费 | 免费的黄色的网站 | 久久综合欧美精品亚洲一区 | 国产精品久久久久久爽爽爽 | 91视频免费看 | 天堂中文在线视频 | 天天干天天操天天做 | 免费观看xxxx9999片 | 亚洲砖区区免费 | 激情五月婷婷综合 | 欧洲成人av| 91精品一区二区三区蜜臀 | 中国一级片视频 | 天天玩天天干 | 在线免费黄色片 | 久精品视频免费观看2 | 91丨精品丨蝌蚪丨白丝jk | 视频二区在线视频 | 91 在线视频播放 | 人人看黄色 | 97人人爽 | 中文字字幕在线 | 五月天六月婷 | 日日操日日插 | 欧美日韩精品二区第二页 | 久久免费视频6 | 久久av在线播放 | 欧洲av不卡 | 999久久久免费视频 午夜国产在线观看 | 亚洲一区免费在线 | 欧美性大战久久久久 | 97视频在线观看视频免费视频 | 久久九九视频 | 国产在线精品区 | 久久激情影院 | 久久久国产网站 | 国产 中文 日韩 欧美 | 毛片.com| 免费毛片一区二区三区久久久 | 国产成人a v电影 | 国产在线看一区 | 日韩av电影中文字幕在线观看 | 91亚洲视频在线观看 | 高清av在线| 亚洲黄色小说网址 | 久久成人在线 | 操一草 | 免费国产亚洲视频 | 啪啪av在线 | 久草在线视频资源 | 在线观看日韩一区 | 国产美女免费 | 欧美xxxx性xxxxx高清 | 日韩视频在线不卡 | 午夜电影av | 操天天操 | 97免费在线观看视频 | 色视频在线免费观看 | 婷婷六月综合亚洲 | 欧美高清视频不卡网 | 亚州人成在线播放 | 天天综合网~永久入口 | 成人午夜免费剧场 | 久久精品国产99国产 | 黄色av免费看 | 91精品国产福利在线观看 | www看片网站 | 亚洲视频在线看 | 91最新网址在线观看 | 日日夜操 | 天天爽网站 | 久久精品中文视频 | 五月婷在线播放 | 国产xxxxx在线观看 | 中文字幕免费一区二区 | 韩国一区二区av | 欧美最爽乱淫视频播放 | 日本99精品 | 999久久国产精品免费观看网站 | 免费看国产视频 | 国产精品一区二区吃奶在线观看 | 五月婷婷久久综合 | 久久精品欧美一区二区三区麻豆 | 99九九视频 | av日韩不卡| 久久精品99国产精品日本 | 日韩免费观看一区二区 | 中文字幕视频一区二区 | 国内偷拍精品视频 | 9999国产精品| 久久看片网站 | 永久免费观看视频 | 国产精品第72页 | 欧美日韩视频在线观看一区二区 | 99中文字幕视频 | 丝袜美腿亚洲综合 | 中文字幕在线观看1 | 亚洲黄污 | 麻豆影视网站 | 国产一区二区播放 | 美女久久久久久久久久久 | 国产日韩精品一区二区在线观看播放 | 日韩无在线 | 成人av一二三区 | 伊人影院av | 国产精品久久久久久吹潮天美传媒 | 一级黄色毛片 | 在线国产片 | 人人狠狠综合久久亚洲 | 最近免费中文字幕mv在线视频3 | 久久久久久久久久网站 | 国产尤物一区二区三区 | 天天做夜夜做 | www.久久91 | 欧美一区二区三区四区夜夜大片 | 久久人网| 狠狠的操狠狠的干 | 久久视频国产精品免费视频在线 | 精品久久免费 | 国产成人av在线影院 | 精品久久一| 黄色大片日本免费大片 | 99在线热播精品免费99热 | 波多野结衣在线中文字幕 | 人人cao | 日韩在线观看av | 一级成人免费 | 国产成人免费高清 | 日韩黄色免费电影 | 天天操天天摸天天干 | 婷婷五月情 | 国产日韩精品在线观看 | 免费日韩高清 | 国产视频在线观看一区 | 黄色一级大片在线观看 | 国精产品999国精产 久久久久 | 国产一区在线不卡 | 91精品一区国产高清在线gif | 成人免费网站视频 | 天天插天天操天天干 | 久久婷婷网 | 国产一区欧美在线 | 久久久久久欧美二区电影网 | 日韩免费在线一区 | 国产综合91| 日韩精品资源 | 国产小视频在线播放 | 日韩av快播电影网 | 久久综合之合合综合久久 | 91色在线观看 | 成人免费网站视频 | 在线观看日韩国产 | 国产不卡在线播放 | 精品一区二区综合 | 国产传媒中文字幕 | 中文在线中文资源 | 欧美日韩成人一区 | 在线天堂日本 | 一二三区在线 | 亚洲天堂香蕉 | 久久免费av电影 | 丁香 婷婷 激情 | 狠狠干网 | 在线观看亚洲精品 | 九九久久久久久久久激情 | 在线播放精品一区二区三区 | 亚洲无吗av | 久久亚洲欧美 | 亚洲综合少妇 | 四虎国产精品免费观看视频优播 | 久久综合精品国产一区二区三区 | av中文字幕网址 | 99久高清在线观看视频99精品热在线观看视频 | 久久国产成人午夜av影院宅 | 国产中文字幕视频在线 | av中文天堂在线 | 97香蕉久久国产在线观看 | 国内免费久久久久久久久久久 | 深爱激情站 | 午夜视频免费在线观看 | 91精品国自产在线观看 | 视频在线99re | 国产成人综合图片 | 成人av一区二区在线观看 | 91香蕉视频720p| 日韩电影久久 | 91手机视频| www视频在线观看 | 国产一区二区视频在线播放 | 99爱国产精品 | 免费福利小视频 | 日日夜夜天天久久 | 国产99久久精品一区二区永久免费 | 五月婷婷操 | 九色91视频| 天天插视频 | 欧美日韩不卡一区二区 | avhd高清在线谜片 | 久久看免费视频 | 亚洲精品欧洲精品 | 久草在线视频国产 | 最新真实国产在线视频 | 午夜精品久久久久久久99 | 丁香婷婷综合五月 | 色久综合 | 999久久久久 | 久久国产精品精品国产色婷婷 | 黄av在线| 国产精品人成电影在线观看 | 国产成人精品日本亚洲999 | 久久8| 婷婷丁香在线视频 | 久久国产精品99精国产 | 少妇资源站 | 99成人免费视频 | 热久久国产精品 | 午夜天使 | 欧美日韩aa | 国产精品九九久久久久久久 | 五月天av在线 | 99久久综合国产精品二区 | 日本丰满少妇免费一区 | 中文字幕亚洲五码 | 九九热有精品 | 97狠狠操| 国偷自产中文字幕亚洲手机在线 | 久久观看免费视频 | 欧美无极色 | 免费av网址大全 | 射射射av| 国产青春久久久国产毛片 | 夜夜干夜夜| 美女视频黄免费网站 | 91视频免费网站 | 2019中文在线观看 | 亚洲精品午夜久久久 | 国产96在线视频 | 久久免费视频观看 | 综合国产视频 | 国产 在线 高清 精品 | 午夜精品一区二区三区在线播放 | 337p西西人体大胆瓣开下部 | 国产在线欧美在线 | 黄色av电影在线 | 色噜噜日韩精品欧美一区二区 | 深爱激情开心 | 99精品视频免费 | 久久99偷拍视频 | 亚洲一二视频 | 国产专区欧美专区 | 韩国av一区二区三区在线观看 | 米奇四色影视 | 午夜丁香网 | 国产真实精品久久二三区 | 日韩精品免费在线观看视频 | 亚洲精选国产 | 韩日视频在线 | 99热只有精品在线观看 | 久久精品2| 在线免费观看黄网站 | 国产一区二区在线精品 | 黄色资源网站 | 天天射成人 | 亚洲精品国内 | 欧美一二三专区 | 国产精品美女在线 | 麻豆视频在线播放 | 探花视频在线观看+在线播放 | 天天干天天做 | 天天躁天天躁天天躁婷 | 国产小视频在线免费观看视频 | 91麻豆精品 | 亚洲精品在线免费 | 亚洲视频第一页 | 日韩av电影手机在线观看 | 日韩专区在线 | 五月色综合 | 五月天久久综合 | 美女黄频在线观看 | 国产九九精品视频 | 日韩欧美在线中文字幕 | 中文日韩在线视频 | 欧美在线一级片 | 操操操操网| av网站在线免费观看 | 免费情缘 | 肉色欧美久久久久久久免费看 | 99久久99久国产黄毛片 | 久久免费视频这里只有精品 | 久久综合五月天 | 亚洲国产日韩精品 | 一区二区欧美在线观看 | 成人欧美一区二区三区黑人麻豆 | 国产精品久久久久影视 | 日韩视频在线一区 | av东方在线 | 日韩中文免费视频 | 97在线观看| 国产91aaa| 美女久久 | 丁香婷婷激情啪啪 | 亚洲精品福利在线观看 | 亚洲国产精彩中文乱码av | 五月综合网站 | 久久精品成人热国产成 | 91成人短视频在线观看 | 又黄又刺激 | 四虎伊人 | 国产精品国产三级国产专区53 | 99情趣网视频 | 国产成人精品999在线观看 | 中文av在线播放 | 国产 日韩 在线 亚洲 字幕 中文 | 久久伦理电影 | 久久视频中文字幕 | 色香蕉网| 国产超碰在线观看 | 最新不卡av| 国产一区二区三区免费在线观看 | 狠狠的干狠狠的操 | av在线免费不卡 | 国产精品久久久久久久久久新婚 | 久久精品国产一区 | 免费看黄在线观看 | 日韩在线视频免费看 | 国产色资源| 狠狠狠狠狠操 | 久久99婷婷 | 狠狠操操操 | 91亚洲精品久久久中文字幕 | 人人爽人人舔 | 最近乱久中文字幕 | 国产精品黄色影片导航在线观看 | 欧美91av| 深爱激情综合 | 成人欧美一区二区三区在线观看 | 午夜电影 电影 | 日韩综合视频在线观看 | av大片免费在线观看 | 国产91影视 | 欧美a级免费视频 | 4438全国亚洲精品观看视频 | 国产一区在线视频 | 亚洲jizzjizz日本少妇 | 亚洲色图27p | 亚洲精品影视在线观看 | 欧美激情综合五月色丁香小说 | 婷婷精品视频 | 日韩免费观看一区二区三区 | 免费a级黄色毛片 | 日韩欧美视频免费看 | 久久久www免费电影网 | 在线视频免费观看 | 99久久国产免费看 | 国产成人三级 | 波多野结衣电影久久 | 欧美激情精品久久久 | 国产精品精品视频 | 丁香午夜 | 999久久久久 | 91自拍视频在线 | 狠狠干夜夜操天天爽 | 丰满少妇在线观看网站 | 在线观看视频国产一区 | 国产精品久久久久久麻豆一区 | 久久理论视频 | 日韩美女一级片 | 亚洲国产激情 | 五月婷婷在线视频 | 激情五月综合网 | 超碰资源在线 | 亚洲精品综合久久 | 久久高清毛片 | 黄色午夜 | 日韩免费视频在线观看 | 九九热在线视频免费观看 | 九九免费观看全部免费视频 | 91亚洲夫妻 | 亚洲综合欧美精品电影 | a级国产乱理论片在线观看 伊人宗合网 | 国产短视频在线播放 | 亚洲va欧美va人人爽 | 91福利小视频 | 天堂资源在线观看视频 | 欧美精品在线一区二区 | 欧美aa级 | 2019免费中文字幕 | 国产精品成人国产乱一区 | 激情五月网站 | 欧美激情视频久久 | 国产美腿白丝袜足在线av | 色吊丝在线永久观看最新版本 | 丁香五月缴情综合网 | 91精品久久久久久久久 | 国产老太婆免费交性大片 | 国产成人精品久久亚洲高清不卡 | 国产精品精 | 国产一卡二卡在线 | 91久久精品日日躁夜夜躁国产 | 成人小电影在线看 | wwwww.国产 | 亚洲91中文字幕无线码三区 | 国产手机在线视频 | 亚洲国产视频直播 | 欧美色婷婷 | 天天天天色综合 | 波多野结衣电影一区二区三区 | 日韩专区 在线 | av大全在线免费观看 | 久草在线视频首页 | 久久精品美女视频 | 国产精品久久一区二区无卡 | 国产99爱 | 精品视频一区在线观看 | 不卡视频一区二区三区 | 国产短视频在线播放 | 日韩中文字幕免费在线观看 | 日韩精品一区二区三区免费观看 | www.久久婷婷 | 日韩色一区二区三区 | 日韩xxxbbb| 在线观看福利网站 | 久久视频在线 | 久福利| 欧美午夜精品久久久久久浪潮 | 麻豆综合网 | 色a在线观看| 99久久夜色精品国产亚洲96 | 色瓜 | av在线电影网站 | 欧美做受高潮1 | 久久久久久看片 | 日韩精品在线观看av | 成人毛片一区 | 丁香视频在线观看 | 日韩美女av在线 | 欧洲精品视频一区 | avhd高清在线谜片 | 在线观看成人一级片 | 国产精品久久久久永久免费观看 | 免费三及片 | 中文字幕视频三区 | 久久综合婷婷国产二区高清 | 91激情| 久久久久北条麻妃免费看 | 中文字幕在线免费播放 | 国产一级大片在线观看 | 久久久久成人精品免费播放动漫 | 国产精品扒开做爽爽的视频 | 国产3p视频 | 91在线影视 | 久久精品99国产精品 | 亚洲精品黄 | 精品国产三级 | 黄色亚洲片 | 九九在线免费视频 | 日韩精品在线视频 | 99热这里只有精品久久 | 日韩av电影免费在线观看 | 午夜精品一区二区三区在线播放 | 97av影院 | 国产精品久久久久久久久久了 | 国产91亚洲精品 | 免费看网站在线 | 激情视频免费观看 | 日韩精品高清不卡 | 国产色婷婷| 国产一级性生活 | 超碰99在线 | 日韩免费视频线观看 | 91亚洲精品国偷拍自产在线观看 | 日韩精品免费一区二区三区 | 91麻豆高清视频 | 欧美精品久久久久久久久免 | 一区免费视频 | 麻豆视频在线播放 | 狠狠插狠狠操 | 精品一区二区影视 | 亚洲精品啊啊啊 | 欧美性生活免费 | 日本精品视频一区二区 | 性色av香蕉一区二区 | 国产一级大片在线观看 | 国产成人一区二区三区 | 国内三级在线观看 | 国产精品久久久久久久av大片 | 国产精品永久在线观看 | 色婷婷综合在线 | 日韩三区在线 | 国产一级一级国产 | 久久99视频| 不卡av在线播放 | 久久成人精品 | 黄污网 | 五月天中文字幕 | 精品视频亚洲 | 国产精品18久久久久vr手机版特色 | 亚洲色视频| 日韩在线观看视频一区二区三区 | 欧美日韩中文视频 | 香蕉网站在线观看 | 成人福利av | 狠狠色丁香婷婷综合欧美 | 在线看黄色的网站 | 亚洲夜夜爽| 日韩影片在线观看 | 天天综合色天天综合 | 99国产在线观看 | 美女视频久久 | 精品国产三级 |