CTP-API开发系列之六:交易登录及查询流程

基于c++的CTP量化交易开发笔记(二):CTP 量化API介绍 CTP API实际就是上期所开发的,便于开发者使用的通用接口,包括头文件,数据结构,动静态库文件等,平时咱们炒股或者炒期货,是不是都有某某证券,某某财富的APP,先在证券交易所开户,然后给你一个账号,你就可以在app上看到实时行情,在app上你也可以看到持仓,证券市值,剩余本金,盈亏比例等等,这个api实际上就是替代了这些证券交易所或者期货交易所,你可以直接通过CTP与五大期货交易所链接,实现开平买撤查等操作。主要用于获取交易所行情和下达交易指令,如订阅行情,下单,撤单,预埋单,银期转账,信息查询等。 阅读详情
AI摘要

本文详细介绍了CTP-API的交易登录、数据查询和认证流程,包括全局配置、交易初始化步骤、私有和公共流订阅、OnFrontConnected和OnRspAuthenticate事件处理,以及如何根据版本筛选合约。后续将探讨实盘数据处理和报单操作等内容。

今天开始分享程序代码,主要以python语言为主。关于CTP-API的开发,前面进行了一些铺垫,不了解的朋友可以先看一下之前的文章,欢迎大家继续关注并订阅。

前情回顾

CTP-API开发系列之一:各版本更新说明(持续更新)
CTP-API开发系列之二:问题汇总(持续更新)
CTP-API开发系列之三:柜台系统简介
CTP-API开发系列之四:接口对接准备
CTP-API开发系列之五:SimNow环境介绍

全局配置参数

在这里插入图片描述
配置字段说明见之前的文章:CTP-API开发系列之五:SimNow环境介绍

交易初始化流程

def init_tradeapi():
	"初始化交易api"
	tradeapi = api.CThostFtdcTraderApi_CreateFtdcTraderApi("logs//trade_con//")
	log.info("1.CreateFtdcTraderApi:" + tradeapi.GetApiVersion())
	tradespi = CTradeSpi(tradeapi)
	log.info("2.RegisterFront:" + TradeFrontAddr)
	tradeapi.RegisterFront(TradeFrontAddr)
	log.info("3.RegisterSpi")
	tradeapi.RegisterSpi(tradespi)
	log.info("4.SubscribePrivateTopic")
	tradeapi.SubscribePrivateTopic(api.THOST_TERT_QUICK)  
	log.info("5.SubscribePublicTopic")
	tradeapi.SubscribePublicTopic(api.THOST_TERT_NONE)  
	log.info("6.Init")
	tradeapi.Init()
	log.info("7.Join")
	tradeapi.Join()

7步初始化交易api

1.创建交易api,参数"logs//trade_con//"指定flow目录,用于存放生成的.con文件,不传默认存放到当前路径。

 注意:如果指定了路径,必须提前创建好文件夹

2.设置交易托管系统(期货公司柜台系统)的网络通讯地址,可以注册一个或多个地址。

如果注册多个,会以最先建立TCP连接的地址作为当前连接地址进行连接,建立的连接如果中断,api会自动尝试重连。

3.注册一个派生自 CThostFtdcTraderSpi 接口类的实例,该实例将完成事件处理。
4.订阅私有流。该方法要在Init 方法前调用。若不调用则不会收到私有流的数据。推荐使用THOSTTERTRESTART方式订阅私有流。

THOST_TERT_RESTART:从本交易日开始重传(推荐)
THOST_TERT_RESUME:从上次收到的续传
THOST_TERT_QUICK:只传送登录后私有流的内容

5.订阅公共流。该方法要在Init 方法前调用。若不调用,默认RESTART模式订阅。

THOST_TERT_RESTART:从本交易日开始重传
THOST_TERT_RESUME:从上次收到的续传
THOST_TERT_QUICK:只传送登录后私有流的内容
THOST_TERT_NONE:取消订阅公有流

6.初始化运行环境,只有调用后,接口才开始发起前置的连接请求,也就是第2步设置的地址,连接建立成功后会回调 OnFrontConnected 函数,认证动作就是在该函数中进行。
7.等待一个接口实例线程的结束。

注:上述2,3,4,5步没有先后顺序之分,但必须在6,7步之前

订阅私有流注意事项

1.订阅私有流主要涉及交易、行权、银期等操作的推送通知。比如在A设备报的单,这个单子的状态变化会主动推送到该投资者目前所有在线的设备上。涉及的常用函数有:

