{"version":3,"sources":["jsdelivr-header.js","/npm/futu-openapi@5.3.1508/main.js"],"names":[],"mappings":"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","file":"/npm/futu-openapi@5.3.1508/main.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/futu-openapi@5.3.1508/main.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","import ftWebsocketBase from './base.js'\r\nimport protoRoot from \"./proto/proto\";\r\nimport protobuf from \"protobufjs\";\r\nimport crypto from \"crypto\";\r\nimport long from \"long\"\r\nprotobuf.util.Long = long;\r\nprotobuf.configure();\r\n\r\nexport const ftCmdID = {\r\n    // 全局协议\r\n    InitConnect: { cmd: 1001, name: 'GetGlobalState', description: '初始化连接' }, /**< 初始化连接 */\r\n    GetGlobalState: { cmd: 1002, name: 'GetGlobalState', description: '获取全局状态' }, /**< 获取全局状态 */\r\n    Notify: { cmd: 1003, name: 'Notify', description: '推送通知' }, /**< 推送通知 */\r\n    KeepAlive: { cmd: 1004, name: 'KeepAlive', description: '心跳' },  /**< 心跳 */\r\n    GetUserInfo: { cmd: 1005, name: 'GetUserInfo', description: '获取用户信息' }, /**< 获取用户信息 */\r\n    GetDelayStatistics: { cmd: 1007, name: 'GetDelayStatistics', description: '获取延迟统计' }, /**< 获取延迟统计 */\r\n    // 行情-实时数据协议\r\n    QotSub: { cmd: 3001, name: 'Qot_Sub', description: '订阅或者反订阅' }, /**< 订阅或者反订阅 */\r\n    QotRegQotPush: { cmd: 3002, name: 'Qot_RegQotPush', description: '注册推送' }, /**< 注册推送 */\r\n    QotGetSubInfo: { cmd: 3003, name: 'Qot_GetSubInfo', description: '获取订阅信息' }, /**< 获取订阅信息 */\r\n    QotGetBasicQot: { cmd: 3004, name: 'Qot_GetBasicQot', description: '获取基本行情' }, /**< 获取基本行情 */\r\n    QotUpdateBasicQot: { cmd: 3005, name: 'Qot_UpdateBasicQot', description: '推送基本行情' }, /**< 推送基本行情 */\r\n    QotGetKL: { cmd: 3006, name: 'Qot_GetKL', description: '获取K线' }, /**< 获取K线 */\r\n    QotUpdateKL: { cmd: 3007, name: 'Qot_UpdateKL', description: '推送K线' }, /**< 推送K线 */\r\n    QotGetRT: { cmd: 3008, name: 'Qot_GetRT', description: '获取分时' }, /**< 获取分时 */\r\n    QotUpdateRT: { cmd: 3009, name: 'Qot_UpdateRT', description: '获取分时' }, /**< 获取分时 */\r\n    QotGetTicker: { cmd: 3010, name: 'Qot_GetTicker', description: '获取逐笔' }, /**< 获取逐笔 */\r\n    QotUpdateTicker: { cmd: 3011, name: 'Qot_UpdateTicker', description: '推送逐笔' }, /**< 推送逐笔 */\r\n    QotGetOrderBook: { cmd: 3012, name: 'Qot_GetOrderBook', description: '获取买卖盘' }, /**< 获取买卖盘 */\r\n    QotUpdateOrderBook: { cmd: 3013, name: 'Qot_UpdateOrderBook', description: '推送买卖盘' }, /**< 推送买卖盘 */\r\n    QotGetBroker: { cmd: 3014, name: 'Qot_GetBroker', description: '获取经纪队列' }, /**< 获取经纪队列 */\r\n    QotUpdateBroker: { cmd: 3015, name: 'Qot_UpdateBroker', description: '推送经纪队列' }, /**< 推送经纪队列 */\r\n    QotGetOrderDetail: { cmd: 3016, name: 'Qot_GetOrderDetail', description: '获取委托明细' }, /**< 获取委托明细 */\r\n    QotUpdateOrderDetail: { cmd: 3017, name: 'Qot_UpdateOrderDetail', description: '推送委托明细' }, /**< 推送委托明细 */\r\n    QotUpdatePriceReminder: { cmd: 3019, name: 'Qot_UpdatePriceReminder', description: '推送到价提醒' }, /**< 推送到价提醒 */\r\n\r\n    //\t行情-历史数据协议\r\n    QotGetHistoryKL: { cmd: 3100, name: 'Qot_GetHistoryKL', description: '获取历史K线' }, /**< 获取历史K线 */\r\n    QotGetHistoryKLPoints: { cmd: 3101, name: 'Qot_GetHistoryKLPoints', description: '获取多只股票历史单点K线' }, /**< 获取多只股票历史单点K线 */\r\n    QotGetRehab: { cmd: 3102, name: 'Qot_GetRehab', description: '获取复权信息' }, /**< 获取复权信息 */\r\n    QotRequestHistoryKL: { cmd: 3103, name: 'Qot_RequestHistoryKL', description: '拉取历史K线，不读本地历史数据DB' }, /**< 拉取历史K线，不读本地历史数据DB */\r\n    QotRequestHistoryKLQuota: { cmd: 3104, name: 'Qot_RequestHistoryKLQuota', description: '拉取历史K线已经用掉的额度' }, /**< 拉取历史K线已经用掉的额度 */\r\n    QotRequestRehab: { cmd: 3105, name: 'Qot_RequestRehab', description: '拉取复权信息，不读本地历史数据DB' }, /**< 拉取复权信息，不读本地历史数据DB */\r\n\r\n    // 行情-其他数据协议\r\n    QotGetTradeDate: { cmd: 3200, name: 'Qot_GetTradeDate', description: '获取市场交易日' }, /**< 获取市场交易日 */\r\n    QotGetSuspend: { cmd: 3201, name: 'Qot_GetSuspend', description: '获取股票停牌信息' }, /**< 获取股票停牌信息 */\r\n    QotGetStaticInfo: { cmd: 3202, name: 'Qot_GetStaticInfo', description: '获取股票静态信息' }, /**< 获取股票静态信息 */\r\n    QotGetSecuritySnapshot: { cmd: 3203, name: 'Qot_GetSecuritySnapshot', description: '获取股票快照' }, /**< 获取股票快照 */\r\n    QotGetPlateSet: { cmd: 3204, name: 'Qot_GetPlateSet', description: '获取板块集合下的板块' }, /**< 获取板块集合下的板块 */\r\n    QotGetPlateSecurity: { cmd: 3205, name: 'Qot_GetPlateSecurity', description: '获取板块下的股票' }, /**< 获取板块下的股票 */\r\n    QotGetReference: { cmd: 3206, name: 'Qot_GetReference', description: '获取正股相关股票，暂时只有窝轮' }, /**< 获取正股相关股票，暂时只有窝轮 */\r\n    QotGetOwnerPlate: { cmd: 3207, name: 'Qot_GetOwnerPlate', description: '获取股票所属板块' }, /**< 获取股票所属板块 */\r\n    QotGetHoldingChangeList: { cmd: 3208, name: 'Qot_GetHoldingChangeList', description: '获取大股东持股变化列表' }, /**< 获取大股东持股变化列表 */\r\n    QotGetOptionChain: { cmd: 3209, name: 'Qot_GetOptionChain', description: '获取期权链' }, /**< 获取期权链 */\r\n    QotGetWarrant: { cmd: 3210, name: 'Qot_GetWarrant', description: '获取涡轮' }, /**< 获取涡轮 */\r\n    QotGetCapitalFlow: { cmd: 3211, name: 'Qot_GetCapitalFlow', description: '获取资金流向' }, /**< 获取资金流向 */\r\n    QotGetCapitalDistribution: { cmd: 3212, name: 'Qot_GetCapitalDistribution', description: '获取资金分布' }, /**< 获取资金分布 */\r\n    QotGetUserSecurity: { cmd: 3213, name: 'Qot_GetUserSecurity', description: '获取自选股分组下的股票' }, /**< 获取自选股分组下的股票 */\r\n    QotModifyUserSecurity: { cmd: 3214, name: 'Qot_ModifyUserSecurity', description: '修改自选股分组下的股票' }, /**< 修改自选股分组下的股票 */\r\n    QotStockFilter: { cmd: 3215, name: 'Qot_StockFilter', description: '条件选股' }, /**< 条件选股 */\r\n    QotGetCodeChange: { cmd: 3216, name: 'Qot_GetCodeChange', description: '获取股票代码变化信息' }, /**< 获取股票代码变化信息*/\r\n    QotGetIpoList: { cmd: 3217, name: 'Qot_GetIpoList', description: '获取新股IPO' }, /**< 获取新股IPO */\r\n    QotGetFutureInfo: { cmd: 3218, name: 'Qot_GetFutureInfo', description: '获取期货合约资料' }, /**< 获取期货合约资料 */\r\n    QotRequestTradeDate: { cmd: 3219, name: 'Qot_RequestTradeDate', description: '获取市场交易日' }, /**< 获取市场交易日 */\r\n    QotSetPriceReminder: { cmd: 3220, name: 'Qot_SetPriceReminder', description: '设置到价提醒' }, /**< 设置到价提醒 */\r\n    QotGetPriceReminder: { cmd: 3221, name: 'Qot_GetPriceReminder', description: '获取到价提醒' }, /**< 获取到价提醒 */\r\n    QotGetUserSecurityGroup: { cmd: 3222, name: 'Qot_GetUserSecurityGroup', description: '获取自选股分组列表' }, /**< 获取自选股分组列表 */\r\n    QotGetMarketState: { cmd: 3223, name: 'Qot_GetMarketState', description: '获取股票对应市场状态' }, /**< 获取股票对应市场状态 */\r\n\r\n    // 交易协议\r\n    TrdGetAccList: { cmd: 2001, name: 'Trd_GetAccList', description: '获取交易账户列表' }, /**< 获取交易账户列表 */\r\n    TrdUnlockTrade: { cmd: 2005, name: 'Trd_UnlockTrade', description: '解锁或锁定交易' }, /**< 解锁或锁定交易 */\r\n    TrdSubAccPush: { cmd: 2008, name: 'Trd_SubAccPush', description: '订阅接收推送数据的交易账户' }, /**< 订阅接收推送数据的交易账户 */\r\n    TrdGetFunds: { cmd: 2101, name: 'Trd_GetFunds', description: '获取账户资金' }, /**< 获取账户资金 */\r\n    TrdGetPositionList: { cmd: 2102, name: 'Trd_GetPositionList', description: '获取账户持仓' }, /**< 获取账户持仓 */\r\n    TrdGetMaxTrdQtys: { cmd: 2111, name: 'Trd_GetMaxTrdQtys', description: '获取最大交易数量' }, /**< 获取最大交易数量 */\r\n    TrdGetOrderList: { cmd: 2201, name: 'Trd_GetOrderList', description: '获取订单列表' }, /**< 获取订单列表 */\r\n    TrdPlaceOrder: { cmd: 2202, name: 'Trd_PlaceOrder', description: '下单' }, /**< 下单 */\r\n    TrdModifyOrder: { cmd: 2205, name: 'Trd_ModifyOrder', description: '修改订单' }, /**< 修改订单 */\r\n    TrdUpdateOrder: { cmd: 2208, name: 'Trd_UpdateOrder', description: '订单状态变动通知(推送)' }, /**< 订单状态变动通知(推送) */\r\n    TrdGetOrderFillList: { cmd: 2211, name: 'Trd_GetOrderFillList', description: '获取成交列表' }, /**< 获取成交列表 */\r\n    TrdUpdateOrderFill: { cmd: 2218, name: 'Trd_UpdateOrderFill', description: '成交通知(推送)' }, /**< 成交通知(推送) */\r\n    TrdGetHistoryOrderList: { cmd: 2221, name: 'Trd_GetHistoryOrderList', description: '获取历史订单列表' }, /**< 获取历史订单列表 */\r\n    TrdGetHistoryOrderFillList: { cmd: 2222, name: 'Trd_GetHistoryOrderFillList', description: '获取历史成交列表' }, /**< 获取历史成交列表 */\r\n}\r\n\r\nclass ftWebsocket {\r\n    constructor() {\r\n        this.websock = null;\r\n        this.onlogin = null;\r\n        this.onPush = null;\r\n    }\r\n\r\n    static findCmdObj(cmd) {\r\n        for (let key in ftCmdID) {\r\n            if (ftCmdID[key].cmd == cmd) {\r\n                return ftCmdID[key];\r\n            }\r\n        }\r\n        return null;\r\n    }\r\n\r\n    start(ip, port, ssl, key) {\r\n        if (this.websock == null || this.websock == undefined) {\r\n            this.websock = new ftWebsocketBase()\r\n            this.websock.regPushCallback(this, this._onPush.bind(this));\r\n        }\r\n        else {\r\n            this.websock.close();\r\n        }\r\n        this.websock.setWsConfig(ip, port, ssl);\r\n\r\n        let message = null;\r\n        let keyMD5 = \"\";\r\n        if (key) {\r\n            keyMD5 = crypto.createHash(\"md5\").update(key).digest(\"hex\");\r\n        }\r\n        const InitWebSocketPBMessageRequest = protoRoot.lookup(\"InitWebSocket.Request\"); // 请求体message\r\n        let initWebSocketReq = {\r\n            c2s: {\r\n                websocketKey: keyMD5,\r\n                programmingLanguage: \"JavaScript\"\r\n            }\r\n        };\r\n        message = InitWebSocketPBMessageRequest.encode(\r\n            InitWebSocketPBMessageRequest.create(initWebSocketReq)\r\n        ).finish();\r\n        this.websock.initWebSocket(message);\r\n\r\n        this.websock.onlogin = (ret, msg) => {\r\n            if (this.onlogin && typeof this.onlogin == 'function') {\r\n                this.onlogin(ret, msg)\r\n            }\r\n        };\r\n    }\r\n\r\n    getConnID() {\r\n        return this.websock.connID;\r\n    }\r\n\r\n\t/**\r\n\t* @brief 订阅，反订阅\r\n\t* @param [in] stReq 请求包，具体字段请参考Qot_Sub.proto协议\r\n\t*/\r\n    Sub(req) {\r\n        return this._sendCmd(ftCmdID.QotSub.cmd, req, ftCmdID.QotSub.name);\r\n    }\r\n    /**\r\n     * @brief 获取交易帐号列表\r\n     * @param [in] stReq 请求包，具体字段请参考Trd_GetAccList.proto协议\r\n     */\r\n    GetAccList(req) {\r\n        return this._sendCmd(ftCmdID.TrdGetAccList.cmd, req, ftCmdID.TrdGetAccList.name);\r\n    }\r\n\t/**\r\n\t* @brief 解锁，针对OpenD解锁一次即可\r\n\t* @param [in] stReq 请求包，具体字段请参考Trd_UnlockTrade.proto协议\r\n\t*/\r\n    UnlockTrade(req) {\r\n        return this._sendCmd(ftCmdID.TrdUnlockTrade.cmd, req, ftCmdID.TrdUnlockTrade.name);\r\n    }\r\n\t/**\r\n\t* @brief 订阅接收推送数据的交易账户\r\n\t* @param [in] stReq 请求包，具体字段请参考Trd_SubAccPush.proto协议\r\n\t*/\r\n    SubAccPush(req) {\r\n        return this._sendCmd(ftCmdID.TrdSubAccPush.cmd, req, ftCmdID.TrdSubAccPush.name);\r\n    }\r\n\t/**\r\n\t* @brief 获取账户资金\r\n\t* @param [in] stReq 请求包，具体字段请参考Trd_GetFunds.proto协议\r\n\t*/\r\n    GetFunds(req) {\r\n        return this._sendCmd(ftCmdID.TrdGetFunds.cmd, req, ftCmdID.TrdGetFunds.name);\r\n    }\r\n\t/**\r\n\t* @brief 获取账户持仓\r\n\t* @param [in] stReq 请求包，具体字段请参考Trd_GetPositionList.proto协议\r\n\t*/\r\n    GetPositionList(req) {\r\n        return this._sendCmd(ftCmdID.TrdGetPositionList.cmd, req, ftCmdID.TrdGetPositionList.name);\r\n    }\r\n\t/**\r\n\t* @brief 获取最大交易数量\r\n\t* @param [in] stReq 请求包，具体字段请参考Trd_GetMaxTrdQtys.proto协议\r\n\t*/\r\n    GetMaxTrdQtys(req) {\r\n        return this._sendCmd(ftCmdID.TrdGetMaxTrdQtys.cmd, req, ftCmdID.TrdGetMaxTrdQtys.name);\r\n    }\r\n\t/**\r\n\t* @brief 获取当日订单列表\r\n\t* @param [in] stReq 请求包，具体字段请参考Trd_GetOrderList.proto协议\r\n\t*/\r\n    GetOrderList(req) {\r\n        return this._sendCmd(ftCmdID.TrdGetOrderList.cmd, req, ftCmdID.TrdGetOrderList.name);\r\n    }\r\n\t/**\r\n\t* @brief 下单\r\n\t* @param [in] stReq 请求包，具体字段请参考Trd_PlaceOrder.proto协议，PacketID不需填写，发送时接口会填\r\n\t*/\r\n    PlaceOrder(req) {\r\n        return this._sendCmd(ftCmdID.TrdPlaceOrder.cmd, req, ftCmdID.TrdPlaceOrder.name);\r\n    }\r\n\t/**\r\n\t* @brief 修改订单\r\n\t* @param [in] stReq 请求包，具体字段请参考Trd_ModifyOrder.proto协议，PacketID不需填写，发送时接口会填\r\n\t*/\r\n    ModifyOrder(req) {\r\n        return this._sendCmd(ftCmdID.TrdModifyOrder.cmd, req, ftCmdID.TrdModifyOrder.name);\r\n    }\r\n\t/**\r\n\t* @brief 获取当日成交列表\r\n\t* @param [in] stReq 请求包，具体字段请参考Trd_GetOrderFillList.proto协议\r\n\t*/\r\n    GetOrderFillList(req) {\r\n        return this._sendCmd(ftCmdID.TrdGetOrderFillList.cmd, req, ftCmdID.TrdGetOrderFillList.name);\r\n    }\r\n\t/**\r\n\t* @brief 获取历史订单列表\r\n\t* @param [in] stReq 请求包，具体字段请参考Trd_GetHistoryOrderList.proto协议\r\n\t*/\r\n    GetHistoryOrderList(req) {\r\n        return this._sendCmd(ftCmdID.TrdGetHistoryOrderList.cmd, req, ftCmdID.TrdGetHistoryOrderList.name);\r\n    }\r\n\t/**\r\n\t* @brief 获取历史成交列表\r\n\t* @param [in] stReq 请求包，具体字段请参考Trd_GetHistoryOrderFillList.proto协议\r\n\t*/\r\n    GetHistoryOrderFillList(req) {\r\n        return this._sendCmd(ftCmdID.TrdGetHistoryOrderFillList.cmd, req, ftCmdID.TrdGetHistoryOrderFillList.name);\r\n    }\r\n\r\n    /**\r\n\t* @brief 请求全局状态\r\n\t* @praram 具体字段请参考GetGlobalState.proto协议\r\n\t*/\r\n    GetGlobalState(req) {\r\n        return this._sendCmd(ftCmdID.GetGlobalState.cmd, req, ftCmdID.GetGlobalState.name);\r\n    }\r\n\t/**\r\n\t* @brief 注册推送\r\n\t* @param 具体字段请参考Qot_RegQotPush.proto协议\r\n\t*/\r\n    RegQotPush(req) {\r\n        return this._sendCmd(ftCmdID.QotRegQotPush.cmd, req, ftCmdID.QotRegQotPush.name);\r\n    }\r\n\t/**\r\n\t* @brief 获取订阅信息\r\n\t* @praram 具体字段请参考Qot_GetSubInfo.proto协议\r\n\t*/\r\n    GetSubInfo(req) {\r\n        return this._sendCmd(ftCmdID.QotGetSubInfo.cmd, req, ftCmdID.QotGetSubInfo.name);\r\n    }\r\n\t/**\r\n\t* @brief 获取逐笔\r\n\t* @praram 具体字段请参考Qot_GetTicker.proto协议\r\n\t*/\r\n    GetTicker(req) {\r\n        return this._sendCmd(ftCmdID.QotGetTicker.cmd, req, ftCmdID.QotGetTicker.name);\r\n    }\r\n\t/**\r\n\t* @brief 获取报价\r\n\t* @praram 具体字段请参考Qot_GetBasicQot.proto协议\r\n\t*/\r\n    GetBasicQot(req) {\r\n        return this._sendCmd(ftCmdID.QotGetBasicQot.cmd, req, ftCmdID.QotGetBasicQot.name);\r\n    }\r\n\t/**\r\n\t* @brief 获取摆盘\r\n\t* @praram 具体字段请参考Qot_GetOrderBook.proto协议\r\n\t*/\r\n    GetOrderBook(req) {\r\n        return this._sendCmd(ftCmdID.QotGetOrderBook.cmd, req, ftCmdID.QotGetOrderBook.name);\r\n    }\r\n\t/**\r\n\t* @brief 获取K线\r\n\t* @praram 具体字段请参考Qot_GetKL.proto协议\r\n\t*/\r\n    GetKL(req) {\r\n        return this._sendCmd(ftCmdID.QotGetKL.cmd, req, ftCmdID.QotGetKL.name);\r\n    }\r\n\t/**\r\n\t* @brief 获取分时\r\n\t* @praram 具体字段请参考Qot_GetRT.proto协议\r\n\t*/\r\n    GetRT(req) {\r\n        return this._sendCmd(ftCmdID.QotGetRT.cmd, req, ftCmdID.QotGetRT.name);\r\n    }\r\n\t/**\r\n\t* @brief 获取经纪队列\r\n\t* @praram 具体字段请参考Qot_GetBroker.proto协议\r\n\t*/\r\n    GetBroker(req) {\r\n        return this._sendCmd(ftCmdID.QotGetBroker.cmd, req, ftCmdID.QotGetBroker.name);\r\n    }\r\n\t/**\r\n\t* @brief 在线请求历史复权信息，不读本地历史数据DB\r\n\t* @praram 具体字段请参考Qot_RequestRehab.proto协议\r\n\t*/\r\n    RequestRehab(req) {\r\n        return this._sendCmd(ftCmdID.QotRequestRehab.cmd, req, ftCmdID.QotRequestRehab.name);\r\n    }\r\n\t/**\r\n\t* @brief 在线请求历史K线，不读本地历史数据DB\r\n\t* @praram 具体字段请参考Qot_RequestHistoryKL.proto协议\r\n\t*/\r\n    RequestHistoryKL(req) {\r\n        return this._sendCmd(ftCmdID.QotRequestHistoryKL.cmd, req, ftCmdID.QotRequestHistoryKL.name);\r\n    }\r\n\t/**\r\n\t* @brief 获取历史K线已经用掉的额度 \r\n\t* @praram 具体字段请参考Qot_RequestHistoryKLQuota.proto协议\r\n\t*/\r\n    RequestHistoryKLQuota(req) {\r\n        return this._sendCmd(ftCmdID.QotRequestHistoryKLQuota.cmd, req, ftCmdID.QotRequestHistoryKLQuota.name);\r\n    }\r\n\t/**\r\n\t* @brief 获取交易日\r\n\t* @praram 具体字段请参考Qot_GetTradeDate.proto协议\r\n\t*/\r\n    GetTradeDate(req) {\r\n        return this._sendCmd(ftCmdID.QotGetTradeDate.cmd, req, ftCmdID.QotGetTradeDate.name);\r\n    }\r\n\t/**\r\n\t* @brief 获取静态信息\r\n\t* @praram 具体字段请参考Qot_GetStaticInfo.proto协议\r\n\t*/\r\n    GetStaticInfo(req) {\r\n        return this._sendCmd(ftCmdID.QotGetStaticInfo.cmd, req, ftCmdID.QotGetStaticInfo.name);\r\n    }\r\n\t/**\r\n\t* @brief 获取股票快照\r\n\t* @praram 具体字段请参考Qot_GetSecuritySnapshot.proto协议\r\n\t*/\r\n    GetSecuritySnapshot(req) {\r\n        return this._sendCmd(ftCmdID.QotGetSecuritySnapshot.cmd, req, ftCmdID.QotGetSecuritySnapshot.name);\r\n    }\r\n\t/**\r\n\t* @brief 获取板块集合下的板块\r\n\t* @praram 具体字段请参考Qot_GetPlateSet.proto协议\r\n\t*/\r\n    GetPlateSet(req) {\r\n        return this._sendCmd(ftCmdID.QotGetPlateSet.cmd, req, ftCmdID.QotGetPlateSet.name);\r\n    }\r\n\t/**\r\n\t* @brief 获取板块下的股票\r\n\t* @praram 具体字段请参考Qot_GetPlateSecurity.proto协议\r\n\t*/\r\n    GetPlateSecurity(req) {\r\n        return this._sendCmd(ftCmdID.QotGetPlateSecurity.cmd, req, ftCmdID.QotGetPlateSecurity.name);\r\n    }\r\n\t/**\r\n\t* @brief 获取相关股票\r\n\t* @praram 具体字段请参考Qot_GetReference.proto协议\r\n\t*/\r\n    GetReference(req) {\r\n        return this._sendCmd(ftCmdID.QotGetReference.cmd, req, ftCmdID.QotGetReference.name);\r\n    }\r\n\t/**\r\n\t* @brief 获取股票所属的板块\r\n\t* @praram 具体字段请参考Qot_GetOwnerPlate.proto协议\r\n\t*/\r\n    GetOwnerPlate(req) {\r\n        return this._sendCmd(ftCmdID.QotGetOwnerPlate.cmd, req, ftCmdID.QotGetOwnerPlate.name);\r\n    }\r\n\t/**\r\n\t* @brief 获取大股东持股变化列表\r\n\t* @praram 具体字段请参考Qot_GetHoldingChangeList.proto协议\r\n\t*/\r\n    GetHoldingChangeList(req) {\r\n        return this._sendCmd(ftCmdID.QotGetHoldingChangeList.cmd, req, ftCmdID.QotGetHoldingChangeList.name);\r\n    }\r\n\t/**\r\n\t* @brief 筛选期权\r\n\t* @praram 具体字段请参考Qot_GetOptionChain.proto协议\r\n\t*/\r\n    GetOptionChain(req) {\r\n        return this._sendCmd(ftCmdID.QotGetOptionChain.cmd, req, ftCmdID.QotGetOptionChain.name);\r\n    }\r\n\t/**\r\n\t* @brief 筛选窝轮\r\n\t* @praram 具体字段请参考Qot_GetWarrant.proto协议\r\n\t*/\r\n    GetWarrant(req) {\r\n        return this._sendCmd(ftCmdID.QotGetWarrant.cmd, req, ftCmdID.QotGetWarrant.name);\r\n    }\r\n\t/**\r\n\t* @brief 获取资金流向\r\n\t* @praram 具体字段请参考Qot_GetCapitalFlow.proto协议\r\n\t*/\r\n    GetCapitalFlow(req) {\r\n        return this._sendCmd(ftCmdID.QotGetCapitalFlow.cmd, req, ftCmdID.QotGetCapitalFlow.name);\r\n    }\r\n\t/**\r\n\t* @brief 获取资金分布\r\n\t* @praram 具体字段请参考Qot_GetCapitalDistribution.proto协议\r\n\t*/\r\n    GetCapitalDistribution(req) {\r\n        return this._sendCmd(ftCmdID.QotGetCapitalDistribution.cmd, req, ftCmdID.QotGetCapitalDistribution.name);\r\n    }\r\n\t/**\r\n\t* @brief 获取自选股分组下的股票\r\n\t* @praram 具体字段请参考Qot_GetUserSecurity.proto协议\r\n\t*/\r\n    GetUserSecurity(req) {\r\n        return this._sendCmd(ftCmdID.QotGetUserSecurity.cmd, req, ftCmdID.QotGetUserSecurity.name);\r\n    }\r\n\t/**\r\n\t* @brief 修改自选股分组下的股票\r\n\t* @praram 具体字段请参考Qot_ModifyUserSecurity.proto协议\r\n\t*/\r\n    ModifyUserSecurity(req) {\r\n        return this._sendCmd(ftCmdID.QotModifyUserSecurity.cmd, req, ftCmdID.QotModifyUserSecurity.name);\r\n    }\r\n\t/**\r\n\t* @brief 条件选股\r\n\t* @praram 具体字段请参考Qot_StockFilter.proto协议\r\n\t*/\r\n    StockFilter(req) {\r\n        return this._sendCmd(ftCmdID.QotStockFilter.cmd, req, ftCmdID.QotStockFilter.name);\r\n    }\r\n\t/**\r\n\t* @brief 获取股票代码变化信息\r\n\t* @praram 具体字段请参考Qot_GetCodeChange.proto协议\r\n\t*/\r\n    GetCodeChange(req) {\r\n        return this._sendCmd(ftCmdID.QotGetCodeChange.cmd, req, ftCmdID.QotGetCodeChange.name);\r\n    }\r\n\t/**\r\n\t* @brief 新股IPO\r\n\t* @praram 具体字段请参考Qot_GetIpoList.proto协议\r\n\t*/\r\n    GetIpoList(req) {\r\n        return this._sendCmd(ftCmdID.QotGetIpoList.cmd, req, ftCmdID.QotGetIpoList.name);\r\n    }\r\n    /**\r\n\t* @brief 期货合约资料\r\n\t* @praram 具体字段请参考Qot_GetFutureInfo.proto协议\r\n\t*/\r\n    GetFutureInfo(req) {\r\n        return this._sendCmd(ftCmdID.QotGetFutureInfo.cmd, req, ftCmdID.QotGetFutureInfo.name);\r\n    }\r\n    /**\r\n\t* @brief 获取市场交易日\r\n\t* @praram 具体字段请参考QotRequestTradeDate.proto协议\r\n\t*/\r\n    RequestTradeDate(req) {\r\n        return this._sendCmd(ftCmdID.QotRequestTradeDate.cmd, req, ftCmdID.QotRequestTradeDate.name);\r\n    }\r\n\t/**\r\n\t* @brief 设置到价提醒\r\n\t* @praram 具体字段请参考QotSetPriceReminder.proto协议\r\n\t*/\r\n    SetPriceReminder(req) {\r\n        return this._sendCmd(ftCmdID.QotSetPriceReminder.cmd, req, ftCmdID.QotSetPriceReminder.name);\r\n    }\r\n\t/**\r\n\t* @brief 获取到价提醒\r\n\t* @praram 具体字段请参考QotGetPriceReminder.proto协议\r\n\t*/\r\n    GetPriceReminder(req) {\r\n        return this._sendCmd(ftCmdID.QotGetPriceReminder.cmd, req, ftCmdID.QotGetPriceReminder.name);\r\n    }\r\n\t/**\r\n\t* @brief 获取自选股分组列表\r\n\t* @praram 具体字段请参考QotGetUserSecurityGroup.proto协议\r\n\t*/\r\n    GetUserSecurityGroup(req) {\r\n        return this._sendCmd(ftCmdID.QotGetUserSecurityGroup.cmd, req, ftCmdID.QotGetUserSecurityGroup.name);\r\n    }\r\n    /**\r\n\t* @brief 获取股票对应市场状态\r\n\t* @praram 具体字段请参考QotGetMarketState.proto协议\r\n\t*/\r\n    GetMarketState(req) {\r\n        return this._sendCmd(ftCmdID.QotGetMarketState.cmd, req, ftCmdID.QotGetMarketState.name);\r\n    }\r\n    //=============================================\r\n    /**\r\n\t* @brief 发送数据\r\n\t*/\r\n    _sendCmd(cmd, buff, name) {\r\n        return new Promise((resolve, reject) => {\r\n            if (cmd == null || name == null || name == undefined) {\r\n                reject('error parameter');\r\n                return;\r\n            }\r\n            if (this.websock == null || this.websock == undefined) {\r\n                reject('websock is null');\r\n                return\r\n            }\r\n            const PBMessageRequest = protoRoot.lookup(name + \".Request\"); // 请求体message\r\n            let message = PBMessageRequest.encode(PBMessageRequest.create(buff)).finish();\r\n            this.websock.sendBuff(cmd, message)\r\n                .then(response => {\r\n                    if (response.buff) {\r\n                        const PBMessageResponse = protoRoot.lookup(\r\n                            name + \".Response\"\r\n                        ); // 回包message\r\n                        const buf = protobuf.util.newBuffer(response.buff);\r\n                        const ResponseObj = PBMessageResponse.decode(buf);\r\n                        if (ResponseObj.retType != null && ResponseObj.retType != undefined && ResponseObj.retType === 0) {\r\n                            resolve(ResponseObj)\r\n                        }\r\n                        else {\r\n                            reject(ResponseObj);\r\n                        }\r\n                    }\r\n                })\r\n                .catch(error => {\r\n                    reject(error);\r\n                });\r\n        });\r\n    }\r\n\r\n    stop() {\r\n        if (this.websock != null && this.websock != undefined) {\r\n            this.websock.unregPushCallback(this);\r\n        }\r\n    }\r\n\r\n    _onPush(response) {\r\n        if (response && response.cmd) {\r\n            if (this.onPush && typeof this.onPush == 'function') {\r\n                if (response.error == 0 && response.buff) {  //成功的推送\r\n                    let obj = ftWebsocket.findCmdObj(response.cmd)\r\n                    if (obj != null && obj.name) {\r\n                        const NotifyPBMessageResponse = protoRoot.lookup(obj.name + \".Response\");\r\n                        const buf = protobuf.util.newBuffer(response.buff);\r\n                        const notifyObj = NotifyPBMessageResponse.decode(buf);\r\n                        this.onPush(response.cmd, notifyObj);\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n}\r\n\r\nexport default ftWebsocket\r\n"]}