Gui

Vn.Py学习笔记(Python交易平台框架)

May 15, 2018
note, python, learning
Vn.Py, Gui, socket, learning

author: Ian Vn.Py笔记 ✏📔 # # 一个开源Python交易软件,主使用CTP协议。当然,还有其他协议了其源项目在http://www.vnpy.org/ 初期笔记 # 报单交易过程中, CTP使用BrokerID 从业务层面完全隔离不同经纪公司的交易、风控及结算用户的接入。 BrokerID具体取值咨询开户的经纪公司。 CTP中 UserID为操作员代码,InversterID为投资者代码; 投资者自己下单两者同为投资者代码 CTP-API中,OrderRef和OrderAction 前者为CTP后台提供给客户端标识一笔报 单的字段,从客户端可通过(FrontID、SessionID、OrderRef)唯一确定一笔报 单;;;后者与OrderRef功能相似,提供给客户端来标识一笔撤单。 前者的数据类型为字符数组,必须为阿拉伯数字字符。 OrderRef(OrderActionRef)取值必须保证在同一会话内发送的报单 OrderRef(OrderActionRef)值大于之前的最大值,开发多线程客户端尤为需要 注意。 CTP-API库: error.dtd\error.xml 错误定义文件 ---- ThostFrfcMdApi.h 交易接口类定义文件 ——— ThostFtfcUserApiDataType.h 类型定义文件 ------ thostmduserapi.lib,thostmduserpi.dll 行情接口库文件 ----- thosttraderapi.lib,thosttraderapi.dll交易接口库文件 ----- 交易和行情接口类定义文件都包含API 和 SPI类定义,客户端使用API向CTP后台 发送请求,CTP后台则使用SPI向客户端回传响应及回报 行情Demo开发: 1.将API文件复制到工程目录;并将所有的头文件和静态、动态库连链接库 并将文件导入到项目工程中。 先继承行情接口类CThostFtdcMdspi,并实现需要实现的虚函数。 OnFrontConnectde、OnFrontDisconnected、OnPspUserLogin、 OnRspSubMarketDAta /API工作流程***/ API压缩包——API含常量对应字符、类型定义、操作系统编译定义、回调函数(MdSpi)(柜台向用户端发送信息后被系统自动调用的函数)、主动函数(MdApi)(向柜台发送各种请求和指令) API工作流程: 创建MdSpi对象(回掉函数),调用MdApi类,以Create开头的静态方法,创建MdApi对象(主动函数),注册MdSpi对象指针,行情柜台前置机地址,调用MdApi对象Init方法初始化连接前置机,连接成功会通过OnFrontConnected回调通知用户,用户获得连接成功通知后,调MdApi的ReqUserLogin登陆,登陆后MdSpi的OnRsqUserLogin通知用户 ———————-到此登陆完成——————— MdApi:(行情相关) 使用MdApi对象的SubscribeMarketData方法,传入参数为想要订阅的“合约 代码”,订阅成功当合约有新行情通过MdApi的OnRtnDepthMarketData回调通知 用户 ———————-至此订阅完成——————— 当用户的某次请求发生错误时,会通过OnRspError通知用户 MdApi也含有退订合约、登出功能。 而一般退出程序则直接杀进程(不太安全便是) TraderApi:(交易相关) 不同于以上的有 注册TraderSpi对象的指针后需要调用TraderApi对象的 SubscribePrivateTopic和SubscribePublicTopic方法去选择公开和私有数据流的重 传方法 对于期货柜台,每一日第一次登陆需要先查询前一日的结算单,等待查询 结果返回,确认,才可进行后续操作(CTP、恒生UFT),证券(LTS)无此要求 上一步完成后,用户可以调用ReqQryInstrument的方法查询柜台上所有可 以交易的合约信息(包括代码、中文名、涨跌停、最小价位变动、合约乘数等大 量细节),一般是在这里获得合约信息列表后,再去MdApi中订阅合约;经常有 人问为什么在MdApi中找不到查询可供订阅的合约代码的函数,这里尤其要注 意,必须通过TraderApi来获取 当用户报单、成交状态发生变化时,TraderApi会自动通过OnRtnOrder、 OnRtnTrade通知,无需额外订阅 /封装API****/ 封装后API的动作: 主动函数: 调用封装API主动函数,传入Python变量作为参数—>封装API将Python变量转换成C++变量—>API调用原生API主动函数传入C++变量作为参数 回掉函数: 交易柜台通过原生API传入参数为C++变量->封装API将C++变量转换为Python变量->封装API调用封装后的回调函数想Python程序中推送数 ...

图形化界面 (Python Gui)

python, pyqt, Gui

author:Ian Python GUI 💽 # pynput # 在 pynput 模块中,Win键被称为“特殊键”(Special keys),需要使用特殊的名称来表示。 以下是可以使用的特殊键名称列表: https://pynput.readthedocs.io/en/latest/keyboard.html?highlight=%3Ccmd%3E#controlling-the-keyboard 因此,如果你想要在热键设置中使用 Win键+空格 这个热键,可以将它们分别替换为 cmd 和 space,如下所示: from pynput import keyboard def on_activate(): print('Hotkey activated') def on_exit(): print('Hotkey exited') return False with keyboard.GlobalHotKeys({'<cmd>+<space>': on_activate}) as h: h.join(on_exit)``` 在这个例子中,我们使用 <cmd>+<space> 来表示 Win键+空格 热键,因为在Mac中,Command键(cmd)可以起到类似于Win键的作用。 ## PyQt ![qt](https://tse4-mm.cn.bing.net/th/id/OIP.J4_Nqrcc0x7slHHUFwKLSQHaI6?pid=ImgDet&rs=1 "tmp") 官方说明文档:<http://pyqt.sourceforge.net/Docs/PyQt4/index.html> 照例,先贴网址: <http://www.qaulau.com/books/PyQt4_Tutorial/index.html> ## 画界面 #PyQt4使用designer.exe import os for root, dirs, files in os.walk('.'): for file in files: if file.endswith('.ui'): os.system('pyuic4 -o ui_%s. ...