Python量化交易
文章平均质量分 83
码农甲V
业精于勤而荒于嬉,行成于思而毁于随。
展开
-
PTrade财务数据获取函数的问题
我们调整回测时间发现,从2023-01-03开始到股票的2023年第一季度报告发布,get_fundamentals返回的数据均未空。可以看到长江电力的财报公告时间是2023-04-28,正泰电器的财报公告时间是2023-04-29。归纳总结一下,在调用get_fundamentals函数,且参数date设置为当前交易日时,查询返回的结果为上一季度的财务数据。但在实际应用中,会遇到如下的问题。可见,长江电力在2022-10-31发布的第三季度报,正泰电器在2022-10-29发布的第三季度报。原创 2023-10-21 15:21:22 · 476 阅读 · 0 评论 -
PTrade获取财务数据
PTrade提供了获取财务数据函数get_fundamentals,可以用于获取财务三大报表数据、日频估值数据、各项财务能力指标数据,数据源为恒生。原创 2023-10-16 20:26:24 · 469 阅读 · 0 评论 -
PTrade获取当日n个季度前的日期所处季度的最后一天——时间相关函数4
本文介绍的函数用于获取当日n个季度前的日期所处季度的最后一天(有点绕,看后面例子就好理解了)。原创 2023-10-12 10:07:37 · 352 阅读 · 0 评论 -
PTrade判断当日是否为当月第一个交易日——时间相关函数3
本文介绍的函数用于判断当前交易日是否为当月的第一个交易日。在某些策略中,可能会在每月的第一个交易日进行调仓换股。这时,就可以使用本文介绍的函数判断当日是否为当月的第一个交易日。原创 2023-10-08 09:11:50 · 290 阅读 · 0 评论 -
PTrade获取交易日期——时间相关函数1
本系列文章将笔者平时在使用ptrade进行策略开发中使用到的与日期相关的函数进行记录,以便大家参考并一同改进优化。如果读者还有其他日期相关的函数实现需求,也可以留言,大家一起讨论补充。首先看一下ptrade提供的get_trading_day函数的用法,后面的函数大多要用到它。原创 2023-10-04 20:04:42 · 572 阅读 · 0 评论 -
PTrade判断当日是否为当周第一个交易日——时间相关函数2
本文介绍的函数用于判断当前交易日是否为当周的第一个交易日。在某些策略中,可能会在每周的第一个交易日进行调仓换股。这时,就可以使用本文介绍的函数判断当日是否为当周的第一个交易日。原创 2023-10-04 20:07:04 · 942 阅读 · 0 评论 -
Python量化交易学习笔记(0)
本文将简单回顾我的量化交易学习的历程,并给出新手学习量化交易的建议学习路线,适合于尚无稳定盈利策略的量化新手阅读,量化大神们请略过。本文将在博客中置顶,并不定期根据我的学习、交易进行更新。原创 2023-09-24 20:05:18 · 982 阅读 · 6 评论 -
从MySQL中读取股票数据——从零到实盘10
前文介绍了把股票数据写入MySQL的过程,本文记录从MySQL中读取股票数据的过程。到目前为止,我们在访问股票代码列表时,每次需要通过BaoStock重新下载。本文将把下载的股票代码保存到MySQL中,在后续访问股票列表时,就可以通过MySQL读取股票代码数据,从而避免每次都要重新下载代码列表,也以此来演示从MySQL中读取数据的过程。主要代码分析新建源文件,命名为data_center_v8.py,全部内容见文末,v8主要修改了函数get_stock_codes:def get_stock_co.原创 2021-12-28 06:46:01 · 6276 阅读 · 8 评论 -
多进程创建股票数据——从零到实盘7
前面文章已经记录了股票数据的下载及相关因子计算的过程,本文记录使用多进程创建股票数据的方法。这里所说的创建数据,包括股票数据的下载和相关因子的计算,会把所有股票的全部历史数据进行下载和计算。后面的文章会介绍如何更新数据,即只处理未创建过的数据。还有一点说明,这里使用多进程,而非多线程进行数据创建,主要是由于BaoStock不支持多线程下载数据。因此使用Python的多进程模块multithreading进行数据创建。主要代码分析新建源文件,命名为data_center_v6.py,全部内容见文末,.原创 2021-12-07 21:53:41 · 5441 阅读 · 1 评论 -
股票因子扩展3(候选因子计算)——从零到实盘6
前文记录了双神因子的实现,本文记录候选因子的实现。当候选因子值为True时,股票就会进入候选股票池,后续监测是否买入。主要代码分析新建源文件,命名为data_center_v5.py,全部内容见文末,v5主要涉及5个方面的改动:新增计算均线因子函数def ma(df, n=5, factor='close'):该函数用于计算均线因子,其中:参数df为待计算扩展因子的DataFrame参数n为待计算均线的周期,默认计算5日均线参数factor为待计算均线的因子,默认为收盘价返回值为包含.原创 2021-12-01 04:06:05 · 4143 阅读 · 4 评论 -
股票因子扩展2(双神因子计算)——从零到实盘5
前文记录了涨停因子的实现,本文记录双神因子的实现。双神本质上就是间隔的两个涨停,网上也有人称之为双龙。主要代码分析新建源文件,命名为data_center_v4.py,全部内容见文末,v4主要涉及4个方面的改动:新增计算移动因子函数def shift_i(df, factor_list, i, fill_value=0, suffix='a'):该函数用于计算移动因子,用于获取前i日或者后i日的因子,其中:参数df为待计算扩展因子的DataFrame参数factor_list为待移动的.原创 2021-11-28 17:52:28 · 5593 阅读 · 2 评论 -
股票因子扩展1(涨停因子计算)——从零到实盘4
[前文](/wordpress/?p=172 "前文")介绍了股票日线数据下载,从本文起开始记录一些股票因子的计算方法,这些因子将用于后续策略的编写。我们将实现双神穿多线策略,策略的选股条件是,股票当日形成双神(间隔的2个涨停),K线同时上穿5、10、20、30日均线,30日线在60日线上方,把当日涨停收盘价格定义为买点buy_point。买入价格为后续日期开盘价与buy_point的较小值,卖出止盈价格为buy_point*(1+6.18%),止损价格为buy_point*(1-16.18%)。在写.原创 2021-11-26 20:34:29 · 8331 阅读 · 5 评论 -
股票日线数据下载——从零到实盘3
前文介绍了从BaoStock下载股票代码,本文记录利用这些股票代码下载股票日线数据的过程。源代码参考前文,新建源文件,新文件命名为download_data_v2.py,源代码如下:import baostock as bsimport datetimeimport sys'''功能:返回指定日期的A股代码列表若参数date为空,则返回最近1个交易日的A股代码列表若参数date不为空,且为交易日,则返回date当日的A股代码列表若参数date不为空,但不为交易日,则打印提示非交易日.原创 2021-10-27 21:20:23 · 8385 阅读 · 1 评论 -
A股股票列表下载——从零到实盘2
目前实盘主要用到的是A股的日线数据,在BaoStock、Tushare、AKShare等平台上,均能免费下载日线数据,我们先选择BaoStock作为数据源。本文记录从BaoStock下载A股股票列表的过程。BaoStock安装打开PyCharm,在下方Terminal窗口输入以下命令,完成安装:pip install baostock -i https://pypi.tuna.tsinghua.edu.cn/simple/ --trusted-host pypi.tuna.tsinghua.edu..原创 2021-10-23 17:01:28 · 9694 阅读 · 1 评论 -
开发环境搭建——从零到实盘1
前言这是《从零到实盘》的第一篇文章,记录量化开发环境的搭建。我会控制每篇博客的长度,力求言简意赅,只上干货,避免文章过长影响可读性。开发环境为了真正做到从零开始,我在虚拟机里新装了Windows 7,分配了16G内存,200G硬盘(只有C盘),主机CPU是i5-8500。量化对象A股。开发软件(后续如用到其他软件包,再记录其安装方法)Anaconda3 个人版 Python3.8 64位PyCharm 社区版(目前我的量化开发全部使用的是免费软件,只有这个博客是真花了银两.原创 2021-10-16 20:33:43 · 7257 阅读 · 0 评论 -
Hello, World——从零到实盘0
经过近两年的python量化交易学习,对量化的知识有了一定的积累,也已实现A股的自动化实盘交易,还结识了很多新朋友,已经建立了两个微信学习交流群。前期量化交易的学习笔记主要发布在CSDN和今日头条上,回头看这些文章,有的需要重新梳理,有的已经抛弃不再适用了。在好友建议下,开设了自己的博客,计划把学习笔记进行重新梳理,避免读者看我的笔记跟踪学习时,再走我之前走过的弯路。目前计划在博客里分享以下几方面的内容:从零到实盘:在有Python基础的前提下,记录从数据下载、策略胜率分析、实盘对接的完整过程;.原创 2021-10-14 20:46:01 · 20387 阅读 · 3 评论 -
Python量化交易学习笔记(58)——backtrader多股回测的开始时间
在使用bt进行多股回测时,经常会出现回测开始的日期比预期日期要晚很多的情况,本文将结合案例,分析这一现象的原因。本文仅对实践中用到的日线回测进行分析,如要处理分时数据,可参考本文方法分析。本文将先通过3个案例展示多股回测的开始时间的变化情况,然后通过分析源代码说明产生这种变化情况的原因。案例在以下3个案例中,分别使用[600035]、[600035,300412]、[600035,300412,300919]3组股票作为股票池,回测开始时间选定为2018年1月8日,在策略的next函数中打印以下信息.原创 2021-08-28 11:31:27 · 6617 阅读 · 6 评论 -
Python量化交易学习笔记(57)——backtrader的一些基本概念5
本文继续记录bt相关的概念内容。启动和运行bt的启动和运行至少涉及3个Line对象:Data feedStrategy(实际上是Strategy的子类)Cerebro(西班牙语中的大脑)Data FeedData feed提供了用于回测的数据,bt支持下列几种data feed:读取CSV格式文件在线获取Yahoo数据获取Pandas Dataframe或者blaze数据Interacive Brokers、Visual Chart和Oanda的实时数据在data feed中原创 2021-08-12 10:20:57 · 3463 阅读 · 1 评论 -
Python量化交易学习笔记(56)——backtrader的一些基本概念4
本文继续记录bt相关的概念内容。Line迭代器backtrader中的Line迭代器和Python里的迭代器关系不大,只所以称之为迭代器,是由于Line迭代器在自身line迭代的同时,会告知其附属迭代器一起进行迭代。Line迭代器的关键函数是next,Line迭代器在每次迭代时都会调用next函数,同时Line迭代器中所包含的data数组会在迭代中,由系统将数组索引自动后移一位。需要注意的是,next函数只有在最小周期后才会被调用,后文将介绍最小周期的概念。与传统的迭代器相比,Line迭代器还实现原创 2021-08-11 12:22:04 · 2993 阅读 · 2 评论 -
Python量化交易学习笔记(55)——backtrader的一些基本概念3
本文继续记录bt相关的概念内容。切片由于在设计时,bt使用了前文所提到[0]和[-1]索引的模式,导致bt不支持对Lines对象进行切片的操作,也就是不可以通过以下方式访问Lines:myslice = self.my_sma[x:y] # 不支持此切片操作 获取切片不过bt也提供了自己获取切片的方式,下面展示几个例子。myslice = self.my_sma.get(ago=0, size=1) # ago和size均为默认值get的参数ago表示获取数据的起点,ago=0即为当前原创 2021-07-18 22:49:22 · 3804 阅读 · 1 评论 -
Python量化交易学习笔记(54)——backtrader的一些基本概念2
本文继续记录bt相关的概念内容。Lines顾名思义,Lines就是线,比如一段时期的收盘价是一条线,一段时期的成交量是一条线,一段时期的5日均线也是一条线,股票软件上的所有技术指标基本都可以处理为线。在bt中也是主要通过访问线(Lines)来进行各种计算。通过一个小例子来看一下Lines在bt中的使用:class MyStrategy(bt.Strategy): params = dict(period=20) def __init__(self): self.mova原创 2021-07-18 15:48:54 · 2951 阅读 · 1 评论 -
Python量化交易学习笔记(53)——backtrader的一些基本概念1
本文主要来自于官方文档的翻译,添加一些笔者在实践中的理解,来记录backtrader中的一些基本概念。Data Feedsbacktrader(以下简称bt)进行回测或者交易需要有历史或者实时的数据源,这些数据源包括典型的开盘价、最高价、最低价、收盘价、成交量等等,也可以是用户自定义的指标、买卖信号等。Data Feeds就扮演着这个数据源的角色,需要用户提供给bt。用户通过以下方式将Data Feeds添加到bt内:cerebro = bt.Cerebro() # 定义cerebro...d原创 2021-07-17 23:34:05 · 3919 阅读 · 2 评论 -
Python量化交易学习笔记(52)——再读backtrader文档
实盘了两个月,5月份盈利14.34%,6月份亏损2.82%,整体表现尚可。实盘的策略是基于前面选股规则准确率计算的文章,找出准确率高的规则进行选股,严格执行止盈止损条件。这其中存在一些问题,一是止盈条件可以根据准确率计算得到,但是止损条件不明确,缺少对参数的优化过程;二是没有进行回测,对策略的收益和回撤情况缺少整体把握。因此,还是决定回归到backtrader,踏实地写好回测程序,边实盘边回测边优化策略。目前回测出的策略结果中,从2018年至今的收益率, 最高为103.77%,年化为22.55%。在实原创 2021-07-04 22:53:47 · 3440 阅读 · 11 评论 -
Python量化交易学习笔记(51)——程序化交易2
本文原创 2021-04-10 07:48:58 · 6844 阅读 · 5 评论 -
Python量化交易学习笔记(50)——程序化交易1
easytrader安装pip install easytrader下载安装e海通财PC独立交易版原创 2021-01-24 15:28:02 · 7189 阅读 · 8 评论 -
Python量化交易学习笔记(49)——按规则选股
本文记录按照笔记46、47、48下载数据、扩展因子、测试选股规则后,按照规则进行选股的过程。选股规则本文就选股规则与笔记48所测试规则相同,即:2日前倍量暴涨9%以上。随后两日缩量调整。收盘价在20日线上方。20、30、60、120、250日线多头排列。选股规则代码如下: condition = df['value_boom_2a'].iloc[-1] and \ df['volume_2a'].iloc[-1] >= 2 *原创 2021-01-20 21:53:37 · 4859 阅读 · 2 评论 -
Python量化交易学习笔记(48)——选股规则准确率计算
上篇文章记录了因子扩展的过程,这篇文章利用这些因子,来演示如何实现特定选股规则准确率的判断。本文代码主要实现以下功能:通过遍历历史数据,实现某个选股规则下,N日内收益M%的准确率判断(例如10日内收益超过6%)。记录符合选股规则的个股及日期,并分为正负样本分别保存为文件,便于后续分析。正样本是指,在当前规则下,N日内能收益M%的某次选股;负样本是指,在当前规则下,N日内未能收益M%的某次选股。对所有选股的最大收益进行图形化显示。预期收益持股2周(10个交易日),收益6%# 持股天数g_da原创 2021-01-19 22:45:07 · 5702 阅读 · 2 评论 -
Python量化交易学习笔记(47)——因子扩展
用这篇文章记录一下目前学习过程中使用到的因子,包括使用纯指标规则以及使用机器学习方法所使用到的因子,以便于后续文章描述使用。这里以日线数据为例,周线、月线的因子扩展需要注意适度减小均线周期大小等参数。规则选股因子扩展全部因子扩展代码在本节末,这里进行几点说明:只实现了部分因子的扩展,便于后面规则选股时使用。可以根据具体需要,增删相应因子。在首次运行代码时,会进行扩展因子的全量计算;当后续日线数据更新后,再运行代码,只会计算更新日期的扩展因子,避免了全量计算而带来的过长时间消耗。即实现了增量计算。原创 2021-01-18 21:58:05 · 5266 阅读 · 4 评论 -
Python量化交易学习笔记(46)——通达信日线数据获取
序从2020年初开始接触量化,马上就要满一年了。在这一年里,想过去做量化,想过去做机器学习,想过去做少儿编程教育。就这样大概折腾了小半年时间,最后在CSDN上看到这样一句话:“你把时间投在专业上,两三年,你就能在圈子里小有名气。四五年,你就能靠这个专业赚钱。过了10年以上,你就能成为这个领域的专家。”觉得自己可以按这句话努力一把,于是便坚定了探索量化的决心。python、backtrader、量化、机器学习基本上都是从零学起,对近一年来的学习进度总体还算满意。CSDN的粉丝量280+,博客升级为5级,访原创 2021-01-17 21:43:19 · 16237 阅读 · 27 评论 -
Python量化交易学习笔记(45)——深度学习挖短线股5
前4篇文章分别记录了利用深度学习挖短线股的数据预处理、模型训练、结果预测及策略回测过程,本文记录根据筛选短线股票的过程。选股流程1.股票数据下载更新例如现在是2020年11月23日19:00,我们想找到按深度学习策略,明天应该买什么股票。那么首先将股票日线数据更新至2020年11月23日,日线数据下载可参考笔记(39)。2.股票扩展数据计算计算股票的扩展指标,参考笔记(41)第2部分内容。这里可以做进一步优化,如果每天都进行扩展数据计算,实际只需要对更新的当日数据进行计算,而无需对历史数据进行重原创 2020-11-25 20:57:14 · 6349 阅读 · 13 评论 -
Keras学习笔记(2)——从零开始配置开发环境
闲聊几句电脑由于硬盘故障的原因重装了,正好记录下从零开始配置开发环境的过程,当然这里的开发还是针对python量化交易。刚开始接触量化交易时,使用的是通过字王的zwPython,这是一个特别适合上手的Python发行版本,里面集成了量化、深度学习等框架,解压后直接使用,开发人员无需再在环境配置上耗费时间。这里也特别感谢字王的贡献。随着开发和学习的深入,略感zwPython的一些限制,比如各包的版本固定,更新较慢等,最终推动我换工具的原因还是zwPython里集成的IDE:Visual Studio C原创 2020-11-22 20:13:02 · 3705 阅读 · 1 评论 -
Python量化交易学习笔记(44)——深度学习挖短线股4
前面的文章记录了深度学习挖短线股的数据预处理、模型训练、结果预测过程,本文将记录应用预测结果进行回测的步骤。策略回测在策略回测实现中,主要应用了backtrader的Data Feeds扩展功能 ,在笔记(25)中,记录了使用Data Feeds扩展进行单只股票回测的过程,本文则是基于深度学习预测结果,使用Data Feeds扩展进行多股回测。预测结果正则化笔记(43)中得到每只股票每日的预测结果,取值范围在0到1之间,值越接近于1,表明其越有在短期暴涨的可能。经过观察发现,每只股票取值范围差异较原创 2020-11-06 06:32:09 · 4598 阅读 · 5 评论 -
Python量化交易学习笔记(43)——深度学习挖短线股3
前面的文章已经介绍,将短线个股挖掘问题转化为深度学习处理的分类问题,并且已经完成训练,将训练得到的模型保存到本地。本文将记录如何使用Keras加载模型并进行预测的过程。结果预测首先,找到训练模型保存的目录,加载模型: # 加载模型 loaded_model = keras.models.load_model('./model/{}'.format(stk_code))然后,读入数据,将数据转化为字典类型作为预测所使用的输入字典,键为特征的索引,值为tensor。我们使用了220个特征原创 2020-10-21 05:59:44 · 4299 阅读 · 5 评论 -
Python量化交易学习笔记(42)——深度学习挖短线股2
上篇文章介绍了深度学习挖短线股的数据预处理部分,本文将介绍模型训练的内容。模型训练模型训练过程主要参考Keras的官方示例(链接),该示例对结构化的数据进行了分类,分别处理了特征为字符串、整形、浮点型的数据。对于当前我们所选用的训练特征而言,我们只需要处理浮点型特征。import tensorflow as tfimport numpy as npimport pandas as pdimport osfrom tensorflow import kerasfrom tensorflow.k原创 2020-10-20 07:57:38 · 5207 阅读 · 3 评论 -
Python量化交易学习笔记(41)——深度学习挖短线股1
本文记录使用Keras筛选短线个股的流程,主要步骤如下:准备数据,根据短线个股筛选标准,给个股日线数据打标。模型训练,针对每只股票,训练得到分类模型。策略回测,根据训练得到的模型,回测策略的各指标情况。个股筛选,根据模型筛选出当前符合买入条件的股票。...原创 2020-10-17 06:51:46 · 6905 阅读 · 2 评论 -
Python量化交易学习笔记(40)——backtrader的resample浅析
本文主要包含以下三部分内容:backtrader的日志功能。backtrader的交易日历。backtrader的resample结果浅析。日志功能可以通过下面的代码在backtrader中添加日志功能:cerebro.addwriter(bt.WriterFile, out = 'log.csv', csv = True)日志信息将被输出到工作目录下的log.csv文件中,输出内容包括:种子数据(Data Feeds)策略数据(lines和参数)指标和观察者(Observer)原创 2020-08-11 07:21:23 · 7323 阅读 · 3 评论 -
Python量化交易学习笔记(39)——BaoStock股票数据下载
鉴于近几篇文章都与多周期回测相关,因此用这篇文章来记录下多周期股票的数据的获取方式。前面在zwPython的框架下,使用的是Tushare来获取A股的日线数据,如果想获取其他周期的数据,就要使用Tushare Pro,并且还要有足够的积分。苦于家里没矿,手里没银子,转投向可以免费下载数据的BaoStock,以下简单记录数据下载流程。安装使用国内源安装:pip install baostock -i https://pypi.tuna.tsinghua.edu.cn/simple/ --trusted原创 2020-08-09 06:02:24 · 21436 阅读 · 26 评论 -
Python量化交易学习笔记(38)——backtrader多周期回测2
本文继续介绍backtrader多周期回测的第二种方法,使用resample来进行多周期数据的加载。简述如果需要做多周期的策略回测,但是只有单周期数据可用,那么就可以使用重采样(resampling)来解决多周期数据的生成问题。这里的重采样(resampling)实际指的是上采样(upsampling),使用小周期的数据来合成大周期数据。例如,用日线数据合成周线数据。这里所说的上采样和信号处理的上采样效果是相反的,在信号处理中,上采样会获得比源数据更多的数据,而这里的上采样则是获得大周期的数据,较源数原创 2020-07-05 16:35:18 · 12204 阅读 · 1 评论 -
Python量化交易学习笔记(37)——backtrader多周期回测1
在backtrader官网文档中,介绍了两种多周期回测方式,第一种是读入多周期的K线数据,第二种是对数据进行resample。本文将对第一种方式进行介绍。简述有些策略会使用到多周期的数据,典型的应用为:使用周线(大周期)数据判断趋势使用日线(小周期)数据判断买卖点这就需要同时读入多周期数据进行回测,backtrader内置了对多周期策略回测的支持。backtrader多周期回测规则回测时需要遵循以下规则:小周期数据必须被第一个加入到Cerebro实例中在backtrader原创 2020-07-04 16:45:45 · 18642 阅读 · 8 评论 -
Python量化交易学习笔记(36)——backtrader多股回测避坑3
本文继续记录多股回测时可能遇到的异常情况。坑描述多股回测时,当日期达到所有股票的技术指标都能够计算出有效值后,backtrader才开始进行回测。由于这种逻辑的存在,如果某些股票在回测周期的最后几天才能计算出技术指标,那么就会导致回测只在最后几天进行,前面大片回测时间被浪费。坑重现为了重现上述现象,做如下回测设定(与笔记(35)相同):使用20日均线作为买卖条件的判断标准:MIN_PERIOD = 20 # 可配置策略参数 params = dict( pe原创 2020-06-30 01:21:57 · 7873 阅读 · 2 评论