貌似三个月没有更新博客园了,当时承诺的第二篇金融数据分析与挖掘这几天恰好又作了总结,在国内经济不景气的如今来对这个话题结个尾。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)