Python
Coding
這篇的內容很單純,就是要畫出這個圖啦!!!
在前一篇文章中,我們已經能使用twstock
模組抓取特定個股的交易歷史,並且使用pandas
模組把清單(list)加上表頭並轉換成Data Frame資料表,接著再將資料表的內容儲存為.csv
檔案。接下來只要我們定期更新個股股價,便能開始研究價格走勢了。
在這張圖中我們可以看到幾個主要項目:
![](https://i.imgur.com/zA6NLux.png=====================================================================[ㄤ
K線又稱作蠟燭線,一根蠟燭表示一天自開盤到收盤的價格表現,其中紅色代表上漲,綠色代表下跌,而中間的蠟燭上下限標記開盤及收盤價格,K線的上下橫線則為當日最高與最低價格。
均線紀錄了一段特定時間中股票持有成本的平均值,英文原名是Moving Average(MA),舉例來說,下表是某檔股票5日的收盤價格,將5日的價格加總除以5即為5日均價,以每一天為中心計算前後兩日加總的均價,就能連成一條5日價格均線了。
時間 | D-2 | D-1 | D0 | D+1 | D+2 | 5日均價 |
---|---|---|---|---|---|---|
價格 | 52.5 | 53.0 | 59.5 | 55.2 | 49.5 | 53.94 |
而隨著加總平均計算的天數不同,均線代表的意涵也不同,以下是常見的均線技術分析:
均線種類 | 說明 | 分析意義 |
---|---|---|
5日均線 | 周線,極短線操作指標 | 飆股跌破周線可能是出場時機 |
10日均線 | 雙周線,短線操作指標 | 強勢股跌破雙周線可能會進入短期整理 |
20日均線 | 月線,多頭操作指標 | 跌破月線可能會進入短期空頭修正格局 |
60日均線 | 季線,中期操作指標 | 跌破季線可能會進入中期空頭修正格局 |
240日均線 | 年線,長期操作指標 | 跌破季線可能會進入長期空頭修正格局 |
除了這5種算法以外,還有許多不同日數加總的判斷方式(例如6日線、22日線等),但對趨勢判斷的影響不會很大。程式中我設定顯示5、10及20日均線用於分析。
圖片下方的副圖表為每日的交易量,長條圖顏色對應當日的漲跌顯示。
在這個程式中會用到以下幾個模組:
.csv
檔案,將股價資料轉為Data Frame資料表格式首先引入需要的模組
import pandas as pd
import matplotlib
import mplfinance as mpf
設定我們要讀取的股票代號,再由pandas的pd.read_csv()
功能讀取.csv
檔案
target_stock = '0050'
df = pd.read_csv(f'./data/{target_stock}.csv', parse_dates=True, index_col=1)
接著要對資料表中的Turnover表頭做一點修改,由於mplfinance模組中對於交易量的辨認是Volume這個字,所以我們使用pandas的df.rename()
功能調整表頭。
df.rename(columns={'Turnover':'Volume'}, inplace = True)
這樣一來資料就準備好了,可以開始畫圖了!
由於mplfinance內建的漲/跌標記顏色是美國的版本(綠漲紅跌),所以我們要先使用mplfinance中自訂圖表外觀功能mpf.make_marketcolors()
將漲/跌顏色改為台灣版本(紅漲綠跌),接著再將這個設定以mpf.make_mpf_style()
功能保存為自訂的外觀。
mc = mpf.make_marketcolors(up='r', down='g', inherit=True)
s = mpf.make_mpf_style(base_mpf_style='yahoo', marketcolors=mc)
其他圖表的細節設定(類型、均線、顯示交易量、圖表標題、套用外觀等…)我們則建立一個可變參數將它們都放在裡面,這個做法當你有多張圖表要共用設定參數時會非常方便喔。
kwargs = dict(type='candle', mav=(5,20,60), volume=True, figratio=(10,8), figscale=0.75, title=target_stock, style=s)
最後只要很簡單的使用mpf.plot()
就完成啦!
mpf.plot(df, **kwargs)
啟動程式後,會開啟一個視窗,除了有我們畫出的股價走勢圖外,matplotlib模組提供了圖表放大縮小與儲存圖檔的功能,也可以再調整圖表顯示的細節,功能真的超級強大。
import pandas as pd
import matplotlib
import mplfinance as mpf
# 導入pandas、matplotlib、mplfinance模組,將mplfinance模組縮寫為mpf
# 這邊要導入matplotlib的原因是因為mplfinance繪圖時需要調用mptplotlib模組
target_stock = '0050' #設定要繪製走勢圖的股票
df = pd.read_csv(f'./data/{target_stock}.csv', parse_dates=True, index_col=1) #讀取目標股票csv檔的位置
df.rename(columns={'Turnover':'Volume'}, inplace = True)
#這裡針對資料表做一下修正,因為交易量(Turnover)在mplfinance中須被改為Volume才能被認出來
mc = mpf.make_marketcolors(up='r',down='g',inherit=True)
s = mpf.make_mpf_style(base_mpf_style='yahoo',marketcolors=mc)
#針對線圖的外觀微調,將上漲設定為紅色,下跌設定為綠色,符合台股表示習慣
#接著把自訂的marketcolors放到自訂的style中,而這個改動是基於預設的yahoo外觀
kwargs = dict(type='candle', mav=(5,20,60), volume=True, figratio=(10,8), figscale=0.75, title=target_stock, style=s)
#設定可變參數kwargs,並在變數中填上繪圖時會用到的設定值
mpf.plot(df, **kwargs)
#選擇df資料表為資料來源,帶入kwargs參數,畫出目標股票的走勢圖
or
or
By clicking below, you agree to our terms of service.
New to HackMD? Sign up
Syntax | Example | Reference | |
---|---|---|---|
# Header | Header | 基本排版 | |
- Unordered List |
|
||
1. Ordered List |
|
||
- [ ] Todo List |
|
||
> Blockquote | Blockquote |
||
**Bold font** | Bold font | ||
*Italics font* | Italics font | ||
~~Strikethrough~~ | |||
19^th^ | 19th | ||
H~2~O | H2O | ||
++Inserted text++ | Inserted text | ||
==Marked text== | Marked text | ||
[link text](https:// "title") | Link | ||
![image alt](https:// "title") | Image | ||
`Code` | Code |
在筆記中貼入程式碼 | |
```javascript var i = 0; ``` |
|
||
:smile: | Emoji list | ||
{%youtube youtube_id %} | Externals | ||
$L^aT_eX$ | LaTeX | ||
:::info This is a alert area. ::: |
This is a alert area. |
On a scale of 0-10, how likely is it that you would recommend HackMD to your friends, family or business associates?
Please give us some advice and help us improve HackMD.
Syncing