• Admin

量化投资常用技能——绘图篇 1:绘制股票收盘价格曲线和ochl烛状图



量化投资

随着互联网、计算机、机器学习的高速发展,越来越多的产业、技术都开始了智能化转型,投资理财也不例外。 量化投资在海外的发展已经有了30多年的历史,其中的传奇人物数学家詹姆斯·西蒙斯管理的大奖章基金从1989到2007年间的平均年收益率高达35%,即便是在次贷危机爆发的2007年,该基金的回报率仍高达85%。 好的量化投资模型对我们的投资决策有着很大的辅助作用

全文先讲述各个小模块的使用,文末附有有封装好的函数和完整代码



欢迎大家关注我们的抖音号”金融观察“(JRGC8888),上面会分析一些关注度很高的金融事件、分享一些有意思的投资者故事。



绘图技能

Python绘图库:matplotlib

在量化投资方面,我们主要会使用matplotlib库的基本绘图即可

  • 函数:matplotlib.pyplot.plot([x], y, color, marker, linestyle, …)

在量化投资研究初期其他掌握:color、marker(点型参数)、linestyle(线型参数) 即可。有需要时,其他参数可以自己查看文档来获取

import matplotlib.pyplot as plt

stork_closs = [116.5, 115.2, 118.9, 125.2, 117.4, 126.6, 130.1, 135.3, 142.6, 150.9, 158.2, 149.2, 136.9]

plt.plot(stork_closs, color='r', marker='o', linestyle='--')

plt.show()

绘制烛状图库:mpl_finance

该部分原来是matplotlib中的一个模块,现在独立出来后需要自己使用下面pip语句重新安装 pip install mpl_finance

  • 函数:mpl_finance.candlestick_ochl(ax, opens, closes, highs, lows, width=4, colorup=‘k’, colordown=‘r’, alpha=0.75)

  • ax参数可以是 fig, ax = plt.subplots(figsize) 返回的ax

  • opens、closes、highs、lows分别对应着股票每日的开盘价、收盘价、最高价、最低价

  • width对应烛状的宽度

  • colorup对应当日收盘价格大于开盘价格的柱状颜色(价格上涨)

  • colordown对应当日收盘价格小于开盘价格的柱状颜色(价格下跌)

  • alpha对应条形透明度

为了方便导入足够的数据,导入数据的时候需要用到abupy这个库,该库有在GitHub上面开源,可以了解一下。

import abupy

from abupy import ABuSymbolPd

import mpl_finance as mpf

import matplotlib.pyplot as plt

from matplotlib.dates import date2num

__colorup__ = 'red'

__colordown__ = 'green'

abupy.env.enable_example_env_ipython() # 使用沙盒数据,目的是和书中一样的数据环境,不使用会报错

tsla_df = ABuSymbolPd.make_kl_df('usTSLA', n_folds=2) # 固定导入美股tsla的行情数据,n_folds=2表示两年数据

tsla_df = tsla_df[:50] # 选取前50个,数据过多不易观察

fig, ax = plt.subplots(figsize=(14, 7))

qutotes = []

for index, (d, o, c, h, l) in enumerate(

zip(tsla_df.index, tsla_df.open, tsla_df.close,

tsla_df.high, tsla_df.low)):

d = date2num(d) # 蜡烛图的日期要使用matplotlib.finance.date2num进行转换为特有的数字值

val = (d, o, c, h, l) # 日期,开盘,收盘,最高,最低组成tuple对象val

qutotes.append(val) # 加val加入qutotes

# 使用mpf.candlestick_ochl进行蜡烛绘制,ochl代表:open,close,high,low

mpf.candlestick_ochl(ax, qutotes, width=0.6, colorup=__colorup__, colordown=__colordown__)

ax.autoscale_view()

ax.xaxis_date()

plt.show()

最后输出的图像如下:

该图像已经是一幅很标准的烛状图了,但是在使用股票市场的软件时,我们都知道在烛状图上还有几条移动平均线,下一节将给大家介绍如何去画移动平均线,分别采用自己定义的函数计算移动平均线数值并绘图、采用现成的开源函数绘图。

