futu-sdk
Version:
futu-api 的高性能精简易用版;基于*.proto静态编译,提供高性能的多层封装但层层开放的易用接口,获取最原始最完整的量化数据;相较于Python, nodejs更接近Web, 从而轻而易举搭建一个可视化交易站点,这是进行可控量化交易的不二选择。
185 lines (181 loc) • 14 kB
TypeScript
import { WebSocket as WebSocket$1 } from 'ws';
import * as proto from 'futu-proto';
type Message = {
protobuf: Uint8Array;
errorCode: number;
errorMessage: string;
};
type ReqFn = (cmd: number, buf: Uint8Array, callback: (message: Message) => void) => () => void;
type SubFn = (cmd: number, callback: (message: Message) => void) => () => void;
declare class WebRequest {
private reqFn;
private subFn;
constructor(reqFn: Promise<ReqFn>, subFn: SubFn);
/** 初始化连接 */
InitWebSocket: (c2s: proto.InitWebSocket.IRequest["c2s"], timeout?: number) => Promise<NonNullable<proto.InitWebSocket.IResponse["s2c"]>>;
/** 请求全局状态 */
GetGlobalState: (c2s: proto.GetGlobalState.IRequest["c2s"], timeout?: number) => Promise<NonNullable<proto.GetGlobalState.IResponse["s2c"]>>;
/** 心跳 */
KeepAlive: (c2s: proto.KeepAlive.IRequest["c2s"], timeout?: number) => Promise<NonNullable<proto.KeepAlive.IResponse["s2c"]>>;
/** 获取用户信息 */
GetUserInfo: (c2s: proto.GetUserInfo.IRequest["c2s"], timeout?: number) => Promise<NonNullable<proto.GetUserInfo.IResponse["s2c"]>>;
/** 获取延迟统计 */
GetDelayStatistics: (c2s: proto.GetDelayStatistics.IRequest["c2s"], timeout?: number) => Promise<NonNullable<proto.GetDelayStatistics.IResponse["s2c"]>>;
/** 订阅或者反订阅 */
Sub: (c2s: proto.Qot_Sub.IRequest["c2s"]) => Promise<NonNullable<proto.Qot_Sub.IResponse["s2c"]>>;
/** 注册推送 */
RegQotPush: (c2s: proto.Qot_RegQotPush.IRequest["c2s"], timeout?: number) => Promise<NonNullable<proto.Qot_RegQotPush.IResponse["s2c"]>>;
/** 获取订阅信息 */
GetSubInfo: (c2s: proto.Qot_GetSubInfo.IRequest["c2s"], timeout?: number) => Promise<NonNullable<proto.Qot_GetSubInfo.IResponse["s2c"]>>;
/** 获取基本行情 */
GetBasicQot: (c2s: proto.Qot_GetBasicQot.IRequest["c2s"], timeout?: number) => Promise<NonNullable<proto.Qot_GetBasicQot.IResponse["s2c"]>>;
/** 获取K线 */
GetKL: (c2s: proto.Qot_GetKL.IRequest["c2s"], timeout?: number) => Promise<NonNullable<proto.Qot_GetKL.IResponse["s2c"]>>;
/** 获取分时 */
GetRT: (c2s: proto.Qot_GetRT.IRequest["c2s"], timeout?: number) => Promise<NonNullable<proto.Qot_GetRT.IResponse["s2c"]>>;
/** 获取逐笔 */
GetTicker: (c2s: proto.Qot_GetTicker.IRequest["c2s"], timeout?: number) => Promise<NonNullable<proto.Qot_GetTicker.IResponse["s2c"]>>;
/** 获取摆盘 */
GetOrderBook: (c2s: proto.Qot_GetOrderBook.IRequest["c2s"], timeout?: number) => Promise<NonNullable<proto.Qot_GetOrderBook.IResponse["s2c"]>>;
/** 获取经纪队列 */
GetBroker: (c2s: proto.Qot_GetBroker.IRequest["c2s"], timeout?: number) => Promise<NonNullable<proto.Qot_GetBroker.IResponse["s2c"]>>;
/** 获取历史K线 */
GetHistoryKL: (c2s: proto.Qot_GetHistoryKL.IRequest["c2s"], timeout?: number) => Promise<NonNullable<proto.Qot_GetHistoryKL.IResponse["s2c"]>>;
/** 获取多只股票历史单点K线 */
GetHistoryKLPoints: (c2s: proto.Qot_GetHistoryKLPoints.IRequest["c2s"], timeout?: number) => Promise<NonNullable<proto.Qot_GetHistoryKLPoints.IResponse["s2c"]>>;
/** 获取复权信息 */
GetRehab: (c2s: proto.Qot_GetRehab.IRequest["c2s"], timeout?: number) => Promise<NonNullable<proto.Qot_GetRehab.IResponse["s2c"]>>;
/** 在线拉取历史K线,不读本地历史数据DB */
RequestHistoryKL: (c2s: proto.Qot_RequestHistoryKL.IRequest["c2s"], timeout?: number) => Promise<NonNullable<proto.Qot_RequestHistoryKL.IResponse["s2c"]>>;
/** 拉取历史K线已经用掉的额度 */
RequestHistoryKLQuota: (c2s: proto.Qot_RequestHistoryKLQuota.IRequest["c2s"], timeout?: number) => Promise<NonNullable<proto.Qot_RequestHistoryKLQuota.IResponse["s2c"]>>;
/** 在线拉取复权信息,不读本地历史数据DB */
RequestRehab: (c2s: proto.Qot_RequestRehab.IRequest["c2s"], timeout?: number) => Promise<NonNullable<proto.Qot_RequestRehab.IResponse["s2c"]>>;
/** 获取股票停牌信息 */
GetSuspend: (c2s: proto.Qot_GetSuspend.IRequest["c2s"], timeout?: number) => Promise<NonNullable<proto.Qot_GetSuspend.IResponse["s2c"]>>;
/** 获取静态信息 */
GetStaticInfo: (c2s: proto.Qot_GetStaticInfo.IRequest["c2s"], timeout?: number) => Promise<NonNullable<proto.Qot_GetStaticInfo.IResponse["s2c"]>>;
/** 获取股票快照 */
GetSecuritySnapshot: (c2s: proto.Qot_GetSecuritySnapshot.IRequest["c2s"], timeout?: number) => Promise<NonNullable<proto.Qot_GetSecuritySnapshot.IResponse["s2c"]>>;
/** 获取板块集合下的板块 */
GetPlateSet: (c2s: proto.Qot_GetPlateSet.IRequest["c2s"], timeout?: number) => Promise<NonNullable<proto.Qot_GetPlateSet.IResponse["s2c"]>>;
/** 获取板块下的股票 */
GetPlateSecurity: (c2s: proto.Qot_GetPlateSecurity.IRequest["c2s"], timeout?: number) => Promise<NonNullable<proto.Qot_GetPlateSecurity.IResponse["s2c"]>>;
/** 获取相关股票 */
GetReference: (c2s: proto.Qot_GetReference.IRequest["c2s"], timeout?: number) => Promise<NonNullable<proto.Qot_GetReference.IResponse["s2c"]>>;
/** 获取股票所属的板块 */
GetOwnerPlate: (c2s: proto.Qot_GetOwnerPlate.IRequest["c2s"], timeout?: number) => Promise<NonNullable<proto.Qot_GetOwnerPlate.IResponse["s2c"]>>;
/** 获取大股东持股变化列表 */
GetHoldingChangeList: (c2s: proto.Qot_GetHoldingChangeList.IRequest["c2s"], timeout?: number) => Promise<NonNullable<proto.Qot_GetHoldingChangeList.IResponse["s2c"]>>;
/** 筛选期权 */
GetOptionChain: (c2s: proto.Qot_GetOptionChain.IRequest["c2s"], timeout?: number) => Promise<NonNullable<proto.Qot_GetOptionChain.IResponse["s2c"]>>;
/** 筛选窝轮 */
GetWarrant: (c2s: proto.Qot_GetWarrant.IRequest["c2s"], timeout?: number) => Promise<NonNullable<proto.Qot_GetWarrant.IResponse["s2c"]>>;
/** 获取资金流向 */
GetCapitalFlow: (c2s: proto.Qot_GetCapitalFlow.IRequest["c2s"], timeout?: number) => Promise<NonNullable<proto.Qot_GetCapitalFlow.IResponse["s2c"]>>;
/** 获取资金分布 */
GetCapitalDistribution: (c2s: proto.Qot_GetCapitalDistribution.IRequest["c2s"], timeout?: number) => Promise<NonNullable<proto.Qot_GetCapitalDistribution.IResponse["s2c"]>>;
/** 获取自选股分组下的股票 */
GetUserSecurity: (c2s: proto.Qot_GetUserSecurity.IRequest["c2s"], timeout?: number) => Promise<NonNullable<proto.Qot_GetUserSecurity.IResponse["s2c"]>>;
/** 修改自选股分组下的股票 */
ModifyUserSecurity: (c2s: proto.Qot_ModifyUserSecurity.IRequest["c2s"], timeout?: number) => Promise<NonNullable<proto.Qot_ModifyUserSecurity.IResponse["s2c"]>>;
/** 条件选股 */
StockFilter: (c2s: proto.Qot_StockFilter.IRequest["c2s"], timeout?: number) => Promise<NonNullable<proto.Qot_StockFilter.IResponse["s2c"]>>;
/** 获取股票代码变化信息 */
GetCodeChange: (c2s: proto.Qot_GetCodeChange.IRequest["c2s"], timeout?: number) => Promise<NonNullable<proto.Qot_GetCodeChange.IResponse["s2c"]>>;
/** 新股IPO */
GetIpoList: (c2s: proto.Qot_GetIpoList.IRequest["c2s"], timeout?: number) => Promise<NonNullable<proto.Qot_GetIpoList.IResponse["s2c"]>>;
/** 期货合约资料 */
GetFutureInfo: (c2s: proto.Qot_GetFutureInfo.IRequest["c2s"], timeout?: number) => Promise<NonNullable<proto.Qot_GetFutureInfo.IResponse["s2c"]>>;
/** 获取市场交易日 */
RequestTradeDate: (c2s: proto.Qot_RequestTradeDate.IRequest["c2s"], timeout?: number) => Promise<NonNullable<proto.Qot_RequestTradeDate.IResponse["s2c"]>>;
/** 设置到价提醒 */
SetPriceReminder: (c2s: proto.Qot_SetPriceReminder.IRequest["c2s"], timeout?: number) => Promise<NonNullable<proto.Qot_SetPriceReminder.IResponse["s2c"]>>;
/** 获取到价提醒 */
GetPriceReminder: (c2s: proto.Qot_GetPriceReminder.IRequest["c2s"], timeout?: number) => Promise<NonNullable<proto.Qot_GetPriceReminder.IResponse["s2c"]>>;
/** 获取自选股分组列表 */
GetUserSecurityGroup: (c2s: proto.Qot_GetUserSecurityGroup.IRequest["c2s"], timeout?: number) => Promise<NonNullable<proto.Qot_GetUserSecurityGroup.IResponse["s2c"]>>;
/** 获取股票对应市场状态 */
GetMarketState: (c2s: proto.Qot_GetMarketState.IRequest["c2s"], timeout?: number) => Promise<NonNullable<proto.Qot_GetMarketState.IResponse["s2c"]>>;
/** 获取期权链到期日 */
GetOptionExpirationDate: (c2s: proto.Qot_GetOptionExpirationDate.IRequest["c2s"], timeout?: number) => Promise<NonNullable<proto.Qot_GetOptionExpirationDate.IResponse["s2c"]>>;
/** 获取交易帐号列表 */
GetAccList: (c2s: proto.Trd_GetAccList.IRequest["c2s"], timeout?: number) => Promise<NonNullable<proto.Trd_GetAccList.IResponse["s2c"]>>;
/** 解锁,针对OpenD解锁一次即可 */
UnlockTrade: (c2s: proto.Trd_UnlockTrade.IRequest["c2s"], timeout?: number) => Promise<NonNullable<proto.Trd_UnlockTrade.IResponse["s2c"]>>;
/** 订阅接收推送数据的交易账户 */
SubAccPush: (c2s: proto.Trd_SubAccPush.IRequest["c2s"]) => Promise<NonNullable<proto.Trd_SubAccPush.IResponse["s2c"]>>;
/** 获取账户资金 */
GetFunds: (c2s: proto.Trd_GetFunds.IRequest["c2s"], timeout?: number) => Promise<NonNullable<proto.Trd_GetFunds.IResponse["s2c"]>>;
/** 获取账户持仓 */
GetPositionList: (c2s: proto.Trd_GetPositionList.IRequest["c2s"], timeout?: number) => Promise<NonNullable<proto.Trd_GetPositionList.IResponse["s2c"]>>;
/** 获取最大交易数量 */
GetMaxTrdQtys: (c2s: proto.Trd_GetMaxTrdQtys.IRequest["c2s"], timeout?: number) => Promise<NonNullable<proto.Trd_GetMaxTrdQtys.IResponse["s2c"]>>;
/** 获取当日订单列表 */
GetOrderList: (c2s: proto.Trd_GetOrderList.IRequest["c2s"], timeout?: number) => Promise<NonNullable<proto.Trd_GetOrderList.IResponse["s2c"]>>;
/** 下单 */
PlaceOrder: (c2s: proto.Trd_PlaceOrder.IRequest["c2s"], timeout?: number) => Promise<NonNullable<proto.Trd_PlaceOrder.IResponse["s2c"]>>;
/** 修改订单 */
ModifyOrder: (c2s: proto.Trd_ModifyOrder.IRequest["c2s"], timeout?: number) => Promise<NonNullable<proto.Trd_ModifyOrder.IResponse["s2c"]>>;
/** 获取当日成交列表 */
GetOrderFillList: (c2s: proto.Trd_GetOrderFillList.IRequest["c2s"], timeout?: number) => Promise<NonNullable<proto.Trd_GetOrderFillList.IResponse["s2c"]>>;
/** 获取历史订单列表 */
GetHistoryOrderList: (c2s: proto.Trd_GetHistoryOrderList.IRequest["c2s"], timeout?: number) => Promise<NonNullable<proto.Trd_GetHistoryOrderList.IResponse["s2c"]>>;
/** 获取历史成交列表 */
GetHistoryOrderFillList: (c2s: proto.Trd_GetHistoryOrderFillList.IRequest["c2s"], timeout?: number) => Promise<NonNullable<proto.Trd_GetHistoryOrderFillList.IResponse["s2c"]>>;
/** 获取融资融券数据 */
GetMarginRatio: (c2s: proto.Trd_GetMarginRatio.IRequest["c2s"], timeout?: number) => Promise<NonNullable<proto.Trd_GetMarginRatio.IResponse["s2c"]>>;
/** 获取订单收费明细数据 */
GetOrderFee: (c2s: proto.Trd_GetOrderFee.IRequest["c2s"], timeout?: number) => Promise<NonNullable<proto.Trd_GetOrderFee.IResponse["s2c"]>>;
/** 获取资金流水 */
FlowSummary: (c2s: proto.Trd_FlowSummary.IRequest["c2s"], timeout?: number) => Promise<NonNullable<proto.Trd_FlowSummary.IResponse["s2c"]>>;
/** 推送通知 */
Notify: (callback: (res: NonNullable<proto.Notify.IResponse["s2c"]>) => void) => () => void;
/** 推送基本行情 */
UpdateBasicQot: (callback: (res: NonNullable<proto.Qot_UpdateBasicQot.IResponse["s2c"]>) => void) => () => void;
/** 推送K线 */
UpdateKL: (callback: (res: NonNullable<proto.Qot_UpdateKL.IResponse["s2c"]>) => void) => () => void;
/** 获取分时 */
UpdateRT: (callback: (res: NonNullable<proto.Qot_UpdateRT.IResponse["s2c"]>) => void) => () => void;
/** 推送逐笔 */
UpdateTicker: (callback: (res: NonNullable<proto.Qot_UpdateTicker.IResponse["s2c"]>) => void) => () => void;
/** 推送买卖盘 */
UpdateOrderBook: (callback: (res: NonNullable<proto.Qot_UpdateOrderBook.IResponse["s2c"]>) => void) => () => void;
/** 推送经纪队列 */
UpdateBroker: (callback: (res: NonNullable<proto.Qot_UpdateBroker.IResponse["s2c"]>) => void) => () => void;
/** 推送到价提醒 */
UpdatePriceReminder: (callback: (res: NonNullable<proto.Qot_UpdatePriceReminder.IResponse["s2c"]>) => void) => () => void;
/** 订单状态变动通知(推送) */
UpdateOrder: (callback: (res: NonNullable<proto.Trd_UpdateOrder.IResponse["s2c"]>) => void) => () => void;
/** 成交通知(推送) */
UpdateOrderFill: (callback: (res: NonNullable<proto.Trd_UpdateOrderFill.IResponse["s2c"]>) => void) => () => void;
}
interface IWebRequest extends Omit<WebRequest, 'InitWebSocket'> {
}
/**
* getFutuApi 内部实例化 WebSocket 连接,并基于 WebSocket 封装了的查询对象 WebRequest, 你可以使用 `webRequest` 查询各种接口,
* 也可以使用 `webSocket` 来关闭连接(`webSocket.close()`)和实现事件监听(如 onclose/onopen/onmessage等)
*
* Example:
*
* ```ts
* import { getFutuApi } from 'futu-sdk';
* // import { Trd_Common } from 'futu-proto';
*
* const { webRequest, webSocket } = getFutuApi('ws://127.0.0.1:33333', '9d261112869397f0');
* try {
* const { accList } = (await webRequest.GetAccList({ userID: 0, needGeneralSecAccount: true })) || {};
* console.log({ accList });
* } finally {
* webSocket.close();
* }
* ```
* @param wsUrl 连接本地 WebSocket 的地址,如 `ws://127.0.0.1:33333`
* @param key WebSocket 密钥,每次启动 OpenD_GUI 不设置都会随机生成,CLI 暂不清楚如何获取这个密钥
* @returns `{ webRequest: WebRequest, webSocket: WebSocket }`
*/
declare const getFutuApi: (wsUrl: string, key: string) => {
webSocket: WebSocket$1 | WebSocket;
webRequest: IWebRequest;
};
export { type IWebRequest, getFutuApi };