iT邦幫忙

2024 iThome 鐵人賽

DAY 5
0
AI/ ML & Data

從投信數據預測葛蘭碧突破後股價走勢系列 第 5

[Day 05] 找出葛蘭碧突破之股票

  • 分享至 

  • xImage
  •  

https://ithelp.ithome.com.tw/upload/images/20240919/20169373AcuyyLTJnI.png

前言

上一篇我們已經可以透過FinMind API下載價量資料了 ,本篇我們來說說如何透過這些取得的資料去加以計算均線等數據方便我們找出葛蘭碧突破的股票。

均線的種類

均線大概可以分成三種,計算方式不同,靈敏度也不一樣:

  • SMA(簡單移動平均線)
    這是最常見、也是計算最簡單的均線。通常報價軟體預設的均線就是這種。它的計算方式是把選定區間內的數值全部加起來,然後除以總天數。也就是說,每天的價格權重都一樣。

  • EMA(指數移動平均線)
    EMA給最近的價格更高的權重,反應比較快。它的計算方法是,越近期的價格權重越高,依照指數方式往前遞減,所以比SMA更靈敏。

  • WMA(加權移動平均線)
    WMA同樣給近期價格更大的權重,但跟EMA不同的是,它的權重是用等差方式逐步遞減。也就是說,最近的價格權重大,越往前,權重越小。

每種均線都有其特定的應用情境,而我們在找葛蘭碧突破的股票時,我們只需要用到SMA就好,所以後面我們所提到的均線都是指SMA。

計算均線

接下來我們實際在程式上呈現均線的計算。計算均線我們有一個參數可以調整,也就是均線長度(MA Length),我們先以MA50來選寫一個簡單的均線計算程式:

我們今天一樣以台積電(2330)的股價為例,上一篇我們將股價儲存為csv格式,csv格式如下:

date stock_id Trading_Volume Trading_money open max min close spread Trading_turnover
2020-01-02 2330 33,282,120 11,224,165,450 332.5 339.0 332.5 339.0 8.0 17,160
2020-01-03 2330 42,023,268 14,295,651,580 344.0 345.0 335.5 339.5 0.5 20,545
... ... ... ... ... ... ... ... ... ...
2024-09-16 2330 14,456,888 13,692,259,575 952.0 952.0 943.0 947.0 0.0 26,421
2024-09-18 2330 30,094,662 28,303,054,525 945.0 948.0 933.0 941.0 -6.0 46,622

在計算均線我們只需要用收盤價close去計算即可,將close欄位做MA的計算:

import pandas as pd

# Read Your CSV
df = pd.read_csv(r'C:\iThome\TSMC_stock_data.csv')

def calculate_ma(data, window):
    return data.rolling(window=window).mean()

ma_window = 50  # MA Length

df[f'MA_{ma_window}'] = calculate_ma(df['close'], ma_window)

df.to_csv('TSMC_stock_data_with_MA.csv', index=False)

這樣我們就多了一個可以看到MA_50欄位的csv了:

date stock_id Trading_Volume Trading_money open max min close spread Trading_turnover MA_50
... ... ... ... ... ... ... ... ... ... ...
2024-09-13 2330 28,307,441 26,795,862,243 955.0 955.0 939.0 947.0 7.0 39,071 955.88
2024-09-16 2330 14,456,888 13,692,259,575 952.0 952.0 943.0 947.0 0.0 26,421 954.72
2024-09-18 2330 30,094,662 28,303,054,525 945.0 948.0 933.0 941.0 -6.0 46,622 953.44

找出葛蘭碧突破之日期

有了以上計算均線之方法我們可以來嘗試找出葛蘭碧突破的日期了,這邊我們需要考慮兩個參數:

  1. 均線長度
  2. 成交量漲幅

由於這兩個參數並沒有一定要使用什麼值,所以我們先把這兩個參數固定為:

  1. 均線長度為50
  2. 成交量漲幅為漲幅大於過去10天平均成交量的1.5倍

再來就可以開始實作我們的程式了:

import pandas as pd

# Read CSV
df = pd.read_csv(r'C:\iThome\your_csv_file_with_MA.csv')

df['avg_volume_10d'] = df['Trading_Volume'].rolling(window=10).mean()

# Condition 1: Current closing price breaks above a declining MA50
df['ma50_trend'] = df['MA_50'].diff()
df['price_above_ma50'] = (df['close'] > df['MA_50']) & (df['ma50_trend'] < 0)

# Condition 2: Current trading volume is greater than 1.5 times the 10-day average volume
df['volume_spike'] = df['Trading_Volume'] > (1.5 * df['avg_volume_10d'])

granville_breakout = df[(df['price_above_ma50']) & (df['volume_spike'])]

breakout_dates = granville_breakout['date'].tolist()
print("Granville breakout dates:", breakout_dates)

以上程式輸出出來的日期我們可以到任何看盤軟體上確認他是否符合條件,這邊我以其中一個突破日期"2023-10-11"在XQ上確認看看:
https://ithelp.ithome.com.tw/upload/images/20240919/20169373mS32Que4UO.png

結論

我們已經完成了葛蘭碧突破篩選的濾網了,接著就可以將台股過去的所有標符合葛蘭碧突破的日期都找出來進一步去分析了!


上一篇
[Day 04] 透過FinMind取得台股收盤資訊
下一篇
[Day 06]找出最適合的均線(1)
系列文
從投信數據預測葛蘭碧突破後股價走勢17
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言