1 Star 5 Fork 1

知止赢信/上期技术CTPAPI_最新6.6.1T1_P1版_COM封装使用指南及其他语言调用示例代码

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
使用组件简要说明以delphi编写的客户端为例.txt 14.04 KB
一键复制 编辑 原始数据 按行查看 历史
知止赢信 提交于 2023-01-17 14:30 . master
简单的说明一下如何使用演示:以OpenCtp开放平台的模拟账户为例,(OpenCtp开放平台与simnow模拟平台操作相同,只是他俩个的thostmduserapi_se.dll thosttraderapi_se.dll文件不同,注意使用各自的DLL文件,否则登录出错)
一 、拷贝目录:【ctp开放平台openctp环境7_24小时x64组件】到本机的一个目录中,以TVCTPCOM目录为例吧。
完成后目录中应有:以下几个文件。
config.ini
DELPHI_RAD11_x64.exe
thostmduserapi_se.dll
thosttraderapi_se.dll
TopViewQHTCtpCom.dll
WinDataCollect.dll
二、拷贝 reg_TopViewQHTCtpCom_x64.bat 文件到 TVCTPCOM目录中。
在此文件上点右键:以管理员身份运行,注册TopViewQHTCtpCom.dll 组件到系统中。
三、注册成功会有成功提示:DllRegisterServer在TopViewQHTCtpCom.dll 已成功。
四、打开DELPHI_RAD11_x64.exe 出现如图界面
五、点“选项”=》导入配置文件(如果目录中有config.ini),此步不用进行。保证配置文件正确配置文件是格式如下的文件文件,扩展名为ini
[config]
FrontAddr=tcp://121.37.80.177:20002
FrontAddrBak=tcp://121.37.80.177:20002
FrontMdAddr=tcp://121.37.80.177:20004
FrontMdAddrBak=tcp://121.37.80.177:20004
BrokerID=9999
UserID=1111
Password=123456
InvestorID=1111
UserProductInfo=qht
AuthCode=0000000000000000
AppID=simnow_client_test
InstrumentID=IF2110
六、点登录。登录成功一般会是这些提示:
2022-11-24 12:14:37:446 InfoID:1 MsgInfo:进行用户认证!
2022-11-24 12:14:37:502 InfoID:2 MsgInfo:终端认证成功!
2022-11-24 12:14:38:005 InfoID:3 MsgInfo:账号:xxxxxxx 交易登录... ... !
2022-11-24 12:14:38:066 InfoID:4 MsgInfo:交易用户登录成功 获取平仓模式为:[1] 先平今仓再平昨仓 后台交易系统名称:【TradingHosting】
2022-11-24 12:14:38:066 InfoID:4 MsgInfo:交易用户登录成功 进行确认结算单... ... !
2022-11-24 12:14:38:066 InfoID:5 MsgInfo:结算单确认请求完成 进行交易账户资金查询... ... !
2022-11-24 12:14:38:129 InfoID:6 MsgInfo:查询交易账户资金信息完成 正在查询市场合约信息... ... !
2022-11-24 12:14:38:192 InfoID:7 MsgInfo:获取市场合约列表信息完成!正在查询历史订单信息... ... !
2022-11-24 12:14:38:192 InfoID:7 MsgInfo:获取市场合约列表信息完成!正在查询持仓信息... ... !
2022-11-24 12:14:39:254 InfoID:8 MsgInfo:查询历史订单信息完成 正在查询所有持仓信息... !
2022-11-24 12:14:39:316 InfoID:9 MsgInfo:查询所有持仓信息完成 登录成功完成,环境初始化完成... ... !
init 初始化完成!=》证明登录成功并完成的有初始化工作
七、窗口空白处点左键,点击:订阅五档行情后,点击:开启开平仓循环测试,监控窗口中下方的两个调节条 上面的调节下订单的时间间隔 下面的调节条调节撤单后的时间间隔。都是以秒为单位
=============================================================部分注意事项=============================================================================
这个组件的目标群体就是最简单的方法几个添加拖拽,几十行代码实现一个初步的直观的CTP效果程序。
注意事项:
一、登录时出现:CTP:API Front shake hand err: decode err或反复出现 行情交易服务器断开、4097错误 交易服务器断开原因网络读失败
都是对应的DLL版本不对:保证thostmduserapi_se.dll thosttraderapi_se.dll TopViewQHTCtpCom.dll WinDataCollect.dll这几个文件都拷贝自对应目录中的。
注意:启动32位版本的测试程序时使用32位的COM组件,启动64位版本的测试程序时使用64位的COM组件,
config_simnow_开盘时专用.ini的配置文件:交易阶段(服务时间):与实际生产环境保持一致。
config_simnow_停盘时专用.ini的配置文件:交易阶段(服务时间):交易日,16:00~次日09:00;非交易日,16:00~次日15:00。
以上两个配置文件的登录用户都是:141532 密码是:Qht_Ctp_168还是Qht~Ctp~168 好像是每天都要修改一次。
也可以去http://www.simnow.com.cn/ 这注册新账户
本组件以delphi rad11 编译的程序为主要演示程序。其他只是简单演示。
https://share.weiyun.com/PTXMHMtF
2021-12-31 升级 新增 SetLoginMode 函数,用来设置登录模式
修改GetHisOrderList([in] BSTR InstrumentId, [out] int* GetFlag) 函数,新增返回值
2022-01-02 升级 新增 行情服务器断线自动重连后已订阅合约自动续订,行情数据延续的功能。
2022-01-08 升级 修改内存释放回收问题,节省很大一部分内存。
2022-01-11 升级 修改实盘获取历史订单及全市场合约时的错误;新加入订阅深度五档行情数据,加入五档行情数据OnDepthMarketData。
2022-01-11 升级 修改仓位计算的错误,加入设置平仓时的优先顺序模式的功能SetOrderCloseMode,设置平仓时的优先顺序 : 0 先平昨再平今 1 先平今再平昨 默认为0。
2022-01-12 升级 加入平仓时返回orderid参数为两个。当同时有今昨仓时会有两个平仓订单。
2022-01-14 升级 修正断线重连后的不能交易错误。
2022-01-19 升级 删除未涉及的API函数,只保留使用函数。使DLL体积减少一半多才500多K;整理重构登录流程,登录更快捷流畅。调整退出代码,使组件可多次重复退出登录、重新登录。
2022-01-23 升级 内存优化更合理,内存占用上更少。试验每2分钟下订单多空各9手,订阅64种合约行情,连续交易12小时,内存占用在30-50M左右(rad11生成的x64程序上测试)。而同等条件下旧版用300M左右内存。
2022-01-26 升级 修正退出登录时几个变量未释放内存的问题。
2022-01-26 升级 加入对CTP开放平台全天候测试环境的支持。
2022-01-30 升级 加入订阅行情失败时的错误信息推送通知,真正实现深度订阅五档行情(目前暂时在CTP开放平台全天候测试环境上测试可以。CTP实盘测试要等春节开盘后测试)。
2022-02-14 升级 不小心把OnRtnInstrumentStatus回调事件忘记了,添加上此事件;调整断线重连部分代码。
2022-02-20 升级 内存占用优化。正常登录前内存占用与登录后再退出登录后的占用内存基本持平。反复多次登录、退出登录后内存占用不会明显增加
2022-02-21 升级 部分成交时的冻结仓位计算上的一个小bug
2022-10-28 升级 退出登录时的一个错误,退出登录后再次操作时的错误。
2022-11-03 升级 修正断线重连的错误:重复订阅行情,不正常登录等。
2022-11-05 升级 修正退出登录的若干错误、查询实时资金的部分错误,并完善修改了说明文档,把c# vb.net调用COM组件的步骤以图片示例形式进行说明。
2022-11-10 升级 修正退出登录的若干错误、冻结仓位计算上的部分错误、更新OpenCtp平台服务器地址。
2022-11-11 升级 OnEventsInfo事件中加入 InfoID:19 推送可撤销订单单号列表信息、彻底完善登录、退出登录代码,程序多次登录、退出登录后事件响应不变(以前每退出重新登录一次,事件会多一次响应)
2022-11-13 升级 修改SetOrderCloseMode([in] int CloseMode, [out] int* SetOk) 设置平仓模式函数,新增[out] int* SetOk参数,返回设置成功与否 返回0:成功 返回1:不成功。组件启动每次只能设置一次开平仓模式。
设置开平仓模式后,如果用其他交易软件下订单,本组件也处于正常运行中会接收到订单回报。如果本组件设置的平仓模式与其他交易软件的平仓顺序不同,则会影响持仓仓位数据的正确性(主要是昨仓的仓位计算不同)。请注意!
修改PasswordUpdate函数,修改口令成功后返回信息提示。
2022-11-13 新增 事件OnPushCancleOrder([in] int OrderId, [in] const BSTR InsertTime,[in] BSTR InstrumentID, [in] int IsBuy, [in] int IsOpen, [in] int Volume,[in] int TradedVolume,[in] DOUBLE Price ,[in] int OrderStatus);
用户登录时,推送历史订单后会通过此事件推送所有可撤挂单信息。
2022-11-14 新增 对事件OnRspQryInvestorPositionDetail修改 增加字段:CloseVolume。
2022-11-15 升级 修改对python的优化,去除了SetLoginMode([in] int LongMode, [out] int* SetOk) 设置登录模式这个函数。现在无论那种语言调用只用一种登录方式。
2022-11-16 这段时间,把组件的仓位管理模块又整个推倒重定,重新定义了架构,重写了算法。现在的仓位管理方面,可不弱与快期V3。准确性、速度方面很不错。客户端调用组件的获取持仓数据就可以得到指定合约的持仓数据:当前仓位、昨仓、冻结仓位。
反馈时间几个毫秒。以后会继续优化。
2022-11-24 这几天继续完善,仿快期V3做了个订单列表表格。开平仓操作极速下,准确性、速度、稳定与快期V3相仿。
2022-12-17 调整登录时获取全市场合约。上次把获取全市场合约去了,影响正常使用时获取合约信息速度。这次登录时加上获取全市场合约,登录速度影响可以忽略。
2022-12-17 升级GetPostionPlus 加入持仓盈亏、实时bidprice、AskPrice 参数。升级GetAccout 加入持仓盈亏、平仓盈亏参数输出。OnOutPostion 加入持仓盈亏参数输出 GetRealAccount 加入持仓盈亏、平仓盈亏参数输出
2022-12-18 修改持仓价格盈亏计算错误,现在持仓价格盈亏计算与快期V3一般无二。
2022-12-19 新增 OnGetPositionDetail回调事件中六个新参数 ///逐日盯市平仓盈亏Double CloseProfitByDate;///逐笔对冲平仓盈亏Double CloseProfitByTrade;
///平仓金额Double CloseAmount;///先开先平剩余数量(DCE)Int TimeFirstVolume;///保证金率Double MarginRateByMoney;///保证金率(按手数)Double MarginRateByVolume;
2022-12-19 新增判断订单是否可撤时IsOrderOpen(int OrderID, int* CanCacel) 当orderid<=0 时在 OnPushCancleOrder回调事件里输出所有可撤订单信息 输出完成后 输出一个:orderid号为-1,合约名为IF9999 时间为999999,其他值为-1 的信息为结束标志。
家人我和陆陆续续都阳了。耽误了修改几个明显的错误:持仓为零时登录错误、DELPHI源代码历史订单为零时程序崩溃的错误。
2022-12-29 新增OnOutProgress( ProFlag, MaxInt, Position: Integer); //ProFlag = 1 获取全市场合约进度 2 获取历史订单进度 3 获取持仓 4 持仓明细进度 用于显示登录时的进度情况
2023-01-06 1、同步升级openctp平台的动态库更新;2、修改了一个特低级的错误:登录时如果某合约持仓为0时,开平仓后持仓数据不刷新的问题;3、修改下了测试环境中,合约无价格信息时的价格错误。
4、解决了在python语言中,登录时如果行情用户登录早与交易用户登录易崩溃的问题;5、onbars、onGetInstrument事件输出信息加入线程中,加强了pythonpyside2输出信息的稳定性(python pyside2中输出大量信息到textedit中时,
使用线程,否则程序易崩溃)。7、修改delphi rad11.1调用源代码中的部分错误;8、经测试:6.6.1版本支持广期所的工业硅期货。
2023-01-07
新增如下几个函数:
1、CreateBars([in] BSTR InstrumentID, [in] int Period, [out] int * Counts,[out] int* IsOk); 创建BARS K线,创建指定周期的合约K线。返回值IsOk 为1时 创建成功 -1 创建不成功 2,重复创建。
创建成功后,会在 OnOutBars([in] const BSTR InstrumentID, [in] int Period, [in] int Counts,[in] DOUBLE Hight,[in] DOUBLE Low, [in] DOUBLE Open, [in] DOUBLE Close, [in] BSTR CreatTime);事件里推送周期k线数据。
2、DeleteBars([in] BSTR InstrumentID, [in] int Period, [out] int* IsOk); 删除创建指定周期的合约K线 返回值IsOk 为1时 删除成功 -1 删除不成功 。
3、MA([in] BSTR InstrumentID, [in] int Period, [in] int Counts, [out] double* Ma); 获取已创建指定周期的指定周期ma值 如:MA('IF2301',5,10,vMA) 获取IF2301 5分钟周期的近10个K线的MA值 输出到vMA
4、EMA([in] BSTR InstrumentID, [in] int Period, [in] int Counts, [out] double* Ema);获取已创建指定周期的指定周期ema值 如:ema('IF2301',5,10,vema) 获取IF2301 5分钟周期的近10个K线的vema值 输出到vema
5、MACD([in] BSTR InstrumentID, [in] int Period, [out] double* Diff, [out] double* Dea);获取已创建指定周期的指定周期MACD值 如:MACD('IF2301',5,vDiff,vDea) 获取IF2301 5分钟周期的MACD值 输出到vDiff,vDea,
MACD值=2*(vDiff-vDea)【此MACD是默认参数的MACD 即快速移动线周期:12 慢速移动线周期:26 diff平滑移动周期:9】【此MACD 需要K线数据达到一定数量后才能准确,一般K线数量超过周期值2倍即可】
6、DefMACD([in] BSTR InstrumentID, [in] int Period, [in] int Fast, [in] int Slow, [in] int Signal, [out] double* Diff, [out] double* Dea);获取已创建指定周期的指定周期MACD值 如:
DefMACDMACD('IF2301',5,13,27,10,vDiff,vDea) 获取IF2301 5分钟周期的MACD值【此MACD可在参数中定义 快速移动线周期:13 慢速移动线周期:27 diff平滑移动周期:10】 输出到vDiff,vDea,
MACD值=2*(vDiff-vDea)【此MACD 需要K线数据达到一定数量后才能准确,一般K线数量超过周期值2倍即可】
7、GetBars([in] BSTR InstrumentID, [in] int Period, [in] int index, [out] int* Max, [out] double *Open, [out] double *Close,[out] double *Hight, [out] double *Low, [out] int * Volume, [out] int * Counts, [out] int * Counts,
[out] BSTR *UpdateTime);获取指定合约指定周期的K线序列数据,如:
GetBars(‘IF2301’,5,0,vmaxi,vopen,vclose,vhight,vlow,vvloumes,vCounts,vuptime); 获取IF2301五分钟周期的序号为0 的K线数据,输出值:vmaxi:此K线序列长度即数据记录个数,vopen开盘价,vclose收盘价,
vhight最高,vlow最低,vvloumes量,vuptime时间。
获取到vmaxi:此K线序列长度即数据记录个数后,可在for循环中逐个获取index=0,1,2...N的所有K线数据。
在COM组件退出登录时(如用户001882登录后 会在目录下有生成001882目录,在此目录中保存组件中的所有K线数据到用户ID.csv文件中(如:001882.csv)中。
格式如下:
第一是:Instrument[合约名],counts,Exchange【交易所】,period【周期】,index【索引】,RefLastPrice【上一价格】,RefOpenPrice【上一开盘价】,BeginFlag【周期启用标志】,RefMin【上一分钟数】,
Hight【最高】,Low【最低】,Max,500【读取最大数量=>登录时会读取此csv文件中的数据。最大k线数量上限500,可在此设置读取最大数量值】
然后BARS数据序列:Bars【bars K线数据序列开始标志】,Open【开盘价格】,Clos【收盘价格】e,Hight【最高】,Low【最低】,MacdDiff,time
在COM组件登录时,如果在登录用户ID目录下用户ID.csv文件存在(如用户001882登录 会在目录下有001882目录,在此目录中有001882.csv),组件会读取文件中的数据备用。
8、GetInstrumentInfoOut([in] BSTR InstrumentID, [out] DOUBLE* Multiply,[out] DOUBLE* PriceUnit, [out] DOUBLE* MarginRate, [out] BSTR* ExpireDate);获取合约信息。此命令执行后会在
OnGetInstrument事件中推送此合约的详细信息:([in] BSTR ExchangeID,[in] BSTR InstrumentID,[in] BSTR ExchangeInstID,[in] BSTR InstrumentName,[in] int ProductClass,[in] int MaxMarketOrderVolume,
[in] int MinMarketOrderVolume,[in] int MaxLimitOrderVolume,[in] int MinLimitOrderVolume,[in] int VolumeMultiple,[in] DOUBLE PriceTick,[in] BSTR ExpireDate,
[in] int IsTrading,[in] DOUBLE LongMarginRatio, [in] DOUBLE ShortMarginRatio,[in] int OptionsType,[in] BSTR ProductID,[in] int CombinationType,[in] int bIsLast);
2023-01-07 AppendExchangeTime("SHFE", "SHFE", 21, 0, 330, 0,0,&infoid);//组件添加交易所时间段 交易所代码 合约代码 小时 分钟 交易时长 开盘标志0开盘 9 收盘 用户标志 0组件添加 1 用户添加。
2023-01-07 OnOutExchangeTradeTimes([in] const BSTR ExchangeID, [in] const BSTR InstrumentID, [in] const BSTR OpenTime,[in] const BSTR CloseTime, [in] int TradeMins, [in] int Flag);
GetExchangeTradeTimes([in] BSTR ExchangeID, [in] BSTR InstrumentID,[out] int *MainLen, [in] int Mainindex, [out] int *SubLen, [in] int Subindex,[out] BSTR* ResultExchangeID,
[out] BSTR *ResultInstrumentID,[out] BSTR *ResultOpenTime, [out] BSTR *ResultCloseTime, [out] int *TradeMins, [out] int *Flag);
DeleteExchangeTradeTimes([in] BSTR ExchangeID, [in] BSTR InstrumentID, [out] int * InfoId, [out] BSTR *InfoMsg);
GetOutExchangeTradeTimes([in] BSTR ExchangeID, [in] BSTR InstrumentID);
休市日历数据结构如下,放在登录用户ID目录下用户ID.csv文件中,用来保证准确的K线计数。
CloseedTimes,ALL,1999-09-09 09:00:00,1999-09-09 09:00:00,ALL休市日历
CloseedTimes,ALL,1999-09-09 09:00:00,1999-09-09 09:00:00,ALL休市日历
CloseedTimes,ALL,1999-09-09 09:00:00,1999-09-09 09:00:00,ALL休市日历
CloseedTimes,ALL,1999-09-09 09:00:00,1999-09-09 09:00:00,ALL休市日历
CloseedTimes,SHFE,1998-08-08 08:00:00,1999-08-08 08:00:00,SHFE休市日历
CloseedTimes,SHFE,1998-08-08 08:00:00,1999-08-08 08:00:00,SHFE休市日历
CloseedTimes,CFFEX,1996-06-06 06:00:00,1999-06-06 06:00:00,CFFEX休市日历
CloseedTimes,CFFEX,1996-06-06 06:00:00,1999-06-06 06:00:00,CFFEX休市日历
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
C++
1
https://gitee.com/topview999/TopViewQHTCtpCom.git
git@gitee.com:topview999/TopViewQHTCtpCom.git
topview999
TopViewQHTCtpCom
上期技术CTPAPI_最新6.6.1T1_P1版_COM封装使用指南及其他语言调用示例代码
master

搜索帮助

23e8dbc6 1850385 7e0993f3 1850385