Files
QTradeProgram/include/FTAPI.h
2025-08-15 15:57:31 +08:00

446 lines
16 KiB
C++
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#pragma once
#include "FTAPI_Define.h"
class FTAPIImp;
namespace Futu {
class FTSPI_Conn;
class FTSPI_Qot;
class FTSPI_Trd;
class FTAPI_Conn
{
public:
FTAPI_Conn();
virtual ~FTAPI_Conn();
public:
/**
* @brief 设置客户端信息
* @param [in] strClientID 客户端标识
* @param [in] nClientVer 客户端版本
*/
void SetClientInfo(const char* szClientID, Futu::i32_t nClientVer);
/**
* @brief 设置密钥
* @param [in] strRSAPrivateKey 密钥
*/
void SetRSAPrivateKey(const char* szRSAPrivateKey);
/**
* @brief 初始化连接,连接并初始化
* @param [in] szIPAddr 地址
* @param [in] nPort 端口
* @param [in] bEnableEncrypt 启用加密
* @return bool 是否启动了执行不代表连接结果结果通过OnInitConnect回调
*/
bool InitConnect(const char* szIPAddr, Futu::u16_t nPort, bool bEnableEncrypt);
/**
* @brief 此连接的连接ID连接的唯一标识InitConnect协议返回没有初始化前为0
* @return 连接ID
*/
Futu::u64_t GetConnectID();
/**
* @brief 关闭连接
* @return 是否成功
*/
bool Close();
/**
* @brief 注册回调
* @param [in] pSpi 回调,该对象没有反注册前不可销毁
*/
void RegisterConnSpi(FTSPI_Conn* pSpi);
/**
* @brief 反注册回调
*/
void UnregisterConnSpi();
};
/**
* @brief 行情接口
*/
class FTAPI_Qot : public FTAPI_Conn
{
public:
FTAPI_Qot();
virtual ~FTAPI_Qot();
public:
/**
* @brief 注册回调
* @param [in] pSpi 回调,该对象没有反注册前不可销毁
*/
void RegisterQotSpi(FTSPI_Qot* pSpi);
/**
* @brief 反注册回调
*/
void UnregisterQotSpi();
/**
* @brief 订阅,反订阅
* @param [in] stReq 请求包具体字段请参考Qot_Sub.proto协议
* @return Futu::u32_t 包序列号, 0表示请求发送失败
*/
Futu::u32_t Sub(const Qot_Sub::Request &stReq);
/**
* @brief 获取全局信息
* @param [in] stReq 请求包具体字段请参考GetGlobalState.proto协议
* @return Futu::u32_t 包序列号, 0表示请求发送失败
*/
Futu::u32_t GetGlobalState(const GetGlobalState::Request &stReq);
/**
* @brief 注册推送,用于当前连接订阅,但是在其他连接获取推送的场景
* @param [in] stReq 请求包具体字段请参考Qot_RegQotPush.proto协议
* @return Futu::u32_t 包序列号, 0表示请求发送失败
*/
Futu::u32_t RegQotPush(const Qot_RegQotPush::Request &stReq);
/**
* @brief 获取订阅信息
* @param [in] stReq 请求包具体字段请参考Qot_GetSubInfo.proto协议
* @return Futu::u32_t 包序列号, 0表示请求发送失败
*/
Futu::u32_t GetSubInfo(const Qot_GetSubInfo::Request &stReq);
/**
* @brief 获取逐笔,调用该接口前需要先订阅(订阅位Qot_Common.SubType_Ticker)
* @param [in] stReq 请求包具体字段请参考Qot_GetTicker.proto协议
* @return Futu::u32_t 包序列号, 0表示请求发送失败
*/
Futu::u32_t GetTicker(const Qot_GetTicker::Request &stReq);
/**
* @brief 获取报价,调用该接口前需要先订阅(订阅位Qot_Common.SubType_Basic)
* @param [in] stReq 请求包具体字段请参考Qot_GetBasicQot.proto协议
* @return Futu::u32_t 包序列号, 0表示请求发送失败
*/
Futu::u32_t GetBasicQot(const Qot_GetBasicQot::Request &stReq);
/**
* @brief 获取摆盘,调用该接口前需要先订阅(订阅位Qot_Common.SubType_OrderBook)
* @param [in] stReq 请求包具体字段请参考Qot_GetOrderBook.proto协议
* @return Futu::u32_t 包序列号, 0表示请求发送失败
*/
Futu::u32_t GetOrderBook(const Qot_GetOrderBook::Request &stReq);
/**
* @brief 获取K线调用该接口前需要先订阅(订阅位Qot_Common.SubType_KL_XXX)
* @param [in] stReq 请求包具体字段请参考Qot_GetKL.proto协议
* @return Futu::u32_t 包序列号, 0表示请求发送失败
*/
Futu::u32_t GetKL(const Qot_GetKL::Request &stReq);
/**
* @brief 获取分时,调用该接口前需要先订阅(订阅位Qot_Common.SubType_RT)
* @param [in] stReq 请求包具体字段请参考GetRT.proto协议
* @return Futu::u32_t 包序列号, 0表示请求发送失败
*/
Futu::u32_t GetRT(const Qot_GetRT::Request &stReq);
/**
* @brief 获取经纪队列,调用该接口前需要先订阅(订阅位Qot_Common.SubType_Broker)
* @param [in] stReq 请求包具体字段请参考Qot_GetBroker.proto协议
* @return Futu::u32_t 包序列号, 0表示请求发送失败
*/
Futu::u32_t GetBroker(const Qot_GetBroker::Request &stReq);
/**
* @brief 在线请求历史复权信息不读本地历史数据DB
* @param [in] stReq 请求包具体字段请参考Qot_RequestRehab.proto协议
* @return Futu::u32_t 包序列号, 0表示请求发送失败
*/
Futu::u32_t RequestRehab(const Qot_RequestRehab::Request &stReq);
/**
* @brief 在线请求历史K线不读本地历史数据DB
* @param [in] stReq 请求包具体字段请参考Qot_RequestHistoryKL.proto协议
* @return Futu::u32_t 包序列号, 0表示请求发送失败
*/
Futu::u32_t RequestHistoryKL(const Qot_RequestHistoryKL::Request &stReq);
/**
* @brief 获取历史K线已经用掉的额度
* @param [in] stReq 请求包具体字段请参考Qot_RequestHistoryKLQuota.proto协议
* @return Futu::u32_t 包序列号, 0表示请求发送失败
*/
Futu::u32_t RequestHistoryKLQuota(const Qot_RequestHistoryKLQuota::Request &stReq);
/**
* @brief 获取交易日
* @param [in] stReq 请求包具体字段请参考Qot_GetTradeDate.proto协议
* @return Futu::u32_t 包序列号, 0表示请求发送失败
*/
Futu::u32_t GetTradeDate(const Qot_GetTradeDate::Request &stReq);
/**
* @brief 获取静态信息
* @param [in] stReq 请求包具体字段请参考Qot_GetStaticInfo.proto协议
* @return Futu::u32_t 包序列号, 0表示请求发送失败
*/
Futu::u32_t GetStaticInfo(const Qot_GetStaticInfo::Request &stReq);
/**
* @brief 获取股票快照
* @param [in] stReq 请求包具体字段请参考Qot_GetSecuritySnapshot.proto协议
* @return Futu::u32_t 包序列号, 0表示请求发送失败
*/
Futu::u32_t GetSecuritySnapshot(const Qot_GetSecuritySnapshot::Request &stReq);
/**
* @brief 获取板块集合下的板块
* @param [in] stReq 请求包具体字段请参考Qot_GetPlateSet.proto协议
* @return Futu::u32_t 包序列号, 0表示请求发送失败
*/
Futu::u32_t GetPlateSet(const Qot_GetPlateSet::Request &stReq);
/**
* @brief 获取板块下的股票
* @param [in] stReq 请求包具体字段请参考Qot_GetPlateSecurity.proto协议
* @return Futu::u32_t 包序列号, 0表示请求发送失败
*/
Futu::u32_t GetPlateSecurity(const Qot_GetPlateSecurity::Request &stReq);
/**
* @brief 获取相关股票
* @param [in] stReq 请求包具体字段请参考Qot_GetReference.proto协议
* @return Futu::u32_t 包序列号, 0表示请求发送失败
*/
Futu::u32_t GetReference(const Qot_GetReference::Request &stReq);
/**
* @brief 获取股票所属的板块
* @param [in] stReq 请求包具体字段请参考Qot_GetOwnerPlate.proto协议
* @return Futu::u32_t 包序列号, 0表示请求发送失败
*/
Futu::u32_t GetOwnerPlate(const Qot_GetOwnerPlate::Request &stReq);
/**
* @brief 获取大股东持股变化列表
* @param [in] stReq 请求包具体字段请参考Qot_GetHoldingChangeList.proto协议
* @return Futu::u32_t 包序列号, 0表示请求发送失败
*/
Futu::u32_t GetHoldingChangeList(const Qot_GetHoldingChangeList::Request &stReq);
/**
* @brief 筛选期权
* @param [in] stReq 请求包具体字段请参考Qot_GetOptionChain.proto协议
* @return Futu::u32_t 包序列号, 0表示请求发送失败
*/
Futu::u32_t GetOptionChain(const Qot_GetOptionChain::Request &stReq);
/**
* @brief 筛选窝轮
* @param [in] stReq 请求包具体字段请参考Qot_GetWarrant.proto协议
* @return Futu::u32_t 包序列号, 0表示请求发送失败
*/
Futu::u32_t GetWarrant(const Qot_GetWarrant::Request &stReq);
/**
* @brief 获取资金流向
* @param [in] stReq 请求包具体字段请参考Qot_GetCapitalFlow.proto协议
* @return Futu::u32_t 包序列号, 0表示请求发送失败
*/
Futu::u32_t GetCapitalFlow(const Qot_GetCapitalFlow::Request &stReq);
/**
* @brief 获取资金分布
* @param [in] stReq 请求包具体字段请参考Qot_GetCapitalDistribution.proto协议
* @return Futu::u32_t 包序列号, 0表示请求发送失败
*/
Futu::u32_t GetCapitalDistribution(const Qot_GetCapitalDistribution::Request &stReq);
/**
* @brief 获取自选股分组下的股票
* @param [in] stReq 请求包具体字段请参考Qot_GetUserSecurity.proto协议
* @return Futu::u32_t 包序列号, 0表示请求发送失败
*/
Futu::u32_t GetUserSecurity(const Qot_GetUserSecurity::Request &stReq);
/**
* @brief 修改自选股分组下的股票
* @param [in] stReq 请求包具体字段请参考Qot_ModifyUserSecurity.proto协议
* @return Futu::u32_t 包序列号, 0表示请求发送失败
*/
Futu::u32_t ModifyUserSecurity(const Qot_ModifyUserSecurity::Request &stReq);
/**
* @brief 条件选股
* @param [in] stReq 请求包具体字段请参考Qot_StockFilter.proto协议
* @return Futu::u32_t 包序列号, 0表示请求发送失败
*/
Futu::u32_t StockFilter(const Qot_StockFilter::Request &stReq);
/**
* @brief 获取股票代码变化
* @param [in] stReq 请求包具体字段请参考Qot_GetCodeChange.proto协议
* @return Futu::u32_t 包序列号, 0表示请求发送失败
*/
Futu::u32_t GetCodeChange(const Qot_GetCodeChange::Request &stReq);
/**
* @brief 新股IPO
* @param [in] stReq 请求包具体字段请参考Qot_GetIpoList.proto协议
* @return Futu::u32_t 包序列号, 0表示请求发送失败
*/
Futu::u32_t GetIpoList(const Qot_GetIpoList::Request &stReq);
/**
* @brief 期货合约资料
* @param [in] stReq 请求包具体字段请参考Qot_GetFutureInfo.proto协议
* @return Futu::u32_t 包序列号, 0表示请求发送失败
*/
Futu::u32_t GetFutureInfo(const Qot_GetFutureInfo::Request &stReq);
/**
* @brief 获取市场交易日,在线拉取不在本地计算
* @param [in] stReq 请求包具体字段请参考Qot_RequestTradeDate.proto协议
* @return Futu::u32_t 包序列号, 0表示请求发送失败
*/
Futu::u32_t RequestTradeDate(const Qot_RequestTradeDate::Request &stReq);
/**
* @brief 设置到价提醒
* @param [in] stReq 请求包具体字段请参考Qot_SetPriceReminder.proto协议
* @return Futu::u32_t 包序列号, 0表示请求发送失败
*/
Futu::u32_t SetPriceReminder(const Qot_SetPriceReminder::Request &stReq);
/**
* @brief 获取到价提醒
* @param [in] stReq 请求包具体字段请参考Qot_GetPriceReminder.proto协议
* @return Futu::u32_t 包序列号, 0表示请求发送失败
*/
Futu::u32_t GetPriceReminder(const Qot_GetPriceReminder::Request &stReq);
/**
* @brief 获取自选股分组列表
* @param [in] stReq 请求包具体字段请参考Qot_GetUserSecurityGroup.proto协议
* @return Futu::u32_t 包序列号, 0表示请求发送失败
*/
Futu::u32_t GetUserSecurityGroup(const Qot_GetUserSecurityGroup::Request &stReq);
/**
* @brief 获取市场状态
* @param [in] stReq 请求包具体字段请参考Qot_GetMarketState.proto协议
* @return Futu::u32_t 包序列号, 0表示请求发送失败
*/
Futu::u32_t GetMarketState(const Qot_GetMarketState::Request &stReq);
/**
* @brief 获取期权链到期日
* @param [in] stReq 请求包具体字段请参考Qot_GetOptionExpirationDate.proto协议
* @return Futu::u32_t 包序列号, 0表示请求发送失败
*/
Futu::u32_t GetOptionExpirationDate(const Qot_GetOptionExpirationDate::Request &stReq);
};
/**
* @brief 交易接口
*/
class FTAPI_Trd : public FTAPI_Conn
{
public:
FTAPI_Trd();
virtual ~FTAPI_Trd();
public:
/**
* @brief 注册回调
* @param [in] pSpi 回调,该对象没有反注册前不可销毁
*/
void RegisterTrdSpi(FTSPI_Trd* pSpi);
/**
* @brief 反注册回调
*/
void UnregisterTrdSpi();
/**
* @brief 获取交易包标识
* @param [out] 获取到的交易包标识
* @return bool 是否成功,没有初始化前调用会返回失败
*/
bool GetPacketID(Common::PacketID &stPacketID);
/**
* @brief 获取交易帐号列表
* @param [in] stReq 请求包具体字段请参考Trd_GetAccList.proto协议
* @return Futu::u32_t 包序列号, 0表示请求发送失败
*/
Futu::u32_t GetAccList(const Trd_GetAccList::Request &stReq);
/**
* @brief 解锁针对OpenD解锁一次即可
* @param [in] stReq 请求包具体字段请参考Trd_UnlockTrade.proto协议
* @return Futu::u32_t 包序列号, 0表示请求发送失败
*/
Futu::u32_t UnlockTrade(const Trd_UnlockTrade::Request &stReq);
/**
* @brief 订阅接收推送数据的交易账户
* @param [in] stReq 请求包具体字段请参考Trd_SubAccPush.proto协议
* @return Futu::u32_t 包序列号, 0表示请求发送失败
*/
Futu::u32_t SubAccPush(const Trd_SubAccPush::Request &stReq);
/**
* @brief 获取账户资金
* @param [in] stReq 请求包具体字段请参考Trd_GetFunds.proto协议
* @return Futu::u32_t 包序列号, 0表示请求发送失败
*/
Futu::u32_t GetFunds(const Trd_GetFunds::Request &stReq);
/**
* @brief 获取账户持仓
* @param [in] stReq 请求包具体字段请参考Trd_GetPositionList.proto协议
* @return Futu::u32_t 包序列号, 0表示请求发送失败
*/
Futu::u32_t GetPositionList(const Trd_GetPositionList::Request &stReq);
/**
* @brief 获取最大交易数量
* @param [in] stReq 请求包具体字段请参考Trd_GetMaxTrdQtys.proto协议
* @return Futu::u32_t 包序列号, 0表示请求发送失败
*/
Futu::u32_t GetMaxTrdQtys(const Trd_GetMaxTrdQtys::Request &stReq);
/**
* @brief 获取当日订单列表
* @param [in] stReq 请求包具体字段请参考Trd_GetOrderList.proto协议
* @return Futu::u32_t 包序列号, 0表示请求发送失败
*/
Futu::u32_t GetOrderList(const Trd_GetOrderList::Request &stReq);
/**
* @brief 下单
* @param [in] stReq 请求包具体字段请参考Trd_PlaceOrder.proto协议PacketID不需填写发送时接口会填
* @return Futu::u32_t 包序列号, 0表示请求发送失败
*/
Futu::u32_t PlaceOrder(const Trd_PlaceOrder::Request &stReq);
/**
* @brief 修改订单
* @param [in] stReq 请求包具体字段请参考Trd_ModifyOrder.proto协议PacketID不需填写发送时接口会填
* @return Futu::u32_t 包序列号, 0表示请求发送失败
*/
Futu::u32_t ModifyOrder(const Trd_ModifyOrder::Request &stReq);
/**
* @brief 获取当日成交列表
* @param [in] stReq 请求包具体字段请参考Trd_GetOrderFillList.proto协议
* @return Futu::u32_t 包序列号, 0表示请求发送失败
*/
Futu::u32_t GetOrderFillList(const Trd_GetOrderFillList::Request &stReq);
/**
* @brief 获取历史订单列表
* @param [in] stReq 请求包具体字段请参考Trd_GetHistoryOrderList.proto协议
* @return Futu::u32_t 包序列号, 0表示请求发送失败
*/
Futu::u32_t GetHistoryOrderList(const Trd_GetHistoryOrderList::Request &stReq);
/**
* @brief 获取历史成交列表
* @param [in] stReq 请求包具体字段请参考Trd_GetHistoryOrderFillList.proto协议
* @return Futu::u32_t 包序列号, 0表示请求发送失败
*/
Futu::u32_t GetHistoryOrderFillList(const Trd_GetHistoryOrderFillList::Request &stReq);
/**
* @brief 获取融资融券数据
* @param [in] stReq 请求包具体字段请参考Trd_GetMarginRatio.proto协议
* @return Futu::u32_t 包序列号, 0表示请求发送失败
*/
Futu::u32_t GetMarginRatio(const Trd_GetMarginRatio::Request &stReq);
/**
* @brief 获取订单费用数据
* @param [in] stReq 请求包Trd_GetOrderFee.proto协议
* @return Futu::u32_t 包序列号, 0表示请求发送失败
*/
Futu::u32_t GetOrderFee(const Trd_GetOrderFee::Request &stReq);
};
/**
* @brief 全局工具接口
*/
class FTAPI
{
public:
static FTAPI_Qot* CreateQotApi();
static void ReleaseQotApi(FTAPI_Qot* pQot);
static FTAPI_Trd* CreateTrdApi();
static void ReleaseTrdApi(FTAPI_Trd* pTrd);
static void Init();
static void UnInit();
};
}