之后的博客讲解深度会逐渐提升,将包括一下几个方面:

绘图

指标公式与计算函数

止盈止损策略及函数实现

多策略组合选股

机器学习在量化投资方面的应用



最后附上封装好的函数和全部代码

import abupy

import matplotlib.pyplot as plt

import mpl_finance as mpf

from matplotlib.dates import date2num

from abupy import ABuSymbolPd

abupy.env.enable_example_env_ipython() # 使用沙盒数据,目的是和书中一样的数据环境,不使用会报错

# ———————————————————— #

# ———— 默认参数设置 ———— #

# ———————————————————— #

__colorup__ = "red"

__colordown__ = "green"

tsla_df = ABuSymbolPd.make_kl_df('usTSLA', n_folds=2) # 固定导入tsla的行情数据

tsla_df = tsla_df[:50] # 选取前50条行情数据

# ———————————————————— #

def plot_by_close(data_df=tsla_df, axs=None, show=False):

'''

绘制收盘价格图

:param data_df: 输入的数据,默认采用tsla的历史行情数据,输入的数据类型目前只支持DataFrame类型

:param axs: 是否在子图上绘制

:param show: 是否显示图像

:return:

'''

drawer = plt if axs is None else axs

drawer.plot(data_df.close, color='r')

if show:

plt.show()

def plot_ochl(data_df=tsla_df, axs=None, show=False):

'''

绘制烛状图

:param data_df: 输入的数据,默认采用tsla的历史行情数据,输入的数据类型目前只支持DataFrame类型

:param axs: 是否在子图上绘制

:param show: 是否显示图像

:return:

'''

drawer = plt if axs is None else axs

fig, ax = drawer.subplots(figsize=(14, 7))

qutotes = []

for index, (d, o, c, h, l) in enumerate(

zip(data_df.index, data_df.open, data_df.close,

data_df.high, data_df.low)):

d = date2num(d) # 蜡烛图的日期要使用matplotlib.finance.date2num进行转换为特有的数字值

val = (d, o, c, h, l) # 日期,开盘,收盘,最高,最低组成tuple对象val

qutotes.append(val) # 加val加入qutotes

# 使用mpf.candlestick_ochl进行蜡烛绘制,ochl代表:open,close,high,low

mpf.candlestick_ochl(ax, qutotes, width=0.6, colorup=__colorup__, colordown=__colordown__)

ax.autoscale_view()

ax.xaxis_date()

if show:

plt.show()

if __name__ == '__main__':

plot_ochl() # 绘制烛状图,会新建画布

plot_by_close(show=True) # 绘制收盘价格曲线图

# 通过修改参数show的输入,来控制多图绘制还是单图绘制,下一节单图绘制烛状图和均线时很有用

最后输出的图像如下:


欢迎大家关注我们

我们的抖音号:金融观察(JRGC8888)


26 views0 comments

A leading day trading platform, specializing in U.S. equity markets with operations worldwide.

CONTACT US:

 

Mon - Fri 9:00 - 17:30 HK

‭+852 55745397

marketing@shewutrade.com

RM06,13A/F, South Tower, World Finance Centre, 17 Canton Road, Tsim Sha Tsui, HK.

Options involve risk and are not suitable for all investors. All investment strategies and investments involve risk of loss. Nothing contained in this website should be construed as investment advice. Any reference to an investment's past or potential performance is not, and should not be construed as, a recommendation or as a guarantee of any specific outcome or profit. Margin borrowing is only for experienced investors with high risk tolerance. You may lose more than your initial investment. Lower investment costs will increase your overall return on investment, but lower costs do not guarantee that your investment will be profitable. Any trading symbols displayed are for illustrative purposes only and are not intended to portray recommendations. Past performance is not necessarily indicative of future results.

  • Facebook
  • LinkedIn
  • Twitter
  • Instagram
  • TikTok
  • YouTube