TShopping

 找回密碼
 註冊
搜索
查看: 1191|回復: 0
打印 上一主題 下一主題

[教學] 用Python超簡單計算:158種常見技術指標

[複製鏈接]
跳轉到指定樓層
1#
發表於 2021-7-8 15:27:23 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
 
Push to Facebook
這篇接續著Python時間序列實做,先複習一下,上回合結束,我們有一個最重要的成果:close,它的columns是所有的股票代號,而index是日期。
  1. close = pd.DataFrame({k:d['收盤價'] for k,d in data.items()}).transpose()
  2. close.index = pd.to_datetime(close.index)
  3. close
複製代碼

還記得嗎?上方式是上次的code,將data,把每個股票的收盤價拿出來。因為很重要所以說三遍:
  1. open = pd.DataFrame({k:d['開盤價'] for k,d in data.items()}).transpose()
  2. open.index = pd.to_datetime(open.index)

  3. high = pd.DataFrame({k:d['最高價'] for k,d in data.items()}).transpose()
  4. high.index = pd.to_datetime(high.index)

  5. low = pd.DataFrame({k:d['最低價'] for k,d in data.items()}).transpose()
  6. low.index = pd.to_datetime(low.index)

  7. volume = pd.DataFrame({k:d['成交股數'] for k,d in data.items()}).transpose()
  8. volume.index = pd.to_datetime(volume.index)
複製代碼

大家有沒有發現,相同的東西抄了五次,但我們拿出來的不是close,是open、high、low 跟 volume。把所有的東西都統整好。
統整好後,再將我們想看的股票拿出來,我們以近年超紅的台積電。
把其中的股票拿出來,變成 dict 結構
  1. tsmc = {
  2.     'close':close['2330']['2017'].dropna().astype(float),
  3.     'open':open['2330']['2017'].dropna().astype(float),
  4.     'high':high['2330']['2017'].dropna().astype(float),
  5.     'low':low['2330']['2017'].dropna().astype(float),
  6.     'volume': volume['2330']['2017'].dropna().astype(float),
  7. }

  8. tsmc['close'].plot()
複製代碼

花這麼久時間,tsmc 這個結構有什麼用?來,接下來我們配合一個超厲害的python package:talib。
安裝talib不是直接pip install那麼簡單,請參考python talib 的網頁 來安裝。
接下來任意找出105種指標!
內容目錄 隱藏
1 KD 值計算
2 MACD 計算
3 OBV計算
4 威廉指數計算
5 ATR 計算
6 改變參數


KD 值計算
  1. from talib import abstract

  2. def talib2df(talib_output):
  3.     if type(talib_output) == list:
  4.         ret = pd.DataFrame(talib_output).transpose()
  5.     else:
  6.         ret = pd.Series(talib_output)
  7.     ret.index = tsmc['close'].index
  8.     return ret;

  9. talib2df(abstract.STOCH(tsmc)).plot()
  10. tsmc['close'].plot(secondary_y=True)
複製代碼

其中,最重要的是第 9 行,我們利用 abstract.STOCH 這個函式,來計算KD值,計算好後,再由talib2df將格式轉換成 dataframe 方便我們畫圖。第 10 行是說,我們想要同時顯示tsmc的收盤價,secondary_y 是說我們需要用第二個 y軸,因為KD我們知道是在0~100之間,而台積電股價在200左右。
以下就是我們的成品,橘色、藍色代表的就是KD值。而紫色的就是收盤價!

收盤價對應到右邊的 y 軸,而左邊的y 軸則是 KD 值。

MACD 計算
這還不夠酷炫,以上的鋪陳都是為了接下來的爽:
  1. talib2df(abstract.MACD(tsmc)).plot()
  2. tsmc['close'].plot(secondary_y=True)
複製代碼

只要把STOCH改成MACD就好了,各種指標隨便用:
OBV計算
  1. talib2df(abstract.OBV(tsmc)).plot()
  2. tsmc['close'].plot(secondary_y=True)
複製代碼



威廉指數計算
WILLR 計算
  1. talib2df(abstract.WILLR(tsmc)).plot()
  2. tsmc['close'].plot(secondary_y=True)
複製代碼


ATR 計算


  1. talib2df(abstract.ATR(tsmc)).plot()
  2. tsmc['close'].plot(secondary_y=True)
複製代碼



我的天所以到底有幾種指標?!總共有
  1. talib.get_functions()
複製代碼


這些就是可以用的指標,總共有158種,慢慢看,學也學不完XDD。


改變參數
之前不是說KD指標有三個參數:(9、3、3),假如今天我想要客製化,怎麼修改呢?
我們現在只知道KD指標是 abstract.STOCH 這個function,要如何看如何設定呢?直接 print 這個函式看看:
function detail
  1. print(abstract.STOCH)
複製代碼



我們可以改變得參數是 Parameters 項目中的五個,可以看到假如什麼都不輸入的話,它的值預設是(5、3、0、3、0),這邊的0代表的就是平滑的演算法式哪一種,例如我們希望它的三個參數不要是(5、3、3),想改成台灣常用的(9、3、3),也就是我們想把 fast_period從原本的5改成9,只要在呼叫 talib.abstract.STOCH 的時候輸入 fastk_period=9 就可以了:
MACD 計算
  1. talib2df(abstract.STOCH(tsmc, fastk_period=9)).plot()
  2. tsmc['close'].plot(secondary_y=True)
複製代碼

今天教了大家這麼多的index,大家幾乎可以做自己的玩股網,Cmoney了,再配合上次教的用pandas選股,一個系統就快被搭建起來了!
接下來,你應該會想要建立自己的回測系統吧!不妨看一下這篇文章喔!




 

臉書網友討論
*滑块验证:
您需要登錄後才可以回帖 登錄 | 註冊 |

本版積分規則



Archiver|手機版|小黑屋|免責聲明|TShopping

GMT+8, 2024-4-26 07:56 , Processed in 0.066621 second(s), 25 queries .

本論壇言論純屬發表者個人意見,與 TShopping綜合論壇 立場無關 如有意見侵犯了您的權益 請寫信聯絡我們。

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表