#pragma once #include "tool.h" #include #include #include #include "PrecisionTimer.h" #include "..\Sqbase\qorderprocessor.h" #include "..\Sqbase\OrderBookParser.h" class ReplyCodeItem; struct ReplyCodeItem { QString stockCode; // 股票代码 //QString stockName; // 股票名称 //double orderPrice; // 订单价格 double stockQuantityTh; // 股票数量阈值 //int orderCount; // 订单数量 //QString orderType; // 订单类型 (BID/ASK) //QDateTime orderTime; // 订单时间 }; class CFTInterface :public QObject,public FTSPI_Qot, public FTSPI_Trd, public FTSPI_Conn { Q_OBJECT public: CFTInterface(); ~CFTInterface(); public: bool bConnected; public: FTAPI_Qot *m_pQotApi; int m_ReplySerialNo; int m_GetStaticInfoSerialNo; void getSecurityStaticInfo(string strCode); int m_GetIpoListSerialNo; void getIpoListInfo(); // 获取板块列表 int m_GetPlateSetSerialNo; void getPlateSetSerial(); public: Futu::u32_t m_StockFilterSerialNo; int m_nPagenumber; void getAllStock_HK(); Futu::u32_t m_SubSerialNo; Futu::u32_t m_GetBasicQotSerialNo; Futu::u32_t m_GetOrderBookSerialNo; QMap m_replyCodeQuantity; QList> m_codeList; void subStock(); void setReplyList(QList> & replyCodes) ; QOrderProcessor processor; signals: void InitConnect(QString str); void DisConnect(QString str); void SecurityStaticInfo(QString str); void RequestHistoryKL(QString str); void PlateSetSerial(QByteArray data); void AllStock_HK(QByteArray data); public: /******************** FTSPI_Conn ********************************/ /** * @brief 初始化连接 * @praram pConn 对应连接实例指针 * @param nErrCode 当高32位为FTAPI_ConnectFailType类型,则低32位为系统错误码; * 当高32位为FTAPI_InitFail,则低32位为FTAPI_InitFailType类型。 * @param strDesc 错误描述 */ virtual void OnInitConnect(FTAPI_Conn* pConn, Futu::i64_t nErrCode, const char* strDesc); bool InitConn(); // 连接 Futu OPenD /** * @brief 连接断开 * @praram pConn 对应连接实例指针 * @param nErrCode 高32位为FTAPI_ConnectFailType类型,低32位为系统错误码; */ virtual void OnDisConnect(FTAPI_Conn* pConn, Futu::i64_t nErrCode) {}; void DisConn(); /******************** FTSPI_Conn ********************************/ /******************** FTSPI_Trd ********************************/ /** * @brief 获取交易账户列表 * @praram nSerialNo 包序列号 * @param stRsp 回包,具体字段请参考Trd_GetAccList.proto协议 */ virtual void OnReply_GetAccList(Futu::u32_t nSerialNo, const Trd_GetAccList::Response &stRsp) {}; /** * @brief 解锁 * @praram nSerialNo 包序列号 * @param stRsp 回包,具体字段请参考Trd_UnlockTrade.proto协议 */ virtual void OnReply_UnlockTrade(Futu::u32_t nSerialNo, const Trd_UnlockTrade::Response &stRsp) {}; /** * @brief 订阅接收推送数据的交易账户 * @praram nSerialNo 包序列号 * @param stRsp 回包,具体字段请参考Trd_SubAccPush.proto协议 */ virtual void OnReply_SubAccPush(Futu::u32_t nSerialNo, const Trd_SubAccPush::Response &stRsp) {}; /** * @brief 获取账户资金 * @praram nSerialNo 包序列号 * @param stRsp 回包,具体字段请参考Trd_GetFunds.proto协议 */ virtual void OnReply_GetFunds(Futu::u32_t nSerialNo, const Trd_GetFunds::Response &stRsp) {}; /** * @brief 获取账户持仓 * @praram nSerialNo 包序列号 * @param stRsp 回包,具体字段请参考Trd_GetPositionList.proto协议 */ virtual void OnReply_GetPositionList(Futu::u32_t nSerialNo, const Trd_GetPositionList::Response &stRsp) {}; /** * @brief 获取最大交易数量 * @praram nSerialNo 包序列号 * @param stRsp 回包,具体字段请参考Trd_GetMaxTrdQtys.proto协议 */ virtual void OnReply_GetMaxTrdQtys(Futu::u32_t nSerialNo, const Trd_GetMaxTrdQtys::Response &stRsp) {}; /** * @brief 获取当日订单列表 * @praram nSerialNo 包序列号 * @param stRsp 回包,具体字段请参考Trd_GetOrderList.proto协议 */ virtual void OnReply_GetOrderList(Futu::u32_t nSerialNo, const Trd_GetOrderList::Response &stRsp) {}; /** * @brief 下单 * @praram nSerialNo 包序列号 * @param stRsp 回包,具体字段请参考Trd_PlaceOrder.proto协议 */ virtual void OnReply_PlaceOrder(Futu::u32_t nSerialNo, const Trd_PlaceOrder::Response &stRsp) {}; /** * @brief 修改订单 * @praram nSerialNo 包序列号 * @param stRsp 回包,具体字段请参考Trd_ModifyOrder.proto协议 */ virtual void OnReply_ModifyOrder(Futu::u32_t nSerialNo, const Trd_ModifyOrder::Response &stRsp) {}; /** * @brief 获取当日成交列表 * @praram nSerialNo 包序列号 * @param stRsp 回包,具体字段请参考Trd_GetOrderFillList.proto协议 */ virtual void OnReply_GetOrderFillList(Futu::u32_t nSerialNo, const Trd_GetOrderFillList::Response &stRsp) {}; /** * @brief 获取历史订单列表 * @praram nSerialNo 包序列号 * @param stRsp 回包,具体字段请参考Trd_GetHistoryOrderList.proto协议 */ virtual void OnReply_GetHistoryOrderList(Futu::u32_t nSerialNo, const Trd_GetHistoryOrderList::Response &stRsp) {}; /** * @brief 获取融资融券数据 * @praram nSerialNo 包序列号 * @param stRsp 回包,具体字段请参考Trd_GetMarginRatio.proto协议 */ virtual void OnReply_GetMarginRatio(Futu::u32_t nSerialNo, const Trd_GetMarginRatio::Response &stRsp) {}; /** * @brief 获取历史成交列表 * @praram nSerialNo 包序列号 * @param stRsp 回包,具体字段请参考Trd_GetHistoryOrderFillList.proto协议 */ virtual void OnReply_GetHistoryOrderFillList(Futu::u32_t nSerialNo, const Trd_GetHistoryOrderFillList::Response &stRsp) {}; /** * @brief 获取订单费用数据 * @praram nSerialNo 包序列号 * @param stRsp 回包,Trd_GetOrderFee.proto协议 */ virtual void OnReply_GetOrderFee(Futu::u32_t nSerialNo, const Trd_GetOrderFee::Response &stRsp) {}; /** * @brief 推送订单变化 * @praram nSerialNo 包序列号 * @param stRsp 回包,具体字段请参考Trd_UpdateOrder.proto协议 */ virtual void OnPush_UpdateOrder(const Trd_UpdateOrder::Response &stRsp) {}; /** * @brief 订单成交推送 * @praram nSerialNo 包序列号 * @param stRsp 回包,具体字段请参考Trd_UpdateOrderFill.proto协议 */ virtual void OnPush_UpdateOrderFill(const Trd_UpdateOrderFill::Response &stRsp) {}; /******************** FTSPI_Trd ********************************/ /******************** FTSPI_Qot ********************************/ /** * @brief 请求全局状态 * @praram nSerialNo 包序列号 * @param stRsp 回包,具体字段请参考GetGlobalState.proto协议 */ virtual void OnReply_GetGlobalState(Futu::u32_t nSerialNo, const GetGlobalState::Response &stRsp) {}; /** * @brief 订阅 * @praram nSerialNo 包序列号 * @param stRsp 回包,具体字段请参考Qot_Sub.proto协议 */ virtual void OnReply_Sub(Futu::u32_t nSerialNo, const Qot_Sub::Response &stRsp) ; /** * @brief 注册推送 * @praram nSerialNo 包序列号 * @param stRsp 回包,具体字段请参考Qot_RegQotPush.proto协议 */ virtual void OnReply_RegQotPush(Futu::u32_t nSerialNo, const Qot_RegQotPush::Response &stRsp) {}; /** * @brief 获取订阅信息 * @praram nSerialNo 包序列号 * @param stRsp 回包,具体字段请参考Qot_GetSubInfo.proto协议 */ virtual void OnReply_GetSubInfo(Futu::u32_t nSerialNo, const Qot_GetSubInfo::Response &stRsp) {}; /** * @brief 获取逐笔 * @praram nSerialNo 包序列号 * @param stRsp 回包,具体字段请参考Qot_GetTicker.proto协议 */ virtual void OnReply_GetTicker(Futu::u32_t nSerialNo, const Qot_GetTicker::Response &stRsp) {}; /** * @brief 获取报价 * @praram nSerialNo 包序列号 * @param stRsp 回包,具体字段请参考Qot_GetBasicQot.proto协议 */ virtual void OnReply_GetBasicQot(Futu::u32_t nSerialNo, const Qot_GetBasicQot::Response &stRsp) ; /** * @brief 获取摆盘 * @praram nSerialNo 包序列号 * @param stRsp 回包,具体字段请参考Qot_GetOrderBook.proto协议 */ virtual void OnReply_GetOrderBook(Futu::u32_t nSerialNo, const Qot_GetOrderBook::Response &stRsp) {}; /** * @brief 获取K线 * @praram nSerialNo 包序列号 * @param stRsp 回包,具体字段请参考Qot_GetKL.proto协议 */ virtual void OnReply_GetKL(Futu::u32_t nSerialNo, const Qot_GetKL::Response &stRsp) {}; /** * @brief 获取分时 * @praram nSerialNo 包序列号 * @param stRsp 回包,具体字段请参考Qot_GetRT.proto协议 */ virtual void OnReply_GetRT(Futu::u32_t nSerialNo, const Qot_GetRT::Response &stRsp) {}; /** * @brief 获取经纪队列 * @praram nSerialNo 包序列号 * @param stRsp 回包,具体字段请参考Qot_GetBroker.proto协议 */ virtual void OnReply_GetBroker(Futu::u32_t nSerialNo, const Qot_GetBroker::Response &stRsp) {}; /** * @brief 在线请求历史复权信息,不读本地历史数据DB * @praram nSerialNo 包序列号 * @param stRsp 回包,具体字段请参考Qot_RequestRehab.proto协议 */ virtual void OnReply_RequestRehab(Futu::u32_t nSerialNo, const Qot_RequestRehab::Response &stRsp) {}; /** * @brief 在线请求历史K线,不读本地历史数据DB * @praram nSerialNo 包序列号 * @param stRsp 回包,具体字段请参考Qot_RequestHistoryKL.proto协议 */ virtual void OnReply_RequestHistoryKL(Futu::u32_t nSerialNo, const Qot_RequestHistoryKL::Response &stRsp) ; void getRequestHistoryKL(); Futu::u32_t m_RequestHistoryKLSerialNo; /** * @brief 获取历史K线已经用掉的额度 * @praram nSerialNo 包序列号 * @param stRsp 回包,具体字段请参考Qot_RequestHistoryKLQuota.proto协议 */ virtual void OnReply_RequestHistoryKLQuota(Futu::u32_t nSerialNo, const Qot_RequestHistoryKLQuota::Response &stRsp) {}; /** * @brief 获取交易日 * @praram nSerialNo 包序列号 * @param stRsp 回包,具体字段请参考Qot_GetTradeDate.proto协议 */ virtual void OnReply_GetTradeDate(Futu::u32_t nSerialNo, const Qot_GetTradeDate::Response &stRsp) {}; /** * @brief 获取静态信息 * @praram nSerialNo 包序列号 * @param stRsp 回包,具体字段请参考Qot_GetStaticInfo.proto协议 */ virtual void OnReply_GetStaticInfo(Futu::u32_t nSerialNo, const Qot_GetStaticInfo::Response &stRsp); /** * @brief 获取股票快照 * @praram nSerialNo 包序列号 * @param stRsp 回包,具体字段请参考Qot_GetSecuritySnapshot.proto协议 */ virtual void OnReply_GetSecuritySnapshot(Futu::u32_t nSerialNo, const Qot_GetSecuritySnapshot::Response &stRsp) {}; /** * @brief 获取板块集合下的板块 * @praram nSerialNo 包序列号 * @param stRsp 回包,具体字段请参考Qot_GetPlateSet.proto协议 */ virtual void OnReply_GetPlateSet(Futu::u32_t nSerialNo, const Qot_GetPlateSet::Response &stRsp); /** * @brief 获取板块下的股票 * @praram nSerialNo 包序列号 * @param stRsp 回包,具体字段请参考Qot_GetPlateSecurity.proto协议 */ virtual void OnReply_GetPlateSecurity(Futu::u32_t nSerialNo, const Qot_GetPlateSecurity::Response &stRsp) {}; /** * @brief 获取相关股票 * @praram nSerialNo 包序列号 * @param stRsp 回包,具体字段请参考Qot_GetReference.proto协议 */ virtual void OnReply_GetReference(Futu::u32_t nSerialNo, const Qot_GetReference::Response &stRsp) {}; /** * @brief 获取股票所属的板块 * @praram nSerialNo 包序列号 * @param stRsp 回包,具体字段请参考Qot_GetOwnerPlate.proto协议 */ virtual void OnReply_GetOwnerPlate(Futu::u32_t nSerialNo, const Qot_GetOwnerPlate::Response &stRsp) {}; /** * @brief 获取大股东持股变化列表 * @praram nSerialNo 包序列号 * @param stRsp 回包,具体字段请参考Qot_GetHoldingChangeList.proto协议 */ virtual void OnReply_GetHoldingChangeList(Futu::u32_t nSerialNo, const Qot_GetHoldingChangeList::Response &stRsp) {}; /** * @brief 筛选期权 * @praram nSerialNo 包序列号 * @param stRsp 回包,具体字段请参考Qot_GetOptionChain.proto协议 */ virtual void OnReply_GetOptionChain(Futu::u32_t nSerialNo, const Qot_GetOptionChain::Response &stRsp) {}; /** * @brief 筛选窝轮 * @praram nSerialNo 包序列号 * @param stRsp 回包,具体字段请参考Qot_GetWarrant.proto协议 */ virtual void OnReply_GetWarrant(Futu::u32_t nSerialNo, const Qot_GetWarrant::Response &stRsp) {}; /** * @brief 获取资金流向 * @praram nSerialNo 包序列号 * @param stRsp 回包,具体字段请参考Qot_GetCapitalFlow.proto协议 */ virtual void OnReply_GetCapitalFlow(Futu::u32_t nSerialNo, const Qot_GetCapitalFlow::Response &stRsp) {}; /** * @brief 获取资金分布 * @praram nSerialNo 包序列号 * @param stRsp 回包,具体字段请参考Qot_GetCapitalDistribution.proto协议 */ virtual void OnReply_GetCapitalDistribution(Futu::u32_t nSerialNo, const Qot_GetCapitalDistribution::Response &stRsp) {}; /** * @brief 获取自选股分组下的股票 * @praram nSerialNo 包序列号 * @param stRsp 回包,具体字段请参考Qot_GetUserSecurity.proto协议 */ virtual void OnReply_GetUserSecurity(Futu::u32_t nSerialNo, const Qot_GetUserSecurity::Response &stRsp) {}; /** * @brief 修改自选股分组下的股票 * @praram nSerialNo 包序列号 * @param stRsp 回包,具体字段请参考Qot_ModifyUserSecurity.proto协议 */ virtual void OnReply_ModifyUserSecurity(Futu::u32_t nSerialNo, const Qot_ModifyUserSecurity::Response &stRsp) {}; /** * @brief 条件选股 * @praram nSerialNo 包序列号 * @param stRsp 回包,具体字段请参考Qot_StockFilter.proto协议 */ virtual void OnReply_StockFilter(Futu::u32_t nSerialNo, const Qot_StockFilter::Response &stRsp) ; /** * @brief 获取股票代码变化信息 * @praram nSerialNo 包序列号 * @param stRsp 回包,具体字段请参考Qot_GetCodeChange.proto协议 */ virtual void OnReply_GetCodeChange(Futu::u32_t nSerialNo, const Qot_GetCodeChange::Response &stRsp) {}; /** * @brief 新股IPO * @praram nSerialNo 包序列号 * @param stRsp 回包,具体字段请参考Qot_GetIpoList.proto协议 */ virtual void OnReply_GetIpoList(Futu::u32_t nSerialNo, const Qot_GetIpoList::Response &stRsp) {}; /** * @brief 期货合约资料 * @praram nSerialNo 包序列号 * @param stRsp 回包,具体字段请参考Qot_GetFutureInfo.proto协议 */ virtual void OnReply_GetFutureInfo(Futu::u32_t nSerialNo, const Qot_GetFutureInfo::Response &stRsp) {}; /** * @brief 获取市场交易日,在线拉取不在本地计算 * @praram nSerialNo 包序列号 * @param stRsp 回包,具体字段请参考Qot_RequestTradeDate.proto协议 */ virtual void OnReply_RequestTradeDate(Futu::u32_t nSerialNo, const Qot_RequestTradeDate::Response &stRsp) {}; /** * @brief 设置到价提醒 * @praram nSerialNo 包序列号 * @param stRsp 回包,具体字段请参考Qot_SetPriceReminder.proto协议 */ virtual void OnReply_SetPriceReminder(Futu::u32_t nSerialNo, const Qot_SetPriceReminder::Response &stRsp) {}; /** * @brief 获取到价提醒 * @praram nSerialNo 包序列号 * @param stRsp 回包,具体字段请参考Qot_GetPriceReminder.proto协议 */ virtual void OnReply_GetPriceReminder(Futu::u32_t nSerialNo, const Qot_GetPriceReminder::Response &stRsp) {}; /** * @brief 获取自选股分组列表 * @praram nSerialNo 包序列号 * @param stRsp 回包,具体字段请参考Qot_GetUserSecurityGroup.proto协议 */ virtual void OnReply_GetUserSecurityGroup(Futu::u32_t nSerialNo, const Qot_GetUserSecurityGroup::Response &stRsp) {}; /** * @brief 获取市场状态 * @praram nSerialNo 包序列号 * @param stRsp 回包,具体字段请参考Qot_GetMarketState.proto协议 */ virtual void OnReply_GetMarketState(Futu::u32_t nSerialNo, const Qot_GetMarketState::Response &stRsp) {}; /** * @brief 获取期权链到期日 * @praram nSerialNo 包序列号 * @param stRsp 回包,具体字段请参考Qot_GetOptionExpirationDate.proto协议 */ virtual void OnReply_GetOptionExpirationDate(Futu::u32_t nSerialNo, const Qot_GetOptionExpirationDate::Response &stRsp) {}; /** * @brief 推送通知 * @praram nSerialNo 包序列号 * @param stRsp 回包,具体字段请参考Notify.proto协议 */ virtual void OnPush_Notify(const Notify::Response &stRsp) {}; /** * @brief 推送逐笔 * @praram nSerialNo 包序列号 * @param stRsp 回包,具体字段请参考Qot_UpdateTicker.proto协议 */ virtual void OnPush_UpdateTicker(const Qot_UpdateTicker::Response &stRsp) {}; /** * @brief 推送报价 * @praram nSerialNo 包序列号 * @param stRsp 回包,具体字段请参考Qot_UpdateBasicQot.proto协议 */ virtual void OnPush_UpdateBasicQot(const Qot_UpdateBasicQot::Response &stRsp) {}; /** * @brief 推送摆盘 * @praram nSerialNo 包序列号 * @param stRsp 回包,具体字段请参考Qot_UpdateOrderBook.proto协议 */ virtual void OnPush_UpdateOrderBook(const Qot_UpdateOrderBook::Response &stRsp); /** * @brief 推送K线 * @praram nSerialNo 包序列号 * @param stRsp 回包,具体字段请参考Qot_UpdateKL.proto协议 */ virtual void OnPush_UpdateKL(const Qot_UpdateKL::Response &stRsp) {}; /** * @brief 推送分时 * @praram nSerialNo 包序列号 * @param stRsp 回包,具体字段请参考Qot_UpdateRT.proto协议 */ virtual void OnPush_UpdateRT(const Qot_UpdateRT::Response &stRsp) {}; /** * @brief 推送经纪队列 * @praram nSerialNo 包序列号 * @param stRsp 回包,具体字段请参考Qot_UpdateBroker.proto协议 */ virtual void OnPush_UpdateBroker(const Qot_UpdateBroker::Response &stRsp) {}; /** * @brief 推送到价提醒通知 * @praram nSerialNo 包序列号 * @param stRsp 回包,具体字段请参考Qot_UpdatePriceReminder.proto协议 */ virtual void OnPush_UpdatePriceReminder(const Qot_UpdatePriceReminder::Response &stRsp) {}; /******************** FTSPI_Qot ********************************/ };