# Option Seller Screener
- Python
- Proto
- C#
- Java
- C++
- JavaScript
get_option_seller_screener(market, seller_type, sort_type=None, is_asc=None, filter_list=None)
Description
Get the option seller screener list, returning option contracts suitable for seller strategies (Cash Secured Put / Covered Call), including return rates, exercise probabilities, and other data.
Parameters
Parameter Type Description market OptionMarket Option market type US_SECURITY=US equity options, HK_SECURITY=HK equity optionsseller_type SellerType Seller strategy type COVERED_CALL=covered call, CASH_SECURED_PUT=cash secured put (HK market only supports CASH_SECURED_PUT)sort_type SellerSortType Sort type ANNUALIZED_RETURN=annualized return, INTERVAL_RETURN=interval return, ITM_PROBABILITY=exercise probability, PREMIUM=premiumis_asc bool Ascending order Default False (descending)filter_list list[SellerFilter] Filter conditions list Multiple conditions use AND logicReturns
Parameter Type Description ret RET_CODE Interface call result data pandas.DataFrame When ret == RET_OK, returns screener results str When ret != RET_OK, returns error description Return DataFrame fields:
Field Type Description option str Option contract code name str Option name option_type str Option direction CALL, PUTstrike_price float Strike price strike_time str Expiration date time string strike_timestamp float Expiration date timestamp (Unix seconds) left_days int Days to expiry option_price float Option price stock_price float Underlying stock price premium float Premium otm_degree float Out-of-the-money degree (%) iv float Implied volatility (%) interval_return float Interval return (%) annualized_return float Annualized return (%) itm_probability float Exercise probability (%) striked_interval_return float Assigned interval return (%) Covered Call onlystriked_annualized_return float Assigned annualized return (%) Covered Call onlyowner str Underlying stock code
Example
from futu import *
quote_ctx = OpenQuoteContext(host='127.0.0.1', port=11111)
ret, data = quote_ctx.get_option_seller_screener(
market=OptionMarket.US_SECURITY,
seller_type=SellerType.COVERED_CALL,
sort_type=SellerSortType.ANNUALIZED_RETURN,
is_asc=False
)
if ret == RET_OK:
print(data)
else:
print('error:', data)
quote_ctx.close()
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
- Output
option name option_type strike_price strike_time strike_timestamp left_days option_price stock_price premium otm_degree iv interval_return annualized_return itm_probability striked_interval_return striked_annualized_return owner
0 US.SOXL260618C235000 SOXL 260618 235.00C CALL 235.0 2026-06-18 1.781755e+09 3 21.850 234.68 2185.0 0.136 234.988 10.266 1074.855 45.724 10.416 1090.597 US.SOXL
1 US.SOXL260618C237500 SOXL 260618 237.50C CALL 237.5 2026-06-18 1.781755e+09 3 20.675 234.68 2067.5 1.201 234.423 9.660 1011.470 43.682 10.978 1149.431 US.SOXL
2 US.SOXL260618C240000 SOXL 260618 240.00C CALL 240.0 2026-06-18 1.781755e+09 3 19.250 234.68 1925.0 2.266 230.652 8.935 935.526 41.678 11.405 1194.071 US.SOXL
3 US.WDS260618C25000 WDS 260618 25.00C CALL 25.0 2026-06-18 1.781755e+09 3 1.875 23.07 187.5 8.365 292.148 8.846 928.963 11.794 17.952 1885.177 US.WDS
4 US.SOXL260618C242500 SOXL 260618 242.50C CALL 242.5 2026-06-18 1.781755e+09 3 18.350 234.68 1835.0 3.332 232.108 8.482 888.077 39.715 12.097 1266.538 US.SOXL
...
2
3
4
5
6
7
# Qot_GetOptionSellerScreener.proto
Description
Get the option seller screener list
Parameters
message C2S {
required int32 optionMarket = 1; // Qot_OptionCommon.OptionMarket
required int32 sellerType = 2; // Qot_OptionCommon.SellerType
optional int32 sortType = 3; // Qot_OptionCommon.SellerSortType
optional bool isAsc = 4; // Default false
repeated Qot_OptionCommon.SellerIndicator filterList = 5;
}
message Request {
required C2S c2s = 1;
}
2
3
4
5
6
7
8
9
10
11
- Returns
message SellerItem {
required Qot_Common.Security option = 1;
optional string name = 2;
optional int32 optionType = 3; // Qot_Common.OptionType
optional double strikePrice = 4;
optional string strikeTime = 5;
optional double strikeTimestamp = 6;
optional int32 leftDays = 7;
optional double optionPrice = 8;
optional double stockPrice = 9;
optional double premium = 10;
optional double otmDegree = 11; // (%)
optional double iv = 12; // (%)
optional double intervalReturn = 13; // (%)
optional double annualizedReturn = 14; // (%)
optional double itmProbability = 15; // (%)
optional double strikedIntervalReturn = 16; // (%)
optional double strikedAnnualizedReturn = 17; // (%)
optional Qot_Common.Security owner = 18;
}
message S2C {
repeated SellerItem itemList = 1;
}
message Response {
required int32 retType = 1 [default = -400];
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
- Interface call result, structure refer to RetType
Protocol ID
3314
uint GetOptionSellerScreener(Qot_GetOptionSellerScreener.Request req); virtual void OnReply_GetOptionSellerScreener(FTAPI_Conn client, uint nSerialNo, Qot_GetOptionSellerScreener.Response rsp);
Description
Get the option seller screener list
Parameters
message C2S {
required int32 optionMarket = 1; // Qot_OptionCommon.OptionMarket
required int32 sellerType = 2; // Qot_OptionCommon.SellerType
optional int32 sortType = 3; // Qot_OptionCommon.SellerSortType
optional bool isAsc = 4; // Default false
repeated Qot_OptionCommon.SellerIndicator filterList = 5;
}
message Request {
required C2S c2s = 1;
}
2
3
4
5
6
7
8
9
10
11
- Returns
message SellerItem {
required Qot_Common.Security option = 1;
optional string name = 2;
optional int32 optionType = 3; // Qot_Common.OptionType
optional double strikePrice = 4;
optional string strikeTime = 5;
optional double strikeTimestamp = 6;
optional int32 leftDays = 7;
optional double optionPrice = 8;
optional double stockPrice = 9;
optional double premium = 10;
optional double otmDegree = 11; // (%)
optional double iv = 12; // (%)
optional double intervalReturn = 13; // (%)
optional double annualizedReturn = 14; // (%)
optional double itmProbability = 15; // (%)
optional double strikedIntervalReturn = 16; // (%)
optional double strikedAnnualizedReturn = 17; // (%)
optional Qot_Common.Security owner = 18;
}
message S2C {
repeated SellerItem itemList = 1;
}
message Response {
required int32 retType = 1 [default = -400];
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
- Interface call result, structure refer to RetType
Protocol ID
3314
int getOptionSellerScreener(Qot_GetOptionSellerScreener.Request req) onReply_GetOptionSellerScreener(FTAPI_Conn client, int nSerialNo, Qot_GetOptionSellerScreener.Response rsp)
Description
Get the option seller screener list
Parameters
message C2S {
required int32 optionMarket = 1; // Qot_OptionCommon.OptionMarket
required int32 sellerType = 2; // Qot_OptionCommon.SellerType
optional int32 sortType = 3; // Qot_OptionCommon.SellerSortType
optional bool isAsc = 4; // Default false
repeated Qot_OptionCommon.SellerIndicator filterList = 5;
}
message Request {
required C2S c2s = 1;
}
2
3
4
5
6
7
8
9
10
11
- Returns
message SellerItem {
required Qot_Common.Security option = 1;
optional string name = 2;
optional int32 optionType = 3; // Qot_Common.OptionType
optional double strikePrice = 4;
optional string strikeTime = 5;
optional double strikeTimestamp = 6;
optional int32 leftDays = 7;
optional double optionPrice = 8;
optional double stockPrice = 9;
optional double premium = 10;
optional double otmDegree = 11; // (%)
optional double iv = 12; // (%)
optional double intervalReturn = 13; // (%)
optional double annualizedReturn = 14; // (%)
optional double itmProbability = 15; // (%)
optional double strikedIntervalReturn = 16; // (%)
optional double strikedAnnualizedReturn = 17; // (%)
optional Qot_Common.Security owner = 18;
}
message S2C {
repeated SellerItem itemList = 1;
}
message Response {
required int32 retType = 1 [default = -400];
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
- Interface call result, structure refer to RetType
Protocol ID
3314
Futu::u32_t GetOptionSellerScreener(const Qot_GetOptionSellerScreener::Request &stReq);
virtual void OnReply_GetOptionSellerScreener(Futu::u32_t nSerialNo, const Qot_GetOptionSellerScreener::Response &stRsp) = 0;
Description
Get the option seller screener list
Parameters
message C2S {
required int32 optionMarket = 1; // Qot_OptionCommon.OptionMarket
required int32 sellerType = 2; // Qot_OptionCommon.SellerType
optional int32 sortType = 3; // Qot_OptionCommon.SellerSortType
optional bool isAsc = 4; // Default false
repeated Qot_OptionCommon.SellerIndicator filterList = 5;
}
message Request {
required C2S c2s = 1;
}
2
3
4
5
6
7
8
9
10
11
- Returns
message SellerItem {
required Qot_Common.Security option = 1;
optional string name = 2;
optional int32 optionType = 3; // Qot_Common.OptionType
optional double strikePrice = 4;
optional string strikeTime = 5;
optional double strikeTimestamp = 6;
optional int32 leftDays = 7;
optional double optionPrice = 8;
optional double stockPrice = 9;
optional double premium = 10;
optional double otmDegree = 11; // (%)
optional double iv = 12; // (%)
optional double intervalReturn = 13; // (%)
optional double annualizedReturn = 14; // (%)
optional double itmProbability = 15; // (%)
optional double strikedIntervalReturn = 16; // (%)
optional double strikedAnnualizedReturn = 17; // (%)
optional Qot_Common.Security owner = 18;
}
message S2C {
repeated SellerItem itemList = 1;
}
message Response {
required int32 retType = 1 [default = -400];
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
- Interface call result, structure refer to RetType
Protocol ID
3314
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_GetOptionSellerScreener::Request req;
Qot_GetOptionSellerScreener::C2S *c2s = req.mutable_c2s();
// TODO: populate c2s fields per proto
m_GetOptionSellerScreenerSerialNo = m_pQotApi->GetOptionSellerScreener(req);
}
virtual void OnReply_GetOptionSellerScreener(Futu::u32_t nSerialNo, const Qot_GetOptionSellerScreener::Response &stRsp) {
if (nSerialNo != m_GetOptionSellerScreenerSerialNo) return;
string resp_str;
ProtoBufToBodyData(stRsp, resp_str);
cout << UTF8ToLocal(resp_str) << endl;
}
protected:
FTAPI_Qot *m_pQotApi;
Futu::u32_t m_GetOptionSellerScreenerSerialNo = 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
getOptionSellerScreener(qotGetOptionSellerScreener)
Description
Get the option seller screener list
Parameters
message C2S {
required int32 optionMarket = 1; // Qot_OptionCommon.OptionMarket
required int32 sellerType = 2; // Qot_OptionCommon.SellerType
optional int32 sortType = 3; // Qot_OptionCommon.SellerSortType
optional bool isAsc = 4; // Default false
repeated Qot_OptionCommon.SellerIndicator filterList = 5;
}
message Request {
required C2S c2s = 1;
}
2
3
4
5
6
7
8
9
10
11
- Returns
message SellerItem {
required Qot_Common.Security option = 1;
optional string name = 2;
optional int32 optionType = 3; // Qot_Common.OptionType
optional double strikePrice = 4;
optional string strikeTime = 5;
optional double strikeTimestamp = 6;
optional int32 leftDays = 7;
optional double optionPrice = 8;
optional double stockPrice = 9;
optional double premium = 10;
optional double otmDegree = 11; // (%)
optional double iv = 12; // (%)
optional double intervalReturn = 13; // (%)
optional double annualizedReturn = 14; // (%)
optional double itmProbability = 15; // (%)
optional double strikedIntervalReturn = 16; // (%)
optional double strikedAnnualizedReturn = 17; // (%)
optional Qot_Common.Security owner = 18;
}
message S2C {
repeated SellerItem itemList = 1;
}
message Response {
required int32 retType = 1 [default = -400];
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
- Interface call result, structure refer to RetType
Protocol ID
3314
Example
import ftWebsocket from "futu-api";
import { Common, Qot_OptionCommon } from "futu-api/proto";
import beautify from "js-beautify";
function QotGetOptionSellerScreener(){
const { RetType } = Common
const { OptionMarket, SellerType, SellerSortType } = Qot_OptionCommon
let [addr, port, enable_ssl, key] = ["127.0.0.1", 11112, false, ''];
let websocket = new ftWebsocket();
websocket.onlogin = (ret, msg)=>{
if (ret) {
const req = {
c2s: {
optionMarket: OptionMarket.OptionMarket_US_Security,
sellerType: SellerType.SellerType_CoveredCall,
sortType: SellerSortType.SellerSortType_AnnualizedReturn,
},
};
websocket.GetOptionSellerScreener(req)
.then((res)=>{
let { errCode, retMsg, retType, s2c } = res
console.log("GetOptionSellerScreener: 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);
}
QotGetOptionSellerScreener()
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
- Output
GetOptionSellerScreener: errCode 0, retMsg , retType 0
{
"itemList": [
{
"option": { "market": 1, "code": "SOXL260618C235000" },
"name": "SOXL 260618 235.00C",
"optionType": 1,
"strikePrice": 235,
"strikeTime": "2026-06-18",
"strikeTimestamp": 1781755000,
"leftDays": 3,
"optionPrice": 21.85,
"stockPrice": 234.68,
"premium": 2185,
"otmDegree": 0.136,
"iv": 234.988,
"intervalReturn": 10.266,
"annualizedReturn": 1074.855,
"itmProbability": 45.724,
"strikedIntervalReturn": 10.416,
"strikedAnnualizedReturn": 1090.597,
"owner": { "market": 1, "code": "SOXL" }
},
{
"option": { "market": 1, "code": "SOXL260618C237500" },
"name": "SOXL 260618 237.50C",
"optionType": 1,
"strikePrice": 237.5,
"strikeTime": "2026-06-18",
"strikeTimestamp": 1781755000,
"leftDays": 3,
"optionPrice": 20.675,
"stockPrice": 234.68,
"premium": 2067.5,
"otmDegree": 1.201,
"iv": 234.423,
"intervalReturn": 9.66,
"annualizedReturn": 1011.47,
"itmProbability": 43.682,
"strikedIntervalReturn": 10.978,
"strikedAnnualizedReturn": 1149.431,
"owner": { "market": 1, "code": "SOXL" }
}
]
}
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
Rate Limit
- Maximum 60 requests per 30 seconds
- Python
- Proto
- C#
- Java
- C++
- JavaScript
get_option_seller_screener(market, seller_type, sort_type=None, is_asc=None, filter_list=None)
Description
Get the option seller screener list, returning option contracts suitable for seller strategies (Cash Secured Put / Covered Call), including return rates, exercise probabilities, and other data.
Parameters
Parameter Type Description market OptionMarket Option market type US_SECURITY=US equity options, HK_SECURITY=HK equity optionsseller_type SellerType Seller strategy type COVERED_CALL=covered call, CASH_SECURED_PUT=cash secured put (HK market only supports CASH_SECURED_PUT)sort_type SellerSortType Sort type ANNUALIZED_RETURN=annualized return, INTERVAL_RETURN=interval return, ITM_PROBABILITY=exercise probability, PREMIUM=premiumis_asc bool Ascending order Default False (descending)filter_list list[SellerFilter] Filter conditions list Multiple conditions use AND logicReturns
Parameter Type Description ret RET_CODE Interface call result data pandas.DataFrame When ret == RET_OK, returns screener results str When ret != RET_OK, returns error description Return DataFrame fields:
Field Type Description option str Option contract code name str Option name option_type str Option direction CALL, PUTstrike_price float Strike price strike_time str Expiration date time string strike_timestamp float Expiration date timestamp (Unix seconds) left_days int Days to expiry option_price float Option price stock_price float Underlying stock price premium float Premium otm_degree float Out-of-the-money degree (%) iv float Implied volatility (%) interval_return float Interval return (%) annualized_return float Annualized return (%) itm_probability float Exercise probability (%) striked_interval_return float Assigned interval return (%) Covered Call onlystriked_annualized_return float Assigned annualized return (%) Covered Call onlyowner str Underlying stock code
Example
from moomoo import *
quote_ctx = OpenQuoteContext(host='127.0.0.1', port=11111)
ret, data = quote_ctx.get_option_seller_screener(
market=OptionMarket.US_SECURITY,
seller_type=SellerType.COVERED_CALL,
sort_type=SellerSortType.ANNUALIZED_RETURN,
is_asc=False
)
if ret == RET_OK:
print(data)
else:
print('error:', data)
quote_ctx.close()
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
- Output
option name option_type strike_price strike_time strike_timestamp left_days option_price stock_price premium otm_degree iv interval_return annualized_return itm_probability striked_interval_return striked_annualized_return owner
0 US.SOXL260618C235000 SOXL 260618 235.00C CALL 235.0 2026-06-18 1.781755e+09 3 21.850 234.68 2185.0 0.136 234.988 10.266 1074.855 45.724 10.416 1090.597 US.SOXL
1 US.SOXL260618C237500 SOXL 260618 237.50C CALL 237.5 2026-06-18 1.781755e+09 3 20.675 234.68 2067.5 1.201 234.423 9.660 1011.470 43.682 10.978 1149.431 US.SOXL
2 US.SOXL260618C240000 SOXL 260618 240.00C CALL 240.0 2026-06-18 1.781755e+09 3 19.250 234.68 1925.0 2.266 230.652 8.935 935.526 41.678 11.405 1194.071 US.SOXL
3 US.WDS260618C25000 WDS 260618 25.00C CALL 25.0 2026-06-18 1.781755e+09 3 1.875 23.07 187.5 8.365 292.148 8.846 928.963 11.794 17.952 1885.177 US.WDS
4 US.SOXL260618C242500 SOXL 260618 242.50C CALL 242.5 2026-06-18 1.781755e+09 3 18.350 234.68 1835.0 3.332 232.108 8.482 888.077 39.715 12.097 1266.538 US.SOXL
...
2
3
4
5
6
7
# Qot_GetOptionSellerScreener.proto
Description
Get the option seller screener list
Parameters
message C2S {
required int32 optionMarket = 1; // Qot_OptionCommon.OptionMarket
required int32 sellerType = 2; // Qot_OptionCommon.SellerType
optional int32 sortType = 3; // Qot_OptionCommon.SellerSortType
optional bool isAsc = 4; // Default false
repeated Qot_OptionCommon.SellerIndicator filterList = 5;
}
message Request {
required C2S c2s = 1;
}
2
3
4
5
6
7
8
9
10
11
- Returns
message SellerItem {
required Qot_Common.Security option = 1;
optional string name = 2;
optional int32 optionType = 3; // Qot_Common.OptionType
optional double strikePrice = 4;
optional string strikeTime = 5;
optional double strikeTimestamp = 6;
optional int32 leftDays = 7;
optional double optionPrice = 8;
optional double stockPrice = 9;
optional double premium = 10;
optional double otmDegree = 11; // (%)
optional double iv = 12; // (%)
optional double intervalReturn = 13; // (%)
optional double annualizedReturn = 14; // (%)
optional double itmProbability = 15; // (%)
optional double strikedIntervalReturn = 16; // (%)
optional double strikedAnnualizedReturn = 17; // (%)
optional Qot_Common.Security owner = 18;
}
message S2C {
repeated SellerItem itemList = 1;
}
message Response {
required int32 retType = 1 [default = -400];
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
- Interface call result, structure refer to RetType
Protocol ID
3314
uint GetOptionSellerScreener(Qot_GetOptionSellerScreener.Request req); virtual void OnReply_GetOptionSellerScreener(MMAPI_Conn client, uint nSerialNo, Qot_GetOptionSellerScreener.Response rsp);
Description
Get the option seller screener list
Parameters
message C2S {
required int32 optionMarket = 1; // Qot_OptionCommon.OptionMarket
required int32 sellerType = 2; // Qot_OptionCommon.SellerType
optional int32 sortType = 3; // Qot_OptionCommon.SellerSortType
optional bool isAsc = 4; // Default false
repeated Qot_OptionCommon.SellerIndicator filterList = 5;
}
message Request {
required C2S c2s = 1;
}
2
3
4
5
6
7
8
9
10
11
- Returns
message SellerItem {
required Qot_Common.Security option = 1;
optional string name = 2;
optional int32 optionType = 3; // Qot_Common.OptionType
optional double strikePrice = 4;
optional string strikeTime = 5;
optional double strikeTimestamp = 6;
optional int32 leftDays = 7;
optional double optionPrice = 8;
optional double stockPrice = 9;
optional double premium = 10;
optional double otmDegree = 11; // (%)
optional double iv = 12; // (%)
optional double intervalReturn = 13; // (%)
optional double annualizedReturn = 14; // (%)
optional double itmProbability = 15; // (%)
optional double strikedIntervalReturn = 16; // (%)
optional double strikedAnnualizedReturn = 17; // (%)
optional Qot_Common.Security owner = 18;
}
message S2C {
repeated SellerItem itemList = 1;
}
message Response {
required int32 retType = 1 [default = -400];
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
- Interface call result, structure refer to RetType
Protocol ID
3314
int getOptionSellerScreener(Qot_GetOptionSellerScreener.Request req) onReply_GetOptionSellerScreener(MMAPI_Conn client, int nSerialNo, Qot_GetOptionSellerScreener.Response rsp)
Description
Get the option seller screener list
Parameters
message C2S {
required int32 optionMarket = 1; // Qot_OptionCommon.OptionMarket
required int32 sellerType = 2; // Qot_OptionCommon.SellerType
optional int32 sortType = 3; // Qot_OptionCommon.SellerSortType
optional bool isAsc = 4; // Default false
repeated Qot_OptionCommon.SellerIndicator filterList = 5;
}
message Request {
required C2S c2s = 1;
}
2
3
4
5
6
7
8
9
10
11
- Returns
message SellerItem {
required Qot_Common.Security option = 1;
optional string name = 2;
optional int32 optionType = 3; // Qot_Common.OptionType
optional double strikePrice = 4;
optional string strikeTime = 5;
optional double strikeTimestamp = 6;
optional int32 leftDays = 7;
optional double optionPrice = 8;
optional double stockPrice = 9;
optional double premium = 10;
optional double otmDegree = 11; // (%)
optional double iv = 12; // (%)
optional double intervalReturn = 13; // (%)
optional double annualizedReturn = 14; // (%)
optional double itmProbability = 15; // (%)
optional double strikedIntervalReturn = 16; // (%)
optional double strikedAnnualizedReturn = 17; // (%)
optional Qot_Common.Security owner = 18;
}
message S2C {
repeated SellerItem itemList = 1;
}
message Response {
required int32 retType = 1 [default = -400];
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
- Interface call result, structure refer to RetType
Protocol ID
3314
Moomoo::u32_t GetOptionSellerScreener(const Qot_GetOptionSellerScreener::Request &stReq);
virtual void OnReply_GetOptionSellerScreener(Moomoo::u32_t nSerialNo, const Qot_GetOptionSellerScreener::Response &stRsp) = 0;
Description
Get the option seller screener list
Parameters
message C2S {
required int32 optionMarket = 1; // Qot_OptionCommon.OptionMarket
required int32 sellerType = 2; // Qot_OptionCommon.SellerType
optional int32 sortType = 3; // Qot_OptionCommon.SellerSortType
optional bool isAsc = 4; // Default false
repeated Qot_OptionCommon.SellerIndicator filterList = 5;
}
message Request {
required C2S c2s = 1;
}
2
3
4
5
6
7
8
9
10
11
- Returns
message SellerItem {
required Qot_Common.Security option = 1;
optional string name = 2;
optional int32 optionType = 3; // Qot_Common.OptionType
optional double strikePrice = 4;
optional string strikeTime = 5;
optional double strikeTimestamp = 6;
optional int32 leftDays = 7;
optional double optionPrice = 8;
optional double stockPrice = 9;
optional double premium = 10;
optional double otmDegree = 11; // (%)
optional double iv = 12; // (%)
optional double intervalReturn = 13; // (%)
optional double annualizedReturn = 14; // (%)
optional double itmProbability = 15; // (%)
optional double strikedIntervalReturn = 16; // (%)
optional double strikedAnnualizedReturn = 17; // (%)
optional Qot_Common.Security owner = 18;
}
message S2C {
repeated SellerItem itemList = 1;
}
message Response {
required int32 retType = 1 [default = -400];
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
- Interface call result, structure refer to RetType
Protocol ID
3314
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_GetOptionSellerScreener::Request req;
Qot_GetOptionSellerScreener::C2S *c2s = req.mutable_c2s();
// TODO: populate c2s fields per proto
m_GetOptionSellerScreenerSerialNo = m_pQotApi->GetOptionSellerScreener(req);
}
virtual void OnReply_GetOptionSellerScreener(Moomoo::u32_t nSerialNo, const Qot_GetOptionSellerScreener::Response &stRsp) {
if (nSerialNo != m_GetOptionSellerScreenerSerialNo) return;
string resp_str;
ProtoBufToBodyData(stRsp, resp_str);
cout << UTF8ToLocal(resp_str) << endl;
}
protected:
MMAPI_Qot *m_pQotApi;
Moomoo::u32_t m_GetOptionSellerScreenerSerialNo = 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
getOptionSellerScreener(qotGetOptionSellerScreener)
Description
Get the option seller screener list
Parameters
message C2S {
required int32 optionMarket = 1; // Qot_OptionCommon.OptionMarket
required int32 sellerType = 2; // Qot_OptionCommon.SellerType
optional int32 sortType = 3; // Qot_OptionCommon.SellerSortType
optional bool isAsc = 4; // Default false
repeated Qot_OptionCommon.SellerIndicator filterList = 5;
}
message Request {
required C2S c2s = 1;
}
2
3
4
5
6
7
8
9
10
11
- Returns
message SellerItem {
required Qot_Common.Security option = 1;
optional string name = 2;
optional int32 optionType = 3; // Qot_Common.OptionType
optional double strikePrice = 4;
optional string strikeTime = 5;
optional double strikeTimestamp = 6;
optional int32 leftDays = 7;
optional double optionPrice = 8;
optional double stockPrice = 9;
optional double premium = 10;
optional double otmDegree = 11; // (%)
optional double iv = 12; // (%)
optional double intervalReturn = 13; // (%)
optional double annualizedReturn = 14; // (%)
optional double itmProbability = 15; // (%)
optional double strikedIntervalReturn = 16; // (%)
optional double strikedAnnualizedReturn = 17; // (%)
optional Qot_Common.Security owner = 18;
}
message S2C {
repeated SellerItem itemList = 1;
}
message Response {
required int32 retType = 1 [default = -400];
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
- Interface call result, structure refer to RetType
Protocol ID
3314
Example
import mmWebsocket from "moomoo-api";
import { Common, Qot_OptionCommon } from "moomoo-api/proto";
import beautify from "js-beautify";
function QotGetOptionSellerScreener(){
const { RetType } = Common
const { OptionMarket, SellerType, SellerSortType } = Qot_OptionCommon
let [addr, port, enable_ssl, key] = ["127.0.0.1", 11112, false, ''];
let websocket = new mmWebsocket();
websocket.onlogin = (ret, msg)=>{
if (ret) {
const req = {
c2s: {
optionMarket: OptionMarket.OptionMarket_US_Security,
sellerType: SellerType.SellerType_CoveredCall,
sortType: SellerSortType.SellerSortType_AnnualizedReturn,
},
};
websocket.GetOptionSellerScreener(req)
.then((res)=>{
let { errCode, retMsg, retType, s2c } = res
console.log("GetOptionSellerScreener: 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);
}
QotGetOptionSellerScreener()
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
- Output
GetOptionSellerScreener: errCode 0, retMsg , retType 0
{
"itemList": [
{
"option": { "market": 1, "code": "SOXL260618C235000" },
"name": "SOXL 260618 235.00C",
"optionType": 1,
"strikePrice": 235,
"strikeTime": "2026-06-18",
"strikeTimestamp": 1781755000,
"leftDays": 3,
"optionPrice": 21.85,
"stockPrice": 234.68,
"premium": 2185,
"otmDegree": 0.136,
"iv": 234.988,
"intervalReturn": 10.266,
"annualizedReturn": 1074.855,
"itmProbability": 45.724,
"strikedIntervalReturn": 10.416,
"strikedAnnualizedReturn": 1090.597,
"owner": { "market": 1, "code": "SOXL" }
},
{
"option": { "market": 1, "code": "SOXL260618C237500" },
"name": "SOXL 260618 237.50C",
"optionType": 1,
"strikePrice": 237.5,
"strikeTime": "2026-06-18",
"strikeTimestamp": 1781755000,
"leftDays": 3,
"optionPrice": 20.675,
"stockPrice": 234.68,
"premium": 2067.5,
"otmDegree": 1.201,
"iv": 234.423,
"intervalReturn": 9.66,
"annualizedReturn": 1011.47,
"itmProbability": 43.682,
"strikedIntervalReturn": 10.978,
"strikedAnnualizedReturn": 1149.431,
"owner": { "market": 1, "code": "SOXL" }
}
]
}
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
Rate Limit
- Maximum 60 requests per 30 seconds