python 调用 CTP API 进行下多单 下空单 平单 撤单 操作
小白一枚如有问题欢迎交流可以加我微信:y1906891715 备注:ctp使用交流
基本流程
1.获取基于python的CTP API版本
github: https://github.com/nicai0609/
来自大神的封装:是Windows 64位平台下利用Swig工具将CTP C++接口trader API转换为python可调用的接口
2.注册虚拟账号进行联系
可以下载simnow快期新一代 这个期货交易软件是基于ctp
下载地址: http://www.simnow.com.cn/static/softwareOthersDownload.action
然后注册一个账号就可以模拟期货交易一开始有十万的虚拟金额(别亏完了哈哈哈一个账号只能用一次)
3.下载ctp api的说明文档
说明文档百度云分享
链接:https://pan.baidu.com/s/1dg2Yo4HhUtx2tAwZXJC4Lg
提取码:rloc
说明文档是基于c++的原生接口说明,主要的使用方法可以参考它
4.调用api实现基本的交易操作
实现查账户结算示例
# -*- coding: utf-8 -*-
import thosttraderapi as api
import timeclass CTradeSpi(api.CThostFtdcTraderSpi):tapi=''def __init__(self,tapi):api.CThostFtdcTraderSpi.__init__(self)self.tapi=tapidef OnFrontConnected(self):print ("OnFrontConnected")#time.sleep( 60 )loginfield = api.CThostFtdcReqUserLoginField()loginfield.BrokerID="9999"loginfield.UserID="*******" 填写自己账号loginfield.Password="********"填写自己账号的密码loginfield.UserProductInfo="python dll"self.tapi.ReqUserLogin(loginfield,0)print ("send login ok")def OnRspUserLogin(self, *args):print ("OnRspUserLogin")rsploginfield=args[0]rspinfofield=args[1]msg=args[2]print ("SessionID=",rsploginfield.SessionID)print ("ErrorID=",rspinfofield.ErrorID)print ("ErrorMsg=",rspinfofield.ErrorMsg.encode("utf-8",errors='surrogateescape').decode('gbk'))qryinfofield = api.CThostFtdcQrySettlementInfoField()qryinfofield.BrokerID="9999"qryinfofield.InvestorID="*****"填写自己的账号self.tapi.ReqQrySettlementInfo(qryinfofield,0)print ("send ReqQrySettlementInfo ok")#ReqorderfieldInsert(self.tapi)def OnRspQrySettlementInfo(self, *args):print ("OnRspQrySettlementInfo")pSettlementInfo=args[0]print ("content:",pSettlementInfo.Content.encode("utf-8",errors='surrogateescape').decode('gbk'))def OnRtnOrder(self, *args):print ("OnRtnOrder")rtnfield=args[0]print ("OrderStatus=",rtnfield.OrderStatus)print ("StatusMsg=",rtnfield.StatusMsg.encode("utf-8",errors='surrogateescape').decode('gbk'))print ("LimitPrice=",rtnfield.LimitPrice)def OnRspOrderInsert(self, *args):print ("OnRspOrderInsert")rspinfofield=args[1]print ("ErrorID=",rspinfofield.ErrorID)print ("ErrorMsg=",rspinfofield.ErrorMsg.encode("utf-8",errors='surrogateescape').decode('gbk'))def main():tradeapi=api.CThostFtdcTraderApi_CreateFtdcTraderApi()tradespi=CTradeSpi(tradeapi)#去simnon快期新一代的官网网址可以获取地址tradeapi.RegisterFront("tcp://180.168.146.187:10001")tradeapi.RegisterSpi(tradespi)tradeapi.SubscribePrivateTopic(api.THOST_TERT_RESUME)tradeapi.SubscribePublicTopic(api.THOST_TERT_RESUME)tradeapi.Init()tradeapi.Join()if __name__ == '__main__':main()
实现下单操作
下多单空单平单都一样具体就是参数不同
平单的话ctp分平今天单和平昨天单
# -*- coding: utf-8 -*-
import thosttraderapi as api
import time
a=""
#下单函数
def ReqorderfieldInsert(tradeapi):print("ReqOrderInsert Start")orderfield = api.CThostFtdcInputOrderField()orderfield.BrokerID = "9999"orderfield.InstrumentID = "rb1905"orderfield.UserID = "********"账号orderfield.InvestorID = "*******"账号#开买单orderfield.Direction = api.THOST_FTDC_D_Buy#下单限价单价格orderfield.LimitPrice = 4130orderfield.VolumeTotalOriginal = 1orderfield.OrderPriceType = api.THOST_FTDC_OPT_LimitPriceorderfield.ContingentCondition = api.THOST_FTDC_CC_Immediatelyorderfield.TimeCondition = api.THOST_FTDC_TC_GFDorderfield.VolumeCondition = api.THOST_FTDC_VC_AVorderfield.CombHedgeFlag = "1"#开平标志 '0'开单 '1'平昨单 '3' 平今单orderfield.CombOffsetFlag = "0"orderfield.GTDDate = ""orderfield.orderfieldRef = "1"orderfield.MinVolume = 0orderfield.ForceCloseReason = api.THOST_FTDC_FCC_NotForceCloseorderfield.IsAutoSuspend = 0tradeapi.ReqOrderInsert(orderfield, 0)print("ReqOrderInsert End")
#撤单
def ReqOrderfieldAction(tradeapi,z,f):orderfield = api.CThostFtdcInputOrderActionField()orderfield.BrokerID = "9999"orderfield.InstrumentID = "rb1905"orderfield.UserID = "******"orderfield.InvestorID='*******'orderfield.OrderSysID=zorderfield.ExchangeID=forderfield.ActionFlag=api.THOST_FTDC_AF_Deletetradeapi.ReqOrderAction(orderfield,1)print("撤单")class CTradeSpi(api.CThostFtdcTraderSpi):tapi = ''def __init__(self, tapi):api.CThostFtdcTraderSpi.__init__(self)self.tapi = tapidef OnFrontConnected(self):print("OnFrontConnected")# time.sleep( 60 )loginfield = api.CThostFtdcReqUserLoginField()loginfield.BrokerID = "9999"loginfield.UserID = "*******"自己账号loginfield.Password = "********"自己账号的密码loginfield.UserProductInfo = "python dll"self.tapi.ReqUserLogin(loginfield, 0)print("send login ok")def OnRspUserLogin(self, *args):print("OnRspUserLogin")rsploginfield = args[0]rspinfofield = args[1]msg = args[2]print("SessionID=", rsploginfield.SessionID)print("ErrorID=", rspinfofield.ErrorID)print("ErrorMsg=", rspinfofield.ErrorMsg.encode("utf-8", errors='surrogateescape').decode('gbk'))#下单ReqorderfieldInsert(self.tapi)#qry=api.CThostFtdcQryOrderField()#qry.ExchangeID='SHFE'#qry.BrokerID = "9999"#qry.InvestorID = "******"自己账号#self.tapi.ReqQryOrder(qry,1)# qryinfofield = api.CThostFtdcQryTradingAccountField()# qryinfofield.BrokerID = "9999"# qryinfofield.InvestorID = "******"自己账号# self.tapi.ReqQryTradingAccount(qryinfofield, 1)#查询报单响应def OnRspQryOrder(self, pOrder, pRspInfo, nRequestID, bIsLast):what=pOrderprint(what.OrderStatus,what.ExchangeID,what.OrderSysID)#撤掉为成交的订单if what.OrderStatus=='3':ReqOrderfieldAction(self.tapi,what.OrderSysID,what.ExchangeID)def OnRtnOrder(self, *args):print("OnRtnOrder")rtnfield = args[0]print("OrderStatus=", rtnfield.OrderStatus)print("StatusMsg=", rtnfield.StatusMsg.encode("utf-8", errors='surrogateescape').decode('gbk'))print("LimitPrice=", rtnfield.LimitPrice)print("报单编号",rtnfield.OrderSysID)def OnRspOrderInsert(self, *args):print("OnRspOrderInsert")rspinfofield = args[1]print("ErrorID=", rspinfofield.ErrorID)print("ErrorMsg=", rspinfofield.ErrorMsg.encode("utf-8", errors='surrogateescape').decode('gbk'))def main():tradeapi = api.CThostFtdcTraderApi_CreateFtdcTraderApi()tradespi = CTradeSpi(tradeapi)tradeapi.RegisterFront("tcp://180.168.146.187:10001")tradeapi.RegisterSpi(tradespi)tradeapi.SubscribePrivateTopic(api.THOST_TERT_RESUME)tradeapi.SubscribePublicTopic(api.THOST_TERT_RESUME)tradeapi.Init()tradeapi.Join()if __name__ == '__main__':main()
python 调用 CTP API 进行下多单 下空单 平单 撤单 操作相关推荐
- 用Python调用OpenAI API做有趣的事
获取 API KEY 首先需要 可以开全局的梯子,选择日本或韩国节点,可以通过 ipinfo 检查当前 IP 地址是否为日本或韩国地区,然后访问 OpenAI 网站注册账号并完成认证. 如果自己完成账 ...
- python调用lib_基于python调用libvirt API
基于python调用libvirt API 1.程序代码 #!/usr/bin/python import libvirt import sys def createConnection(): con ...
- 用Python调用OpenAI API进行文本创作
文章目录 一.前言 二.使用教程 2.1获取API密钥 2.2 连接API 2.3 文本生成 三.创作示例 3.1 诗歌创作 3.2 推荐书单 3.3 超级百度 四.总结 一.前言 本文将教大家用py ...
- Python调用WPS API
Python调用WPS API 完整文档 最佳实践 WPS 在对于Office或WPS的操作场景中,最适合的其实是Pywin32的方式,因为这种方式可以直接调度由原厂商开放的API,目前我们的场景中最 ...
- python 图表_Python入门学习系列——使用Python调用Web API实现图表统计
使用Python调用Web API实现图表统计 Web API:Web应用编程接口,用于URL请求特定信息的程序交互,请求的数据大多以非常易于处理的格式返回,比如JSON或CSV等. 本文将使用Pyt ...
- python调用高德api路径规划_Python调用高德API实现批量地址转经纬度并写入表格的功能...
本段代码是先将需要转换经纬度的地址爬取在 '地址.csv' 文件里,文件截图示例: 代码展示 # coding=utf-8 # SPL # 时间:2020/12/20 21:15 import csv ...
- python电脑怎么打开任务管理器_利用Python调用Windows API,实现任务管理器功能
任务管理器具体功能有: 1. 列出系统当前所有进程. 2. 列出隶属于该进程的所有线程. 3. 如果进程有窗口,可以显示和隐藏窗口. 4. 强行结束指定进程. 通过Python调用Windows AP ...
- 使用Python调用Flickr API抓取图片数据
Flickr是雅虎旗下的图片分享网站,上面有全世界网友分享的大量精彩图片,被认为是专业的图片网站.其API也很友好,可以实现多种功能.这里我使用了Python调用其API获得了大量的照片数据.需要注意 ...
- 利用Python调用Windows API,实现任务管理器功能
任务管理器具体功能有: 1. 列出系统当前所有进程. 2. 列出隶属于该进程的所有线程. 3. 如果进程有窗口,可以显示和隐藏窗口. 4. 强行结束指定进程. 通过Python调用Windows AP ...
最新文章
- Linux之 手动释放内存
- php当前栏目位置,thinkphp获取栏目和文章当前位置的方法,_PHP教程
- Git bash:初步入门(1)
- java web随机抽取_java实现随机抽取奖品工具类
- 链接分析算法系列-机器学习排序
- python程序 爱意_程序员式优雅表白,教你用python代码画爱心
- Java入门到精通——基础篇之static关键字
- 艺术创意灵感地---集设网 | 人体彩绘的张力
- SAP License:SAP权限原理与授权对象
- win7计算机右键直接有设备管理器等相关,为什么我的计算机点击右键后里头没有设备管理器了?windows7旗舰版的,不知怎么就不见了...
- MSchart控件在Win7 64位操作系统上的注册方法
- JAVA中ResourceBundle使用详解
- fiddler和wireshark对比
- 互联网的起源发展历史
- 业务流程规范的战争兴起:XPDL、BPEL、BPDM
- Linux系统更改时区
- 苹果m1可以虚拟服务器,苹果M1芯片可以运行ARM版win10 但需要利用虚拟机
- 安全多方计算之六:秘密共享
- git switch 与 git checkout的不同
- android:很抱歉,XXX已停止运行