# 筛选正股
get_stock_screen(request)
介绍
条件选股 V2。相比旧接口 get_stock_filter,因子覆盖更广(11 类共 244+ 个因子),数值统一传原始值(OpenD 自动倍率转换),支持单字段或多字段排序、显式声明取回属性,结果按
value_type分别填入sval/ival/aval/dval。参数
参数 类型 说明 request StockScreenRequest 条件选股请求对象,通过 builder 方式构建 StockScreenRequest 字段:
字段 类型 说明 page_from int 分页起始位置 page_count int 单页最大返回数 筛选条件 builder 方法(每次调用追加一条筛选条件,所有数值字段直接传原始值,OpenD 自动倍率转换):
方法 说明 add_simple_field(field, values) 市场 / 交易所 / 指数 / 自选股等枚举字段筛选 add_plate(plate_ids, parent_plate_id=None) 板块筛选 add_simple_property(name, lower=None, upper=None) 简单行情属性区间筛选 add_cumulative_property(name, days=1, lower=None, upper=None) 累计行情属性 add_financial_property(name, term=None, year=None, lower=None, upper=None, ...) 财务属性 add_indicator_positional(first_indicator_name, period_type, position, second_indicator=None, ...) 技术指标位置关系 add_indicator_pattern(name, period_type, ...) 技术指标形态(金叉、死叉、背离等) add_featured_property(name, intervals=None, value_set=None, period=None, range_period=None, first_custom_param=None) 特色指标(筹码、热度、分析师评级、资金流等) add_broker_holdings(name, days=None, param=None, intervals=None) 经纪商持股因子 add_kline_shape(name, period=None, value_set=None) K 线形态(双底、头肩底等) add_option(name, intervals=None, param=None, period=None) 期权指标(正股 IV、HV 等) 取回属性 builder 方法(声明返回哪些字段值;不声明则只返回 stock_id):
方法 说明 add_retrieve_basic(name) 代码 / 名称 / 行业 add_retrieve_simple(name) 简单行情属性 add_retrieve_cumulative(name, days=1, period_average=None) 累计属性 add_retrieve_financial(name, term=None, year=None, ...) 财务属性 add_retrieve_indicator(name, period=None, indicator_params=None) 技术指标 add_retrieve_featured(name, period=None, range_period=None, first_custom_param=None) 特色属性 add_retrieve_broker(name, days=None, param=None) 经纪商 add_retrieve_option(name, param=None, period=None) 期权属性 add_retrieve_kline_shape(name, period=None) K 线形态 排序 builder 方法:
方法 说明 set_sort(direction, property_type, property_params) 单字段排序 add_sort(direction, property_type, property_params) 多字段排序
返回
参数 类型 说明 ret RET_CODE 接口调用结果 data tuple 当 ret == RET_OK,返回 (last_page, all_count, items) str 当 ret != RET_OK,返回错误描述 返回 tuple 字段:
字段 类型 说明 last_page bool 是否最后一页 all_count int 满足条件的总条数 items list[dict] 当前页结果列表,元素结构为 {'stock_id': int, 'results': [result, ...]}单条 result 结构:
字段 类型 说明 type str 属性类型 property dict 对应 property 描述(含 name / days / term 等) value_type int 值类型 sval str 字符串值(value_type=1 时存在) ival int 整型值(value_type=2 时存在) aval list[int] 整型数组值(value_type=3 时存在) dval float 浮点值(value_type=4 时存在) enum_type_name str 当 ival 为枚举码时,对应的枚举类型名(如 'KlineShapeType') enum_name str 当 ival 为枚举码时,OpenD/SDK 解码出的枚举名(如 'DOUBLE_BOTTOMS'、'NONE') end_time int 财报结束时间戳
Example
from futu import OpenQuoteContext, RET_OK, StockScreenRequest
from futu.quote.stock_screen_const import (
ScrMarket, ScrSortDir, SimpleField, SimpleProperty,
CumulativeProperty, FinancialProperty, Term,
Indicator, Period, Position, Pattern,
BasicProperty, KlineShapeProperty, KlineShapeType,
)
quote_ctx = OpenQuoteContext(host='127.0.0.1', port=11111)
# 示例 1:港股大市值股 + MACD 金叉
req = StockScreenRequest()
req.add_simple_field(field=SimpleField.MARKET, values=[ScrMarket.HK])
req.add_simple_property(name=SimpleProperty.PRICE, lower=10.0) # 最新价 ≥ 10
req.add_simple_property(name=SimpleProperty.MARKET_CAP, lower=10_000_000_000.0) # 市值 ≥ 100 亿
req.add_simple_property(name=SimpleProperty.PE_TTM, lower=10.0, upper=50.0) # PE(TTM) 10~50
req.add_indicator_pattern(name=Pattern.MACD_GOLD_CROSS, period_type=Period.DAY) # MACD 金叉
# 取回字段
req.add_retrieve_basic(name=BasicProperty.CODE)
req.add_retrieve_basic(name=BasicProperty.NAME)
req.add_retrieve_simple(name=SimpleProperty.PRICE)
req.add_retrieve_simple(name=SimpleProperty.MARKET_CAP)
req.add_retrieve_simple(name=SimpleProperty.PE_TTM)
# 排序
req.set_sort(direction=ScrSortDir.DESC, property_type='simple',
property_params={'name': int(SimpleProperty.MARKET_CAP)})
req.page_count = 50
ret, data = quote_ctx.get_stock_screen(req)
if ret == RET_OK:
last_page, all_count, items = data
print(f"总数 {all_count}, 当前返回 {len(items)} 条")
for it in items[:3]:
print(it['stock_id'], it['results'])
else:
print('error: ', data)
# 示例 2:财务因子 + 累计涨跌幅
req = StockScreenRequest()
req.add_simple_field(field=SimpleField.MARKET, values=[ScrMarket.HK])
req.add_cumulative_property(name=CumulativeProperty.PRICE_CHANGE_PCT,
days=5, lower=-0.05, upper=0.05) # 5 日涨跌幅 -5%~5%(百分数传小数)
req.add_financial_property(name=FinancialProperty.NET_PROFIT,
term=Term.ANNUAL, lower=0.0) # 年报净利润 > 0
req.add_retrieve_basic(name=BasicProperty.CODE)
req.add_retrieve_simple(name=SimpleProperty.PRICE)
req.page_count = 200
ret, data = quote_ctx.get_stock_screen(req)
# 示例 3:K 线形态(W 型底 + 头肩底)
req = StockScreenRequest()
req.add_simple_field(field=SimpleField.MARKET, values=[ScrMarket.HK])
req.add_kline_shape(name=KlineShapeProperty.SHAPE_TYPE, period=Period.DAY,
value_set=[KlineShapeType.DOUBLE_BOTTOMS,
KlineShapeType.HEAD_SHOULDERS_BOTTOM])
req.add_retrieve_basic(name=BasicProperty.CODE)
req.add_retrieve_kline_shape(name=KlineShapeProperty.SHAPE_TYPE, period=Period.DAY)
ret, data = quote_ctx.get_stock_screen(req)
quote_ctx.close()
1
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
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
- Output
总数 1, 当前返回 1 条
54047868453564 [{'type': 'basic', 'property': {'name': 1101}, 'value_type': 1, 'sval': '00700'},
{'type': 'basic', 'property': {'name': 1102}, 'value_type': 1, 'sval': '腾讯控股'},
{'type': 'simple', 'property': {'name': 2201}, 'value_type': 4, 'dval': 460.0},
{'type': 'simple', 'property': {'name': 2301}, 'value_type': 4, 'dval': 4194280264040.0},
{'type': 'simple', 'property': {'name': 2303}, 'value_type': 4, 'dval': 15.75126}]
1
2
3
4
5
6
2
3
4
5
6