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

笔者按:

最近笔者想通了,任何事情能够动手的还是不要哔哔,对于笔者而言,现在还是要多看案例,看别人怎么写代码写框架,相应的理论知识点还是足够了,但是实战部分还是严重欠缺,然后对于自己的Python语言进行查漏补缺。文章将对元宵大师的《Python股票量化交易到入门实战》进行有效梳理,同时进行代码调试【说实话,我遇到的案例中,有一些代码的确无法使用,或者还需要进行调整】。是以为文。

本书的重点是实现plt可视化以及点评回测。

对于可视化而言,最重要的是布局,如何布局才最为重要,用于要经常用到,还必须进行封装。笔者手打就是为了熟悉作者写作的思路,便于理解和修改。

系列文章:

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

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

第二章 量化交易Python的关键应用

一、理解面向对象

重点是如何理解面向对象的编程思维,如何将一个抽象的东西具象化,通过代码进行组织架设。这里呢,我也要自我反思,对于写函数和写类一个是不重视,另一个是实战上不太喜欢写,以后要对这个进行重视,尽可能采用面向对象中的类,函数来写,来进行封装。

我自己曾经写过的几个感觉还是可以的,一个是加载本地数据,一个是预处理,一个是策略,一个是回测,还有一个是画图,还有简单的评估。最开始考虑用backtrader,但是还是感觉有一些功能无法实现,就让我采取别的框架来进行修改和整合。

二、for…in 循环的使用技巧【备用的取数工具】

1.for ... in range(start,end,step):
2.for ... in zip(df01,df02):
3.for ... in enumerate(seq):
4.for ... in df.keys():#字典取数方法,返回key值
5.for ... in df.values():#字典取数方法,返回values值
6.for ... in df.items():#字典取数方法,返回key,values

三、生成器

还是用apply来取代比较好。

四、装饰器:

五、多线程:

六、异常:

取数和程序运行出错,保证程序的稳定性【以前没有考虑到要持续运行的问题,所以没有太多的考虑,但是抛出异常要尽可能减少,尽量设计的时候注意情况】

第三章 numpy

一、广播机制

二、随机数生成:【主要用于测试】

np.random.randint()#int
np.random.binomial()#二项式
np.random.normal()#正态
np.random.randn()#正态分布数据
np.random.rand()#0-1随机数

第四章 pandas

一、生成空的series以及空的dataframe

用于在迭代中捕捉行情

二、生成指定的列的dataframe

用于捕捉数据接口的行情,或者合并多个list,多个series

三、访问,切片

略,用于计算各类盈亏

四、数据预处理:

  • 缺失值【查找、填充、删除】
  • 精度
  • 合并

五、循环:主要用于构建回测以及画图,标记

1.for...in
2.iterrows()#这个没有遇到过,记录一下:
for index,row in df.iterrows():
		 df.loc[index,'pet_change']=(row['close']-row['open'])/row['open']
print(df['pet_change'])
3.dataframe.apply()

结论:尽可能使用series处理数据,更快一些。同时作者提到尽可能采取矢量化处理,但是一定要先进行数据处理,防止有0或者NAN值报错等情况。

六、存储,加载:

这个没什么好说的,就是尽可能防止乱码就行。

第五章 matplotlib库【重点,本书最重要的部分】

  • 1.实现可视化
  • 2.与GUI库进行拼接,实现界面化调整

案例一:函数式绘图:

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 # 用来正常显示负号


#1.绘制图的大小
plt.figure(figsize=(12,8))
#2.生成数据:start_values,stop_value,sample_value
start_val=0
stop_val=10
num_val=1000
x=np.linspace(start_val,stop_val,num_val)
y=np.sin(x)
'''
y=sin(x)
'--g':format_string方式,等同于linestyle,color,marker的结合,即破折线,绿色,像素点
lw:linewidth,用于设置线条宽度
label:设置线条的标签为sin(x)

'''
plt.plot(x,y,'--g',lw=2,label='sin(x)')
#3.设置坐标轴范围:
x_min=0
x_max=10
y_min=-1.5
y_max=1.5

plt.xlim(x_min,x_max)
plt.ylim(y_min,y_max)

#4.设置坐标签:
plt.xlabel('x轴',fontsize=15)
plt.ylabel('y轴',fontsize=15)

#5.设置坐标轴标签
x_location=np.arange(0,10,2)#start_value,stop_value,step
#这里借用4.5生成时间序列的方法来处理:
data_index=pd.date_range('20190101',freq='D',periods=5)
#推导式转为字符串,便于展示,引入datetime库进行处理
data_index=[p.strftime("%Y-%m-%d ") for p in data_index]
x_labels=data_index

y_location=np.arange(-1,1.5,1)
y_labels=[u'最小值',u'零值',u'最大值']
#rontation:标签值转45度倾斜
plt.xticks(x_location,x_labels,rotation=45,fontsize=15)
plt.yticks(y_location,y_labels,fontsize=15)
#6.设置网格线:
plt.grid(True,ls=':',color='r',alpha=0.5)
#7.设置标题:
plt.title(u'函数式绘制VS对象式绘制',fontsize=25)
#8.添加附图:
plt.legend(loc='upper right',fontsize=15)
#9.显示图形
plt.show()
  • 这里最主要的是熟悉如何对x,y轴进行处理
  • 如何布局

  • 图例展示:
Python股票量化交易到入门实战01

案例二:对象式绘图

1.绘制子图

2.将有plt的部分进行替代

3.设置方面增加set

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 # 用来正常显示负号


#1.绘制图的大小
fig=plt.figure(figsize=(12,8))
#1.1绘制子图
ax=fig.add_subplot(111)
#2.生成数据:start_values,stop_value,sample_value
start_val=0
stop_val=10
num_val=1000
x=np.linspace(start_val,stop_val,num_val)
y=np.sin(x)
'''
y=sin(x)
'--g':format_string方式,等同于linestyle,color,marker的结合,即破折线,绿色,像素点
lw:linewidth,用于设置线条宽度
label:设置线条的标签为sin(x)

'''
ax.plot(x,y,'--g',lw=2,label='sin(x)')
#3.设置坐标轴范围:
x_min=0
x_max=10
y_min=-1.5
y_max=1.5

ax.set_xlim(x_min,x_max)
ax.set_ylim(y_min,y_max)

#4.设置坐标签:
ax.set_xlabel('x轴',fontsize=15)
ax.set_ylabel('y轴',fontsize=15)

#5.设置坐标轴标签
x_location=np.arange(0,10,2)#start_value,stop_value,step
#这里借用4.5生成时间序列的方法来处理:
data_index=pd.date_range('20190101',freq='D',periods=5)
data_index=[p.strftime("%Y-%m-%d ") for p in data_index]
x_labels=data_index

y_location=np.arange(-1,1.5,1)
y_labels=[u'最小值',u'零值',u'最大值']
#rontation:标签值转45度倾斜
ax.set_xticks(x_location)
ax.set_yticks(y_location)
ax.set_xticklabels(x_labels,rotation=45,fontsize=15)
ax.set_yticklabels(y_labels,fontsize=15)
#6.设置网格线:
ax.grid(True,ls=':',color='r',alpha=0.5)
#7.设置标题:
ax.set_title(u'函数式绘制VS对象式绘制',fontsize=25)
#8.添加附图:
ax.legend(loc='upper right',fontsize=15)
#9.显示图形
plt.show()

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

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

相关推荐

发表回复

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