/// 在该文件中 ThostFtdcTraderApi.h ,以OnRtn开头的函数
///报单通知
virtual void OnRtnOrder(CThostFtdcOrderField *pOrder) {};
///成交通知
virtual void OnRtnTrade(CThostFtdcTradeField *pTrade) {};
///执行宣告通知
virtual void OnRtnExecOrder(CThostFtdcExecOrderField *pExecOrder) {};
///期权自对冲通知
virtual void OnRtnOptionSelfClose(CThostFtdcOptionSelfCloseField *pOptionSelfClose) {};
///期货发起银行资金转期货通知
virtual void OnRtnFromBankToFutureByFuture(CThostFtdcRspTransferField *pRspTransfer) {};
///银行发起期货资金转银行通知
virtual void OnRtnFromFutureToBankByBank(CThostFtdcRspTransferField *pRspTransfer) {};

订阅公共流注意事项

1.公共流主要涉及合约交易状态通知:

/// 在该文件中 ThostFtdcTraderApi.h
///合约交易状态通知
virtual void OnRtnInstrumentStatus(CThostFtdcInstrumentStatusField *pInstrumentStatus) {};

2.合约的交易状态有以下几种:

/// 在该文件中 ThostFtdcUserApiDataType.h
/////////////////////////////////////////////////////////////////////////
///TFtdcInstrumentStatusType是一个合约交易状态类型
/////////////////////////////////////////////////////////////////////////
///开盘前
#define THOST_FTDC_IS_BeforeTrading '0'
///非交易
#define THOST_FTDC_IS_NoTrading '1'
///连续交易
#define THOST_FTDC_IS_Continous '2'
///集合竞价报单
#define THOST_FTDC_IS_AuctionOrdering '3'
///集合竞价价格平衡
#define THOST_FTDC_IS_AuctionBalance '4'
///集合竞价撮合
#define THOST_FTDC_IS_AuctionMatch '5'
///收盘
#define THOST_FTDC_IS_Closed '6'

3.问题:如下图所示,流量飙升的几个时间点,几乎所有的合约都会推送(一个合约一个合约进行回调),这些时间点的流量压力以及自己程序的处理压力都会比较大,尤其对于中继服务的开发,应该避免这样的订阅方式,上述demo中我采用的是“取消订阅”。
在这里插入图片描述
4.随着大量期权合约的上市,上期技术也发流量飙升的问题,并在v6.5.1版本新增了“取消订阅”的方式。当时还引发了生产故障,很多客户终端加载合约过慢导致无法打开。
在这里插入图片描述

交易认证登录流程

	def OnFrontConnected(self) -> "void":
		log.info("OnFrontConnected tradefront")
		authfield = api.CThostFtdcReqAuthenticateField()
		authfield.BrokerID = BROKERID
		authfield.UserID = USERID
		authfield.AppID = AppID
		authfield.AuthCode = AuthCode
		self.tapi.ReqAuthenticate(authfield, 0)
		log.info("send ReqAuthenticate: " + api_struct_serialize(authfield))
		
	def OnRspAuthenticate(self, pRspAuthenticateField: 'CThostFtdcRspAuthenticateField', pRspInfo: 'CThostFtdcRspInfoField', nRequestID: 'int', bIsLast: 'bool') -> "void":
		log.info('OnRspAuthenticate: ' + api_struct_serialize(pRspAuthenticateField))

		if not pRspInfo.ErrorID:
			loginfield = api.CThostFtdcReqUserLoginField()
			loginfield.BrokerID = BROKERID
			loginfield.UserID = USERID
			loginfield.Password = PASSWORD
			loginfield.UserProductInfo = "ctp_quant"
			self.tapi.ReqUserLogin(loginfield, 0)
			log.info("send ReqUserLogin: " + api_struct_serialize(loginfield))

OnFrontConnected

前面提到过,在与柜台系统连接建立成功后会回调该函数,然后进行认证,调用ReqAuthenticate函数。所有涉及的配置字段请参考之前的文章 CTP-API开发系列之五:SimNow环境介绍,里面有介绍关键字段。

OnRspAuthenticate

认证成功后(ErrorID == 0),填写登录相关信息,调用ReqUserLogin接口进行登录。

/// 在error.xml文件中
<error id="NONE" value="0" prompt="CTP:正确"/>

交易数据查询流程

