# 交易物件
- 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.US, host='127.0.0.1', port=11111, is_encrypt=None, security_firm=SecurityFirm.FUTUINC)
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.US, host='127.0.0.1', port=11111, is_encrypt=None, security_firm=SecurityFirm.FUTUINC)
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
← 交易介面總覽 讀取交易業務賬户列表 →