手把手带你用Python实现一个量化炒股策略,小白也能看得懂!

玩Python这么久了,小编写过Python基础教程,写过技巧经验,写过爬虫,数据库,数据分析,趣味案例等等。今天我们来写一个量化的小策略,一起领略一下Python的强大魅力。

01.金融股市基础知识介绍

金融工具主要包括了股票,期货,黄金,外汇,基金等几种手段。对于个人来讲,基金和股票是大家接触到最多的金融工具。基金是指将自己的钱财交付给基金经理,由基金经理帮助我们来实现理财。这样的理财方式优点就是比较稳妥,但是收益一般较小。而股票则是个人通过购买上市公司的股份,来获得该公司的收益,从而获得利益。

这里,我们按照地区来对股票进行分类。

按照地区分类,股票分为了A股,B股等几种常见的股票类型,其中“T+1”指的是当天买入的股票,要到下一个交易日才能卖出,同时A股还设置了涨跌幅,避免了股票过快的上涨和下跌。

上图中展现的就是K线图,其中,收盘价高于开盘价的被称为阳线,反之则被称为为阴线。在很多的股票软件上,我们都可以看到K线图的身影。

MA线(均线):MA线指的是移动平均线,它是由一段时间的开盘价(也可以是收盘价)之和除以这段时间的交易日总天数得到的数据连接成一条线得到的,例如日线MA5指的是前5个交易日的开盘价的和除以5。

可以看到,计算的交易日越长,MA线呈现出更加平滑的状态,波动幅度也就越小。根据计算的交易日数量的不同,又可分为日均线指标,季均线指标以及年均线指标。

  • 5天和10天的是短线操作的参照指标,叫做日均线指标;

  • 30天和60天的是中期均线指标,叫做季均线指标;

  • 120天和240天的是长期均线指标,叫做年均线指标。

02.量化策略

对金融以及股票的基础知识有了一个了解之后,接下来就进入到我们的量化投资主题。所谓的量化投资是利用计算机技术并且用一定的数学模型去实践投资理念,实现投资策略的过程。而量化投资也有以下的几点优势:

  • 能够避免主观情绪,人性的弱点和认知偏差,更加客观

  • 能够同时包括多角度的观察和多层次的模型

  • 及时跟踪市场变化,不断发现新的统计模型,寻找交易机会。

  • 在决定投资策略后,通过回测验证量化策略的效果。

所谓的一个量化策略,就是指通过一套固定的逻辑来分析、判断和决策,自动化的进行股票交易

而量化策略的周期也包含了五个部分:

A:产生策略想法,学习相关的知识;

B:利用程序实现量化策略;

C:进行量化策略的回测/模拟交易

D:实盘交易

E:根据表现来判断是优化策略还是放弃策略。

03.实战分析

接下来,我们就先简单的实现一个策略,看一下效果如何。

本次的量化策略,我们针对的是茅台的股票(代码:600519)。这里,菜鸟哥向大家介绍一个非常好用的库Tushare。我们可以借助Tushare库来获取到指定股票的开盘价,收盘价,最高价以及最低价的信息。

为了养成良好的量化策略周期意识,我们按照量化策略的周期,来进行策略的执行。

1).策略的制定

我们的策略很简单,从2015年1月1日开始,每月的第一个交易日都买入100股的股票,每年的最后一个交易日卖出所有的股票,到今天为止,收益是多少钱?

2).程序实现量化策略

明确策略之后,接下来就是对于策略的实现,程序用到的库如下图所示。

首先,我们利用Tushare库来获取茅台股票的信息,然后通过pandas保存到本地,并进行读取。

上图的程序中,需要注意的是在读取csv文件时,将date列作为我们的索引,同时将date列按照日期格式进行读取,并只读取开盘价,收盘价等四列内容,因为我们后续的策略只需要用到这四列的内容。读取到内容可以看到,茅台股票的第一个交易日是从2001年的8月27日开始。

通过对于策略的分析,我们首先需要将股票的数据缩小到2015年以后,然后获取到每月第一个交易日的信息,以及每年最后一个交易日的信息。程序如下图所示。