登录成功后,就需要进行一些列的基础数据查询操作,基本就是一请求一响应的模式,下面的函数都可以在 ThostFtdcTraderApi.h 头文件中找到定义,就不一一解释了,最后会把日志截图放上来。

	def OnRspUserLogin(self, pRspUserLogin: 'CThostFtdcRspUserLoginField', pRspInfo: 'CThostFtdcRspInfoField', nRequestID: 'int', bIsLast: 'bool') -> "void":
		log.info("OnRspUserLogin: " + api_struct_serialize(pRspUserLogin))

		qryinfofield = api.CThostFtdcQrySettlementInfoField()
		qryinfofield.BrokerID = BROKERID
		qryinfofield.InvestorID = USERID
		qryinfofield.TradingDay = pRspUserLogin.TradingDay
		self.tapi.ReqQrySettlementInfo(qryinfofield, 0)  ## 请求查询投资者结算结果
		log.info("send ReqQrySettlementInfo: " + api_struct_serialize(qryinfofield))

	def OnRspQrySettlementInfo(self, pSettlementInfo: 'CThostFtdcSettlementInfoField', pRspInfo: 'CThostFtdcRspInfoField', nRequestID: 'int', bIsLast: 'bool') -> "void":
		log.info("OnRspQrySettlementInfo: " + api_struct_serialize(pSettlementInfo))
		pSettlementInfoConfirm = api.CThostFtdcSettlementInfoConfirmField()
		pSettlementInfoConfirm.BrokerID = BROKERID
		pSettlementInfoConfirm.InvestorID = USERID
		self.tapi.ReqSettlementInfoConfirm(pSettlementInfoConfirm, 0)  ## 投资者结算结果确认
		log.info("send ReqSettlementInfoConfirm: " + api_struct_serialize(pSettlementInfoConfirm))

	def OnRspSettlementInfoConfirm(self, pSettlementInfoConfirm: 'CThostFtdcSettlementInfoConfirmField', pRspInfo: 'CThostFtdcRspInfoField', nRequestID: 'int', bIsLast: 'bool') -> "void":
		log.info("OnRspSettlementInfoConfirm: " + api_struct_serialize(pSettlementInfoConfirm))

		pQryTradingAccount = api.CThostFtdcQryTradingAccountField()
		pQryTradingAccount.BrokerID = BROKERID
		pQryTradingAccount.InvestorID = USERID
		self.tapi.ReqQryTradingAccount(pQryTradingAccount, 0)  ## 请求查询资金账户
		log.info("send ReqQryTradingAccount: " + api_struct_serialize(pQryTradingAccount))

	def OnRspQryTradingAccount(self, pTradingAccount: 'CThostFtdcTradingAccountField', pRspInfo: 'CThostFtdcRspInfoField', nRequestID: 'int', bIsLast: 'bool') -> "void":
		log.info("OnRspQryTradingAccount: " + api_struct_serialize(pTradingAccount))

		pQryOrder = api.CThostFtdcQryOrderField()
		pQryOrder.BrokerID = BROKERID
		pQryOrder.InvestorID = USERID
		self.tapi.ReqQryOrder(pQryOrder, 0)  ## ///请求查询报单
		log.info("send ReqQryOrder: " + api_struct_serialize(pQryOrder))

	def OnRspQryOrder(self, pOrder: 'CThostFtdcOrderField', pRspInfo: 'CThostFtdcRspInfoField', nRequestID: 'int', bIsLast: 'bool') -> "void":
		log.info("OnRspQryOrder: " + api_struct_serialize(pOrder))

		if bIsLast:
			pQryTrade = api.CThostFtdcQryTradeField()
			pQryTrade.BrokerID = BROKERID
			pQryTrade.InvestorID = USERID
			self.tapi.ReqQryTrade(pQryTrade, 0) ## ///请求查询成交
			log.info("send pQryTrade: " + api_struct_serialize(pQryTrade))

	def OnRspQryTrade(self, pTrade: 'CThostFtdcTradeField', pRspInfo: 'CThostFtdcRspInfoField', nRequestID: 'int', bIsLast: 'bool') -> "void":
		log.info("OnRspQryTrade: " + api_struct_serialize(pTrade))

		if bIsLast:
			pQryInvestorPosition = api.CThostFtdcQryInvestorPositionField()
			pQryInvestorPosition.BrokerID = BROKERID
			pQryInvestorPosition.InvestorID = USERID
			self.tapi.ReqQryInvestorPosition(pQryInvestorPosition, 0)  ## ///请求查询投资者持仓
			log.info("send ReqQryInvestorPosition: " + api_struct_serialize(pQryInvestorPosition))

	def OnRspQryInvestorPosition(self, pInvestorPosition: 'CThostFtdcInvestorPositionField', pRspInfo: 'CThostFtdcRspInfoField', nRequestID: 'int', bIsLast: 'bool') -> "void":
		log.info("OnRspQryInvestorPosition: " + api_struct_serialize(pInvestorPosition))

		if bIsLast:
			pQryInstrument = api.CThostFtdcQryInstrumentField()
			pQryInstrument.ProductID = 'rb'               
			self.tapi.ReqQryInstrument(pQryInstrument, 0)  ## ///请求查询合约
			log.info("send ReqQryInstrument: " + api_struct_serialize(pQryInstrument))

	def OnRspQryInstrument(self, pInstrument: 'CThostFtdcInstrumentField', pRspInfo: 'CThostFtdcRspInfoField', nRequestID: 'int', bIsLast: 'bool') -> "void":
		# 过滤期货合约
		if pInstrument.ProductClass == api.THOST_FTDC_PC_Futures:
			self.subIDs.append(pInstrument.InstrumentID)
		if bIsLast:
			log.info("OnRspQryInstrument isLast! size:" + str(len(self.subIDs)))
			log.debug(self.subIDs)

