Python量化交易01——构建基础策略

news2024/10/5 23:30:50

参考书目:深入浅出Python量化交易实战


量化交易是很早就想开的栏目了,之前没时间。现在正好放寒假,然后也找到了一本合适的书可以进行学习。

本次第一章就介绍一下简单的量化流程和一个简单的策略。

量化交易顾名思义就是用代码去验证交易策略是否赚钱,严格按照程序的交易可以避免人性的很多缺点。

核心思想需要回测验证。

第一章就使用最简单的交易策略,低买高卖。如果股价在当天跌了就买,涨了就买。

使用Python进行回测验证收益。


下载数据创建交易信号

使用国内量化最为流行的Tushare库获取数据,很简单便捷。

导入数据分析常用的库

#导入必要的库
import tushare as ts
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

下载中国平安的数据来测试,时间从2020年1月1日到202年3月20日。

#指定下载股票的日期范围
start_date = '2020-01-01'
end_date = '2020-03-20'
#使用ts获取数据
#将时间范围作为参数传入
zgpa = ts.get_k_data('601318',
                    start_date, end_date)
zgpa = zgpa.set_index('date')
#检查是否下载成功
zgpa.head()

 #下面我们来创建交易信号
#为了不影响原始数据,这里创建一个新的数据表

#只保留原始数据中的日期index
zgpa_signal = pd.DataFrame(index = zgpa.index)
#为了更能体现股票的真实价值
#使用Adj Close调整价格作为股票价格
zgpa_signal['price'] = zgpa['close']
#增加一个字段,来存储股价的变化
zgpa_signal['diff'] = zgpa_signal['price'].diff()
#增加diff字段后,第一行会出现空值,我们使用0来进行填补
zgpa_signal = zgpa_signal.fillna(0.0)
#如果股价上涨或不变,则标记为0
#如果股价下跌,则标记为1
zgpa_signal['signal'] = np.where(zgpa_signal['diff'] >= 0, 0,1)
#接下来,根据交易信号的变化进行下单
#一般情况下,在A股市场,买入或卖出至少为100股,即1手
zgpa_signal['order'] = zgpa_signal['signal'].diff()*100
#检查一下下单的情况
zgpa_signal.head()

singal为0表示卖出,1表示买入。order表示相应的买入和卖出的数量 。


回测验证

初始资金20000进行交易,计算持仓市值和账户总余额。

initial_cash = 20000.00
#增加一个字段,代表交易的股票的市值
zgpa_signal['stock'] = zgpa_signal['order']*zgpa_signal['price']
#两次买卖的订单变化之差就是某一时刻仓位的变化情况
#持仓股票的数量变化乘以现价,就是代表交易产生的现金流
#用初始资金减去现金流变化的累加,就是剩余的现金
zgpa_signal['cash'] = initial_cash -(zgpa_signal['order'].diff()*zgpa_signal['price']).cumsum()
#而最股票的市值加上剩余的现金,就是总资产
zgpa_signal['total'] = zgpa_signal['stock'] + zgpa_signal['cash']
zgpa_signal.head()

可以看到计算出来了每一天的持仓市值和总体的账户余额。

自己写量化的核心难点就在于怎么计算现金流的变化,这里是用order表示交易订单的变化之差表示仓位的变化,然后乘价格在累计加合就表示为交易的现金流。

 画图展示

#用图形来进行展示
#设置图形的尺寸是10*6
plt.figure(figsize=(10,6))
#分别绘制总资产和持仓股票市值的变化
plt.plot(zgpa_signal['total'])
plt.plot(zgpa_signal['order'].cumsum()*zgpa_signal['price'],'--',
        label='stock value')
#增加网格,调整一下图注的位置,就可以显示图像了
plt.xticks([0,12,24,36,48])
plt.grid()
plt.legend(loc='center right')
plt.show()

 蓝色的线表示账户总额的变化,可以看到略微亏损,但整体还算不错。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/115740.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【正点原子I.MX6U-MINI移植篇】Ubuntu-base根文件系统移植构建过程详解(四)

摘要:能不能在ARM板上运行Ubuntu呢?答案肯定是可以的,Ubuntu是Linux系统的一种,可以简单的将Ubuntu理解为一个根文件系统,和我们用busybox、buildroot制作的根文件系统一样。因此移植Ubuntu也就是将Ubuntu根文件系统移…

边缘计算概述

引用李开复在《ai 未来》书中说的,未来ai将会是中美双雄争霸的天下,美国虽然拥有创新的ai技术,重于开发,但现在ai已经到了可以实现落地到社会各个方面了,既然要落地就需要大量的测试和数据,只有中国的市场&…

我要是在学习 C 语言之前知道这些就好了

学习 C 语言好难啊。这门语言本身的基础知识并不是很难,但是“用 C 语言编程”需要用到各种知识,这些知识可没有那么容易掌握: C 语言在各个平台和操作系统上的行为有所差异,因此你需要了解平台; C 语言有许多编译器选…

SpringCloud+SpringCloud Alibaba(尚硅谷2020版)

文章目录1.传统单体架构和微服务架构的对比1.1传统单体架构1.1.1传统单体架构概述1.1.2单体架构的特点1.1.3单体架构的优点1.1.4单体架构的缺点1.2微服务架构1.2.1微服务架构概述1.2.2微服务架构的特点1.2.3微服务架构的优点1.2.4微服务架构的缺点2.SpringCloud简介3.SpringClo…

Service入门