接下来就是对于策略的实现,程序如下图所示:

  • 程序的第5行是从2015年开始进行循环;

  • 第6行计算的是当年买股票所花的成本;

  • 第7行计算的则是一年所购买的股票总量。

  • 如果当年不是2021年的话,就在当年最后一个交易日将一年所买到的股票全部卖出,并计算所赚的收益(8-12);

  • 第14行和第15行代码分别给出的是2021年的股票收益以及将2021年购买股票所花的钱加到总开销上去;

程序最后输出的结果可以看到。自2015年开始到现在,买股票花费了618.7万元,收益则是达到了92.5万元。

这一个最为简单的策略,也能够得到正的收益,这也是得益于茅台股票的好行情,要是换一个股票,很可能这种简单的策略就会得到负的收益。

双均线策略

在简单的策略验证完成后,接下来,我们就来实现一个经典的量化策略:双均线策略。

双均线策略可以概括为两句话:

金叉:短期均线上穿长期均线,买入信号

死叉:短期均线下穿长期均线,卖出信号

那么何为金叉,何为死叉呢?我们来看下面这张图。

上图中,MA5在8月5日附近从下向上穿过MA60的线,这叫做上穿长期均线,两条线的交汇称为金叉,是买入的信号;在8月26日左右,MA5在从上向下穿过MA60的线,叫做下穿长期均线,两条线的交汇称为死叉,是卖出的信号。

而金叉和死叉利用的就是短期均线的波动幅度大于长期均线。同时,金叉和死叉的日期一定是按照101010的方式出现的,即金叉后面一定是死叉,然后后面又是金叉。否则的话,两条线是不可能存在交点的,大家可以仔细想想是不是这个道理呢?

04.模拟交易

明确了双均线策略的原理后,接下来就是量化策略的制定。

初始资金10万元,从2015年1月1日开始,每碰到一次金叉,就尽可能的买入股票(按照100股为计算单位,例如买100股,200股,300股),每碰到一个死叉就将所有的股票卖出,到今天为止,收益是多少钱?

我们还是以茅台股票为例。为了让大家更加清楚程序,菜鸟哥使用python语法来实现量化的策略,不去使用高阶的pandas函数。

首先,我们的短期均线采用ma5,长期均线采用ma30。下图程序就是ma5以及ma30的节点计算。

程序中的第3行和第6行,分别以前5天以及前30天的交易日数据来计算均线数值,并保存到df当中。然后我们画出ma5和ma30以及收盘价的曲线,来直观的观察金叉和死叉。

图中展示的是2015年4月到8月一段时间内的ma5和ma30的曲线。接下来我们通过程序来将金叉和死叉的日期提取出来。

程序中,通过判断前一个交易日与后一个交易日中,ma5和ma30的数值对比来判断交易日是否为金叉或者是死叉,然后将它们的时间分别添加到相应的列表中去。

最后,我们根据策略来进行模拟交易,程序如下图所示。

在这里插入图片描述

第6行程序按照一个金叉一个死叉的规律,将金叉日期和死叉日期进行了融合;

然后针对每一个交叉点(第8行),计算当日的股价(第9行);

如果当天是金叉,则尽可能多的买入股票,并将本金减去买入的股票金额,同时计算买入了多少股。(10-13行)

如果当天是死叉,则将全部的股票卖出,并将本金加上卖出股票所赚的钱,同时将持股数量清零。(14-16行)

最后是计算到今天的交易日为止,卖出所有股票,将所有的资金进行计算后,减去最初的本金10万元后,就是赚取的金钱(18-20行)。

可以看到,利用双均线策略的量化交易,从2015年至今,依靠10万元本金,就能赚取57万元。相比于第一个随意指定的策略,收益提高了很多。体现了量化交易策略的重要性和强大的能力。

5.总结

小编今天从基础的金融和股票的知识介绍,再到量化策略的制定,手把手的带领大家进行了一个经典的量化策略的实现。上面的分享只是给大家展现了Python的强大魅力,并不能作为投资参考。

关于Python学习指南

学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后给大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

包括:Python激活码+安装包、Python web开发,Python爬虫,Python数据分析,人工智能、自动化办公等学习教程。带你从零基础系统性的学好Python!

👉Python所有方向的学习路线👈

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。(全套教程文末领取)

