电竞比分网-中国电竞赛事及体育赛事平台

分享

如何用Python量化的方式找到處于底部橫盤突破狀態(tài)的牛股

 金木魚23897029 2025-11-10 發(fā)布于江蘇

大家好,我是花姐。
相信大家平時一定見過這樣的股票

如何用Python量化的方式找到處于底部橫盤突破狀態(tài)的牛股

打開今日頭條查看圖片詳情


或者這樣的

如何用Python量化的方式找到處于底部橫盤突破狀態(tài)的牛股

打開今日頭條查看圖片詳情


他們都有一個共同的特點就是在一個相對底部區(qū)間盤整,然后突破,接下來一飛沖天。

所以今天我們來聊一聊——如何用量化的方式判斷一只股票是不是正處于底部盤整然后突破的階段。


這個狀態(tài)要拆分成3個部分,首先是底部、然后盤整、最后突破,接下來我們一個個說。

階段1:底部檢測

底部其實是相對的,如果把K線拉長,很有可能現在的底部相對歷史來說可能是半山腰,甚至是頂部。所以底部判定關鍵在于取值區(qū)間和連續(xù)天數,不同參數會導致不同結果。

核心思路:

  1. 價格位置歸一化判斷低位
  2. 局部低點連續(xù)出現
  3. 持續(xù)天數 ≥ 設置值

核心代碼片段:

# 計算歷史區(qū)間最高最低low_min, high_max = df['close'].min(), df['close'].max()# 價格歸一化df['pos'] = (df['close'] - low_min) / (high_max - low_min)# 底部區(qū)間判斷df['is_bottom_region'] = df['pos'] < 0.2# 找連續(xù) True 區(qū)間group_id = (df['is_bottom_region'] != df['is_bottom_region'].shift(1)).cumsum()for _, grp in df.groupby(group_id): if grp['is_bottom_region'].iloc[0] and len(grp) >= 3: print(f'可能底部區(qū)間: {grp.index[0]} ~ {grp.index[-1]}')

階段2:橫盤盤整檢測

橫盤盤整是市場“憋氣”的階段,股價在一個小范圍反復震蕩。不同ATR、MA窗口和閾值會影響判定結果。

核心思路:

  1. ATR/MA 低波動率
  2. 價格區(qū)間占均價比例窄
  3. 持續(xù)天數 ≥ 設置值

核心代碼片段:

# 計算真實波幅 TRdf['tr'] = df[['high','low','close']].apply(    lambda row: max(        row['high']-row['low'],        abs(row['high']-row['close'].shift(1)),        abs(row['low']-row['close'].shift(1))    ), axis=1)# 計算 ATR 與 MAdf['atr'] = df['tr'].rolling(14, min_periods=1).mean()df['ma'] = df['close'].rolling(5, min_periods=1).mean()# 低波動率 + 區(qū)間窄幅df['is_sideways'] = (df['atr']/df['ma'] < 0.02) & \                    ((df['high'].rolling(14).max() - df['low'].rolling(14).min()) / df['ma'] < 0.1)# 找連續(xù) True 區(qū)間group_id = (df['is_sideways'] != df['is_sideways'].shift(1)).cumsum()for _, grp in df.groupby(group_id):    if grp['is_sideways'].iloc[0] and len(grp) >= 15:        print(f'可能橫盤區(qū)間: {grp.index[0]} ~ {grp.index[-1]}')

階段3:突破檢測

突破是橫盤階段后的“釋放”,股價突破盤整上軌且成交量放大。核心是盤整區(qū)間上沿 + 成交量放大 + 收盤價突破。

核心思路:

  1. 收盤價突破盤整區(qū)最高價
  2. 成交量放大
  3. 突破天數 ≥ 設置值

核心代碼片段:

# 盤整區(qū)間最高價consolidation_high = sideways_info['consolidation_high']# 計算量比df['vol_ratio'] = df['volume'] / df['volume'].rolling(5, min_periods=1).mean()# 突破信號df['breakout_signal'] = (df['close'] > consolidation_high) & (df['vol_ratio'] > 1.5)# 找連續(xù) True 區(qū)間group_id = (df['breakout_signal'] != df['breakout_signal'].shift(1)).cumsum()for _, grp in df.groupby(group_id): if grp['breakout_signal'].iloc[0] and len(grp) >= 1: print(f'突破區(qū)間: {grp.index[0]} ~ {grp.index[-1]}')

通過這3步就可以找到處于底部、橫盤、突破的股票了。

Python能力強的就可以直接根據上面的代碼來完善出屬于自己的選股邏輯了。當然花姐為基礎差的也準備了完整的代碼,可以上知-識-星-球查看。

    本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯系方式、誘導購買等信息,謹防詐騙。如發(fā)現有害或侵權內容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多