# 交易对象
- Python
- Proto
- C#
- Java
- C++
- JavaScript
# 创建连接
OpenSecTradeContext(filter_trdmarket=TrdMarket.HK, host='127.0.0.1', port=11111, is_encrypt=None, security_firm=SecurityFirm.FUTUSECURITIES)
OpenFutureTradeContext(host='127.0.0.1', port=11111, is_encrypt=None, security_firm=SecurityFirm.FUTUSECURITIES)
介绍
根据交易品类,选择账户,并创建对应的交易对象。
实例 账户 OpenSecTradeContext 证券账户 股票、ETFs、窝轮牛熊、股票及指数的期权使用此账户OpenFutureTradeContext 期货账户 期货、期货期权使用此账户参数
参数 类型 说明 filter_trdmarket TrdMarket 筛选对应交易市场权限的账户 - 此参数仅对 OpenSecTradeContext 适用
- 此参数仅用于筛选账户,不影响交易连接
host str OpenD 监听的 IP 地址 port int OpenD 监听的 IP 端口 is_encrypt bool 是否启用加密 默认 None 表示:使用 enable_proto_encrypt 的设置security_firm SecurityFirm 所属券商 Example
from futu import *
trd_ctx = OpenSecTradeContext(filter_trdmarket=TrdMarket.HK, host='127.0.0.1', port=11111, is_encrypt=None, security_firm=SecurityFirm.FUTUSECURITIES)
trd_ctx.close() # 结束后记得关闭当条连接,防止连接条数用尽
2
3
# 关闭连接
close()
介绍
关闭交易对象。默认情况下,Futu API 内部创建的线程会阻止进程退出,只有当所有 Context 都 close 后,进程才能正常退出。但通过 set_all_thread_daemon 可以设置所有内部线程为 daemon 线程,这时即使没有调用 Context 的 close,进程也可以正常退出。
Example
from futu import *
trd_ctx = OpenSecTradeContext(filter_trdmarket=TrdMarket.HK, host='127.0.0.1', port=11111)
trd_ctx.close() # 结束后记得关闭当条连接,防止连接条数用尽
2
3
# 创建连接
介绍
创建交易对象并初始化交易连接
参数
message C2S
{
required int32 clientVer = 1; //客户端版本号,clientVer = "."以前的数 * 100 + "."以后的,举例:1.1版本的 clientVer 为1 * 100 + 1 = 101,2.21版本为2 * 100 + 21 = 221
required string clientID = 2; //客户端唯一标识,无生具体生成规则,客户端自己保证唯一性即可
optional bool recvNotify = 3; //此连接是否接收市场状态、交易需要重新解锁等等事件通知,true 代表接收,OpenD 就会向此连接推送这些通知,反之 false 代表不接收不推送
//如果通信要加密,首先得在 OpenD 和客户端都配置 RSA 密钥,不配置始终不加密
//如果配置了 RSA 密钥且指定的加密算法不为 PacketEncAlgo_None 则加密(即便这里不设置,配置了 RSA 密钥,也会采用默认加密方式),默认采用 FTAES_ECB 算法
optional int32 packetEncAlgo = 4; //指定包加密算法,参见 Common.PacketEncAlgo 的枚举定义
optional int32 pushProtoFmt = 5; //指定这条连接上的推送协议格式,若不指定则使用 push_proto_type 配置项
optional string programmingLanguage = 6; //接口编程语言,用于统计语言偏好
}
message Request
{
required C2S c2s = 1;
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
- 返回
message S2C
{
required int32 serverVer = 1; //OpenD 的版本号
required uint64 loginUserID = 2; //OpenD 登录的用户 ID
required uint64 connID = 3; //此连接的连接 ID,连接的唯一标识
required string connAESKey = 4; //此连接后续 AES 加密通信的 Key,固定为16字节长字符串
required int32 keepAliveInterval = 5; //心跳保活间隔
optional string aesCBCiv = 6; //AES 加密通信 CBC 加密模式的 iv,固定为16字节长字符串
}
message Response
{
required int32 retType = 1 [default = -400]; //返回结果,参见 Common.RetType 的枚举定义
optional string retMsg = 2; //返回结果描述
optional int32 errCode = 3; //错误码,客户端一般通过 retType 和 RetMsg 来判断结果和详情,errCode 只做日志记录,仅在个别协议失败时对账用
optional S2C s2c = 4;
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
- 接口调用结果,结构参见 RetType
协议 ID
1001
# 创建连接
bool InitConnect(String ip, short port, bool isEnableEncrypt)
介绍
创建交易对象并初始化交易连接
参数
参数 类型 说明 ip str penD 监听地址 port int OpenD 监听端口 bEnableEncrypt bool 是否启用加密 返回
- ret:是否启动了执行。不代表连接结果,结果通过 OnInitConnect 回调
Example
public class Program : FTSPI_Trd, FTSPI_Conn {
FTAPI_Trd trd = new FTAPI_Trd();
public Program() {
trd.SetClientInfo("csharp", 1); //设置客户端信息
trd.SetConnCallback(this); //设置连接回调
}
public void Start() {
trd.InitConnect("127.0.0.1", (ushort)11111, false);
}
public void OnInitConnect(FTAPI_Conn client, long errCode, String desc)
{
Console.Write("Trd onInitConnect: ret={0} desc={1} connID={2}\n", errCode, desc, client.GetConnectID());
}
public void OnDisconnect(FTAPI_Conn client, long errCode) {
Console.Write("Trd onDisConnect: {0}\n", errCode);
}
public static void Main(String[] args) {
FTAPI.Init();
Program trd = new Program();
trd.Start();
while (true)
Thread.Sleep(1000 * 600);
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
- Output
Trd onInitConnect: ret=0 desc= connID=6826804060126078029
# 销毁连接
void Close()
介绍
销毁连接
Example
FTAPI_Trd trd = new FTAPI_Trd();
trd.InitConnect("127.0.0.1", (ushort)11111, false);
trd.Close();
2
3
# 创建连接
boolean initConnect(String ip, short port, boolean isEnableEncrypt)
介绍
创建交易对象并初始化交易连接
参数
参数 类型 说明 ip str OpenD 监听地址 port int OpenD 监听端口 bEnableEncrypt bool 是否启用加密 返回
- ret:是否启动了执行。不代表连接结果,结果通过 onInitConnect 回调
Example
public class TrdDemo implements FTSPI_Trd, FTSPI_Conn {
FTAPI_Conn_Trd trd = new FTAPI_Conn_Trd();
public TrdDemo() {
trd.setClientInfo("javaclient", 1); //设置客户端信息
trd.setConnSpi(this); //设置连接回调
}
public void start() throws IOException {
trd.initConnect("127.0.0.1", (short)11111, false);
}
@Override
public void onInitConnect(FTAPI_Conn client, long errCode, String desc)
{
System.out.printf("Trd onInitConnect: ret=%b desc=%s connID=%d\n", errCode, desc, client.getConnectID());
}
@Override
public void onDisconnect(FTAPI_Conn client, long errCode) {
System.out.printf("Trd onDisConnect: %d\n", errCode);
}
public static void main(String[] args) throws IOException {
FTAPI.init();
TrdDemo trd = new TrdDemo();
trd.start();
while (true) {
try {
Thread.sleep(1000 * 600);
} catch (InterruptedException exc) {
}
}
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# 销毁连接
void close()
介绍
销毁连接
Example
FTAPI_Conn_Trd trd = new FTAPI_Conn_Trd();
trd.initConnect("127.0.0.1", (short)11111, false);
trd.close();
2
3
# 创建连接
FTAPI_Trd* CreateTrdApi();
bool InitConnect(const char* szIPAddr, Futu::u16_t nPort, bool bEnableEncrypt);
介绍
创建交易对象并初始化交易连接
参数
参数 类型 说明 szIPAddr str OpenD 监听地址 nPort int OpenD 监听端口 bEnableEncrypt bool 是否启用加密 Example
FTAPI_Trd *m_pTrdApi = FTAPI::CreateTrdApi();
m_pTrdApi->InitConnect("127.0.0.1", 11111, false);
FTAPI::ReleaseTrdApi(m_pTrdApi);
2
3
# 销毁连接
void ReleaseTrdApi(FTAPI_Trd* pTrd);
介绍
销毁连接
返回
- pTrd:连接实例
Example
FTAPI_Trd *m_pTrdApi = FTAPI::CreateTrdApi();
m_pTrdApi->InitConnect("127.0.0.1", 11111, false);
FTAPI::ReleaseTrdApi(m_pTrdApi);
2
3
# 创建连接
start(ip, port, ssl, key)
介绍
创建交易对象并初始化交易连接
参数
参数 类型 说明 ip str OpenD 监听的 WebSocket 地址 port int OpenD 监听的 WebSocket 端口 ssl bool 是否启用 SSL 加密,参见 WebSocket 相关 key str 连接的密钥(未传会出现连接超时),可以在 OpenD 的启动参数中配置。可视化 OpenD 在未配置 WebSocket 密钥的情况下会随机指定 Example
import ftWebSocket from "@/components/ft-websocket/main.js";
class Example {
example() {
this.websocket = new ftWebSocket();
this.websocket.start("127.0.0.1", 33333, false, null);
}
}
2
3
4
5
6
7
# 关闭连接
close()
介绍
关闭连接
Example
import ftWebSocket from "@/components/ft-websocket/main.js";
class Example {
example() {
this.websocket = new ftWebSocket();
this.websocket.start("127.0.0.1", 33333, false, null);
this.websocket.close();
}
}
2
3
4
5
6
7
8
- Python
- Proto
- C#
- Java
- C++
- JavaScript
# 创建连接
OpenSecTradeContext(filter_trdmarket=TrdMarket.HK, host='127.0.0.1', port=11111, is_encrypt=None, security_firm=SecurityFirm.FUTUSECURITIES)
OpenFutureTradeContext(host='127.0.0.1', port=11111, is_encrypt=None, security_firm=SecurityFirm.FUTUSECURITIES)
介绍
根据交易品类,选择账户,并创建对应的交易对象。
实例 账户 OpenSecTradeContext 证券账户 股票、ETFs、窝轮牛熊、股票及指数的期权使用此账户OpenFutureTradeContext 期货账户 期货、期货期权使用此账户参数
参数 类型 说明 filter_trdmarket TrdMarket 筛选对应交易市场权限的账户 - 此参数仅对 OpenSecTradeContext 适用
- 此参数仅用于筛选账户,不影响交易连接
host str OpenD 监听的 IP 地址 port int OpenD 监听的 IP 端口 is_encrypt bool 是否启用加密 默认 None 表示:使用 enable_proto_encrypt 的设置security_firm SecurityFirm 所属券商 Example
from moomoo import *
trd_ctx = OpenSecTradeContext(filter_trdmarket=TrdMarket.HK, host='127.0.0.1', port=11111, is_encrypt=None, security_firm=SecurityFirm.FUTUSECURITIES)
trd_ctx.close() # 结束后记得关闭当条连接,防止连接条数用尽
2
3
# 关闭连接
close()
介绍
关闭交易对象。默认情况下,moomoo API 内部创建的线程会阻止进程退出,只有当所有 Context 都 close 后,进程才能正常退出。但通过 set_all_thread_daemon 可以设置所有内部线程为 daemon 线程,这时即使没有调用 Context 的 close,进程也可以正常退出。
Example
from moomoo import *
trd_ctx = OpenSecTradeContext(filter_trdmarket=TrdMarket.HK, host='127.0.0.1', port=11111)
trd_ctx.close() # 结束后记得关闭当条连接,防止连接条数用尽
2
3
# 创建连接
介绍
创建交易对象并初始化交易连接
参数
message C2S
{
required int32 clientVer = 1; //客户端版本号,clientVer = "."以前的数 * 100 + "."以后的,举例:1.1版本的 clientVer 为1 * 100 + 1 = 101,2.21版本为2 * 100 + 21 = 221
required string clientID = 2; //客户端唯一标识,无生具体生成规则,客户端自己保证唯一性即可
optional bool recvNotify = 3; //此连接是否接收市场状态、交易需要重新解锁等等事件通知,true 代表接收,OpenD 就会向此连接推送这些通知,反之 false 代表不接收不推送
//如果通信要加密,首先得在 OpenD 和客户端都配置 RSA 密钥,不配置始终不加密
//如果配置了 RSA 密钥且指定的加密算法不为 PacketEncAlgo_None 则加密(即便这里不设置,配置了 RSA 密钥,也会采用默认加密方式),默认采用 FTAES_ECB 算法
optional int32 packetEncAlgo = 4; //指定包加密算法,参见 Common.PacketEncAlgo 的枚举定义
optional int32 pushProtoFmt = 5; //指定这条连接上的推送协议格式,若不指定则使用 push_proto_type 配置项
optional string programmingLanguage = 6; //接口编程语言,用于统计语言偏好
}
message Request
{
required C2S c2s = 1;
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
- 返回
message S2C
{
required int32 serverVer = 1; //OpenD 的版本号
required uint64 loginUserID = 2; //OpenD 登录的牛牛用户 ID
required uint64 connID = 3; //此连接的连接 ID,连接的唯一标识
required string connAESKey = 4; //此连接后续 AES 加密通信的 Key,固定为16字节长字符串
required int32 keepAliveInterval = 5; //心跳保活间隔
optional string aesCBCiv = 6; //AES 加密通信 CBC 加密模式的 iv,固定为16字节长字符串
}
message Response
{
required int32 retType = 1 [default = -400]; //返回结果,参见 Common.RetType 的枚举定义
optional string retMsg = 2; //返回结果描述
optional int32 errCode = 3; //错误码,客户端一般通过 retType 和 RetMsg 来判断结果和详情,errCode 只做日志记录,仅在个别协议失败时对账用
optional S2C s2c = 4;
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
- 接口调用结果,结构参见 RetType
协议 ID
1001
# 创建连接
bool InitConnect(String ip, short port, bool isEnableEncrypt)
介绍
创建交易对象并初始化交易连接
参数
参数 类型 说明 ip str OpenD 监听地址 port int OpenD 监听端口 bEnableEncrypt bool 是否启用加密 返回
- ret:是否启动了执行。不代表连接结果,结果通过 OnInitConnect 回调
Example
public class Program : MMSPI_Trd, MMSPI_Conn {
MMAPI_Trd trd = new MMAPI_Trd();
public Program() {
trd.SetClientInfo("csharp", 1); //设置客户端信息
trd.SetConnCallback(this); //设置连接回调
}
public void Start() {
trd.InitConnect("127.0.0.1", (ushort)11111, false);
}
public void OnInitConnect(MMAPI_Conn client, long errCode, String desc)
{
Console.Write("Trd onInitConnect: ret={0} desc={1} connID={2}\n", errCode, desc, client.GetConnectID());
}
public void OnDisconnect(MMAPI_Conn client, long errCode) {
Console.Write("Trd onDisConnect: {0}\n", errCode);
}
public static void Main(String[] args) {
MMAPI.Init();
Program trd = new Program();
trd.Start();
while (true)
Thread.Sleep(1000 * 600);
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
- Output
Trd onInitConnect: ret=0 desc= connID=6826804060126078029
# 销毁连接
void Close()
介绍
销毁连接
Example
MMAPI_Trd trd = new MMAPI_Trd();
trd.InitConnect("127.0.0.1", (ushort)11111, false);
trd.Close();
2
3
# 创建连接
boolean initConnect(String ip, short port, boolean isEnableEncrypt)
介绍
创建交易对象并初始化交易连接
参数
参数 类型 说明 ip str OpenD 监听地址 port int OpenD 监听端口 bEnableEncrypt bool 是否启用加密 返回
- ret:是否启动了执行。不代表连接结果,结果通过 onInitConnect 回调
Example
public class TrdDemo implements MMSPI_Trd, MMSPI_Conn {
MMAPI_Conn_Trd trd = new MMAPI_Conn_Trd();
public TrdDemo() {
trd.setClientInfo("javaclient", 1); //设置客户端信息
trd.setConnSpi(this); //设置连接回调
}
public void start() throws IOException {
trd.initConnect("127.0.0.1", (short)11111, false);
}
@Override
public void onInitConnect(MMAPI_Conn client, long errCode, String desc)
{
System.out.printf("Trd onInitConnect: ret=%b desc=%s connID=%d\n", errCode, desc, client.getConnectID());
}
@Override
public void onDisconnect(MMAPI_Conn client, long errCode) {
System.out.printf("Trd onDisConnect: %d\n", errCode);
}
public static void main(String[] args) throws IOException {
MMAPI.init();
TrdDemo trd = new TrdDemo();
trd.start();
while (true) {
try {
Thread.sleep(1000 * 600);
} catch (InterruptedException exc) {
}
}
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# 销毁连接
void close()
介绍
销毁连接
Example
MMAPI_Conn_Trd trd = new MMAPI_Conn_Trd();
trd.initConnect("127.0.0.1", (short)11111, false);
trd.close();
2
3
# 创建连接
MMAPI_Trd* CreateTrdApi();
bool InitConnect(const char* szIPAddr, moomoo::u16_t nPort, bool bEnableEncrypt);
介绍
创建交易对象并初始化交易连接
参数
参数 类型 说明 szIPAddr str OpenD 监听地址 nPort int OpenD 监听端口 bEnableEncrypt bool 是否启用加密 Example
MMAPI_Trd *m_pTrdApi = MMAPI::CreateTrdApi();
m_pTrdApi->InitConnect("127.0.0.1", 11111, false);
MMAPI::ReleaseTrdApi(m_pTrdApi);
2
3
# 销毁连接
void ReleaseTrdApi(MMAPI_Trd* pTrd);
介绍
销毁连接
返回
- pTrd:连接实例
Example
MMAPI_Trd *m_pTrdApi = MMAPI::CreateTrdApi();
m_pTrdApi->InitConnect("127.0.0.1", 11111, false);
MMAPI::ReleaseTrdApi(m_pTrdApi);
2
3
# 创建连接
start(ip, port, ssl, key)
介绍
创建交易对象并初始化交易连接
参数
参数 类型 说明 ip str OpenD 监听的 WebSocket 地址 port int OpenD 监听的 WebSocket 端口 ssl bool 是否启用 SSL 加密,参见 WebSocket 相关 key str 连接的密钥(未传会出现连接超时),可以在 OpenD 的启动参数中配置。可视化 OpenD 在未配置 WebSocket 密钥的情况下会随机指定 Example
import mmWebSocket from "@/components/mm-websocket/main.js";
class Example {
example() {
this.websocket = new mmWebSocket();
this.websocket.start("127.0.0.1", 33333, false, null);
}
}
2
3
4
5
6
7
# 关闭连接
close()
介绍
关闭连接
Example
import mmWebSocket from "@/components/mm-websocket/main.js";
class Example {
example() {
this.websocket = new mmWebSocket();
this.websocket.start("127.0.0.1", 33333, false, null);
this.websocket.close();
}
}
2
3
4
5
6
7
8
← 交易接口总览 获取交易业务账户列表 →