1.4 量化技术篇—完成一个简单k线图和择时策略

------从零开始学量化------
:量化目录传送门
知乎:量化目录传送门


0. 前言

为什么去画k线图???同花顺上不是已经有了吗???

我的痛点:
场景一:在后期的代码中,我们会使用svm、神经网络中需要对数据进行打标签,主要标记合适的买点和卖点,当你标记好的时候,没有一个直观的图形来观察标记的结果。
场景二:当你完成了一个量化策略,根据策略预测出的买点和卖点是否完全符合预期,有没有错误,同样也没有一个直观的图形来观察。

综上,所以我选择自己做一个k线图,主要用于以上两个场景。

1. 使用的开源框架

  • tushare
  • talib
  • pyecharts

tushare,前面已经介绍过,是获取金融数据的框架。

talib,前面也介绍过,用于计算技术指标。

pyecharts,前面并没有介绍过,该框架用于绘制k线图。
为什么不用matplotlib或者是seaborn画k线图呢?主要是因为seaborn绘制出来的是一个图片,不能像同花顺软件一样,对k线进行缩放、移动,不便于进行交互。所以此处使用pyecharts,但目前pyecharts社区还不太活跃,并且灵活性远不如echarts,后面尽量不再使用pyecharts。

## 安装pyecharts
pip install pyecharts

2. 代码效果

1.4 量化技术篇—完成一个简单k线图和择时策略_第1张图片
image

3. 代码简介

  • tushare抓取了2015-2018年的贵州茅台(600519)的日线数据。
  • 使用talib计算cci指标(Commodity Channel Index,顺势指标)
  • 当cci>=50则选择买入股票,当cci<50则卖出股票
  • 绘制出k线图和持仓情况

4. 参考代码

import talib
import tushare
from pyecharts import Line, Kline, Bar, Overlap, Grid

# get 300ETF from tushare
data = tushare.get_k_data('600519', ktype='D', autype='None', start='2015-01-01', end='2018-07-01')
# 计算并画出cci
cci = talib.CCI(data['high'].values, data['low'].values, data['close'].values, timeperiod=14)
# 简单的一个择时策略,当cci>50则持仓,当cci<50则空仓
position = [50 if idx >= 50 else 0 for idx in cci]

# 定义k线图的提示框的显示函数
def show_kline_data(params, pos):
param = params[0]
if param.data[4]:
return "date = " + param.name + "
" + "open = " + param.data[1] + "
" + "close = " + param.data[ 2] + "
" + "high = " + param.data[3] + "
" + "low = " + param.data[ 4] + "
" else: return "date = " + param.name + "
" + "cci = " + param.value + "
" # 绘制cci cci_line = Line() cci_line.add("cci", x_axis=data['date'], y_axis=cci, is_datazoom_show=True, datazoom_xaxis_index=[0, 1], tooltip_tragger='axis', is_toolbox_show=True, yaxis_force_interval=100, legend_top="70%", legend_orient='vertical', legend_pos='right', yaxis_pos='left', is_xaxislabel_align=True, tooltip_formatter=show_kline_data, ) # 绘制持仓 bar = Bar() bar.add('持仓', data['date'], position, is_datazoom_show=True) # 将持仓和cci重叠在一个图中 cci_overlap = Overlap() cci_overlap.add(cci_line) cci_overlap.add(bar) cci_overlap.render() # 画出K线图 price = [[open, close, lowest, highest] for open, close, lowest, highest in zip(data['open'], data['close'], data['low'], data['high'])] kline = Kline("贵州茅台", title_pos='center') kline.add('日线', x_axis=data['date'], y_axis=price, is_datazoom_show=True, is_xaxislabel_align=True, tooltip_tragger='axis', yaxis_pos='left', legend_top="20%", legend_orient='vertical', legend_pos='right', is_toolbox_show=True, tooltip_formatter=show_kline_data) # 将cci折线图和K线图合并到一张图表中 grid = Grid() grid.add(cci_overlap, grid_top="70%") grid.add(kline, grid_bottom="40%") grid.render()

如果你对我的文章有兴趣,可以关注一下我的和知乎,后期会在和知乎上定期更新,传送门在下方:
:潇潇夜雨归何处
知乎:潇潇夜雨
我相信,有趣的灵魂总会相遇!!!
你的关注,是我前进的动力!!!

你可能感兴趣的:(1.4 量化技术篇—完成一个简单k线图和择时策略)