貌似三個月沒有更新博客園了,當時承諾的第二篇金融數據分析與挖掘這幾天恰好又作了總結,在國內經濟不景氣的如今來對這個話題結個尾。python
技術分析是指研究過去金融市場的資訊(主要是經由使用圖表)來預測價格的趨勢與決定投資的策略。技術分析師相信有所謂的價格趨勢,K線圖、移動平均線以及技術指標應用於股票或期貨投資當中數組
注:一些機構中經驗豐富的技術分析師(交易員),可能會得到很好的收益。不少我的投資者也比較多技術分析,但缺少豐富的經驗等安全
基本面分析又稱基本分析,是以證券的內在爲依據,着重於對影響證券價格及其走勢的各項因素的分析,宏觀數據、市場行爲、企業財務數據、交易數據等進行分析,以此決定投資購買何種證券及什麼時候購買。主要是用利用數學、統計技術、機器學習技術得到投資機會。
機器學習
注:大型的基金、券商、投資機構大多數投資股票使用基本面分析方式。量化投資中基本面分析得益於一些市場模型理論的提出。ide
第一個問題,什麼是什麼是MACD指標,請看下圖:函數
指數平滑異同移動平均線(Moving Average Convergence /Divergence, MACD)是股票交易中一種常見的技術分析工具,由Gerald Appel於1970年代提出,用於研判股票價格變化的強度、方向、能量,以及趨勢週期,以便把握股票買進和賣出的時機。工具
差離值(DIF)造成「快線」(短時間線),訊號線(DEM)造成「慢線」(長期線)。 當差離值(DIF)從下而上穿過訊號線(DEM),爲買進訊號(金叉);相反若從上而下穿越,爲賣出訊號。(死叉)
import pandas as pd import talib import matplotlib.pyplot as plt import numpy as np from mpl_finance import candlestick_ochl
# 讀取日線的數據 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
# dif: 12, 與26日的差異 # dea:dif的9日以移動平均線 dif, dea, macd_hist = talib.MACD(stock_day['close'].values, fastperiod=12, slowperiod=26, signalperiod=9)
# 構造畫布,裏面包含了一個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()
# 經過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("賣出的某某股票多少股")
注:BOLL指標是美國股市分析家約翰·布林根據統計學中的標準差原理設計出來的一種很是簡單實用的技術分析指標
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)