2022.12.3更新:由于一些因素不得不将文章中的大部分代码进行删除,但行文思路还是完整的,大家可以根据自己的想法思考形成独特的交易策略填充到省略号部分,如需以前的代码可私信了解
前言:行文思路
由于本文篇幅较长,而且文中关于python数据分析的知识点、python金融量化的知识点较多,因此在文章的开头先给出本文整体思路,以便读者能够拥有较为清晰的脉络通读全文。
第一部分:模块导入,主要是将后面需要用到的模块进行导入(简单,非重点)
第二部分:数据获取,鉴于在网络上股票数据不易找到,Wind金融终端等数据库数据收费,通过多方查找,终于让我找到了能够免费下载股票数据的模块,建议大家收藏(简单,非重点)
第三部分:将股票数据转化为新的数据类型,通过上面的方法下载下来的数据类型是我们常见的DataFrame,虽然pandas的功能已经很强大了,但是为了加入新的数据指标以及方便下一步操作,最好还是将DataFrame数据转化为一种新的数据类型(较难,非重点)
第四部分:策略编写,也就是利用代码将我们在股票市场中的交易原则表达出来(较难,重点)
第五部分:回测系统编写,股票回测即是基于历史已经发生过的真实行情数据,在历史上某一段时间内,模拟真实金融市场中股票的买入、卖出,得出这个时间段内的盈利率等数据(较难,重点)
第六部分:实例化策略并回测得到收益,继承一个策略类,得到一个实际的例子,利用股票数据回测得出结果(简单,重点)
1、模块导入
import akshare as ak
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
......
akshare:用于下载股票的交易数据(前复权)
collections:对基本数据类型做进一步处理,实现特定的数据类型
abc:主要定义了基本类和最基本的抽象方法,可以为子类定义共有的接口API,不需要具体实现
2、数据获取
# 获取某一只股票一段时间的数据
stock_sz300750_df = ak.stock_zh_a_daily(symbol="sz300750", start_date="20200103", end_date="20211231", adjust="qfq")
# list_date = list(stock_sz300750_df['date'])
# stock_sz300750_df.index = list_date
stock_sz300750_df.head()
函数ak.stock_zh_a_daily()用于获取A股股票数据
symbol为股票代码,sh为上交所股票,sz为深交所股票;strat_date、end_date分别为股票数据开始时间、结束时间;adjust默认为不复权的数据, qfq是返回前复权后的数据,hfq是 返回后复权后的数据
3、股票数据类型转换
由于后面写了两个量化交易策略,而且策略中的有部分指标不相同,所以在这一部分以及下面回测系统两部分面向对象编程,有部分函数只用于策略一,有部分只用于策略二。
# 将股票数据转化为新的数据类型
class StockTradeDays(object):
def __init__(self, price_array, date_array=None):