# 行情物件
- Python
- Proto
- C#
- Java
- C++
- JavaScript
# 建立連線
OpenQuoteContext(host='127.0.0.1', port=11111, is_encrypt=None)
介紹
建立並初始化行情連線
參數
參數 類型 說明 host str OpenD 監聽的 IP 位址 port int OpenD 監聽的連接埠 is_encrypt bool 是否啓用加密 - 預設為 None,表示使用 enable_proto_encrypt 的設置
- True:強制加密
False:強制不加密
Example
from futu import *
quote_ctx = OpenQuoteContext(host='127.0.0.1', port=11111, is_encrypt=False)
quote_ctx.close() # 結束後記得關閉當條連線,防止連線條數用盡
2
3
# 關閉連線
close()
介紹
關閉行情介面類物件。預設情況下,Futu API 內部建立的執行緒會阻止行程退出,只有當所有 Context 都 close 後,行程才能正常退出。但通過 set_all_thread_daemon 可以設置所有內部執行緒為 daemon 執行緒,這時即使沒有呼叫 Context 的 close,行程也可以正常退出。
Example
from futu import *
quote_ctx = OpenQuoteContext(host='127.0.0.1', port=11111)
quote_ctx.close() # 結束後記得關閉當條連線,防止連線條數用盡
2
3
# 啓動
start()
介紹
啓動非同步接收推送數據
# 停止
stop()
介紹
停止非同步接收推送數據
# InitConnect.proto
介紹
初始化連線協議
參數
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
- 介面呼叫結果,結構參見 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 : FTSPI_Qot, FTSPI_Conn {
FTAPI_Qot qot = new FTAPI_Qot();
public Program() {
qot.SetClientInfo("csharp", 1); //設置用戶端資訊
qot.SetConnCallback(this); //設置連線回呼
}
public void Start() {
qot.InitConnect("127.0.0.1", (ushort)11111, false);
}
public void OnInitConnect(FTAPI_Conn client, long errCode, String desc)
{
Console.Write("Qot onInitConnect: ret={0} desc={1} connID={2}\n", errCode, desc, client.GetConnectID());
}
public void OnDisconnect(FTAPI_Conn client, long errCode) {
Console.Write("Qot onDisConnect: {0}\n", errCode);
}
public static void Main(String[] args) {
FTAPI.Init();
Program qot = new Program();
qot.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
31
32
- Output
Qot onInitConnect: ret=0 desc= connID=6825318240991318111
# 銷毀連線
void Close()
介紹
銷毀連線
Example
FTAPI_Qot qot = new FTAPI_Qot();
qot.InitConnect("127.0.0.1", (ushort)11111, false);
qot.Close();
2
3
# 建立連線
boolean initConnect(String ip, short port, boolean isEnableEncrypt)
介紹
初始化連線,連線並初始化
參數
參數 類型 說明 ip str OpenD 監聽位址 port int OpenD 監聽連接埠 bEnableEncrypt bool 是否啓用加密 返回
- ret:是否啓動了執行,不代表連線結果,結果通過 onInitConnect 回呼
Example
public class QotDemo implements FTSPI_Qot, FTSPI_Conn {
FTAPI_Conn_Qot qot = new FTAPI_Conn_Qot();
public QotDemo() {
qot.setClientInfo("javaclient", 1); //設置用戶端資訊
qot.setConnSpi(this); //設置連線回呼
}
public void start() throws IOException {
qot.initConnect("127.0.0.1", (short)11111, false);
}
@Override
public void onInitConnect(FTAPI_Conn client, long errCode, String desc)
{
System.out.printf("Qot onInitConnect: ret=%b desc=%s connID=%d\n", errCode, desc, client.getConnectID());
}
@Override
public void onDisconnect(FTAPI_Conn client, long errCode) {
System.out.printf("Qot onDisConnect: %d\n", errCode);
}
public static void main(String[] args) throws IOException {
FTAPI.init();
QotDemo qot = new QotDemo();
qot.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_Qot qot = new FTAPI_Conn_Qot();
qot.initConnect("127.0.0.1", (short)11111, false);
qot.close();
2
3
# 建立連線
FTAPI_Qot* CreateQotApi();
bool InitConnect(const char* szIPAddr, Futu::u16_t nPort, bool bEnableEncrypt);
介紹
建立,初始化連線
參數
參數 類型 說明 szIPAddr str OpenD 監聽位址 nPort int OpenD 監聽連接埠 bEnableEncrypt bool 是否啓用加密 Example
FTAPI_Qot *m_pQotApi = FTAPI::CreateQotApi();
m_pQotApi->InitConnect("127.0.0.1", 11111, false);
FTAPI::ReleaseQotApi(m_pQotApi);
2
3
# 銷毀連線
void ReleaseTrdApi(FTAPI_Qot* pTrd);
介紹
銷毀連線
返回
- pQot:連線實例
Example
FTAPI_Qot *m_pQotApi = FTAPI::CreateQotApi();
m_pQotApi->InitConnect("127.0.0.1", 11111, false);
FTAPI::ReleaseQotApi(m_pQotApi);
2
3
# 建立連線
start(ip, port, ssl, key)
介紹
初始化連線,連線並初始化
參數
參數 類型 說明 ip str OpenD 監聽的 WebSocket 位址 port int OpenD 監聽的 WebSocket 連接埠 ssl bool 是否啓用 SSL 加密,參見 WebSocket 相關 key str 連線的金鑰,否則會連線超時,金鑰在在 OpenD 可配置,可視化版本在不指定的情況下會隨機指定 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
# 關閉連線
stop()
介紹
關閉連線
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.stop();
}
}
2
3
4
5
6
7
8
- Python
- Proto
- C#
- Java
- C++
- JavaScript
# 建立連線
OpenQuoteContext(host='127.0.0.1', port=11111, is_encrypt=None)
介紹
建立並初始化行情連線
參數
參數 類型 說明 host str OpenD 監聽的 IP 位址 port int OpenD 監聽的連接埠 is_encrypt bool 是否啓用加密 - 預設為 None,表示使用 enable_proto_encrypt 的設置
- True:強制加密
False:強制不加密
Example
from moomoo import *
quote_ctx = OpenQuoteContext(host='127.0.0.1', port=11111, is_encrypt=False)
quote_ctx.close() # 結束後記得關閉當條連線,防止連線條數用盡
2
3
# 關閉連線
close()
介紹
關閉行情介面類物件。預設情況下,moomoo API 內部建立的執行緒會阻止行程退出,只有當所有 Context 都 close 後,行程才能正常退出。但通過 set_all_thread_daemon 可以設置所有內部執行緒為 daemon 執行緒,這時即使沒有呼叫 Context 的 close,行程也可以正常退出。
Example
from moomoo import *
quote_ctx = OpenQuoteContext(host='127.0.0.1', port=11111)
quote_ctx.close() # 結束後記得關閉當條連線,防止連線條數用盡
2
3
# 啓動
start()
介紹
啓動非同步接收推送數據
# 停止
stop()
介紹
停止非同步接收推送數據
# InitConnect.proto
介紹
初始化連線協議
參數
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
- 介面呼叫結果,結構參見 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_Qot, MMSPI_Conn {
MMAPI_Qot qot = new MMAPI_Qot();
public Program() {
qot.SetClientInfo("csharp", 1); //設置用戶端資訊
qot.SetConnCallback(this); //設置連線回呼
}
public void Start() {
qot.InitConnect("127.0.0.1", (ushort)11111, false);
}
public void OnInitConnect(MMAPI_Conn client, long errCode, String desc)
{
Console.Write("Qot onInitConnect: ret={0} desc={1} connID={2}\n", errCode, desc, client.GetConnectID());
}
public void OnDisconnect(MMAPI_Conn client, long errCode) {
Console.Write("Qot onDisConnect: {0}\n", errCode);
}
public static void Main(String[] args) {
MMAPI.Init();
Program qot = new Program();
qot.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
31
32
- Output
Qot onInitConnect: ret=0 desc= connID=6825318240991318111
# 銷毀連線
void Close()
介紹
銷毀連線
Example
MMAPI_Qot qot = new MMAPI_Qot();
qot.InitConnect("127.0.0.1", (ushort)11111, false);
qot.Close();
2
3
# 建立連線
boolean initConnect(String ip, short port, boolean isEnableEncrypt)
介紹
初始化連線,連線並初始化
參數
參數 類型 說明 ip str OpenD 監聽位址 port int OpenD 監聽連接埠 bEnableEncrypt bool 是否啓用加密 返回
- ret:是否啓動了執行,不代表連線結果,結果通過 onInitConnect 回呼
Example
public class QotDemo implements MMSPI_Qot, MMSPI_Conn {
MMAPI_Conn_Qot qot = new FTAPI_Conn_Qot();
public QotDemo() {
qot.setClientInfo("javaclient", 1); //設置用戶端資訊
qot.setConnSpi(this); //設置連線回呼
}
public void start() throws IOException {
qot.initConnect("127.0.0.1", (short)11111, false);
}
@Override
public void onInitConnect(MMAPI_Conn client, long errCode, String desc)
{
System.out.printf("Qot onInitConnect: ret=%b desc=%s connID=%d\n", errCode, desc, client.getConnectID());
}
@Override
public void onDisconnect(MMAPI_Conn client, long errCode) {
System.out.printf("Qot onDisConnect: %d\n", errCode);
}
public static void main(String[] args) throws IOException {
MMAPI.init();
QotDemo qot = new QotDemo();
qot.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_Qot qot = new MMAPI_Conn_Qot();
qot.initConnect("127.0.0.1", (short)11111, false);
qot.close();
2
3
# 建立連線
MMAPI_Qot* CreateQotApi();
bool InitConnect(const char* szIPAddr, moomoo::u16_t nPort, bool bEnableEncrypt);
介紹
建立,初始化連線
參數
參數 類型 說明 szIPAddr str OpenD 監聽位址 nPort int OpenD 監聽連接埠 bEnableEncrypt bool 是否啓用加密 Example
MMAPI_Qot *m_pQotApi = MMAPI::CreateQotApi();
m_pQotApi->InitConnect("127.0.0.1", 11111, false);
MMAPI::ReleaseQotApi(m_pQotApi);
2
3
# 銷毀連線
void ReleaseTrdApi(MMAPI_Qot* pTrd);
介紹
銷毀連線
返回
- pQot:連線實例
Example
MMAPI_Qot *m_pQotApi = MMAPI::CreateQotApi();
m_pQotApi->InitConnect("127.0.0.1", 11111, false);
MMAPI::ReleaseQotApi(m_pQotApi);
2
3
# 建立連線
start(ip, port, ssl, key)
介紹
初始化連線,連線並初始化
參數
參數 類型 說明 ip str OpenD 監聽的 WebSocket 位址 port int OpenD 監聽的 WebSocket 連接埠 ssl bool 是否啓用 SSL 加密,參見 WebSocket 相關 key str 連線的金鑰,否則會連線超時,金鑰在在 OpenD 可配置,可視化版本在不指定的情況下會隨機指定 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
# 關閉連線
stop()
介紹
關閉連線
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.stop();
}
}
2
3
4
5
6
7
8