# 篩選正股

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
  • Output
總數 1, 當前返回 154047868453564 [{'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