手把手带你用Python实现一个量化炒股策略

J519LEE 2021-09-15 10:49:10
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的强大魅力,并不能作为投资参考。

版权声明
本文为[J519LEE]所创,转载请带上原文链接,感谢
https://blog.csdn.net/m0_55389447/article/details/120303342

  1. Realizing the function of sending e-mail automatically with Python
  2. Smtpauthenticationerror in Python: solution
  3. 8 steps to teach you how to solve Sudoku in Python! (including source code)
  4. Python change la vie | identifier facilement des centaines de numéros de livraison
  5. Python change life | utilisation de modèles reconnus par ocr
  6. Bibliothèques Python utiles et intéressantes - - psutil
  7. 3. Traitement des données pandas
  8. 【Python编程基础】控制流之链式比较运算符
  9. MFC uses Python scripting language
  10. 【Python編程基礎】控制流之鏈式比較運算符
  11. 【 base de programmation python】 opérateur de comparaison de chaîne pour le flux de contrôle
  12. Python game development, pyGame module, python implementation of Xiaole games
  13. Mise en œuvre du Code de vérification unique (OTP) avec le cadre de repos Django
  14. Python - eval ()
  15. Python - Programmation orientée objet - _Rapport()
  16. Différence entre python - rep (), Str ()
  17. Python - Programmation orientée objet - _Appel()
  18. Python calling matlab script
  19. Python - Programmation orientée objet - _Nouveau() et mode Singleton
  20. Python - Programmation orientée objet - méthode magique (méthode de double soulignement)
  21. Python - Programmation orientée objet - pratique (6)
  22. Python - Programmation orientée objet - réflexion hasattr, GetAttr, GetAttr, delattr
  23. Python - Programmation orientée objet - _Dict
  24. Python - pydantic (2) Modèle imbriqué
  25. Non-ASCII character ‘\xe5‘ in file kf1.py on line 4, but no encoding declared; see http://python.or
  26. python笔记(一)
  27. Non - ASCII character 'xe5' in file kf1.py on Line 4, but no Encoding declared;Voirhttp://python.or
  28. Notes Python (1)
  29. Talk about how JMeter executes Python scripts concurrently
  30. In Beijing, you can't see the moon in the Mid Autumn Festival. Draw a blood red moon in Python
  31. Un des pandas crée un objet
  32. Machine learning | unitary regression model Python practical case
  33. Draw a "Lollipop chart" with Excel and python
  34. Python uses scikit learn to calculate TF-IDF
  35. Getting started with Python Basics_ 3 conditional statements and iterative loops
  36. Python dynamic properties and features
  37. 云计算开发:Python内置函数-min()函数详解
  38. [Python skill] how to speed up loop operation and numpy array operation
  39. 雲計算開發:Python內置函數-min()函數詳解
  40. Développement de l'informatique en nuage: explication détaillée de la fonction intégrée python - min ()
  41. 从0起步学Python(附程序实例讲解)第1讲
  42. 从0起步学Python(附程序实例讲解)第1讲
  43. Apprendre Python à partir de 0 (avec des exemples de programme) leçon 1
  44. Apprendre Python à partir de 0 (avec des exemples de programme) leçon 1
  45. With Python, I'll take you to enjoy it for a month when the Mid Autumn Festival is coming
  46. You can't write interface software in Python! Which software on sale has no UI?
  47. Python国内外原题解析及源码1~15
  48. Python实现长篇英文自动纠错~
  49. Python implémente la correction automatique des erreurs en anglais long
  50. Analyse des problèmes originaux et code source de Python au pays et à l'étranger 1 ~ 15
  51. 一张思维导图学Python之表白
  52. Python教学中课程思政建设的研究探索2
  53. Recherche sur la construction idéologique et politique du Programme d'études dans l'enseignement Python 2
  54. Une présentation de la cartographie mentale Python
  55. Python高级用法总结(8)-函数式编程
  56. Python + Mirai development QQ robot starting tutorial (2021.9.9 test is valid)
  57. Python Advanced use Summary (8) - functional Programming
  58. How to get started with Python and share learning methods for free. All you want to know is here
  59. Python + Mirai development QQ robot starting tutorial (2021.9.9 test is valid)
  60. Python基础第1讲(含代码、Python最新安装包、父与子的编程之旅:与小卡特一起学Python中文版)