在这里插入图片描述

👉Python学习视频600合集👈

观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

在这里插入图片描述

温馨提示:篇幅有限,已打包文件夹,获取方式在:文末

👉Python70个实战练手案例&源码👈

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

在这里插入图片描述

👉Python大厂面试资料👈

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

在这里插入图片描述

在这里插入图片描述

👉Python副业兼职路线&方法👈

学好 Python 不论是就业还是做副业赚钱都不错,但要学会兼职接单还是要有一个学习规划。

在这里插入图片描述

👉 这份完整版的Python全套学习资料已经上传,朋友们如果需要可以扫描下方CSDN官方认证二维码或者点击链接免费领取保证100%免费

点击免费领取《CSDN大礼包》:Python入门到进阶资料 & 实战源码 & 兼职接单方法 安全链接免费领取

  • 5
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
非常好的问题!以下是一个简单的手把手教程,介绍如何使用Python实现人脸识别。 1. 安装必要的库 首先,您需要安装OpenCV和face_recognition库。您可以使用以下命令在终端上安装它们: ``` pip install opencv-python pip install face_recognition ``` 2. 准备样本图像 您需要准备一些人脸图像,以便训练和测试您的模型。您可以从互联网上下载一些图像,或者使用您自己的照片。将这些图像保存在一个文件夹中,文件夹的名称应该是人物的名字。 3. 训练模型 接下来,您需要训练一个模型来识别人脸。您可以使用face_recognition库中的train函数来训练模型。以下是一个简单的代码示例: ``` import os import face_recognition # 从文件夹中加载人脸图像并进行训练 def train_faces(directory): known_faces = [] known_names = [] for filename in os.listdir(directory): image = face_recognition.load_image_file(directory + "/" + filename) face_encoding = face_recognition.face_encodings(image)[0] known_faces.append(face_encoding) known_names.append(filename.split(".")[0]) return known_faces, known_names # 训练模型 faces_dir = "./faces" known_faces, known_names = train_faces(faces_dir) ``` 该函数将从指定的文件夹中加载所有人脸图像,并使用face_recognition库的face_encodings函数将每个图像编码为一个128维向量。然后,它将这些向量存储在known_faces列表中,并将每个人物的名称存储在known_names列表中。 4. 进行人脸识别 现在,您已经训练好了模型,可以开始进行人脸识别了。以下是一个简单的代码示例: ``` import cv2 import face_recognition # 打开摄像头 video_capture = cv2.VideoCapture(0) # 对每一帧进行处理 while True: # 获取当前帧 ret, frame = video_capture.read() # 将当前帧转换为RGB格式 rgb_frame = frame[:, :, ::-1] # 在当前帧中查找所有人脸位置 face_locations = face_recognition.face_locations(rgb_frame) # 对每个人脸进行编码 face_encodings = face_recognition.face_encodings(rgb_frame, face_locations) # 对于每个编码,查找最佳匹配 for face_encoding in face_encodings: matches = face_recognition.compare_faces(known_faces, face_encoding) name = "Unknown" # 如果有一个匹配,则使用匹配的名称 if True in matches: first_match_index = matches.index(True) name = known_names[first_match_index] # 在人脸周围绘制一个矩形和名称 top, right, bottom, left = face_location cv2.rectangle(frame, (left, top), (right, bottom), (0, 0, 255), 2) cv2.putText(frame, name, (left, top - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.75, (0, 0, 255), 2) # 显示当前帧 cv2.imshow('Video', frame) # 按'q'键退出循环 if cv2.waitKey(1) & 0xFF == ord('q'): break # 关闭摄像头和窗口 video_capture.release() cv2.destroyAllWindows() ``` 该代码将打开计算机上的摄像头,并对每一帧进行处理。它将使用face_recognition库的face_locations函数查找每个帧中的所有人脸位置,然后使用face_encodings函数对每个人脸进行编码。接下来,它将对每个编码进行比较,并使用最佳匹配的名称来标记每个人脸。最后,它将在每个人脸周围绘制一个矩形和名称,并在屏幕上显示当前帧。 这就是用Python实现人脸识别的基本步骤。当然,这只是一个简单的示例,您可以根据自己的需求进行修改和扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值