最简单的量化交易:以05-07年中国大牛市为例分析

Velika ·
更新时间:2024-09-21
· 899 次阅读

在python分析股票MACD指标一文中,我介绍了如何使用python画出股市中的均线图。均线图的意义在于提供了除了指数之外的另外一种曲线,两条曲线的交点可以用来进行决策的判断条件。比如我们可以设定5日均线(sma5)向上穿越20日均线(sma20)时刻为买入点(bpoint),向下穿越为卖出点(spoint),这样就可以使用程序来进行交易了。以下,我们读取了2007年大牛市时期青岛啤酒这只股票的行情,并且使用python的matplotlib进行了买入卖出可视化的决策点显示。通过这个例子,我们可以掌握以下知识点:
1.列表生成式的使用;
2.pandas数据的生成、读取;
3.matplot绘制折线图(plot)和注释(annotate);

import tushare as ts import pandas as pd import numpy as np import matplotlib.pyplot as plt qdpj = pd.read_csv('qdpj_data.csv',index_col=2) qdpj.index = pd.to_datetime(qdpj.index, format = '%Y%m%d') qdpj = qdpj.iloc[:,2:] close = qdpj.close def SMA(n): SMAn = pd.Series(0.0,index=close.index) for i in range(n-1,len(close)): SMAn[i] = np.mean(close[(i+1-n):(i+1)]) return SMAn sma5 = SMA(5) sma20 = SMA(20) spoint_index = [ i for i in range(20,len(sma20)) if sma5[i-1]>sma20[i-1] and sma5[i]<sma20[i]] #理论上的死叉 bpoint_index = [ j for j in range(20,len(sma20)) if sma5[j-1]sma20[j]] #理论上的金叉 total_outcom = 0 total_income = 0 trade_times = min(len(bpoint_index),len(spoint_index)) print(len(bpoint_index)) print(len(spoint_index)) print(trade_times) for i in range(trade_times): total_outcom += close[bpoint_index[i]] total_income += close[spoint_index[i]] print(f'profit:{total_income-total_outcom}') def draw_buy(bpoint_index): for i in bpoint_index: index = i xy = (close.index[index],close[index]) xytext = (close.index[index],close[index]-1.5) plt.annotate('Buy',xy=xy,xytext=xytext,arrowprops=dict(facecolor='black',shrink=0.05)) def draw_sell(spoint_index): for i in spoint_index: index = i xy = (close.index[index],close[index]) xytext = (close.index[index],close[index]+1.5) plt.annotate('Sell',xy=xy,xytext=xytext,arrowprops=dict(facecolor='black',shrink=0.05)) plt.figure(figsize=(16,12)) plt.plot(close[19:],label = 'close',color='g') plt.plot(sma5[19:],label = 'SMA5',color='r',linestyle='dashed') plt.plot(sma20[19:],label = 'SMA20',color='b',linestyle='dashed') plt.title('QDPJ stock index trend') draw_buy(bpoint_index) draw_sell(spoint_index) plt.legend() plt.show()

运行结果:
在这里插入图片描述


作者:梧桐雪



量化交易

需要 登录 后方可回复, 如果你还没有账号请 注册新账号