Skip to content

LocalCTP is a locally-deployed imitation CTP project that is free to use (double meaning).

Notifications You must be signed in to change notification settings

jinxin1688/LocalCTP

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

欢迎使用 LocalCTP

B站专栏文章

LocalCTP是一个部署于本地的仿CTP项目。本项目不联网,完全开源,接口完全同CTP,实现了大部分CTP柜台的功能。

如果有意见或建议,请联系作者秋水Aura(QQ 1005018695)。独自制作不易,欢迎打赏投食。

三人行,必有我师焉。欢迎加入QQ群 736174420 一起交流讨论 LocalCTP

LocalCTP特点

  1. 支持全市场的期货/套利组合合约/期权的交易
  2. 本地部署, 稳定运行, 策略安全得到彻底保障
  3. 支持windows/linux等多个平台, MAC也即将支持
  4. 支持FAK/FOK订单, 支持条件单.
  5. 成交撮合逻辑同SimNow,通过是否满足行情中的对手价来判断是否成交。
  6. 可以通过特定API接口来获取外部传入的行情快照,以更新账户的订单和资金等数据
  • 可以投喂给它实时行情以实现 实时仿真交易
  • 也可以投喂给它历史行情以实现 回测

使用方法

用LocalCTP它的dll(或so)文件(交易的dll库文件,即 thosttraderapi_se.dll或so),来替换你使用的CTP的同名的库文件。 请做好原始文件的备份。

懒人版

使用项目中已经生成好的dll或so,以替换CTP的同名的 交易库文件dll或so。

默认windows版dll(thosttraderapi_se.dll)是:

  • 64位, 使用VS2019和CTP v6.5.1版本头文件编译生成
  • (更多版本正在赶来,敬请期待……)

默认linux版so(thosttraderapi_se.so,前面可能带有lib前缀,不影响使用)是:

  • 64位, 使用CTP v6.5.1版本头文件编译生成,在CentOS7.8 和 Ubuntu18.04上测试通过。
  • (更多版本正在赶来,敬请期待……)

DIY版

根据LocalCTP库的代码来编译生成dll或so库并拿来使用,可以自由选择CTP(头文件)的版本和平台位数(32/64)。这种方法适合于有一定动手能力的玩家。

本API默认都是由6.5.1版本头文件编译生成,如需替换为别的API版本,需修改包含目录并重新编译,具体步骤:

Windows: (生成目录: bin/win/) 请把 ./LocalCTP/ctp_file/current 设置为你要使用的CTP的版本的头文件文件夹的副本(VS不支持快捷方式作为包含目录)。

Linux: (生成目录: bin/linux/ 通过makefile文件来make生成) 请把 current 设置为你要使用的CTP的版本的头文件文件夹的副本或软链接。 示例(设为指向 6.3.19 版本的软链接):

cd ./LocalCTP/ctp_file/

ln -snf ./6.3.19 ./current

注:修改 current 指向的版本后,需要重新编译生成dll或so文件。请做好备份。 切换版本后,可能需要将一些API中的新增的接口的虚函数进行实现,或者移除派生类中此前的继承的(已不存在的)虚函数,同时,可能部分函数或字段名称有改动,请根据实际情况来调整。

LocalCTP内部干了啥:

咱们通过CTP的API去下单,是报单到了CTP服务器,比如SimNow的仿真CTP服务器,或者期货公司的实盘CTP服务器。 而LocalCTP呢,它并不联网,下单时,并不会把你的单子通过网络发出去,它是在API内部,进行撮合和判断成交和更新账户持仓等,然后将成交回报等通过SPI发给用户。

LocalCTP包含交易API,而不包含行情API。 用户可以通过CTP的行情API从实盘获取行情快照来传入LocalCTP中。(友情提示:行情API实盘登录时并不会校验用户名和密码,实盘行情地址可咨询期货公司,也可以加入QQ群获取地址。)

支持的接口如下:

普通接口:

  1. CreateFtdcTraderApi
  2. GetApiVersion
  3. Release
  4. Init
  5. Join
  6. GetTradingDay
  7. RegisterFront
  8. RegisterFensUserInfo -> 接收行情快照
  9. RegisterSpi
  10. ReqAuthenticate
  11. ReqUserLogin
  12. ReqUserLogout
  13. ReqSettlementInfoConfirm

订单相关接口:

  1. ReqOrderInsert
  2. ReqOrderAction

查询相关接口:

  1. ReqQryInstrument
  2. ReqQryDepthMarketData
  3. ReqQryInvestor
  4. ReqQryOrder
  5. ReqQryTrade
  6. ReqQryTradingAccount
  7. ReqQryInvestorPosition
  8. ReqQryInvestorPositionDetail
  9. ReqQrySettlementInfo
  10. ReqQrySettlementInfoConfirm
  11. ReqQryClassifiedInstrument
  12. ReqQryExchange
  13. ReqQryProduct

部分接口说明:

  1. Init: 内部并不会连接网络,会从当前目录(或环境变量中的目录)的 instrument.csv 中读取合约信息。格式参见附带的同名文件。
  2. Join: 会直接返回。
  3. GetTradingDay: 会尽可能正确地返回交易日,无需登录。能处理夜盘(包括周五夜盘)的情况,但无法识别判断长假假期。
  4. RegisterFront: 会直接返回,并不会连接到参数中的地址。
  5. RegisterFensUserInfo: 【重要】被修改为接收行情快照的接口。内部会将参数转化为 CThostFtdcDepthMarketDataField* 类型并处理以更新行情数据,请在外部收到行情快照时调用此接口,使用方法可参考DEMO。
  6. ReqAuthenticate/ReqUserLogin/ReqUserLogout: 都不会校验参数,即都会直接认证/登录/登出成功。
  7. ReqOrderInsert: 现在已支持条件单(支持四种价格条件TThostFtdcContingentConditionType,即用最新价LastPrice和条件价StopPrice的四种比较类型)
  8. ReqOrderAction: 支持两种撤单方式:
    • OrderRef+FrontID+SessionID( 还需填IntrumentID )
    • OrderSysID+ExchangeID

账户数据说明:

账户初始数据: 所有账户的初始资金都是2000万,初始持仓为空。

所有合约的保证金率全部为10%,手续费全部为1元每手。

持仓和资金,会根据订单、成交和行情数据等来动态更新。

目前版本中,账户数据都不会保存到本地,即退出程序后,账户数据会重置。

下个版本中,账户数据会持久化保存到数据库中,敬请期待哦。

About

LocalCTP is a locally-deployed imitation CTP project that is free to use (double meaning).

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C 84.4%
  • C++ 15.6%