新增查询分类合约的接口(v6.5.1版本)

1.上述demo中,只查询rb品种相关的合约,此外还可以按照以下四个类别进行过滤,都不填的话查询所有合约(包括期权合约但没有组合以及非交易的合约)
在这里插入图片描述
2.CTP合约信息可分为可交易合约和非交易合约,非交易合约数据量占比较大。新增查询分类合约接口可依据查询请求域交易类型TradingType字段查询指定合约信息。

///请求查询分类合约:
virtual int ReqQryClassifiedInstrument(CThostFtdcQryClassifiedInstrumentField *pQryClassifiedInstrument, int nRequestID) = 0;
///请求查询分类合约响应:
virtual void OnRspQryClassifiedInstrument(CThostFtdcInstrumentField *pInstrument, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast)
///查询分类合约
struct CThostFtdcQryClassifiedInstrumentField
{
    ///合约代码
    TThostFtdcInstrumentIDType  InstrumentID;
    ///交易所代码
    TThostFtdcExchangeIDType    ExchangeID;
    ///合约在交易所的代码
    TThostFtdcExchangeInstIDType    ExchangeInstID;
    ///产品代码
    TThostFtdcInstrumentIDType  ProductID;
    ///合约交易状态
    TThostFtdcTradingTypeType   TradingType;
    ///合约分类类型
    TThostFtdcClassTypeType ClassType;
};
/// 其中合约类型TradingType的枚举值为:
///所有状态
#define TD_ALL '0'
///交易
#define TD_TRADE '1'
///非交易
#define TD_UNTRADE '2'

/// 分类类型ClassType的枚举值为:
///所有合约
#define INS_ALL '0'
///期货、即期、期转现、Tas、金属指数合约
#define INS_FUTURE '1'
///期货期权、现货期权合约
#define INS_OPTION '2'
///组合合约
#define INS_COMB '3' //对应产品类型字段Productclass 为组合类型

日志截图

为了方便对结构体字段、值进行分析,实现了一个api_struct_serialize函数,将ctp-api中的结构体及值以冒号逗号的形式进行输出。

在这里插入图片描述

下节预告

交易认证登录成功了,一些基础数据也查询到了,此外还有合约保证金率查询接口和合约手续费率查询接口,这也是比较慢的两个接口。

后面会分享一些实盘基础数据查询与存储的方法,总的思路就是盘前可以慢慢查,盘中避免查;盘中服务如果重启,则使用本来存储的数据,避免API线程的频繁占用,影响交易报单回推数据的接收。

下节会用代码实现报单操作,以及收到报单回推数据的字段分析,结合柜台系统的架构,详细拆解报单状态的流转,为后续的仓位管理做铺垫。

CTP-API开发系列之四:接口对接准备 CTP-API是建立在TCP协议之上FTD协议与柜台系统进行通讯,柜台系统服务投资者的交易业务处理以及与各个交易所之间的通信。开发者需要继承该接口类,并实现其中相应的虚函数。 阅读详情

相关推荐

