0


【大数据】—量化交易实战案例双均线策略(移动平均线)

声明:股市有风险,投资需谨慎!本人没有系统学过金融知识,对股票有敬畏之心没有踏入其大门,今天用另外一种方法模拟炒股,后面的模拟的实战全部用同样的数据,最后比较哪种方法赚的钱多。

量化交易,也被称为算法交易,是一种使用数学模型和计算机算法来分析市场数据、识别交易机会并自动执行交易的交易方式。这种交易方法依赖于统计学、数学和计算机科学,以减少人为情绪和主观判断的影响,提高交易效率和精确度。下面是量化交易的一些关键点:

  • 数据驱动:量化交易依赖于大量的历史和实时市场数据,包括价格、成交量、财务报告等。
  • 模型构建:交易者使用统计和机器学习技术来构建预测模型,这些模型可以识别市场趋势、价格模式或异常事件。
  • 策略开发:基于模型的预测,开发交易策略,这些策略可以是趋势跟踪、均值回归、套利等。
  • 自动化执行:一旦策略确定,交易可以完全自动化,由计算机程序执行,无需人工干预。
  • 风险管理:量化交易还包括风险管理算法,以确保交易在可接受的风险水平内进行。
  • 高频交易(HFT):一种特殊的量化交易,特点是交易频率极高,可能在几毫秒内完成数百甚至数千笔交易。
  • 成本和效率:由于减少了交易中的人工环节,量化交易可以降低交易成本并提高执行速度。
  • 监管合规:量化交易需要遵守金融市场的监管规定,包括交易规则和数据保护法规。

优势: 量化交易的优势在于其能够快速处理大量数据,发现人类难以察觉的模式和机会。
挑战: 模型可能过于依赖历史数据而无法准确预测未来市场变化,或者在市场极端波动时可能失效。

import tushare as ts
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
plt.rcParams ['font.sans-serif']='SimHei'#显示中文
plt.rcParams ['axes.unicode_minus']=False#显示负号
zgpa = pd.read_csv('history_k_data.csv')
zgpa = zgpa.set_index('date')
zgpa.head()

导入之前获取的数据:
在这里插入图片描述
典型的“美国线”数据,open代表当日开盘价格,high代表当日最高价格,low代表当日最低价格,close代表当日收盘价格。我们还需要增加几个维度来分析,为了不影响原表,我们构建一个新表。

新建一个表单,命名为strategy(策略),计算交易的信号和下单数量:

#序号保持和原始数据一致
strategy = pd.DataFrame(index = zgpa.index)#添加一个signal字段,用来存储交易信号
strategy['signal']=0#将5日均价保存到avg_5这个字段
strategy['avg_5']= zgpa['close'].rolling(5).mean()#同样,将10日均价保存到avg_10
strategy['avg_10']= zgpa['close'].rolling(10).mean()#当5日均价大于10日均价时,标记为1#反之标记为0
strategy['signal']= np.where(strategy['avg_5']>strategy['avg_10'],1,0)#根据交易信号的变化下单,当交易信号从0变成1时买入#交易信号从1变成0时卖出#交易信号不变时不下单
strategy['order']= strategy['signal'].diff()#查看数据表后10行
strategy.tail(10)

在这里插入图片描述
先介绍今天的移动平均线追踪策略:在这种策略中,一般采用5天均值和10天均值,如果5日均线上穿突破了10日均线,说明股价在最近的涨势很猛,买入信号。若下穿了10日均线,说明最近的跌幅较大,应该卖出。

表格情况:
signal列用于存储交易信号0变成1是买入,1变成0时卖出。
avg_5列采用窗口移动计算5日均值。
avg_10列采用窗口移动计算10日均值。
order列表示交易信号变时下单。

在这里插入图片描述窗口移动计算如上图如示,只不过上图是计算7列,我只计算5列和10列。

数据可视化:

#创建尺寸为10*5的画布
plt.figure(figsize=(10,5))#使用实线绘制股价
plt.plot(zgpa['close'],lw=2,label='price')#使用虚线绘制5日均线
plt.plot(strategy['avg_5'],lw=2,ls='--',label='avg5')#使用-.风格绘制10日均线
plt.plot(strategy['avg_10'],lw=2,ls='-.',label='avg10')#将买入信号用正三角进行标示
plt.scatter(strategy.loc[strategy.order==1].index,
           zgpa['close'][strategy.order==1],
           marker ='^', s=80,color='r',label='Buy')#将卖出信号用倒三角进行标示
plt.scatter(strategy.loc[strategy.order==-1].index,
           zgpa['close'][strategy.order==-1],
           marker ='v', s=80,color='g',label='Sell')#添加图注
plt.legend()
plt.xticks([0,12,24,36,48,60,72,84,96,108])#添加网格以便于观察
plt.grid()#显示图像
plt.show()

在这里插入图片描述
上图买入信号用正三角进行标注,卖出信号用倒三角进行标注。

模拟实战炒股

依旧是20000元的本金,不交手续费。

initial_cash =20000#新建一个数据表positions,序号保持和strategy数据表一致#用0将空值进行替换
positions = pd.DataFrame(index = strategy.index).fillna(0)#因为A股买卖都是最低100股#因此设置stock字段为交易信号的100倍
positions['stock']= strategy['signal']*100#创建投资组合数据表,用持仓的股票数量乘股价得出持仓的股票市值
portfolio = pd.DataFrame(index = strategy.index)
portfolio['stock value']= positions.multiply(zgpa['close'], axis=0)#同样仓位的变化就是下单的数量#用初始资金减去下单金额的总和就是剩余的资金
portfolio['cash']= initial_cash - positions['stock'].diff().multiply(zgpa['close'],
                                                 axis=0).cumsum()#剩余的资金+持仓股票市值即为总资产
portfolio['total']= portfolio['cash']+ portfolio['stock value']#检查一下后10行
portfolio.tail(20)

在这里插入图片描述

创建投资组合数据表,序号和strategy表一致:
stock value代表用持仓的股票数量乘股价得出持仓的股票市值。
cash代表用初始资金减去下单金额的总和就是剩余的资金。
total剩余的资金+持仓股票市值即为总资产。

我们查看最后20行数据,总资产为20502元,比原始资金20000元赚了502元。

数据可视化:

#创建10*5的画布
plt.figure(figsize=(10,5))#绘制总资产曲线
plt.plot(portfolio['total'], lw=2, label='总资产')#绘制持仓股票市值曲线
plt.plot(portfolio['stock value'],lw=2,ls='--', label='交易现金流')#添加图注
plt.legend()#添加网格
plt.grid()
plt.xticks([0,12,24,36,48,60,72,84,96,108])#展示图像
plt.show()

在这里插入图片描述

下期我们会带来更多的量化交易策略。

不转发,你至少要点个赞,收藏一下吧!

标签: 大数据

本文转载自: https://blog.csdn.net/2202_76035290/article/details/139936784
版权归原作者 花花 Show Python 所有, 如有侵权,请联系我们删除。

“【大数据】—量化交易实战案例双均线策略(移动平均线)”的评论:

还没有评论