准备工作

  1. 安装python环境(这个不必多说,能看到这篇文章的基本大家都有安装)
  2. 安装相应第三方依赖库
    1. matplotlib python重要的绘图库。
    2. numpy 支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。
    3. Talib 称“Technical Analysis Library”, 即技术分析库,是Python金融量化的高级库,涵盖了150多种股票、期货交易软件中常用的技术分析指标,如MACD、RSI、KDJ、动量指标、布林带等等。
    4. pandas 基于numpy的一种工具,是为了解决数据分析任务而创建的,纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。pandas提供了大量能使我们快速便捷地处理数据的函数和方法。你很快就会发现,它是使Python成为强大而高效的数据分析环境的重要因素之一。
    5. mpl_finance python中可以用来画出蜡烛图、线图的分析工具,目前已经从matplotlib中独立出来,非常适合用来画K线
    6. psycopg2(选用) python中用以和postgres数据库交互的第三方库,作者个人的数据都存储在postgres数据库中,因此使用这个模块。
  3. 数据准备
  • 数据来源于Tushare,一个免费好用的财经数据包,自己每日更新处理并加载到阿里云的服务器上(这里会为大家准备好数据进行使用)


import talib \nimport numpy as np \nimport psycopg2 as pg \nimport pandas as pd \nimport matplotlib.pyplot as plt \nimport matplotlib.gridspec as gridspec#分割子图 \nimport mpl_finance as mpf \nnp.seterr(divide='ignore',invalid='ignore') # 忽略warning\nplt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签 \nplt.rcParams['axes.unicode_minus']=False #用来正常显示负号 \nfig = plt.figure(figsize=(20,12), dpi=100,facecolor="white") #创建fig对象

以上导入相关依赖包,并设置了一些参数变量


加载数据(文末提供数据)

# 加载数据\ndef query(sql):\n conn = pg.connect(dbname="stocks", user="postgres", password="******", host="******", port="5432")\n data = pd.read_sql(sql,conn)\n conn.close()\n return data\n\nts_code = '000001.SZ' #股票代码\nname = '平安银行'\ndf_stockload = query("select trade_date,open,high,low,close,vol from pro_bar \n where ts_code = '{}' and trade_date>='20190801'".format(ts_code))\ndf_stockload['trade_date'] = pd.to_datetime(df_stockload['trade_date'])\ndf_stockload=df_stockload.set_index('trade_date')


以上代码定义了一个query函数,使用pandas的readsql来加载数据库中数据,并将tarde_date设置为datetime格式,并设置为索引。

具体字段有

  • trade_date:交易日期
  • open:开盘价格
  • high:当日最高价
  • low:当日最低价
  • close:当日收盘价
  • vol:成交量



数据的结构形式


绘图

设置四个绘图区域 包括 K线(均线),成交量,MACD,KDJ

gs = gridspec.GridSpec(4, 1, left=0.08, bottom=0.15, right=0.99, top=0.96, wspace=None, hspace=0, height_ratios=[3.5,1,1,1])\ngraph_KAV = fig.add_subplot(gs[0,:])\ngraph_VOL = fig.add_subplot(gs[1,:])\ngraph_macd = fig.add_subplot(gs[2,:])\ngraph_KDJ = fig.add_subplot(gs[3,:])


  • 绘制K线图(以及均线)

#绘制K线图\nmpf.candlestick2_ochl(graph_KAV, df_stockload.open, df_stockload.close, df_stockload.high, df_stockload.low, width=0.5,\n colorup='r', colordown='g') # 绘制K线走势\n\n#绘制移动平均线图\ndf_stockload['Ma5'] = df_stockload.close.rolling(window=5).mean()#pd.rolling_mean(df_stockload.close,window=20)\ndf_stockload['Ma10'] = df_stockload.close.rolling(window=10).mean()#pd.rolling_mean(df_stockload.close,window=30)\ndf_stockload['Ma20'] = df_stockload.close.rolling(window=20).mean()#pd.rolling_mean(df_stockload.close,window=60)\ndf_stockload['Ma30'] = df_stockload.close.rolling(window=30).mean()#pd.rolling_mean(df_stockload.close,window=60)\ndf_stockload['Ma60'] = df_stockload.close.rolling(window=60).mean()#pd.rolling_mean(df_stockload.close,window=60)\n\ngraph_KAV.plot(np.arange(0, len(df_stockload.index)), df_stockload['Ma5'],'black', label='M5',lw=1.0)\ngraph_KAV.plot(np.arange(0, len(df_stockload.index)), df_stockload['Ma10'],'green',label='M10', lw=1.0)\ngraph_KAV.plot(np.arange(0, len(df_stockload.index)), df_stockload['Ma20'],'blue',label='M20', lw=1.0)\ngraph_KAV.plot(np.arange(0, len(df_stockload.index)), df_stockload['Ma30'],'pink', label='M30',lw=1.0)\ngraph_KAV.plot(np.arange(0, len(df_stockload.index)), df_stockload['Ma60'],'yellow',label='M60', lw=1.0)\n\n# 添加网格\ngraph_KAV.grid()\n\ngraph_KAV.legend(loc='best')\ngraph_KAV.set_title(ts_code + ' ' + name)\ngraph_KAV.set_ylabel(u"价格")\ngraph_KAV.set_xlim(0, len(df_stockload.index)) # 设置一下x轴的范围

  • 绘制成交量图