Service入门 1.什么是Service 1.1手机中的Service案例 1.2为什么会有service? 由于手机的原因一个时刻只允许一个激活状态的Activity,其余的处于未激活 后台服务机制应运而生 1.3Service简介 四大组件之一没有UI界面,后台服务,长时…

Word处理控件Aspose.Words功能演示:在 Python 中将 Markdown 转换为 PDF

Aspose.Words 是一种高级Word文档处理API,用于执行各种文档管理和操作任务。API支持生成,修改,转换,呈现和打印文档,而无需在跨平台应用程序中直接使用Microsoft Word。此外, Aspose API支持流行文件格式处…

人物百度百科创建:建立人物百度百科都需要什么资料?

人物百度百科词条就像一张网络名片,词条上面的内容是非常具有权威性和公信力的。创建一个百度百科词条,可以帮助你很好地打造个人ip,尤其是在当今互联网时代,ip的打造对于个人的重要性是不言而喻的。 如果你想要提升自己的知名度…

2023年全国管理类联考综合试卷真题及解析

1.油价上涨5%后,加一箱油比原来多花20元,一个月后油价下降了4%,则加一箱油需要花( )钱 A.384元 B.401元 C.402.8元 D.403.2元 E.404元 2.已知甲、乙两公司的利润之比为3:4,甲、丙两公司的利润之比为1&am…

二硬脂酰磷脂酰乙醇胺-聚乙二醇-巯基吡啶 DSPE-PEG-OPSS;常用于脂质体的合成

DSPE-PEG-OPSS 、OPSS-PEG-DSPE 巯基吡啶聚乙二醇磷脂、磷脂聚乙二醇巯基吡啶 中文名称 :磷脂聚乙二醇巯基吡啶、巯基吡啶聚乙二醇磷脂 简称 :OPSS O-PEG-DSPE、DSPE-PEG-OPSS 外观 :白色液体、半固体或固体,取决于分子量。 …

Spring之底层架构核心概念-Environment

文章目录1.Environment作用2.用法2.1 systemEnvironment 和 systemProperties2.2 MutablePropertySources3.实际用法4.总结1.Environment作用 Environment:获取环境变量 2.用法 2.1 systemEnvironment 和 systemProperties public static void main(String[] ar…

【UE4 第一人称射击游戏】13-瞄准开火

上一篇: 【UE4 第一人称射击游戏】12-全自动步枪并显示剩余弹药量 本篇效果: 步骤: 1.打开“ThirdPersonCharacter”,添加一个骨架网格体组件 将其作为Mesh(继承)的子级 父项套接字选为“Weapon_Attach”…

2022需求最大的 8 种编程语言:Python第二,ta居榜首

一直以来,编程语言都是程序员非常关注的话题。虽然有超过200编程语言,但其中只有少数用于现实世界的行业。 2022年也快接近尾声,今年最受欢迎使用最多的语言有哪些呢? 从2021年10月到2022年11月,DevJobsScanner分析了…

国内葡萄酒行业数据浅析

大家好,这里是小安说网控。 葡萄酒是最为常见的果酒,在国内酒品市场上占据着一席之地。近年来,受整体经济环境影响,葡萄酒行业的各项数据都不甚理想。 今年,1-10月份,国内葡萄酒产值,无论是当期…

[ 代码审计篇 ] 代码审计案例详解(一) SQL注入代码审计案例

🍬 博主介绍 👨‍🎓 博主介绍:大家好,我是 _PowerShell ,很高兴认识大家~ ✨主攻领域:【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 🎉点赞➕评论➕收藏 养成习…

skywalking 快速入门

一、skywalking简介 1、skywalking介绍 Skywalking是一个国产的开源框架,2015年有吴晟个人开源,2017年加入Apache孵化器,国人开源的产品,主要开发人员来自于华为,2019年4月17日Apache董事会批准SkyWalking成为顶级项…

村政府小型网站

小型网站架构 编程工具,编程语言,编程细节 编程工具 idea最好的java项目编程工具,集合springboot框架。 编程语言 java,jsp,数据库表编程 编程细节 配置springboot,pom.xml相关配置文件,熟练使用idea以及相关目…

再学C语言15:其他运算符

C大约有40个运算符 一、sizeof运算符和size_t运算符 sizeof运算符:以字节为单位返回其操作数大小;操作数可以是一个具体的数据对象(如一个变量名)或者一个类型(如float);如果数据对象是一个类…

unity前端通过java后端实现将图片上传到阿里云OSS并在前端显示

一、开通对象存储OSS服务 阿里云-搜索推荐 (1)申请阿里云账号 (2)实名认证 (3)开通对象存储oss服务 (4)进入管理控制台 (5)创建bucket (6&a…

基于注解的自动装配之@Autowired的原理及注意事项

基于注解的自动装配之Autowired的原理及注意事项 1. Autowired的原理 首先根据所需要的组件类型到IOC容器中查找 能够找到唯一的bean:直接执行装配 如果完全找不到匹配这个类型的bean:装配失败 和所需类型匹配的bean不止一个 没有Qualifier注解&#…

YGG 与 Mike Ovecka 对 Web3 电子竞技的愿景

(从左到右)YGG 内容创作者 Een Mercado、Ampverse Web3 负责人 Sascha Jochum、Axie Infinity 菲律宾负责人 Nix Eniego、MetaSports 联合创始人兼 CEO Joe Josue 和 YGG 电子竞技负责人 Mike Ovecka 在 Philippine Web3 Festival 的“区块链游戏电子竞…