金融資料分析與挖掘具體實現方法 -2
阿新 • • 發佈:2018-12-13
貌似三個月沒有更新部落格園了,當時承諾的第二篇金融資料分析與挖掘這幾天剛好又做了總結,在國內經濟不景氣的現在來對這個話題結個尾。
1、(量化)投資的方法基礎分析
1.1 投資的兩種方法
-
技術分析
-
技術分析是指研究過去金融市場的資訊(主要是經由使用圖表)來預測價格的趨勢與決定投資的策略。技術分析師相信有所謂的價格趨勢,K線圖、移動平均線以及技術指標應用於股票或期貨投資當中
注:一些機構中經驗豐富的技術分析師(交易員),可能會獲得很好的收益。很多個人投資者也比較多技術分析,但缺乏豐富的經驗等
-
-
基本面分析
-
基本面分析又稱基本分析,是以證券的內在為依據,著重於對影響證券價格及其走勢的各項因素的分析,巨集觀資料、市場行為、企業財務資料、交易資料等進行分析,以此決定投資購買何種證券及何時購買。
主要是用利用數學、統計技術、機器學習技術獲得投資機會。
注:大型的基金、券商、投資機構大多數投資股票使用基本面分析方式。量化投資中基本面分析得益於一些市場模型理論的提出。
-
2、趨勢追蹤
趨勢追蹤,就是假設之前價格的上漲預示著之後一段時間內也會上漲,很多交易都是圍繞著趨勢追蹤模型。比如各種突破的訊號等。 趨勢追蹤屬於技術分析。
常用的技術指標:
-
MACD
-
RSI
-
BOLL
接下來我們挨個分析,首先要了解一下什麼是雙均線策略
雙均線策略是量化策略中經典的策略之一,其屬於趨勢跟蹤策略,實現思想如下:
-
預設兩條均線一條長均線、一條短均線。比如一個ma=5,一個ma=60, 5的均線被稱作快線,60的均線被稱作慢線
-
買入策略中當快線上穿慢線(ma5上穿ma60)稱為形成金叉買點訊號,買入股票
-
賣出策略中當快線下穿慢線(ma5下穿ma60)稱為形成死叉賣點訊號,賣出股票
分析
- 當快線穿過慢線的時候,代表最近價格已經上漲,之前的價格已經下跌一段時間
作用
- 比如macd,kdj等等依賴均線的技術指標,其核心思想都差不多,作為其他趨勢策略的基礎。
2.1 MACD分析
第一個問題,什麼是什麼是MACD指標,請看下圖:
指數平滑異同移動平均線(Moving Average Convergence /Divergence, MACD)是股票交易中一種常見的技術分析工具,由Gerald Appel於1970年代提出,用於研判股票價格變化的強度、方向、能量,以及趨勢週期,以便把握股票買進和賣出的時機。
2.1.1 MACD的原理以及計算公式
原理:MACD的意義和雙移動平均線基本相同,即由快、慢均線的離散、聚合表徵當前的多空狀態和股價可能的發展變化趨勢,但閱讀起來更方便。
計算公式:
-
1、MACD首先行計算出快速(一般選12日)移動平均值與慢速(一般選26日)移動平均值
-
2、12日EMA數值減去26日EMA數值得到,差離值DIF
-
3、根據離差值計算其9日的EMA,即離差平均值,是所求的MACD值。為了不與指標原名相混淆,又名DEA或DEM(訊號線)
-
4、DIF與DEA的差值,為MACD柱狀圖
交易訊號種類:
-
差離值(DIF值)與訊號線(DEA值,又稱MACD值)相交;
-
差離值與座標軸相交;
-
股價與差離值的背離。
交易訊號分析:
-
差離值和訊號線
-
差離值(DIF)形成“快線”(短期線),訊號線(DEM)形成“慢線”(長期線)。 當差離值(DIF)從下而上穿過訊號線(DEM),為買進訊號(金叉);相反若從上而下穿越,為賣出訊號。(死叉)
-
-
差離值(MACD柱狀圖)
-
1、當紅柱狀持續放大時,表明投資市場處於牛市行情中,價格走勢將繼續上漲,這時應持倉待漲或短線買入投資品種,直到紅柱無法再放大時才考慮賣出
-
2、當綠柱狀持續放大時,表明投資市場處於熊市行情之中,價格走勢將繼續下跌,這時應持幣觀望或賣出投資品種,直到綠柱開始縮小時才可以考慮少量買入投資品種。
-
3、當紅柱狀開始縮小時,表明投資市場牛市即將結束(或要進入調整期),價格走勢將大幅下跌,這時應賣出大部分投資品種而不能買入投資品種。
-
4、當綠柱狀開始收縮時,表明投資市場的大跌行情即將結束,價格走勢將止跌向上(或進入盤整),這時可以少量進行長期戰略建倉而不要輕易賣出投資品種。
-
5、當紅柱開始消失、綠柱開始放出時,這是投資市場轉市訊號之一,表明投資市場的上漲行情(或高位盤整行情)即將結束,價格走勢將開始加速下跌,這時應開始賣出大部分投資品種而不能買入投資品種。
-
6、當綠柱開始消失、紅柱開始放出時,這也是投資市場轉市訊號之一,表明投資市場的下跌行情(或低位盤整)已經結束,價格走勢將開始加速上升,這時應開始加碼買入投資品種或持倉待漲。
-
2.1.2 TA-Lib庫進行指標運算
2.1.3 接下來我們自己動手一步步計算MACD指標、然後畫出圖形
效果圖:
第一步:匯入包
import pandas as pd import talib import matplotlib.pyplot as plt import numpy as np from mpl_finance import candlestick_ochl
第二步:獲取股票日線資料
實現思路和步驟是:
-
從檔案讀取股票資料
-
按照日期索引排序
-
增加一列index索引資料, 後續不需要日期索引
-
抽取index, open, close, high, low五列資料, 後續用來計算MACD值, 其他的值不需要
# 讀取日線的資料 stock_day = pd.read_csv("./data/stock_day/stock_day.csv") stock_day = stock_day.sort_index()[:200] stock_day['index'] = [i for i in range(stock_day.shape[0])] arr = stock_day[['index', 'open', 'close', 'high', 'low']].values
第三步:分析
-
計算MACD值的TA-Lib函式
-
傳入的引數序列必須是Numpy序列
-
返回的值
- macd:差離值
- macdsignal:訊號線
- macdhist:MACD柱狀圖值
方法: 使用股票的收盤價格(close)去計算MACD指標資料 快速移動週期為12,慢速移動週期為26,DIF的移動平均線的週期為9日
# dif: 12, 與26日的差別 # dea:dif的9日以移動平均線 dif, dea, macd_hist = talib.MACD(stock_day['close'].values, fastperiod=12, slowperiod=26, signalperiod=9)
-
通過畫圖展示MACD值
-
步驟:
-
構造畫布,裡面包含了一個axes
-
產生一個x的單維陣列
-
畫出DIF差離值線
-
畫出MACD柱狀圖
-
顯示一下K線圖對比MACD指標圖
-
# 構造畫布,裡面包含了一個axes fig, axes = plt.subplots(nrows=1, ncols=1, figsize=(20, 8), dpi=100) # 產生一個x的單維陣列 index = [i for i in range(200)] # 畫出dif這根差離值線 plt.plot(index, dif, color='y', label="差離值 DIF") plt.plot(index, dea, color='b', label="訊號線 DEA") # 畫出MACD柱狀圖 # 分開正負的柱狀圖去畫出來 # 畫第一個bar, macd_hist,如果大於0, 保留當前值,如果小於0,變為0,得出一個red_hist # 畫出第二個bar,macd_hisr,如果小於0, 保留當前值,如果大於0,直接變為0 red_hist = np.where(macd_hist > 0 , macd_hist, 0) green_hist = np.where(macd_hist < 0 , macd_hist, 0) plt.bar(index, red_hist, label="紅色MACD值", color='r') plt.bar(index, green_hist, label="綠色MACD值", color='g') # 顯示一下K線圖對比MACD指標圖 candlestick_ochl(axes, arr, width=0.2, colorup='r', colordown='g') plt.legend(loc="best") plt.show()
瞭解一下背離分析,如果解釋得不全面可以自行百度:當股價創新低,但MACD並沒有相應創新低(牛市背離或頂背離),視為利多訊息,股價跌勢或將完結。相反,若股價創新高,但MACD並沒有相應創新高(熊市背離或底背離),視為利空訊息。
我們對MACD做個總結
MACD是一種中長線的研判指標。當股市強烈震盪或股價變化巨大(如送配股拆細等)時,可能會給出錯誤的訊號。所以在決定股票操作時,應該謹慎參考其他指標,以及市場狀況,不能完全信任差離值的單一研判,避免造成損失。
2.2 RSI分析
什麼是RSI?
2.2.1 RSI相對強弱指數
相對強弱指數(RSI)是通過比較一段時期內的平均收盤漲數和平均收盤跌數來分析市場買沽盤的意向和實力,從而作出未來市場的走勢。
注:RSI在1978年6月由WellsWider創制的一種通過特定時期內股價的變動情況計算市場買賣力量對比,來判斷股票價格內部本質強弱、推測價格未來的變動方向的技術指標。
2.2.2 RSI原理和計算方法
-
1、相對強弱指標的區間段
- RSI6一般是6日相對強弱指標
- RSI12 一般是12日相對強弱指標
- RSI24一般是24日相對強弱指標
-
2、強弱指標的計算公式如下
- RSI=100×RS/(1+RS) 或者 RSI=100-100÷(1+RS)
- RS=X天的平均上漲點數/X天的平均下跌點數
-
3、RS計算方式
- RS=14天內收市價上漲數之和的平均值/14天內收市價下跌數之和的平均值
為了更好的理解上面的公式,通過下面的計算案例:
2.2.3 RSI交易訊號判斷
RSI值的意義
-
(1)受計算公式的限制,不論價位如何變動,強弱指標的值均在0與100之間。
-
(2)強弱指標保持高於50表示為強勢市場,反之低於50表示為弱勢市場。
-
(3)強弱指標多在70與30之間波動。當六日指標上升到達80時,表示股市已有超買現象,如果一旦繼續上升,超過90以上時,則表示已到嚴重超買的警戒區,股價已形成頭部,極可能在短期內反轉回轉。
-
比如:在牛市時,通常藍籌股的強弱指數若是80,便屬超買,若是30便屬超賣,至於二三線股,強弱指數若是85至90,便屬超買,若是20至25,便屬超賣。因此我們對一隻股票採取買/賣行動前,一定要先找出該只股票的超買/超賣水平。至於衡量一隻股票的超買/超賣水平,我們可以參考該股票過去12個月之強弱指標記錄。
長短線結合來判斷交易
-
1.白色的短期RSI值在20以下,由下向上交叉黃色的長期RSI值時為買入訊號。
-
2.白色的短期RSI值在80以上,由上向下交叉黃色的長期RSI值時為賣出訊號。
2.2.4 RSI指標計算以及交易判斷實現
-
RSI指標計算
-
傳入的引數序列必須是Numpy序列
-
real:返回固定區間內的柱狀圖值
# 通過taLib計算出RSI的指標值 # 斷線RSI short_rsi = talib.RSI(stock_day['close'].values, timeperiod=6) # 長線RSI long_rsi = talib.RSI(stock_day['close'].values, timeperiod=12)
交易判斷實現
-
賣出訊號:在交叉點之前,短線< 長線,交叉點之後:斷線 >長線
-
交易訊號,賣出的判斷:在交叉點之前,短線 > 長線,交叉點之後:短線 <長線
# 進行交易的一個判斷 for i in range(1, 200): # 取出短線RSI s = short_rsi[i] # 取出長線的RSI值 l = long_rsi[i] # 交易訊號訊號輸入 # 賣出訊號:在交叉點之前,短線< 長線,交叉點之後:斷線 >長線 if s < 45 and short_rsi[i-1] < long_rsi[i-1] and short_rsi[i] > long_rsi[i]: # 進行買入 print("買入某某股票多少股") # 交易訊號,賣出的判斷:在交叉點之前,短線 > 長線,交叉點之後:短線 <長線 if s > 65 and short_rsi[i-1] > long_rsi[i-1] and short_rsi[i] < long_rsi[i]: print("賣出的某某股票多少股")
我們對RSI做個總結
尤其在市場劇烈震盪時,還應參考其它指標進行綜合分析,不能簡單地依賴RSI的訊號來作出買賣決定,可以和MACD結合一起使用。
2.3 布林線分析
2.3.1 BOLL指標
布林線(BOLL)利用統計原理,求出的標準差及其信賴區間,從而確定股價的波動範圍及未來走勢,利用波帶顯示股價的安全高低價位,因而也被稱為布林帶。其上下限範圍不固定,隨股價的滾動而變化。股價波動在上限和下限的區間之內,這條帶狀區的寬窄,隨著股價波動幅度的大小而變化,股價漲跌幅度加大時,帶狀區變寬,漲跌幅度狹小盤整時,帶狀區則變窄。
注:BOLL指標是美國股市分析家約翰·布林根據統計學中的標準差原理設計出來的一種非常簡單實用的技術分析指標
2.3.2 BOLL指標的計算方法
BOLL指標的計算公式
-
中軌線(MA)=N日的移動平均線
-
上軌線(UP)=中軌線+兩倍的標準差
-
下軌線(DN)=中軌線-兩倍的標準差
強弱指標的計算公式如下
-
計算N日內的收盤價的移動平均值MA
-
計算標準差MD
-
計算MB、UP、DN線
-
MB=(N-1)日的MA
-
UP=MB+2×MD
-
DN=MB-2×MD
-
2.3.3 BOLL交易訊號判斷
BOLL布林線的意義
-
股價在中軌上方執行時屬較安全狀態,短線可持有觀望。
-
股價在中軌下方執行時屬較危險狀態,短線應趁反彈中軌時離場。
-
股價突破上軌線後,回探中軌線時不跌破中軌線,顯示後市看漲,可持股或加倉。
-
股價跌破下軌線後,反彈中軌線時不站回中軌線以上,則後市看跌,要賣出。
-
通道突然呈急劇變窄收攏形狀時,顯示股價方向將會發生重大轉折,這時結合其他指數技術進行行情判斷。
2.3.4 BOLL布林線計算以及交易判斷實現
-
布林線指標計算
-
close : 5日close的array,傳入的引數序列必須是Numpy序列
-
timeperiod :預設5天的平均線
-
nbdevip/nbdevdn : 預設2倍的標準差
upperband, middleband, lowerband = talib.BBANDS(df["close"].values[:200],timeperiod=20,nbdevdn=2,nbdevup=2) candlestick_ochl(axes[2],quotes=arr,width=0.2, colorup='r', colordown='g'); axes[2].plot(range(200),upperband) axes[2].plot(range(200),middleband) axes[2].plot(range(200),lowerband)