CTP-API开发系列之一:各版本更新说明(持续更新)(值得收藏)

对期货CTPAPI不同版本进行抓包对比分析,同一个程序更换不同的 thosttraderapi_se 动态库文件(6.6.8和6.7.0),分别连实盘进行相同的操作:认证、登录、确认结算单、资金查询、持仓查询、委托查询。采用lz4压缩算法的6.7.0版本,从下发的包的个数上有很大的提升,流量也仅有原来的30%左右。

码上助君的专栏 4305

X-Trader:CTP-API交易接口深度解析

特别声明:标价仅为视频价格(为避免不必要的纠纷,请详细了解清楚后再拍!!!)特别声明:标价仅为视频价格(为避免不必要的纠纷,请详细了解清楚后再拍!!!)特别声明:标价仅为视频价格(为避免不必要的纠纷,请详细了解清楚后再拍!!!) 获取文档和源码请加作者vx:X_Trader_Lab适合人群X-Trader:从CTP-API 到期货日内策略,适合对期货期权日内交易感兴趣的同学。 学习目标本课程体系分成三个子课程(本子课程为课程体系的第一部分):本课程体系分成三个子课程(本子课程为课程体系的第一部分):本课程体系分成三个子课程(本子课程为课程体系的第一部分):1.CTP-API交易接口深度解析2.深度探索X-Trader交易框架3.期货日内策略的原理及框架(本子课程为课程体系的第一部分) 详细介绍X-Trader 是一个基于C++ 的,适应全市场全品种交易的跨平台的极简量化交易框架,X-Trader 支持用户使用C++ 构 建各种类型的量化交易策略程序, 并提供包含历史数据-实时数据-开发调试-模拟交易-实盘交易-运行监控-风险 管理的一站式解决方案。本课程旨在帮助同学们从0 到1,掌握期货日内交易策略框架的核心技术。 课程大纲1.1 CTP1.2 API1.3 开启程序化交易之旅1.4 CTP-API 的基本架构及初始化1.5 行情接口开发1.6 行情数据处理1.7 看穿式监管评测1.8 交易接口开发1.9 报单1.10 报单回报1.11 撤单1.12 成交回报1.13 回调规则1.14 查询持仓1.15 更新持仓1.16 查询保证金率和手续费率1.17 规避自成交1.18 报单流控、查询流控和会话数控制

CTP接口入门

该文章主要讲什么 这篇文章的面向对象是有一些C++基础,并且想用C++来做程式化交易的同学。 这篇文章可以算是我的程式化学习笔记中的一篇。其中介绍了CTP的简单的使用方式,并且附上了一些代码以及我在试用的时候遇到的一些小坑。 什么是CTP CTP是上海期货推出的一套可供程序调用的交易接口。就好比官方给程序化交易提供了的一个专门的业务窗口。 接口相关文件下载 CTP接口可以在上期...

weizehua的专栏 4万+

Hello CTP(三)——CTP行情API

一、期货行情数据 Tick数据一般指市场上的逐笔数据,例如一笔委托会产生一笔行情,一笔成交也会产生一笔行情。目前国内期货交易所还不支持推送逐笔数据,只推送切片(快照)数据。 切片数据是指将一定时间内的逐笔数据统计成一个快照发出,一般是1秒2笔。CTP行情转发的交易所行情,500ms一次快照。 二、CTP行情 1、CTP行情API简介 CThostFtdcMdApi行情API接口包含CThostFtdcMdApi和CThostFtdcMdSpi,通过CThostFtdcMdApiApi向CTP发送命

天山老妖 1万+

CTP-API开发系列之八:报撤单代码实现

在前面的章节,分享了交易API认证登录以及基础数据查询的代码流程,并介绍了报撤单及回报顺序,这节继续分享报单、撤单相关的代码实现。

码上助君的专栏 3136

python期货自动化交易_Python API面纱下的函数——基于CTP的国内期货程序化交易之报单流程讲解...

很多用户已经阅读了真格量化的Python API文档,知道了其是对一些交易柜台,比如CTP C++ API的封装。这里我们可以看看这些API在C++中的原始面貌。我们还是以CTP柜台为例。与海外市场很多连续交易的品种相比,国内期货市场的期货品种需要考虑更多的规则。第一就是交易时间段。许多外盘品种能全天23小时连续交易,而国内许多期货品种,全天分四个时间段交易,分别为9:00至10:15、10:30...

