# Get ARK Active Transaction
- Python
- Proto
- C#
- Java
- C++
- JavaScript
get_ark_active_transaction(holding_type=None, cycle_type=None, sort_field=None, sort_dir=None, count=None, page=None)
Description
Get ARK active transaction aggregation, returning ARK fund active trading records (including change amount and change shares), with support for filtering by holding change type, cycle selection, and sorting.
Parameters
Parameter Type Description holding_type ArkActiveTransactionHoldingType Holding change type, default increase holdings cycle_type ArkCycleType Cycle type, default last 1 day sort_field ArkActiveTransactionSortField Sort field, default change amount sort_dir RankSortDir Sort direction, default descending count int Return count [1, 200], default 50 page str Page cursor Return
Parameter Type Description ret RET_CODE API call result data pd.DataFrame When ret == RET_OK, returns data str When ret != RET_OK, returns error description - Data format:
Field Type Description security str Stock code (e.g. 'US.TSLA', some securities may be N/A)name str Name change_amount float Change amount (USD) change_shares int Change quantity (shares)
- Data format:
Example
from futu import *
quote_ctx = OpenQuoteContext(host='127.0.0.1', port=11111)
ret, data, next_page, all_count = quote_ctx.get_ark_active_transaction(count=2)
if ret == RET_OK:
print(f'Total count: {all_count}')
print(data)
else:
print('error:', data)
quote_ctx.close()
2
3
4
5
6
7
8
9
10
11
12
- Output
Total count: 2
security name change_amount change_shares
0 US.AMZN 亚马逊 9631518.0 41141
1 US.PLTR Palantir 9482340.0 81254
2
3
4
# Qot_GetArkActiveTransaction.proto
Description
Get ARK active transaction aggregation, returning ARK fund active trading records (including change amount and change shares), with support for filtering by holding change type, cycle selection, and sorting.
Parameters
// Holding change type
enum HoldingType {
HoldingType_Increase = 0; // Increase holding (default)
HoldingType_Decrease = 1; // Decrease holding
HoldingType_New = 2; // Open position
HoldingType_SoldOut = 3; // Close position
}
// Cycle type
enum CycleType {
CycleType_1Day = 0; // Last 1 day
CycleType_5Day = 1; // Last 5 days
CycleType_10Day = 2; // Last 10 days
CycleType_30Day = 3; // Last 30 days
CycleType_60Day = 4; // Last 60 days
}
// Sort field
enum SortField {
SortField_Unknown = 0; // Default (change amount)
SortField_ChangeAmount = 1; // Change amount
SortField_ChangeShares = 2; // Change shares
}
// Sort direction
enum SortDir {
SortDir_Descending = 0; // Descending (default, net buy first)
SortDir_Ascending = 1; // Ascending (net sell first)
}
message C2S {
optional int32 holdingType = 1; // HoldingType, default increase holding
optional int32 cycleType = 2; // CycleType, default last 1 day
optional int32 sortField = 3; // SortField
optional int32 sortDir = 4; // SortDir
optional int32 count = 5; // Count [1,200], default 50
optional string page = 6; // Page cursor, omit for first request
}
// ARK active transaction data item
message ArkActiveTransactionItem {
optional Qot_Common.Security security = 1; // Stock
optional string name = 2; // Name
optional double changeAmount = 3; // Change amount (USD)
optional int64 changeShares = 4; // Change quantity (shares)
}
message S2C {
repeated ArkActiveTransactionItem dataList = 1; // Data list
optional int32 allCount = 2; // Total count
optional string nextPage = 3; // Next page cursor, empty=no more
}
message Request {
required C2S c2s = 1;
}
message Response {
required int32 retType = 1 [default = -400]; // RetType, return result
optional string retMsg = 2;
optional int32 errCode = 3;
optional S2C s2c = 4;
}
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
Protocol ID
3425
uint GetArkActiveTransaction(Qot_GetArkActiveTransaction.Request req);
virtual void OnReply_GetArkActiveTransaction(FTAPI_Conn client, uint nSerialNo, Qot_GetArkActiveTransaction.Response rsp);
Description
Get ARK active transaction aggregation, returning ARK fund active trading records (including change amount and change shares), with support for filtering by holding change type, cycle selection, and sorting.
Parameters
// Holding change type
enum HoldingType {
HoldingType_Increase = 0; // Increase holding (default)
HoldingType_Decrease = 1; // Decrease holding
HoldingType_New = 2; // Open position
HoldingType_SoldOut = 3; // Close position
}
// Cycle type
enum CycleType {
CycleType_1Day = 0; // Last 1 day
CycleType_5Day = 1; // Last 5 days
CycleType_10Day = 2; // Last 10 days
CycleType_30Day = 3; // Last 30 days
CycleType_60Day = 4; // Last 60 days
}
// Sort field
enum SortField {
SortField_Unknown = 0; // Default (change amount)
SortField_ChangeAmount = 1; // Change amount
SortField_ChangeShares = 2; // Change shares
}
// Sort direction
enum SortDir {
SortDir_Descending = 0; // Descending (default, net buy first)
SortDir_Ascending = 1; // Ascending (net sell first)
}
message C2S {
optional int32 holdingType = 1; // HoldingType, default increase holding
optional int32 cycleType = 2; // CycleType, default last 1 day
optional int32 sortField = 3; // SortField
optional int32 sortDir = 4; // SortDir
optional int32 count = 5; // Count [1,200], default 50
optional string page = 6; // Page cursor, omit for first request
}
// ARK active transaction data item
message ArkActiveTransactionItem {
optional Qot_Common.Security security = 1; // Stock
optional string name = 2; // Name
optional double changeAmount = 3; // Change amount (USD)
optional int64 changeShares = 4; // Change quantity (shares)
}
message S2C {
repeated ArkActiveTransactionItem dataList = 1; // Data list
optional int32 allCount = 2; // Total count
optional string nextPage = 3; // Next page cursor, empty=no more
}
message Request {
required C2S c2s = 1;
}
message Response {
required int32 retType = 1 [default = -400]; // RetType, return result
optional string retMsg = 2;
optional int32 errCode = 3;
optional S2C s2c = 4;
}
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
- For interface result, refer to RetType
Protocol ID
3425
Example
public class Program : FTSPI_Qot, FTSPI_Conn {
FTAPI_Qot qot = new FTAPI_Qot();
public Program() {
qot.SetClientInfo("csharp", 1); //设置客户端信息
qot.SetConnCallback(this); //设置连接回调
qot.SetQotCallback(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}
", errCode, desc, client.GetConnectID());
if (errCode != 0)
return;
QotGetArkActiveTransaction.C2S c2s = QotGetArkActiveTransaction.C2S.CreateBuilder()
.SetCount(3)
.Build();
QotGetArkActiveTransaction.Request req = QotGetArkActiveTransaction.Request.CreateBuilder().SetC2S(c2s).Build();
uint seqNo = qot.GetArkActiveTransaction(req);
Console.Write("Send QotGetArkActiveTransaction: {0}
", seqNo);
}
public void OnDisconnect(FTAPI_Conn client, long errCode) {
Console.Write("Qot onDisConnect: {0}
", errCode);
}
public void OnReply_GetArkActiveTransaction(FTAPI_Conn client, uint nSerialNo, QotGetArkActiveTransaction.Response rsp)
{
Console.Write("Reply: QotGetArkActiveTransaction: {0}
", nSerialNo);
if (rsp.RetType == 0 && rsp.HasS2C)
Console.Write("{0}
", rsp.ToString());
}
public static void Main(String[] args) {
FTAPI.Init();
Program program = new Program();
program.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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
- Output
Send QotGetArkActiveTransaction: 3
Reply: QotGetArkActiveTransaction: 3
GetArkActiveTransaction: errCode 0, retMsg , retType 0
{
"allCount": 5,
"dataList": [
{ "security": { "market": 11, "code": "SNOW" }, "name": "Snowflake", "changeAmount": 51960949.0, "changeShares": 223690 },
{ "security": { "market": 11, "code": "TSLA" }, "name": "特斯拉", "changeAmount": 21952859.0, "changeShares": 54815 },
{ "security": { "market": 11, "code": "LLY" }, "name": "礼来", "changeAmount": 9323563.0, "changeShares": 8487 }
]
}
2
3
4
5
6
7
8
9
10
11
int getArkActiveTransaction(Qot_GetArkActiveTransaction.Request req);
onReply_GetArkActiveTransaction(FTAPI_Conn client, int nSerialNo, Qot_GetArkActiveTransaction.Response rsp)
Description
Get ARK active transaction aggregation, returning ARK fund active trading records (including change amount and change shares), with support for filtering by holding change type, cycle selection, and sorting.
Parameters
// Holding change type
enum HoldingType {
HoldingType_Increase = 0; // Increase holding (default)
HoldingType_Decrease = 1; // Decrease holding
HoldingType_New = 2; // Open position
HoldingType_SoldOut = 3; // Close position
}
// Cycle type
enum CycleType {
CycleType_1Day = 0; // Last 1 day
CycleType_5Day = 1; // Last 5 days
CycleType_10Day = 2; // Last 10 days
CycleType_30Day = 3; // Last 30 days
CycleType_60Day = 4; // Last 60 days
}
// Sort field
enum SortField {
SortField_Unknown = 0; // Default (change amount)
SortField_ChangeAmount = 1; // Change amount
SortField_ChangeShares = 2; // Change shares
}
// Sort direction
enum SortDir {
SortDir_Descending = 0; // Descending (default, net buy first)
SortDir_Ascending = 1; // Ascending (net sell first)
}
message C2S {
optional int32 holdingType = 1; // HoldingType, default increase holding
optional int32 cycleType = 2; // CycleType, default last 1 day
optional int32 sortField = 3; // SortField
optional int32 sortDir = 4; // SortDir
optional int32 count = 5; // Count [1,200], default 50
optional string page = 6; // Page cursor, omit for first request
}
// ARK active transaction data item
message ArkActiveTransactionItem {
optional Qot_Common.Security security = 1; // Stock
optional string name = 2; // Name
optional double changeAmount = 3; // Change amount (USD)
optional int64 changeShares = 4; // Change quantity (shares)
}
message S2C {
repeated ArkActiveTransactionItem dataList = 1; // Data list
optional int32 allCount = 2; // Total count
optional string nextPage = 3; // Next page cursor, empty=no more
}
message Request {
required C2S c2s = 1;
}
message Response {
required int32 retType = 1 [default = -400]; // RetType, return result
optional string retMsg = 2;
optional int32 errCode = 3;
optional S2C s2c = 4;
}
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
- For interface result, refer to RetType
Protocol ID
3425
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); //设置连接回调
qot.setQotSpi(this); //设置行情回调
}
public void start() {
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=%d desc=%s connID=%d
", errCode, desc, client.getConnectID());
if (errCode != 0)
return;
QotGetArkActiveTransaction.C2S c2s = QotGetArkActiveTransaction.C2S.newBuilder()
.setCount(3)
.build();
QotGetArkActiveTransaction.Request req = QotGetArkActiveTransaction.Request.newBuilder().setC2S(c2s).build();
int seqNo = qot.getArkActiveTransaction(req);
System.out.printf("Send QotGetArkActiveTransaction: %d
", seqNo);
}
@Override
public void onDisconnect(FTAPI_Conn client, long errCode) {
System.out.printf("Qot onDisConnect: %d
", errCode);
}
@Override
public void onReply_GetArkActiveTransaction(FTAPI_Conn client, int nSerialNo, QotGetArkActiveTransaction.Response rsp) {
if (rsp.getRetType() != 0) {
System.out.printf("QotGetArkActiveTransaction failed: %s
", rsp.getRetMsg());
} else {
try {
String json = JsonFormat.printer().print(rsp);
System.out.printf("Receive QotGetArkActiveTransaction: %s
", json);
} catch (InvalidProtocolBufferException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
- Output
Send QotGetArkActiveTransaction: 3
Receive QotGetArkActiveTransaction: {
"allCount": 5,
"dataList": [
{ "security": { "market": 11, "code": "SNOW" }, "name": "Snowflake", "changeAmount": 51960949.0, "changeShares": 223690 },
{ "security": { "market": 11, "code": "TSLA" }, "name": "特斯拉", "changeAmount": 21952859.0, "changeShares": 54815 },
{ "security": { "market": 11, "code": "LLY" }, "name": "礼来", "changeAmount": 9323563.0, "changeShares": 8487 }
]
}
2
3
4
5
6
7
8
9
Futu::u32_t GetArkActiveTransaction(const Qot_GetArkActiveTransaction::Request &stReq);
virtual void OnReply_GetArkActiveTransaction(Futu::u32_t nSerialNo, const Qot_GetArkActiveTransaction::Response &stRsp) = 0;
Description
Protocol request and response definition
Parameters
// Holding change type
enum HoldingType {
HoldingType_Increase = 0; // Increase holding (default)
HoldingType_Decrease = 1; // Decrease holding
HoldingType_New = 2; // Open position
HoldingType_SoldOut = 3; // Close position
}
// Cycle type
enum CycleType {
CycleType_1Day = 0; // Last 1 day
CycleType_5Day = 1; // Last 5 days
CycleType_10Day = 2; // Last 10 days
CycleType_30Day = 3; // Last 30 days
CycleType_60Day = 4; // Last 60 days
}
// Sort field
enum SortField {
SortField_Unknown = 0; // Default (change amount)
SortField_ChangeAmount = 1; // Change amount
SortField_ChangeShares = 2; // Change shares
}
// Sort direction
enum SortDir {
SortDir_Descending = 0; // Descending (default, net buy first)
SortDir_Ascending = 1; // Ascending (net sell first)
}
message C2S {
optional int32 holdingType = 1; // HoldingType, default increase holding
optional int32 cycleType = 2; // CycleType, default last 1 day
optional int32 sortField = 3; // SortField
optional int32 sortDir = 4; // SortDir
optional int32 count = 5; // Count [1,200], default 50
optional string page = 6; // Page cursor, omit for first request
}
// ARK active transaction data item
message ArkActiveTransactionItem {
optional Qot_Common.Security security = 1; // Stock
optional string name = 2; // Name
optional double changeAmount = 3; // Change amount (USD)
optional int64 changeShares = 4; // Change quantity (shares)
}
message S2C {
repeated ArkActiveTransactionItem dataList = 1; // Data list
optional int32 allCount = 2; // Total count
optional string nextPage = 3; // Next page cursor, empty=no more
}
message Request {
required C2S c2s = 1;
}
message Response {
required int32 retType = 1 [default = -400]; // RetType, return result
optional string retMsg = 2;
optional int32 errCode = 3;
optional S2C s2c = 4;
}
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
- For interface result, refer to RetType
Protocol ID
3425
Example
class Program : public FTSPI_Qot, public FTSPI_Conn
{
public:
Program() {
m_pQotApi = FTAPI::CreateQotApi();
m_pQotApi->RegisterQotSpi(this);
m_pQotApi->RegisterConnSpi(this);
}
~Program() {
if (m_pQotApi != nullptr) {
m_pQotApi->UnregisterQotSpi();
m_pQotApi->UnregisterConnSpi();
FTAPI::ReleaseQotApi(m_pQotApi);
m_pQotApi = nullptr;
}
}
void Start() {
m_pQotApi->InitConnect("127.0.0.1", 11111, false);
}
virtual void OnInitConnect(FTAPI_Conn* pConn, Futu::i64_t nErrCode, const char* strDesc) {
Qot_GetArkActiveTransaction::Request req;
Qot_GetArkActiveTransaction::C2S *c2s = req.mutable_c2s();
c2s->set_holdingtype(0); // HoldingType_Increase
c2s->set_cycletype(0); // CycleType_1Day
c2s->set_count(10);
m_GetArkActiveTransactionSerialNo = m_pQotApi->GetArkActiveTransaction(req);
}
virtual void OnReply_GetArkActiveTransaction(Futu::u32_t nSerialNo, const Qot_GetArkActiveTransaction::Response &stRsp) {
if (nSerialNo != m_GetArkActiveTransactionSerialNo) return;
string resp_str;
ProtoBufToBodyData(stRsp, resp_str);
cout << UTF8ToLocal(resp_str) << endl;
}
protected:
FTAPI_Qot *m_pQotApi;
Futu::u32_t m_GetArkActiveTransactionSerialNo = 0;
};
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
38
39
40
41
42
- Output
{
"retType": 0,
"retMsg": "",
"errCode": 0,
"s2c": {
"dataList": [
{
"security": {
"market": 11,
"code": "TSLA"
},
"name": "Tesla",
"changeAmount": 1250000.5,
"changeShares": 5000
}
],
"allCount": 50
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
getArkActiveTransaction(qotGetArkActiveTransaction)
Description
Get ARK active transaction aggregation, returning ARK fund active trading records (including change amount and change shares), with support for filtering by holding change type, cycle selection, and sorting.
Parameters
// Holding change type
enum HoldingType {
HoldingType_Increase = 0; // Increase holding (default)
HoldingType_Decrease = 1; // Decrease holding
HoldingType_New = 2; // Open position
HoldingType_SoldOut = 3; // Close position
}
// Cycle type
enum CycleType {
CycleType_1Day = 0; // Last 1 day
CycleType_5Day = 1; // Last 5 days
CycleType_10Day = 2; // Last 10 days
CycleType_30Day = 3; // Last 30 days
CycleType_60Day = 4; // Last 60 days
}
// Sort field
enum SortField {
SortField_Unknown = 0; // Default (change amount)
SortField_ChangeAmount = 1; // Change amount
SortField_ChangeShares = 2; // Change shares
}
// Sort direction
enum SortDir {
SortDir_Descending = 0; // Descending (default, net buy first)
SortDir_Ascending = 1; // Ascending (net sell first)
}
message C2S {
optional int32 holdingType = 1; // HoldingType, default increase holding
optional int32 cycleType = 2; // CycleType, default last 1 day
optional int32 sortField = 3; // SortField
optional int32 sortDir = 4; // SortDir
optional int32 count = 5; // Count [1,200], default 50
optional string page = 6; // Page cursor, omit for first request
}
// ARK active transaction data item
message ArkActiveTransactionItem {
optional Qot_Common.Security security = 1; // Stock
optional string name = 2; // Name
optional double changeAmount = 3; // Change amount (USD)
optional int64 changeShares = 4; // Change quantity (shares)
}
message S2C {
repeated ArkActiveTransactionItem dataList = 1; // Data list
optional int32 allCount = 2; // Total count
optional string nextPage = 3; // Next page cursor, empty=no more
}
message Request {
required C2S c2s = 1;
}
message Response {
required int32 retType = 1 [default = -400]; // RetType, return result
optional string retMsg = 2;
optional int32 errCode = 3;
optional S2C s2c = 4;
}
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
- For interface result, refer to RetType
Protocol ID
3425
Example
import ftWebsocket from "futu-api";
import { Common, Qot_Common } from "futu-api/proto";
import beautify from "js-beautify";
function QotGetArkActiveTransaction(){
const { RetType } = Common
let [addr, port, enable_ssl, key] = ["127.0.0.1", 11111, false, "xxxxxx"];
let websocket = new ftWebsocket();
websocket.onlogin = (ret, msg)=>{
if (ret) {
const req = {
c2s: { count: 3 },
};
websocket.GetArkActiveTransaction(req)
.then((res)=>{
let { errCode, retMsg, retType, s2c } = res
console.log("GetArkActiveTransaction: errCode %d, retMsg %s, retType %d", errCode, retMsg, retType);
if(retType == RetType.RetType_Succeed){
let data = beautify(JSON.stringify(s2c), { indent_size: 2, space_in_empty_paren: true });
console.log(data);
}
})
.catch((error)=>{ console.log("error:", error); });
} else {
console.log("start error", msg);
}
};
websocket.start(addr, port, enable_ssl, key);
setTimeout(()=>{ websocket.stop(); process.exit(); }, 5000);
}
QotGetArkActiveTransaction()
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
- Output
GetArkActiveTransaction: errCode 0, retMsg , retType 0
{
"allCount": 5,
"dataList": [
{ "security": { "market": 11, "code": "SNOW" }, "name": "Snowflake", "changeAmount": 51960949.0, "changeShares": 223690 },
{ "security": { "market": 11, "code": "TSLA" }, "name": "特斯拉", "changeAmount": 21952859.0, "changeShares": 54815 },
{ "security": { "market": 11, "code": "LLY" }, "name": "礼来", "changeAmount": 9323563.0, "changeShares": 8487 }
]
}
2
3
4
5
6
7
8
9
API Limits
- Maximum 60 requests within 30 seconds
- Only the first page of paginated requests counts toward rate limiting
- Python
- Proto
- C#
- Java
- C++
- JavaScript
get_ark_active_transaction(holding_type=None, cycle_type=None, sort_field=None, sort_dir=None, count=None, page=None)
Description
Get ARK active transaction aggregation, returning ARK fund active trading records (including change amount and change shares), with support for filtering by holding change type, cycle selection, and sorting.
Parameters
Parameter Type Description holding_type ArkActiveTransactionHoldingType Holding change type, default increase holdings cycle_type ArkCycleType Cycle type, default last 1 day sort_field ArkActiveTransactionSortField Sort field, default change amount sort_dir RankSortDir Sort direction, default descending count int Return count [1, 200], default 50 page str Page cursor Return
Parameter Type Description ret RET_CODE API call result data pd.DataFrame When ret == RET_OK, returns data str When ret != RET_OK, returns error description - Data format:
Field Type Description security str Stock code (e.g. 'US.TSLA', some securities may be N/A)name str Name change_amount float Change amount (USD) change_shares int Change quantity (shares)
- Data format:
Example
from futu import *
quote_ctx = OpenQuoteContext(host='127.0.0.1', port=11111)
ret, data, next_page, all_count = quote_ctx.get_ark_active_transaction(count=2)
if ret == RET_OK:
print(f'Total count: {all_count}')
print(data)
else:
print('error:', data)
quote_ctx.close()
2
3
4
5
6
7
8
9
10
11
12
- Output
Total count: 2
security name change_amount change_shares
0 US.AMZN 亚马逊 9631518.0 41141
1 US.PLTR Palantir 9482340.0 81254
2
3
4
# Qot_GetArkActiveTransaction.proto
Description
Get ARK active transaction aggregation, returning ARK fund active trading records (including change amount and change shares), with support for filtering by holding change type, cycle selection, and sorting.
Parameters
// Holding change type
enum HoldingType {
HoldingType_Increase = 0; // Increase holding (default)
HoldingType_Decrease = 1; // Decrease holding
HoldingType_New = 2; // Open position
HoldingType_SoldOut = 3; // Close position
}
// Cycle type
enum CycleType {
CycleType_1Day = 0; // Last 1 day
CycleType_5Day = 1; // Last 5 days
CycleType_10Day = 2; // Last 10 days
CycleType_30Day = 3; // Last 30 days
CycleType_60Day = 4; // Last 60 days
}
// Sort field
enum SortField {
SortField_Unknown = 0; // Default (change amount)
SortField_ChangeAmount = 1; // Change amount
SortField_ChangeShares = 2; // Change shares
}
// Sort direction
enum SortDir {
SortDir_Descending = 0; // Descending (default, net buy first)
SortDir_Ascending = 1; // Ascending (net sell first)
}
message C2S {
optional int32 holdingType = 1; // HoldingType, default increase holding
optional int32 cycleType = 2; // CycleType, default last 1 day
optional int32 sortField = 3; // SortField
optional int32 sortDir = 4; // SortDir
optional int32 count = 5; // Count [1,200], default 50
optional string page = 6; // Page cursor, omit for first request
}
// ARK active transaction data item
message ArkActiveTransactionItem {
optional Qot_Common.Security security = 1; // Stock
optional string name = 2; // Name
optional double changeAmount = 3; // Change amount (USD)
optional int64 changeShares = 4; // Change quantity (shares)
}
message S2C {
repeated ArkActiveTransactionItem dataList = 1; // Data list
optional int32 allCount = 2; // Total count
optional string nextPage = 3; // Next page cursor, empty=no more
}
message Request {
required C2S c2s = 1;
}
message Response {
required int32 retType = 1 [default = -400]; // RetType, return result
optional string retMsg = 2;
optional int32 errCode = 3;
optional S2C s2c = 4;
}
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
Protocol ID
3425
uint GetArkActiveTransaction(Qot_GetArkActiveTransaction.Request req);
virtual void OnReply_GetArkActiveTransaction(FTAPI_Conn client, uint nSerialNo, Qot_GetArkActiveTransaction.Response rsp);
Description
Get ARK active transaction aggregation, returning ARK fund active trading records (including change amount and change shares), with support for filtering by holding change type, cycle selection, and sorting.
Parameters
// Holding change type
enum HoldingType {
HoldingType_Increase = 0; // Increase holding (default)
HoldingType_Decrease = 1; // Decrease holding
HoldingType_New = 2; // Open position
HoldingType_SoldOut = 3; // Close position
}
// Cycle type
enum CycleType {
CycleType_1Day = 0; // Last 1 day
CycleType_5Day = 1; // Last 5 days
CycleType_10Day = 2; // Last 10 days
CycleType_30Day = 3; // Last 30 days
CycleType_60Day = 4; // Last 60 days
}
// Sort field
enum SortField {
SortField_Unknown = 0; // Default (change amount)
SortField_ChangeAmount = 1; // Change amount
SortField_ChangeShares = 2; // Change shares
}
// Sort direction
enum SortDir {
SortDir_Descending = 0; // Descending (default, net buy first)
SortDir_Ascending = 1; // Ascending (net sell first)
}
message C2S {
optional int32 holdingType = 1; // HoldingType, default increase holding
optional int32 cycleType = 2; // CycleType, default last 1 day
optional int32 sortField = 3; // SortField
optional int32 sortDir = 4; // SortDir
optional int32 count = 5; // Count [1,200], default 50
optional string page = 6; // Page cursor, omit for first request
}
// ARK active transaction data item
message ArkActiveTransactionItem {
optional Qot_Common.Security security = 1; // Stock
optional string name = 2; // Name
optional double changeAmount = 3; // Change amount (USD)
optional int64 changeShares = 4; // Change quantity (shares)
}
message S2C {
repeated ArkActiveTransactionItem dataList = 1; // Data list
optional int32 allCount = 2; // Total count
optional string nextPage = 3; // Next page cursor, empty=no more
}
message Request {
required C2S c2s = 1;
}
message Response {
required int32 retType = 1 [default = -400]; // RetType, return result
optional string retMsg = 2;
optional int32 errCode = 3;
optional S2C s2c = 4;
}
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
- For interface result, refer to RetType
Protocol ID
3425
Example
public class Program : MMSPI_Qot, MMSPI_Conn {
MMAPI_Qot qot = new MMAPI_Qot();
public Program() {
qot.SetClientInfo("csharp", 1); //设置客户端信息
qot.SetConnCallback(this); //设置连接回调
qot.SetQotCallback(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}
", errCode, desc, client.GetConnectID());
if (errCode != 0)
return;
QotGetArkActiveTransaction.C2S c2s = QotGetArkActiveTransaction.C2S.CreateBuilder()
.SetCount(3)
.Build();
QotGetArkActiveTransaction.Request req = QotGetArkActiveTransaction.Request.CreateBuilder().SetC2S(c2s).Build();
uint seqNo = qot.GetArkActiveTransaction(req);
Console.Write("Send QotGetArkActiveTransaction: {0}
", seqNo);
}
public void OnDisconnect(MMAPI_Conn client, long errCode) {
Console.Write("Qot onDisConnect: {0}
", errCode);
}
public void OnReply_GetArkActiveTransaction(MMAPI_Conn client, uint nSerialNo, QotGetArkActiveTransaction.Response rsp)
{
Console.Write("Reply: QotGetArkActiveTransaction: {0}
", nSerialNo);
if (rsp.RetType == 0 && rsp.HasS2C)
Console.Write("{0}
", rsp.ToString());
}
public static void Main(String[] args) {
MMAPI.Init();
Program program = new Program();
program.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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
- Output
Send QotGetArkActiveTransaction: 3
Reply: QotGetArkActiveTransaction: 3
GetArkActiveTransaction: errCode 0, retMsg , retType 0
{
"allCount": 5,
"dataList": [
{ "security": { "market": 11, "code": "SNOW" }, "name": "Snowflake", "changeAmount": 51960949.0, "changeShares": 223690 },
{ "security": { "market": 11, "code": "TSLA" }, "name": "特斯拉", "changeAmount": 21952859.0, "changeShares": 54815 },
{ "security": { "market": 11, "code": "LLY" }, "name": "礼来", "changeAmount": 9323563.0, "changeShares": 8487 }
]
}
2
3
4
5
6
7
8
9
10
11
int getArkActiveTransaction(Qot_GetArkActiveTransaction.Request req);
onReply_GetArkActiveTransaction(FTAPI_Conn client, int nSerialNo, Qot_GetArkActiveTransaction.Response rsp)
Description
Get ARK active transaction aggregation, returning ARK fund active trading records (including change amount and change shares), with support for filtering by holding change type, cycle selection, and sorting.
Parameters
// Holding change type
enum HoldingType {
HoldingType_Increase = 0; // Increase holding (default)
HoldingType_Decrease = 1; // Decrease holding
HoldingType_New = 2; // Open position
HoldingType_SoldOut = 3; // Close position
}
// Cycle type
enum CycleType {
CycleType_1Day = 0; // Last 1 day
CycleType_5Day = 1; // Last 5 days
CycleType_10Day = 2; // Last 10 days
CycleType_30Day = 3; // Last 30 days
CycleType_60Day = 4; // Last 60 days
}
// Sort field
enum SortField {
SortField_Unknown = 0; // Default (change amount)
SortField_ChangeAmount = 1; // Change amount
SortField_ChangeShares = 2; // Change shares
}
// Sort direction
enum SortDir {
SortDir_Descending = 0; // Descending (default, net buy first)
SortDir_Ascending = 1; // Ascending (net sell first)
}
message C2S {
optional int32 holdingType = 1; // HoldingType, default increase holding
optional int32 cycleType = 2; // CycleType, default last 1 day
optional int32 sortField = 3; // SortField
optional int32 sortDir = 4; // SortDir
optional int32 count = 5; // Count [1,200], default 50
optional string page = 6; // Page cursor, omit for first request
}
// ARK active transaction data item
message ArkActiveTransactionItem {
optional Qot_Common.Security security = 1; // Stock
optional string name = 2; // Name
optional double changeAmount = 3; // Change amount (USD)
optional int64 changeShares = 4; // Change quantity (shares)
}
message S2C {
repeated ArkActiveTransactionItem dataList = 1; // Data list
optional int32 allCount = 2; // Total count
optional string nextPage = 3; // Next page cursor, empty=no more
}
message Request {
required C2S c2s = 1;
}
message Response {
required int32 retType = 1 [default = -400]; // RetType, return result
optional string retMsg = 2;
optional int32 errCode = 3;
optional S2C s2c = 4;
}
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
- For interface result, refer to RetType
Protocol ID
3425
Example
public class QotDemo implements MMSPI_Qot, MMSPI_Conn {
MMAPI_Conn_Qot qot = new MMAPI_Conn_Qot();
public QotDemo() {
qot.setClientInfo("javaclient", 1); //设置客户端信息
qot.setConnSpi(this); //设置连接回调
qot.setQotSpi(this); //设置行情回调
}
public void start() {
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=%d desc=%s connID=%d
", errCode, desc, client.getConnectID());
if (errCode != 0)
return;
QotGetArkActiveTransaction.C2S c2s = QotGetArkActiveTransaction.C2S.newBuilder()
.setCount(3)
.build();
QotGetArkActiveTransaction.Request req = QotGetArkActiveTransaction.Request.newBuilder().setC2S(c2s).build();
int seqNo = qot.getArkActiveTransaction(req);
System.out.printf("Send QotGetArkActiveTransaction: %d
", seqNo);
}
@Override
public void onDisconnect(MMAPI_Conn client, long errCode) {
System.out.printf("Qot onDisConnect: %d
", errCode);
}
@Override
public void onReply_GetArkActiveTransaction(MMAPI_Conn client, int nSerialNo, QotGetArkActiveTransaction.Response rsp) {
if (rsp.getRetType() != 0) {
System.out.printf("QotGetArkActiveTransaction failed: %s
", rsp.getRetMsg());
} else {
try {
String json = JsonFormat.printer().print(rsp);
System.out.printf("Receive QotGetArkActiveTransaction: %s
", json);
} catch (InvalidProtocolBufferException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
- Output
Send QotGetArkActiveTransaction: 3
Receive QotGetArkActiveTransaction: {
"allCount": 5,
"dataList": [
{ "security": { "market": 11, "code": "SNOW" }, "name": "Snowflake", "changeAmount": 51960949.0, "changeShares": 223690 },
{ "security": { "market": 11, "code": "TSLA" }, "name": "特斯拉", "changeAmount": 21952859.0, "changeShares": 54815 },
{ "security": { "market": 11, "code": "LLY" }, "name": "礼来", "changeAmount": 9323563.0, "changeShares": 8487 }
]
}
2
3
4
5
6
7
8
9
moomoo::u32_t GetArkActiveTransaction(const Qot_GetArkActiveTransaction::Request &stReq);
virtual void OnReply_GetArkActiveTransaction(moomoo::u32_t nSerialNo, const Qot_GetArkActiveTransaction::Response &stRsp) = 0;
Description
Protocol request and response definition
Parameters
// Holding change type
enum HoldingType {
HoldingType_Increase = 0; // Increase holding (default)
HoldingType_Decrease = 1; // Decrease holding
HoldingType_New = 2; // Open position
HoldingType_SoldOut = 3; // Close position
}
// Cycle type
enum CycleType {
CycleType_1Day = 0; // Last 1 day
CycleType_5Day = 1; // Last 5 days
CycleType_10Day = 2; // Last 10 days
CycleType_30Day = 3; // Last 30 days
CycleType_60Day = 4; // Last 60 days
}
// Sort field
enum SortField {
SortField_Unknown = 0; // Default (change amount)
SortField_ChangeAmount = 1; // Change amount
SortField_ChangeShares = 2; // Change shares
}
// Sort direction
enum SortDir {
SortDir_Descending = 0; // Descending (default, net buy first)
SortDir_Ascending = 1; // Ascending (net sell first)
}
message C2S {
optional int32 holdingType = 1; // HoldingType, default increase holding
optional int32 cycleType = 2; // CycleType, default last 1 day
optional int32 sortField = 3; // SortField
optional int32 sortDir = 4; // SortDir
optional int32 count = 5; // Count [1,200], default 50
optional string page = 6; // Page cursor, omit for first request
}
// ARK active transaction data item
message ArkActiveTransactionItem {
optional Qot_Common.Security security = 1; // Stock
optional string name = 2; // Name
optional double changeAmount = 3; // Change amount (USD)
optional int64 changeShares = 4; // Change quantity (shares)
}
message S2C {
repeated ArkActiveTransactionItem dataList = 1; // Data list
optional int32 allCount = 2; // Total count
optional string nextPage = 3; // Next page cursor, empty=no more
}
message Request {
required C2S c2s = 1;
}
message Response {
required int32 retType = 1 [default = -400]; // RetType, return result
optional string retMsg = 2;
optional int32 errCode = 3;
optional S2C s2c = 4;
}
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
- For interface result, refer to RetType
Protocol ID
3425
Example
class Program : public MMSPI_Qot, public MMSPI_Conn
{
public:
Program() {
m_pQotApi = MMAPI::CreateQotApi();
m_pQotApi->RegisterQotSpi(this);
m_pQotApi->RegisterConnSpi(this);
}
~Program() {
if (m_pQotApi != nullptr) {
m_pQotApi->UnregisterQotSpi();
m_pQotApi->UnregisterConnSpi();
MMAPI::ReleaseQotApi(m_pQotApi);
m_pQotApi = nullptr;
}
}
void Start() {
m_pQotApi->InitConnect("127.0.0.1", 11111, false);
}
virtual void OnInitConnect(MMAPI_Conn* pConn, moomoo::i64_t nErrCode, const char* strDesc) {
Qot_GetArkActiveTransaction::Request req;
Qot_GetArkActiveTransaction::C2S *c2s = req.mutable_c2s();
c2s->set_holdingtype(0); // HoldingType_Increase
c2s->set_cycletype(0); // CycleType_1Day
c2s->set_count(10);
m_GetArkActiveTransactionSerialNo = m_pQotApi->GetArkActiveTransaction(req);
}
virtual void OnReply_GetArkActiveTransaction(moomoo::u32_t nSerialNo, const Qot_GetArkActiveTransaction::Response &stRsp) {
if (nSerialNo != m_GetArkActiveTransactionSerialNo) return;
string resp_str;
ProtoBufToBodyData(stRsp, resp_str);
cout << UTF8ToLocal(resp_str) << endl;
}
protected:
MMAPI_Qot *m_pQotApi;
moomoo::u32_t m_GetArkActiveTransactionSerialNo = 0;
};
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
38
39
40
41
42
- Output
{
"retType": 0,
"retMsg": "",
"errCode": 0,
"s2c": {
"dataList": [
{
"security": {
"market": 11,
"code": "TSLA"
},
"name": "Tesla",
"changeAmount": 1250000.5,
"changeShares": 5000
}
],
"allCount": 50
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
getArkActiveTransaction(qotGetArkActiveTransaction)
Description
Get ARK active transaction aggregation, returning ARK fund active trading records (including change amount and change shares), with support for filtering by holding change type, cycle selection, and sorting.
Parameters
// Holding change type
enum HoldingType {
HoldingType_Increase = 0; // Increase holding (default)
HoldingType_Decrease = 1; // Decrease holding
HoldingType_New = 2; // Open position
HoldingType_SoldOut = 3; // Close position
}
// Cycle type
enum CycleType {
CycleType_1Day = 0; // Last 1 day
CycleType_5Day = 1; // Last 5 days
CycleType_10Day = 2; // Last 10 days
CycleType_30Day = 3; // Last 30 days
CycleType_60Day = 4; // Last 60 days
}
// Sort field
enum SortField {
SortField_Unknown = 0; // Default (change amount)
SortField_ChangeAmount = 1; // Change amount
SortField_ChangeShares = 2; // Change shares
}
// Sort direction
enum SortDir {
SortDir_Descending = 0; // Descending (default, net buy first)
SortDir_Ascending = 1; // Ascending (net sell first)
}
message C2S {
optional int32 holdingType = 1; // HoldingType, default increase holding
optional int32 cycleType = 2; // CycleType, default last 1 day
optional int32 sortField = 3; // SortField
optional int32 sortDir = 4; // SortDir
optional int32 count = 5; // Count [1,200], default 50
optional string page = 6; // Page cursor, omit for first request
}
// ARK active transaction data item
message ArkActiveTransactionItem {
optional Qot_Common.Security security = 1; // Stock
optional string name = 2; // Name
optional double changeAmount = 3; // Change amount (USD)
optional int64 changeShares = 4; // Change quantity (shares)
}
message S2C {
repeated ArkActiveTransactionItem dataList = 1; // Data list
optional int32 allCount = 2; // Total count
optional string nextPage = 3; // Next page cursor, empty=no more
}
message Request {
required C2S c2s = 1;
}
message Response {
required int32 retType = 1 [default = -400]; // RetType, return result
optional string retMsg = 2;
optional int32 errCode = 3;
optional S2C s2c = 4;
}
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
- For interface result, refer to RetType
Protocol ID
3425
Example
import mmWebsocket from "moomoo-api";
import { Common, Qot_Common } from "moomoo-api/proto";
import beautify from "js-beautify";
function QotGetArkActiveTransaction(){
const { RetType } = Common
let [addr, port, enable_ssl, key] = ["127.0.0.1", 11111, false, "xxxxxx"];
let websocket = new mmWebsocket();
websocket.onlogin = (ret, msg)=>{
if (ret) {
const req = {
c2s: { count: 3 },
};
websocket.GetArkActiveTransaction(req)
.then((res)=>{
let { errCode, retMsg, retType, s2c } = res
console.log("GetArkActiveTransaction: errCode %d, retMsg %s, retType %d", errCode, retMsg, retType);
if(retType == RetType.RetType_Succeed){
let data = beautify(JSON.stringify(s2c), { indent_size: 2, space_in_empty_paren: true });
console.log(data);
}
})
.catch((error)=>{ console.log("error:", error); });
} else {
console.log("start error", msg);
}
};
websocket.start(addr, port, enable_ssl, key);
setTimeout(()=>{ websocket.stop(); process.exit(); }, 5000);
}
QotGetArkActiveTransaction()
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
- Output
GetArkActiveTransaction: errCode 0, retMsg , retType 0
{
"allCount": 5,
"dataList": [
{ "security": { "market": 11, "code": "SNOW" }, "name": "Snowflake", "changeAmount": 51960949.0, "changeShares": 223690 },
{ "security": { "market": 11, "code": "TSLA" }, "name": "特斯拉", "changeAmount": 21952859.0, "changeShares": 54815 },
{ "security": { "market": 11, "code": "LLY" }, "name": "礼来", "changeAmount": 9323563.0, "changeShares": 8487 }
]
}
2
3
4
5
6
7
8
9
API Limits
- Maximum 60 requests within 30 seconds
- Only the first page of paginated requests counts toward rate limiting