参考资料:
https://bbs.pinggu.org/thread-4745852-1-1.html
【量化小讲堂-Python、Pandas系列15】完整策略框架:以均线策略为例
这个是邢不行老师的量化系列课程,有源码分享,很赞!强烈推荐!
https://www.jianshu.com/p/363aa2dd3441
Python计算量化策略评估指标
微信公众号:Python金融量化(id:tkfy920),专注于分享python在金融领域的应用。推荐推荐!
下图是 JoinQuant 聚宽量化平台上的回测界面,这个学习笔记的内容就是如何做出这样一个图!
工具:Spyder
数据:tushare
一、产生买卖信号的策略
1、导入原始数据
from __future__ import division #导入精确除法
import pandas as pd
import warnings # warning通常用于提示用户一些错误或者过时的用法。
warnings.filterwarnings("ignore")
import numpy as np
import tushare as ts
import matplotlib.pyplot as plt
pro = ts.pro_api()
api = ts.pro_api('29acf1ff24d0c5539a992821efac9b2037d42610f4cb0724ea93e084')
stock_data = ts.pro_bar(pro_api=api, ts_code='002916.SZ', adj='qfq', start_date='20171213', end_date='20190128')[['ts_code','trade_date','open','close','pct_chg']]
stock_data['pct_chg'] = stock_data['pct_chg'].div(100)
stock_data.axes
stock_data.index = pd.DatetimeIndex(stock_data.index)
stock_data.sort_values(by='trade_date', inplace=True)
2、写策略函数,得到买卖信号:
e.g. 均线策略
def simple_ma(stock_data, window_short=5, window_long=60):
"""
:param stock_data: 股票数据集
:param window_short: 较短的窗口期
:param window_long: 较长的窗口期
:return: 当天收盘时持有该股票的仓位数据
最简单的均线策略逻辑:
短期均线上穿长期均线,且第二天开盘没有涨停,则以第二天开盘价全仓买入;
短期均线下穿长期均线,且第二天开盘没有跌停,则以第二天开盘价全仓卖出。
"""
# 计算短期和长期的移动平均线
stock_data['ma_short'] = pd.Series.rolling(stock_data['close'], window=window_short, min_periods=5).mean()
stock_data['ma_long'] = pd.Series.rolling(stock_data['close'], window=window_long, min_periods=60).mean()
# 出现买入信号而且第二天开盘没有涨停
stock_data.ix[(stock_data['ma_short'].shift(1) > stock_data['ma_long'].shift(1)) &
(stock_data['open'] < stock_data[&#