#绘制成交量图\ngraph_VOL.bar(np.arange(0, len(df_stockload.index)), df_stockload.vol,color=['g' if df_stockload.open[x] > df_stockload.close[x] else 'r' for x in range(0,len(df_stockload.index))])\ngraph_VOL.set_ylabel(u"成交量")\ngraph_VOL.set_xlim(0,len(df_stockload.index)) #设置一下x轴的范围\ngraph_VOL.set_xticks(range(0,len(df_stockload.index),15))#X轴刻度设定 每15天标一个日期

  • 绘制MACD

#绘制MACD\nmacd_dif, macd_dea, macd_bar = talib.MACD(df_stockload['close'].values, fastperiod=12, slowperiod=26, signalperiod=9)\ngraph_MACD.plot(np.arange(0, len(df_stockload.index)), macd_dif, 'red', label='macd dif') # dif\ngraph_MACD.plot(np.arange(0, len(df_stockload.index)), macd_dea, 'blue', label='macd dea') # dea\n\nbar_red = np.where(macd_bar > 0, 2 * macd_bar, 0)# 绘制BAR>0 柱状图\nbar_green = np.where(macd_bar < 0, 2 * macd_bar, 0)# 绘制BAR<0 柱状图\ngraph_MACD.bar(np.arange(0, len(df_stockload.index)), bar_red, facecolor='red')\ngraph_MACD.bar(np.arange(0, len(df_stockload.index)), bar_green, facecolor='green')\n\ngraph_MACD.legend(loc='best',shadow=True, fontsize ='10')\ngraph_MACD.set_ylabel(u"MACD")\ngraph_MACD.set_xlim(0,len(df_stockload.index)) #设置一下x轴的范围\ngraph_MACD.set_xticks(range(0,len(df_stockload.index),15))#X轴刻度设定 每15天标一个日期

这里要注意 talib中计算得到的macd并没有×2,需要在计算后的macd×2

  • 绘制KDJ

#绘制KDJ\ndf_stockload['K'], df_stockload['D'] = talib.STOCH(df_stockload.high.values, df_stockload.low.values, df_stockload.close.values,\\\n fastk_period=9, slowk_period=3, slowk_matype=0, slowd_period=3, slowd_matype=0)\n\ndf_stockload['J'] = 3 * df_stockload['K'] - 2 * df_stockload['D']\n\ngraph_KDJ.plot(np.arange(0, len(df_stockload.index)), df_stockload['K'], 'blue', label='K') # K\ngraph_KDJ.plot(np.arange(0, len(df_stockload.index)), df_stockload['D'], 'g--', label='D') # D\ngraph_KDJ.plot(np.arange(0, len(df_stockload.index)), df_stockload['J'], 'r-', label='J') # J\ngraph_KDJ.legend(loc='best', shadow=True, fontsize='10')\n\ngraph_KDJ.set_ylabel(u"KDJ")\ngraph_KDJ.set_xlabel("日期")\ngraph_KDJ.set_xlim(0, len(df_stockload.index)) # 设置一下x轴的范围\ngraph_KDJ.set_xticks(range(0, len(df_stockload.index), 15)) # X轴刻度设定 每15天标一个日期\ngraph_KDJ.set_xticklabels(\n [df_stockload.index.strftime('%Y-%m-%d')[index] for index in graph_KDJ.get_xticks()]) # 标签设置为日期

  • 修饰图片

# X-轴每个ticker标签都向右倾斜45度\nfor label in graph_KAV.xaxis.get_ticklabels():\n label.set_visible(False)\n\nfor label in graph_VOL.xaxis.get_ticklabels():\n label.set_visible(False)\n\nfor label in graph_MACD.xaxis.get_ticklabels():\n label.set_visible(False)\n\nfor label in graph_KDJ.xaxis.get_ticklabels():\n label.set_rotation(45)\n label.set_fontsize(10) # 设置标签字体

  • 保存图片

plt.savefig('Kline.jpg')


最终的成果图


海报

尚荣医疗同花顺圈子股吧6,尚荣医疗同花顺圈子股吧

德高红外股票股吧(高德红外股票股吧同花顺)

相关阅读

  • 中国上市公司协会发布A股上市公司现金分红榜——用真..
  • 基金定投赎回 怎么算?基金定投赎回时间怎么算
  • 私募基金怎么找市场(私募基金投资一级市场)
  • 缴纳印花税水利基金如何写分录 ?现在水利基金和印花税的计提和缴纳
  • 如何取消余额宝基金预约 ?
  • 男子炒股亏10万(男子炒股亏80万)
  • 医疗基金怎么买卖?
  • lof基金买卖手续费怎么算(场内lof基金买卖手续费多少)
  • 恒瑞医药集团东方财富股吧(旗滨集团股吧东方财富网)
  • 买基金确定份额怎么这么慢?
  • 热门文章

    随便看看

    • 中国的股指基金排名(中国基金排名100)

      中国的股指基金排名(中国基金排名100)

    • qfii pe基金(国内qfii基金有哪些)

      qfii pe基金(国内qfii基金有哪些)

    • a和c类基金如何收取服务费(对于不收取销售服务费的基金产品)

      a和c类基金如何收取服务费(对于不收取销售服务费的基金产品)

    • 2021年哪些基金会暴涨(2021年春节基金会跌吗)

      2021年哪些基金会暴涨(2021年春节基金会跌吗)

    • 2017年定投选哪个基金好(2017定投基金排名)

      2017年定投选哪个基金好(2017定投基金排名)

    • 6支科创板主题基金哪个比较好(科创板主题基金排名)

      6支科创板主题基金哪个比较好(科创板主题基金排名)