weixin_39689377的博客 1879

Hello CTP(四)——CTP交易API

一、CTP交易API简介 1、CTP交易API简介 CThostFtdcTraderApi交易API接口包含CThostFtdcTraderApi和CThostFtdcTraderSpi,通过CThostFtdcTraderApi向CTP发送操作请求,通过CThostFtdcTraderSpi接收CTP操作响应。 2、CTP API交易流程 (1)创建CTP API实例 CThostFtdcTraderApi*pTradeApi=CThostFtdcTraderApi::CreateFtdc...

天山老妖 9105

C++连接Simnow Linux API实现简单量化交易操作文档

本文为本人学习上期所Simnow Linux API连接行情和交易接口时整理的学习笔记,欢迎沟通交流~

qq_43523544的博客 2275

CTP程序化交易入门系列之二:API基本架构及初始化

上节讲了CTP程序化交易的入门工作:下载API,准备账号密码地址等。这节我们来讲API基本架构及初始化。 一、 CTP API基本架构  这里为了便于大家理解API的相关函数,我简略地讲一下API的基本架构。如上图所画,左边部分是客户的交易程序,中间是封装好的API动态库底层;右边是CTP系统。以客户登录为例,顺序逻辑如下: 客户程序里调用API的函数ReqUserLogin写入动态库底层...

景色正好的专栏 1万+

浅谈CTP期货行情交易API

上期所期货CTP接口分享,c++源码测试。

少年夜雨行的专栏 1万+

【大唐杯学习超快速入门】5G技术原理仿真教学——5G网络开通调测与车联网

自用笔记,比较乱。

qq_41224270的博客 1万+

期货量化交易入门系列二——CTP和CTP API的概念

摘要: CTP(Comprehensive Transaction Platform)是上海期货交易所自主研发的核心期货/期权交易系统,提供交易、行情、风控等功能。CTP API是其编程接口,分为交易接口和行情接口,支持自动化交易与数据获取,具有低延迟、异步通信等技术特点。开发者需通过C++或封装语言接入,流程包括登录认证、行情订阅和交易指令处理。CTP API适用于高频交易、量化策略等场景,优势在于低延迟和稳定性,但开发复杂度较高。与其它API相比,CTP专攻境内市场且生态丰富。学习资源包括官方文档和开源

mdd2012的专栏 4737

深入解析五大ADC芯片架构及其应用场景

本文深入解析了五大ADC芯片架构及其应用场景,包括逐次逼近型ADC、Σ-Δ型ADC、流水线型ADC、闪存型ADC和积分型ADC。通过详细的架构分析和实际应用案例,帮助工程师理解不同ADC芯片的特点和适用场景,提升电路设计效率。

weixin_28702105的博客 354

C++连接CTP接口实现简单量化交易(行情、交易、k线、策略)

本文章和相关代码已不再更新,在行业合规的范围内,进一步的量化金融技术交流,可以扫码咨询 对于量化交易来说,量化策略和技术系统缺一不可,为了知其所以然,本文实现了一个C++连接CTP接口进行仿真交易的demo,从接收行情、下订单、数据处理到添加策略、挂载运行交易等多个环节来看一下量化交易的最简单流程,管中窥豹,一探究竟。 准备工作 交易所接口 这里使用上期所提供的CTP接口API,通过...

踏莎行的博客 12万+

DAC8568实战指南:如何用STM32实现8通道DAC精准控制(附代码)

本文提供DAC8568与STM32结合的实战指南,详细解析8通道16位DAC的精准控制方法。内容涵盖硬件连接、SPI配置、驱动层构建、时序调试及多通道同步输出等关键步骤,并附有经过验证的HAL库驱动代码,帮助工程师快速解决实际项目中的通信与输出稳定性问题。

weixin_29175469的博客 743

如何设计一个低代码平台

近些年来,低代码发展火热,各种低代码平台如雨后春笋纷纷崛起,这些平台各定位不同,优劣不同,用户的选择空间很大。那么,如果用户想从零开始设计一个低代码平台,该如何做呢?

Jarod_Chou的博客 8256

CTP程序化交易入门系列之四:行情订阅常见问题解答

