Python股票量化交易到入门实战03

笔者按:

通过对于plt的表现我们可以了解到plt能够实现我们很多东西,比如数据可视化,比如对于关键点位置进行说明,比如对于区间进行显示,比如对于柱状图的书写,都可以让我们更加形象具体精准的发现数据信息以及表达的意思。

其实对于plt库中或者其他库中我们一定要懂得几个道理:

  • 通读一遍或者几遍
  • 操作一遍或者几遍
  • 掌握专有名词和记录好笔记
  • 剩下的交给百度即可

理论其实不难,难的是如何去进行布局,通过合理的布局和标记使得自己的意思能够清晰的表达出来,从这点来讲,我们可以从自己的实际简单业务来培养,或者通过他人的案例来参考和学习,调整自身的思路都是不错的。

看书只是给我们一个更加专业系统的搜索提供帮助,也是为我们在搭建新的业务需要的时候提供一种思路,通过基础去启迪我们的思维,不要怕错,不要怕难,毕竟能够遇到的问题基本上百度上面都有。

要勇于开拓思维,举一反三。

是以为文。

系列文章:

Python股票量化交易到入门实战01

Python股票量化交易到入门实战02

import pandas as pd
import numpy as np
import time
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']# 用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False # 用来正常显示负号

fig=plt.figure(figsize=(12,8))
ax=fig.add_subplot(111)

ax.hist(np.random.normal(loc=0,scale=1,size=1000),bins=50,density=False,color='r')
#这里要注意一点的是,ax.hist只接受一条数据,不能接受多条数据。
ax.set_xlabel('样本值',fontsize=15)
ax.set_ylabel('频数',fontsize=15)

ax.set_title('正态分布直方图',fontsize=25)

plt.show()
Python股票量化交易到入门实战03

5.2.7K线图的绘制:

以上两个案例我们可以搭建成交量的展示,还有就是涨跌幅的展示,现在我们将通过candlestics2_ochl()函数进行K线绘制。

import pandas as pd
import numpy as np
import time
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']# 用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False # 用来正常显示负号
fig=plt.figure(figsize=(8,6))
ax=fig.add_subplot(111)
#导入数据,数据预处理
df=pd.read_csv('sh600000.csv')
df['date']=pd.to_datetime(df['date'])
df=df.sort_values(by='date')
#截取数据,数据太长无法显示
df=df[-20:]
df=df.reset_index(drop=True)



#引入新函数
import  mpl_finance as mpf
#书本用的list格式,笔者尝试用了一下series,这样子可以减少格式的转换。
mpf.candlestick2_ohlc(ax,df['open'],df['high'],df['low'],df['close'],width=0.5,
                     colorup='r',colordown='g')
#推导式,格式化时间
data_index=[p.strftime("%Y-%m-%d ") for p in df['date']]
#长度
ax.set_xlim(0,10)
#间隔
ax.set_xticks(np.arange(0,10))
#接收list格式,一个参数。
ax.set_xticklabels(data_index,rotation=45)
ax.set_xlabel('日期',fontsize=5)
ax.set_ylabel('价格',fontsize=15)
ax.set_title('日k线图',fontsize=15)

plt.show()

Python股票量化交易到入门实战03

浦发银行的走势

  • 考虑两点:一个是如何设置周期,从而自由调整数据周期,一个是如何对数据进行缩放。

5.3图形对象属性参数的调节

5.4多子图对象的创建和布局:

这里我们来将个股的数据进行可视化,任务为展示浦发银行的K线图走势,均线走势以及成交量。

import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
import mplfinance as mpf
plt.rcParams['font.family'] = 'sans-serif'
plt.rcParams['font.sans-serif'] = 'SimHei'


#导入数据
df=pd.read_csv('sh600000.csv')
df['date']=pd.to_datetime(df['date'],format='%Y-%m-%d')
df=df.sort_values(by='date')
# df.index=df.pop('date')
df=df.set_index('date')
df=df['2017':'2019']#设计成这个样子,就可以进行封装,调参,测试了。

