本文是通过之前学习《Python量化入门》课程系列后,进行的学习研究,将思路和结果供大家分享一起讨论。
关键词:Python, 量化研究,移动平均线。
实验目的:对单个股票,使用单组参数,进行交易策略回测模拟。
原始数据:股票 600000 浦发银行的个股日线数据
单组参数:短期均线 ma_short = 14
长期均线 ma_long = 50
交易策略:最小交易周期:日
买入信号:当短期均线上穿长期均线时候 ma_short >= ma_long
卖出信号:当长期均线下穿长期均线时候 ma_short < ma_long
信号的判别价格:每日收盘价(历史除权价格)
交易计算价格:信号发生后的第二日开盘价(历史未除权价格)
交易手续费:按0.0005计算
印花税:按0.001计算,仅在卖出时发生
交易初始资金 1000000
最小交易数量:100股
测试的时间范围:20050101-20170512
Benchmark: 上证指数
实验步骤:
第一步: 写出移动平均线的计算方法:
# 简单均线策略
def simple_ma(df, ma_short=5, ma_long=20, price='close'):
"""
:param df: 输入对的个股数据
:param ma_short: 短期均线
:param ma_long: 长期均线
:return: 有'signal',’hold'列的df
"""
df = df.copy()
# ===计算短期均线和长期均线
df['ma_short'] = df[price].rolling(ma_short, min_periods=1).mean()
df['ma_long'] = df[price].rolling(ma_long, min_periods=1).mean()
return df
第二步:数据准备
1. 导入指定的单个股票数据,本案例使用的 600000 浦发银行 这个数据
code = 'sh600000'stock_data = get_stock_data_xbx(code)
基础数据格式如下:
2. 数据处理,形成我们能够计算的数据
1) 选择2005年以后的数据
stock_data = stock_data[stock_data['date'].dt.year >= 2005]
2) 计算除权价
stock_data = cal_adjust_price(stock_data, return_type=1)
3)计算涨跌停信号,用除权价的数据
stock_data = limit_up_down(stock_data, open='open_adjust_back', close='close_adjust_back')
第三步:参数设置和策略模拟
1)设置均线的参数
ma_long = 50ma_short = 14
2)设置交易信号
当短期均线上穿长期均线时,设置信号为1
df.loc[(df['ma_short'] >= df['ma_long']) & (df['ma_short'].shift(1) < df['ma_long'].shift(1)), 'signal'] = 1
# 当短期均线下穿长期均线时,设置信号为0
df.loc[(df['ma_short'] < df['ma_long']) & (df['ma_short'].shift(1) >= df['ma_long'].shift(1)), 'signal'] = 0
3)计算仓位
df = position(df)
4)去掉涨 跌停不能交易的信号
df.loc[(df['limit_up_open'] == 1) | (df['limit_down_open'] == 1), 'pos'] = Nonedf['pos'].fillna(method='ffill', inplace=True)
5)计算策略收益率
df = equity_curve_complete(df)
# 计算自然收益率
df = nat_equity(df, type=1)
6)添加指数信息作为benchmark
index_data = import_index_data_xbx()df = merge_with_index_data(df, index_data)
第四步:根据交易结果,进行指标评价,并保存
1)将必要信息保存,如股票代码,开始日期,结束日期,长期均线参数,短期均线参数
result = [code, df['date'].iloc[0], df['date'].iloc[-1], ma_long, ma_short]
2)补充收益率信息
result.extend(pf_analysis.get_all_ratio(df, printout=printout, index=True, nat=True))
3)得到所有的收益评测结果
result_df = pd.DataFrame(data=[result],
columns=['code', 'start_date', 'end_date', 'ma_long', 'ma_short', 'total_return',
'annual_return', 'nat_total_return', 'nat_annual_return', 'volatility',
'max_drawdown', 'final_ratio', 'average_up_change', 'info_ratio', 'sharp_ratio',
'alpha', 'beta'])
return result_df
第五步:绘制收益曲线
pf_analysis.plot_cumulative_return(df=stock_data, complete=True)
实验总结:
本次实验采用双均线策略,长期均线50日,短期均线14日。
对于个股600000浦发银行,在测试的时间范围内(20050101-20170512)。
策略收益 > 个股自身收益 > 上证指数收益。
以上交易策略的大量原始代码和框架,师从于《Python量化入门》课程系列,想获得所有的源代码,并建立自己的交易策略,建议购买课程后深入学习。
课程评价
优点:这套课程特别适合对Python,pandas都没掌握的同学,和“入门”二字很贴切。虽然价要收取一定的费用,但是对于零基础的同学还是墙裂推荐。课程会提供所有的源代码和股票数据,通过一个系列的学习,可以基本掌握股票的回测框架。
缺点:只能用微信访问学习,PC端的话要通过微信客户端访问。
系列总课时约12多个小时,会获得课程讲解的所有源代码。如要深入熟练掌握,课外练习可能需要100小时+。
课程传送门:
网友评论