# Get FedWatch Dot Plot
- Python
- Proto
- C#
- Java
- C++
- JavaScript
get_fed_watch_dot_plot()
Description
Get CME interest rate dot plot data. Returns the voting distribution of FOMC members' expected federal funds rate for future years, including the number of votes at each rate level, median rate, and current federal funds rate.
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 year int Forecast year, e.g. 2025, 2026, 2027 rate float Expected rate (%), e.g. 4.125 means 4.125% vote_count int Number of members voting at this rate level is_median bool Whether this is the median rate for the year median_rate float Median rate for the year (%) current_rate float Current federal funds rate (%)
- Data format:
Example
from futu import *
quote_ctx = OpenQuoteContext(host='127.0.0.1', port=11111)
ret, data = quote_ctx.get_fed_watch_dot_plot()
if ret == RET_OK:
print(data)
else:
print('error:', data)
quote_ctx.close()
2
3
4
5
6
7
8
9
10
11
- Output
year rate vote_count is_median median_rate current_rate
0 2026 3.375 1 False 3.875 3.63
1 2026 3.625 8 False 3.875 3.63
2
3
# Qot_GetFedWatchDotPlot.proto
Description
Get CME interest rate dot plot data. Returns the voting distribution of FOMC members' expected federal funds rate for future years, including the number of votes at each rate level, median rate, and current federal funds rate.
Parameters
// Dot plot group (votes at the same rate level)
message DotGroup {
required double rate = 1; //Expected rate(%), e.g. 4.125 means 4.125%
required int32 voteCount = 2; //Number of voters (members voting for this rate level)
optional bool isMedian = 3; //Whether this is the median rate for the year
}
// Single-year dot plot data
message DotPlotYear {
required int32 year = 1; //Year, e.g. 2025, 2026, 2027
repeated DotGroup dotList = 2; //Dot plot distribution (sorted by rate from low to high)
optional double medianRate = 3; //Median rate for this year(%), for quick access
}
message C2S {
optional Qot_Common.QotHeader header = 100; //Quote common parameter header
}
message S2C {
repeated DotPlotYear yearList = 1; //Dot plot data sorted by year from nearest to farthest
optional double currentRate = 2; //Current federal funds rate(%), e.g. 4.375 means 4.375%
}
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
Protocol ID
3405
uint GetFedWatchDotPlot(Qot_GetFedWatchDotPlot.Request req);
virtual void OnReply_GetFedWatchDotPlot(FTAPI_Conn client, uint nSerialNo, Qot_GetFedWatchDotPlot.Response rsp);
Description
Get CME interest rate dot plot data. Returns the voting distribution of FOMC members' expected federal funds rate for future years, including the number of votes at each rate level, median rate, and current federal funds rate.
Parameters
// Dot plot group (votes at the same rate level)
message DotGroup {
required double rate = 1; //Expected rate(%), e.g. 4.125 means 4.125%
required int32 voteCount = 2; //Number of voters (members voting for this rate level)
optional bool isMedian = 3; //Whether this is the median rate for the year
}
// Single-year dot plot data
message DotPlotYear {
required int32 year = 1; //Year, e.g. 2025, 2026, 2027
repeated DotGroup dotList = 2; //Dot plot distribution (sorted by rate from low to high)
optional double medianRate = 3; //Median rate for this year(%), for quick access
}
message C2S {
optional Qot_Common.QotHeader header = 100; //Quote common parameter header
}
message S2C {
repeated DotPlotYear yearList = 1; //Dot plot data sorted by year from nearest to farthest
optional double currentRate = 2; //Current federal funds rate(%), e.g. 4.375 means 4.375%
}
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
- For interface result, refer to RetType
Protocol ID
3405
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;
QotGetFedWatchDotPlot.C2S c2s = QotGetFedWatchDotPlot.C2S.CreateBuilder().Build();
QotGetFedWatchDotPlot.Request req = QotGetFedWatchDotPlot.Request.CreateBuilder().SetC2S(c2s).Build();
uint seqNo = qot.GetFedWatchDotPlot(req);
Console.Write("Send QotGetFedWatchDotPlot: {0}
", seqNo);
}
public void OnDisconnect(FTAPI_Conn client, long errCode) {
Console.Write("Qot onDisConnect: {0}
", errCode);
}
public void OnReply_GetFedWatchDotPlot(FTAPI_Conn client, uint nSerialNo, QotGetFedWatchDotPlot.Response rsp)
{
Console.Write("Reply: QotGetFedWatchDotPlot: {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
- Output
Send QotGetFedWatchDotPlot: 3
Reply: QotGetFedWatchDotPlot: 3
GetFedWatchDotPlot: errCode 0, retMsg , retType 0
{
"currentRate": 3.63,
"yearList": [
{
"year": 2026,
"currentRate": 3.63,
"medianRate": 3.875,
"dotList": [
{ "rate": 3.375, "voteCount": 1, "isMedian": false },
{ "rate": 3.625, "voteCount": 8, "isMedian": false },
{ "rate": 3.875, "voteCount": 3, "isMedian": true },
{ "rate": 4.125, "voteCount": 5, "isMedian": false },
{ "rate": 4.375, "voteCount": 1, "isMedian": false }
]
}
]
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
int getFedWatchDotPlot(Qot_GetFedWatchDotPlot.Request req);
onReply_GetFedWatchDotPlot(FTAPI_Conn client, int nSerialNo, Qot_GetFedWatchDotPlot.Response rsp)
Description
Get CME interest rate dot plot data. Returns the voting distribution of FOMC members' expected federal funds rate for future years, including the number of votes at each rate level, median rate, and current federal funds rate.
Parameters
// Dot plot group (votes at the same rate level)
message DotGroup {
required double rate = 1; //Expected rate(%), e.g. 4.125 means 4.125%
required int32 voteCount = 2; //Number of voters (members voting for this rate level)
optional bool isMedian = 3; //Whether this is the median rate for the year
}
// Single-year dot plot data
message DotPlotYear {
required int32 year = 1; //Year, e.g. 2025, 2026, 2027
repeated DotGroup dotList = 2; //Dot plot distribution (sorted by rate from low to high)
optional double medianRate = 3; //Median rate for this year(%), for quick access
}
message C2S {
optional Qot_Common.QotHeader header = 100; //Quote common parameter header
}
message S2C {
repeated DotPlotYear yearList = 1; //Dot plot data sorted by year from nearest to farthest
optional double currentRate = 2; //Current federal funds rate(%), e.g. 4.375 means 4.375%
}
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
- For interface result, refer to RetType
Protocol ID
3405
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;
QotGetFedWatchDotPlot.C2S c2s = QotGetFedWatchDotPlot.C2S.newBuilder().build();
QotGetFedWatchDotPlot.Request req = QotGetFedWatchDotPlot.Request.newBuilder().setC2S(c2s).build();
int seqNo = qot.getFedWatchDotPlot(req);
System.out.printf("Send QotGetFedWatchDotPlot: %d
", seqNo);
}
@Override
public void onDisconnect(FTAPI_Conn client, long errCode) {
System.out.printf("Qot onDisConnect: %d
", errCode);
}
@Override
public void onReply_GetFedWatchDotPlot(FTAPI_Conn client, int nSerialNo, QotGetFedWatchDotPlot.Response rsp) {
if (rsp.getRetType() != 0) {
System.out.printf("QotGetFedWatchDotPlot failed: %s
", rsp.getRetMsg());
} else {
try {
String json = JsonFormat.printer().print(rsp);
System.out.printf("Receive QotGetFedWatchDotPlot: %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
- Output
Send QotGetFedWatchDotPlot: 3
Receive QotGetFedWatchDotPlot: {
"currentRate": 3.63,
"yearList": [
{
"year": 2026,
"currentRate": 3.63,
"medianRate": 3.875,
"dotList": [
{ "rate": 3.375, "voteCount": 1, "isMedian": false },
{ "rate": 3.625, "voteCount": 8, "isMedian": false },
{ "rate": 3.875, "voteCount": 3, "isMedian": true },
{ "rate": 4.125, "voteCount": 5, "isMedian": false },
{ "rate": 4.375, "voteCount": 1, "isMedian": false }
]
}
]
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Futu::u32_t GetFedWatchDotPlot(const Qot_GetFedWatchDotPlot::Request &stReq); virtual void OnReply_GetFedWatchDotPlot(Futu::u32_t nSerialNo, const Qot_GetFedWatchDotPlot::Response &stRsp) = 0;
Description
Protocol request and response definition
Parameters
// Dot plot group (votes at the same rate level)
message DotGroup {
required double rate = 1; //Expected rate(%), e.g. 4.125 means 4.125%
required int32 voteCount = 2; //Number of voters (members voting for this rate level)
optional bool isMedian = 3; //Whether this is the median rate for the year
}
// Single-year dot plot data
message DotPlotYear {
required int32 year = 1; //Year, e.g. 2025, 2026, 2027
repeated DotGroup dotList = 2; //Dot plot distribution (sorted by rate from low to high)
optional double medianRate = 3; //Median rate for this year(%), for quick access
}
message C2S {
optional Qot_Common.QotHeader header = 100; //Quote common parameter header
}
message S2C {
repeated DotPlotYear yearList = 1; //Dot plot data sorted by year from nearest to farthest
optional double currentRate = 2; //Current federal funds rate(%), e.g. 4.375 means 4.375%
}
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
- For interface result, refer to RetType
Protocol ID
3405
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_GetFedWatchDotPlot::Request req;
Qot_GetFedWatchDotPlot::C2S *c2s = req.mutable_c2s();
(void)c2s; // all fields optional
m_GetFedWatchDotPlotSerialNo = m_pQotApi->GetFedWatchDotPlot(req);
}
virtual void OnReply_GetFedWatchDotPlot(Futu::u32_t nSerialNo, const Qot_GetFedWatchDotPlot::Response &stRsp) {
if (nSerialNo != m_GetFedWatchDotPlotSerialNo) return;
string resp_str;
ProtoBufToBodyData(stRsp, resp_str);
cout << UTF8ToLocal(resp_str) << endl;
}
protected:
FTAPI_Qot *m_pQotApi;
Futu::u32_t m_GetFedWatchDotPlotSerialNo = 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
- Output
{
"retType": 0,
"retMsg": "",
"errCode": 0,
"s2c": {
"yearList": [
{
"year": 2024,
"rateList": [5.25, 5.25, 5.0, 4.75]
}
],
"currentRate": 5.25
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
getFedWatchDotPlot(qotGetFedWatchDotPlot)
Description
Get CME interest rate dot plot data. Returns the voting distribution of FOMC members' expected federal funds rate for future years, including the number of votes at each rate level, median rate, and current federal funds rate.
Parameters
// Dot plot group (votes at the same rate level)
message DotGroup {
required double rate = 1; //Expected rate(%), e.g. 4.125 means 4.125%
required int32 voteCount = 2; //Number of voters (members voting for this rate level)
optional bool isMedian = 3; //Whether this is the median rate for the year
}
// Single-year dot plot data
message DotPlotYear {
required int32 year = 1; //Year, e.g. 2025, 2026, 2027
repeated DotGroup dotList = 2; //Dot plot distribution (sorted by rate from low to high)
optional double medianRate = 3; //Median rate for this year(%), for quick access
}
message C2S {
optional Qot_Common.QotHeader header = 100; //Quote common parameter header
}
message S2C {
repeated DotPlotYear yearList = 1; //Dot plot data sorted by year from nearest to farthest
optional double currentRate = 2; //Current federal funds rate(%), e.g. 4.375 means 4.375%
}
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
- For interface result, refer to RetType
Protocol ID
3405
Example
import ftWebsocket from "futu-api";
import { Common, Qot_Common } from "futu-api/proto";
import beautify from "js-beautify";
function QotGetFedWatchDotPlot(){
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: {},
};
websocket.GetFedWatchDotPlot(req)
.then((res)=>{
let { errCode, retMsg, retType, s2c } = res
console.log("GetFedWatchDotPlot: 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);
}
QotGetFedWatchDotPlot()
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
GetFedWatchDotPlot: errCode 0, retMsg , retType 0
{
"currentRate": 3.63,
"yearList": [
{
"year": 2026,
"currentRate": 3.63,
"medianRate": 3.875,
"dotList": [
{ "rate": 3.375, "voteCount": 1, "isMedian": false },
{ "rate": 3.625, "voteCount": 8, "isMedian": false },
{ "rate": 3.875, "voteCount": 3, "isMedian": true },
{ "rate": 4.125, "voteCount": 5, "isMedian": false },
{ "rate": 4.375, "voteCount": 1, "isMedian": false }
]
}
]
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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_fed_watch_dot_plot()
Description
Get CME interest rate dot plot data. Returns the voting distribution of FOMC members' expected federal funds rate for future years, including the number of votes at each rate level, median rate, and current federal funds rate.
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 year int Forecast year, e.g. 2025, 2026, 2027 rate float Expected rate (%), e.g. 4.125 means 4.125% vote_count int Number of members voting at this rate level is_median bool Whether this is the median rate for the year median_rate float Median rate for the year (%) current_rate float Current federal funds rate (%)
- Data format:
Example
from futu import *
quote_ctx = OpenQuoteContext(host='127.0.0.1', port=11111)
ret, data = quote_ctx.get_fed_watch_dot_plot()
if ret == RET_OK:
print(data)
else:
print('error:', data)
quote_ctx.close()
2
3
4
5
6
7
8
9
10
11
- Output
year rate vote_count is_median median_rate current_rate
0 2026 3.375 1 False 3.875 3.63
1 2026 3.625 8 False 3.875 3.63
2
3
# Qot_GetFedWatchDotPlot.proto
Description
Get CME interest rate dot plot data. Returns the voting distribution of FOMC members' expected federal funds rate for future years, including the number of votes at each rate level, median rate, and current federal funds rate.
Parameters
// Dot plot group (votes at the same rate level)
message DotGroup {
required double rate = 1; //Expected rate(%), e.g. 4.125 means 4.125%
required int32 voteCount = 2; //Number of voters (members voting for this rate level)
optional bool isMedian = 3; //Whether this is the median rate for the year
}
// Single-year dot plot data
message DotPlotYear {
required int32 year = 1; //Year, e.g. 2025, 2026, 2027
repeated DotGroup dotList = 2; //Dot plot distribution (sorted by rate from low to high)
optional double medianRate = 3; //Median rate for this year(%), for quick access
}
message C2S {
optional Qot_Common.QotHeader header = 100; //Quote common parameter header
}
message S2C {
repeated DotPlotYear yearList = 1; //Dot plot data sorted by year from nearest to farthest
optional double currentRate = 2; //Current federal funds rate(%), e.g. 4.375 means 4.375%
}
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
Protocol ID
3405
uint GetFedWatchDotPlot(Qot_GetFedWatchDotPlot.Request req);
virtual void OnReply_GetFedWatchDotPlot(FTAPI_Conn client, uint nSerialNo, Qot_GetFedWatchDotPlot.Response rsp);
Description
Get CME interest rate dot plot data. Returns the voting distribution of FOMC members' expected federal funds rate for future years, including the number of votes at each rate level, median rate, and current federal funds rate.
Parameters
// Dot plot group (votes at the same rate level)
message DotGroup {
required double rate = 1; //Expected rate(%), e.g. 4.125 means 4.125%
required int32 voteCount = 2; //Number of voters (members voting for this rate level)
optional bool isMedian = 3; //Whether this is the median rate for the year
}
// Single-year dot plot data
message DotPlotYear {
required int32 year = 1; //Year, e.g. 2025, 2026, 2027
repeated DotGroup dotList = 2; //Dot plot distribution (sorted by rate from low to high)
optional double medianRate = 3; //Median rate for this year(%), for quick access
}
message C2S {
optional Qot_Common.QotHeader header = 100; //Quote common parameter header
}
message S2C {
repeated DotPlotYear yearList = 1; //Dot plot data sorted by year from nearest to farthest
optional double currentRate = 2; //Current federal funds rate(%), e.g. 4.375 means 4.375%
}
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
- For interface result, refer to RetType
Protocol ID
3405
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;
QotGetFedWatchDotPlot.C2S c2s = QotGetFedWatchDotPlot.C2S.CreateBuilder().Build();
QotGetFedWatchDotPlot.Request req = QotGetFedWatchDotPlot.Request.CreateBuilder().SetC2S(c2s).Build();
uint seqNo = qot.GetFedWatchDotPlot(req);
Console.Write("Send QotGetFedWatchDotPlot: {0}
", seqNo);
}
public void OnDisconnect(MMAPI_Conn client, long errCode) {
Console.Write("Qot onDisConnect: {0}
", errCode);
}
public void OnReply_GetFedWatchDotPlot(MMAPI_Conn client, uint nSerialNo, QotGetFedWatchDotPlot.Response rsp)
{
Console.Write("Reply: QotGetFedWatchDotPlot: {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
- Output
Send QotGetFedWatchDotPlot: 3
Reply: QotGetFedWatchDotPlot: 3
GetFedWatchDotPlot: errCode 0, retMsg , retType 0
{
"currentRate": 3.63,
"yearList": [
{
"year": 2026,
"currentRate": 3.63,
"medianRate": 3.875,
"dotList": [
{ "rate": 3.375, "voteCount": 1, "isMedian": false },
{ "rate": 3.625, "voteCount": 8, "isMedian": false },
{ "rate": 3.875, "voteCount": 3, "isMedian": true },
{ "rate": 4.125, "voteCount": 5, "isMedian": false },
{ "rate": 4.375, "voteCount": 1, "isMedian": false }
]
}
]
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
int getFedWatchDotPlot(Qot_GetFedWatchDotPlot.Request req);
onReply_GetFedWatchDotPlot(FTAPI_Conn client, int nSerialNo, Qot_GetFedWatchDotPlot.Response rsp)
Description
Get CME interest rate dot plot data. Returns the voting distribution of FOMC members' expected federal funds rate for future years, including the number of votes at each rate level, median rate, and current federal funds rate.
Parameters
// Dot plot group (votes at the same rate level)
message DotGroup {
required double rate = 1; //Expected rate(%), e.g. 4.125 means 4.125%
required int32 voteCount = 2; //Number of voters (members voting for this rate level)
optional bool isMedian = 3; //Whether this is the median rate for the year
}
// Single-year dot plot data
message DotPlotYear {
required int32 year = 1; //Year, e.g. 2025, 2026, 2027
repeated DotGroup dotList = 2; //Dot plot distribution (sorted by rate from low to high)
optional double medianRate = 3; //Median rate for this year(%), for quick access
}
message C2S {
optional Qot_Common.QotHeader header = 100; //Quote common parameter header
}
message S2C {
repeated DotPlotYear yearList = 1; //Dot plot data sorted by year from nearest to farthest
optional double currentRate = 2; //Current federal funds rate(%), e.g. 4.375 means 4.375%
}
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
- For interface result, refer to RetType
Protocol ID
3405
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;
QotGetFedWatchDotPlot.C2S c2s = QotGetFedWatchDotPlot.C2S.newBuilder().build();
QotGetFedWatchDotPlot.Request req = QotGetFedWatchDotPlot.Request.newBuilder().setC2S(c2s).build();
int seqNo = qot.getFedWatchDotPlot(req);
System.out.printf("Send QotGetFedWatchDotPlot: %d
", seqNo);
}
@Override
public void onDisconnect(MMAPI_Conn client, long errCode) {
System.out.printf("Qot onDisConnect: %d
", errCode);
}
@Override
public void onReply_GetFedWatchDotPlot(MMAPI_Conn client, int nSerialNo, QotGetFedWatchDotPlot.Response rsp) {
if (rsp.getRetType() != 0) {
System.out.printf("QotGetFedWatchDotPlot failed: %s
", rsp.getRetMsg());
} else {
try {
String json = JsonFormat.printer().print(rsp);
System.out.printf("Receive QotGetFedWatchDotPlot: %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
- Output
Send QotGetFedWatchDotPlot: 3
Receive QotGetFedWatchDotPlot: {
"currentRate": 3.63,
"yearList": [
{
"year": 2026,
"currentRate": 3.63,
"medianRate": 3.875,
"dotList": [
{ "rate": 3.375, "voteCount": 1, "isMedian": false },
{ "rate": 3.625, "voteCount": 8, "isMedian": false },
{ "rate": 3.875, "voteCount": 3, "isMedian": true },
{ "rate": 4.125, "voteCount": 5, "isMedian": false },
{ "rate": 4.375, "voteCount": 1, "isMedian": false }
]
}
]
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
moomoo::u32_t GetFedWatchDotPlot(const Qot_GetFedWatchDotPlot::Request &stReq); virtual void OnReply_GetFedWatchDotPlot(moomoo::u32_t nSerialNo, const Qot_GetFedWatchDotPlot::Response &stRsp) = 0;
Description
Protocol request and response definition
Parameters
// Dot plot group (votes at the same rate level)
message DotGroup {
required double rate = 1; //Expected rate(%), e.g. 4.125 means 4.125%
required int32 voteCount = 2; //Number of voters (members voting for this rate level)
optional bool isMedian = 3; //Whether this is the median rate for the year
}
// Single-year dot plot data
message DotPlotYear {
required int32 year = 1; //Year, e.g. 2025, 2026, 2027
repeated DotGroup dotList = 2; //Dot plot distribution (sorted by rate from low to high)
optional double medianRate = 3; //Median rate for this year(%), for quick access
}
message C2S {
optional Qot_Common.QotHeader header = 100; //Quote common parameter header
}
message S2C {
repeated DotPlotYear yearList = 1; //Dot plot data sorted by year from nearest to farthest
optional double currentRate = 2; //Current federal funds rate(%), e.g. 4.375 means 4.375%
}
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
- For interface result, refer to RetType
Protocol ID
3405
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_GetFedWatchDotPlot::Request req;
Qot_GetFedWatchDotPlot::C2S *c2s = req.mutable_c2s();
(void)c2s; // all fields optional
m_GetFedWatchDotPlotSerialNo = m_pQotApi->GetFedWatchDotPlot(req);
}
virtual void OnReply_GetFedWatchDotPlot(moomoo::u32_t nSerialNo, const Qot_GetFedWatchDotPlot::Response &stRsp) {
if (nSerialNo != m_GetFedWatchDotPlotSerialNo) return;
string resp_str;
ProtoBufToBodyData(stRsp, resp_str);
cout << UTF8ToLocal(resp_str) << endl;
}
protected:
MMAPI_Qot *m_pQotApi;
moomoo::u32_t m_GetFedWatchDotPlotSerialNo = 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
- Output
{
"retType": 0,
"retMsg": "",
"errCode": 0,
"s2c": {
"yearList": [
{
"year": 2024,
"rateList": [5.25, 5.25, 5.0, 4.75]
}
],
"currentRate": 5.25
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
getFedWatchDotPlot(qotGetFedWatchDotPlot)
Description
Get CME interest rate dot plot data. Returns the voting distribution of FOMC members' expected federal funds rate for future years, including the number of votes at each rate level, median rate, and current federal funds rate.
Parameters
// Dot plot group (votes at the same rate level)
message DotGroup {
required double rate = 1; //Expected rate(%), e.g. 4.125 means 4.125%
required int32 voteCount = 2; //Number of voters (members voting for this rate level)
optional bool isMedian = 3; //Whether this is the median rate for the year
}
// Single-year dot plot data
message DotPlotYear {
required int32 year = 1; //Year, e.g. 2025, 2026, 2027
repeated DotGroup dotList = 2; //Dot plot distribution (sorted by rate from low to high)
optional double medianRate = 3; //Median rate for this year(%), for quick access
}
message C2S {
optional Qot_Common.QotHeader header = 100; //Quote common parameter header
}
message S2C {
repeated DotPlotYear yearList = 1; //Dot plot data sorted by year from nearest to farthest
optional double currentRate = 2; //Current federal funds rate(%), e.g. 4.375 means 4.375%
}
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
- For interface result, refer to RetType
Protocol ID
3405
Example
import mmWebsocket from "moomoo-api";
import { Common, Qot_Common } from "moomoo-api/proto";
import beautify from "js-beautify";
function QotGetFedWatchDotPlot(){
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: {},
};
websocket.GetFedWatchDotPlot(req)
.then((res)=>{
let { errCode, retMsg, retType, s2c } = res
console.log("GetFedWatchDotPlot: 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);
}
QotGetFedWatchDotPlot()
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
GetFedWatchDotPlot: errCode 0, retMsg , retType 0
{
"currentRate": 3.63,
"yearList": [
{
"year": 2026,
"currentRate": 3.63,
"medianRate": 3.875,
"dotList": [
{ "rate": 3.375, "voteCount": 1, "isMedian": false },
{ "rate": 3.625, "voteCount": 8, "isMedian": false },
{ "rate": 3.875, "voteCount": 3, "isMedian": true },
{ "rate": 4.125, "voteCount": 5, "isMedian": false },
{ "rate": 4.375, "voteCount": 1, "isMedian": false }
]
}
]
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
API Limits
- Maximum 60 requests within 30 seconds
- Only the first page of paginated requests counts toward rate limiting