df=df[[ 'open', 'high', 'low', 'close','volume']]
#因为,mpf会自动识别这五个参数,所以为了防止报错,就取这几个数,防止报错。

#设置参数
my_color = mpf.make_marketcolors(up='red',#上涨时为红色
                                 down='green',#下跌时为绿色
                                 edge='i',#隐藏k线边缘
                                 volume='in',#成交量用同样的颜色
                                 inherit=True)
#设置网格
my_style = mpf.make_mpf_style(gridaxis='both',#设置网格
                           gridstyle='-.',
                           y_on_right=True,
                            marketcolors=my_color)

#生成3条均线
df["sma5"] = df["close"].rolling(5).mean()
df["sma10"] = df["close"].rolling(10).mean()
df["sma30"] = df["close"].rolling(30).mean()
#精确小数点,提高计算精度
df=df.round(2)
#初始化信号
df['sign']=0

#生成信号
for i in range(1,len(df)):
    if df.sma5.iloc[i]>df.sma10.iloc[i] and df.sma5.iloc[i-1]<df.sma10.iloc[i-1]:
        df.sign.iloc[i]=1
    if df.sma5.iloc[i]<df.sma10.iloc[i] and df.sma5.iloc[i - 1]>df.sma10.iloc[i - 1]:
        df.sign.iloc[i] =-1
#生成买点位置
df['buysign']=df[df['sign']>0]['sign']
#生成卖点位置
df['sellsign']=df[df['sign']<0]['sign']
#将均线,买点,卖点信号设置好,然后准备传参
add_plot=[mpf.make_addplot(df[['sma5','sma10']]),
          mpf.make_addplot(df['buysign'],scatter=True,markersize=80,marker='^',color='r'),
          mpf.make_addplot(df['sellsign'],scatter=True,markersize=80,marker='v',color='g')]
#接受设置好的参数
mpf.plot(df,type='candle',
         addplot=add_plot,
         style=my_style,
         volume=True,#展示成交量副图
         figratio=(2,1),#设置图片大小
         figscale=5)

效果图:

Python股票量化交易到入门实战03

Python股票量化交易到入门实战03

感悟:

  • 靠别人都是藏着掖着,不给全码,调试起来太吃亏了,只能根据不同的人文章进行参考学习。
  • 学习要趁早,不能拖拖拉拉,原来调用数据,可以通过df.ix进行处理,现在居然没有了,df.at原来不行,后来又可以,现在也不行了,只能通过df.col.iloc[index]进行调用,光就这个问题,我就浪费了太多的时间了。这库更新的也太快了。真的是活到老,学到老。
  • 图例的信号还要进行优化,就先这样子吧。
  • 关于df[‘buysign’]=df[df[‘sign’]>0][‘sign’]是一个非常好的思路,尽可能地减少迭代,减少计算压力。
  • 关于采取for循环的考虑是想运用到模拟盘,但是这种处理仍然会造成未来透视的情况存在,更好的方案应该是单位的bar传入进行运算是最符合实际交易模型的,因此,回测的设计和模拟盘实盘上存在很大的差距,从实际操作和心理活动来讲,回测的引发的情况要更低一些。
  • 相关的参数还需要进一步掌握。
  • 本章将对可视化告一段落,即将对于数据库保存数据进行处理,通过学习,我们将对于数据的下载进行说明,同时对于数据的清洗,保存,维护进行处理,笔者用的是Navicat for MySQL。
  • 尽量采取传参的模式,同时在设计上进行健壮性的调整。以df.ix为例,函数突然失灵,很容易导致整个回测框架失灵,因此应该根据业务要求尽量进行分开才是,便于维护和查阅。
  • 至于整体的测试框架还是以B站的量化视频为准,有利用爬虫等模式进行取数,便于后面的模拟盘交易。

发布者:股市刺客,转载请注明出处:https://www.95sca.cn/archives/496100
站内所有文章皆来自网络转载或读者投稿,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。敬请谅解!

(0)
股市刺客的头像股市刺客
上一篇 1小时前
下一篇 1小时前

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注