前言 这一章总结了大家订阅行情最常问的一些问题的相关解答,希望能有帮助。如有不对的地方,欢迎指正。后期会在这里更新迭代,欢迎到这底下提问! 更新时间:20191102 1 获取行情的地址在哪里可以查到? simnow发的即是实时行情,官网上可以看到该行情地址。 期货公司行情地址可咨询期货公司,或者到对应公司官网下载个快期,点击测速就可以看到。主要期货公司的行情地址可以在公众号(微信搜...

景色正好的专栏 2万+

[捷稀 JCG Q30 Pro 刷机说明] 以刷入openwrt24.10为例

摘要: 本文详细介绍了捷稀JCG Q30 Pro路由器刷入OpenWrt 24.10系统的步骤。通过先刷入OpenWrt 23.05过渡固件,再升级Uboot,最后通过TFTP加载工厂镜像完成刷机。关键步骤包括解锁分区、刷写Uboot、进入恢复模式及配置网络。文章还提供了无线设置、Tailscale内网穿透等进阶命令,并附参考文档和固件下载链接。适用于有一定技术基础的玩家,需注意操作风险,严格按流程执行。

贤时间 7129

量化交易期货ctp使用说明(企业版,穿透式监管)(值得收藏)

1.代码说明 本文章中的期货ctp代码来自分布式高频量化交易系统 联系作者,获取源码: 2.期货ctp介绍, 2.1 期货账户 要连接期货交易所交易,需要开设自己的账户,实现期货交易、银期转账、保证金等功能,由于小白一般不会用实盘资金交易,所以此处推荐用上期所提供的simnow虚拟交易平台申请一个虚拟账户。simnow地址:www.simnow.com.cn 2.2账户信息 1.BrokerID 简称期商编码,是指该期货公司在CTP系统上的编码,为四位数。例如海通期货是8000。

zhaozhigen的博客 1万+

LTO编译器优化介绍以及开启方法

LTO优化的详细介绍

性感的小君君 4922

ML307R OpenCPU TCP使用

实现现象 平台下发数据,板子在收到数据之后,马上再发送到平台,通过串口助手可以看到已经接收到数据。ML307R TCP 是使用LWIP的标准的socket通信,具体TCP流程可以自行百度。实验目的:实现把接收的数据再发送到服务端。因为是4G,所以必须用外网的。

面朝大海春暖花开 2231

CTP-API开发系列之九:行情登录及订阅代码

在前面,交易相关常用的功能基本已经实现完成了,相比交易API的功能,行情API的功能就要简单的多了,今天分享一下行情登录、行情订阅的代码,以及相关的注意事项。

码上助君的专栏 2843

15、降维算法:原理、实现与应用

本文深入介绍了多种降维算法,包括线性方法如主成分分析(PCA)和线性判别分析(LDA),以及非线性方法如Sammon映射、t分布随机邻域嵌入(t-SNE)和自编码器。文章通过C++库Dlib和Shogun展示了这些算法的具体实现,并结合图像压缩和数据可视化等实际案例,分析了不同算法的适用场景。此外,还探讨了降维算法的选择策略、优化改进方法以及未来发展趋势,为读者提供了全面的技术理解和应用指导。

lemon的博客 115

如何用CTP接口开发自己的交易系统?(一)

程序化交易系统是一个复杂的多线程网络程序,在开发过程中要特别注意处理很多的线程互斥、数据处理造成的网络丢包等一系列棘手问题。另外,对于CTP开发的资料,大家可以留言给我,我尽量提供,也欢迎大家多多讨论。 自从综合交易平台(CTP)的API开放以来,很多人开始编写自己的程序化交易系统,今天我想说说自己的一些看法。 首先解读一下CTP的接口说明,CTP的API使用建立在TCP协议之上FTD协议(《期货交易数据交换协议》)与交易托管系统进行通讯,而交易托管系统负责投资者的交易业务处理。FTD协议中规定了...

feikudai8460的博客 6392

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

CTP-API开发系列之七:报撤单及回报顺序

本文主要分享报单相关的函数,例举了一些常用的报单操作所对应的回调规则(委托回报,成交回报,废单回报),并结合一些重要序号与报单请求进行关联。

码上助君的专栏 4618

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

CTP开发爬坑指北(六)

众所周知,天下大坑共一石,CTP独占八斗。进行CTP开发时,里面需要注意的地方比较多。今天给大家聊一聊CTP中暗藏的一些坑,让新手避开陷阱。

baidu_37097818的博客 2994

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

上一篇: CTP-API开发系列之五:SimNow环境介绍
下一篇: CTP-API开发系列之七:报撤单及回报顺序
码上助君
博客等级 码龄12年 685粉丝 62原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值