自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(93)
  • 资源 (1)
  • 收藏
  • 关注

原创 Python量化交易学习笔记(0)

本文将简单回顾我的量化交易学习的历程,并给出新手学习量化交易的建议学习路线,适合于尚无稳定盈利策略的量化新手阅读,量化大神们请略过。本文将在博客中置顶,并不定期根据我的学习、交易进行更新。

2023-09-24 20:05:18 740 6

原创 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 381

原创 PTrade获取财务数据

PTrade提供了获取财务数据函数get_fundamentals,可以用于获取财务三大报表数据、日频估值数据、各项财务能力指标数据,数据源为恒生。

2023-10-16 20:26:24 365

原创 PTrade获取当日n个季度前的日期所处季度的最后一天——时间相关函数4

本文介绍的函数用于获取当日n个季度前的日期所处季度的最后一天(有点绕,看后面例子就好理解了)。

2023-10-12 10:07:37 299

原创 PTrade判断当日是否为当月第一个交易日——时间相关函数3

本文介绍的函数用于判断当前交易日是否为当月的第一个交易日。在某些策略中,可能会在每月的第一个交易日进行调仓换股。这时,就可以使用本文介绍的函数判断当日是否为当月的第一个交易日。

2023-10-08 09:11:50 232

原创 PTrade判断当日是否为当周第一个交易日——时间相关函数2

本文介绍的函数用于判断当前交易日是否为当周的第一个交易日。在某些策略中,可能会在每周的第一个交易日进行调仓换股。这时,就可以使用本文介绍的函数判断当日是否为当周的第一个交易日。

2023-10-04 20:07:04 886

原创 PTrade获取交易日期——时间相关函数1

本系列文章将笔者平时在使用ptrade进行策略开发中使用到的与日期相关的函数进行记录,以便大家参考并一同改进优化。如果读者还有其他日期相关的函数实现需求,也可以留言,大家一起讨论补充。首先看一下ptrade提供的get_trading_day函数的用法,后面的函数大多要用到它。

2023-10-04 20:04:42 414

原创 A股全自动化交易——从零到实盘20(完结)

本文是“从零到实盘”系列的最后一篇文章,将介绍实现全自动实盘交易的最后一个步骤,即实现定时更新股票数据任务。schedule模块安装我们使用schedule来实现定时任务,首先需要安装schedule模块,在终端中输入以下命令安装:pip install schedule主要代码分析我们实现最终版本的data_center.py,全部内容见文末,主要新增2个函数:新增按天更新任务函数def task_update_daily():该函数包含每日更新任务。 start_time .

2022-03-01 19:16:31 7876 13

原创 PTrade交易程序代码——从零到实盘19

如题,本文将介绍PTrade实盘交易程序的代码。如何在PTrade中部署策略,可以参见前文中“PTrade部署策略过程”部分内容,然后把本文的代码粘贴到PTrade,就能完成“双神穿多线”策略的部署。我们将对程序的各个函数依次进行介绍。初始化函数def initialize(context):该函数为PTrade的业务流程框架的必选函数,实现初始化功能,用于初始化一些全局变量。策略启动后,该函数仅会被调用一次。参数context为Context对象,存放有当前的账户及持仓信息。 .

2022-02-19 19:38:14 9062 7

原创 PTrade数据交互设置——从零到实盘18

前文介绍了如何通过data_center.py程序读取PTrade的交易数据,以及如何输出PTrade交易所需的数据,本文将介绍在PTrade中如何设置上传待交易数据,以及如何设置定时输出交易数据。待交易数据上传设置这里要实现的功能是,在数据中心程序输出待交易数据后,将待待交易数据上传到PTrade里供交易使用。首先启动PTrade,默认会进入“量化”下的“研究”标签界面:在左侧区域可以看到有demo、examples、upload_files三个文件夹,我们上传的文件会自动保存到upload_.

2022-02-10 09:53:51 4673 4

原创 PTrade交易数据更新——从零到实盘17

在实盘交易中,我们在每日盘后更新K线数据、计算扩展指标、筛出候选股票后,需要把新的候选股票数据传递给PTrade,另外需要根据PTrade的实盘交易记录,更新存放在数据库的相关数据,记录哪些股票还需要监测进行交易,哪些股票不需要再监测。本文将完成上述PTrade交易数据的更新过程。相关库表在数据库中,我们保存了ptrade和ptrade_history两张与PTrade交易相关的数据表,两张表的字段完全相同,其中表ptrade保存了待监测交易的数据,表ptrade_history保存了历史监测或交易的.

2022-01-28 21:51:04 6727 6

原创 开聊PTrade交易——从零到实盘16

从本文开始,“从零到实盘”系列文章进入针对PTrade进行交易的相关介绍。PTrade简介PTrade专业交易系统,是一款面向高净值个人用户和主动管理型产品,集程序化交易(策略投研、回测、交易)、日内回转交易、快速交易、投机套利工具等功能,以及异常交易风控在内的一体化智能投资平台。以上是湘财证券对PTrade的简单介绍,笔者目前只是把PTrade作为一个交易的接口,因此只探索了交易相关的功能。如果想了解更多PTrade的功能,还请读者自行探索。下图为进入PTrade后的默认界面:PTrade部.

2022-01-21 19:53:36 7746 6

原创 每日筛取候选股票——从零到实盘14

前文介绍了多进程更新股票数据的过程。在实盘的过程中,每日更新股票数据后,筛出符合候选条件的股票,这样我们就可以在后续交易中,监测候选股票的价格,判断是否进行买入。本文记录筛取候选股票的过程,主要通过查询latest表获取最新一日所有股票的日线数据,然后选取candidate因子为True的股票。主要代码分析新建源文件,命名为data_center_v12.py,全部内容见文末,v12新增4个函数:新增最新日线数据表函数def update_latest_table(stock_codes):该.

2022-01-16 07:45:05 3803 18

原创 按日更新股票数据——从零到实盘13

前文介绍了多进程创建股票数据的过程,整个创建过程大概约10几分钟。在实盘时,每个交易日都有新数据生成,我们没有必要对全面历史时间都进行重新创建计算,只需要下载新产生的日线数据,每次更新需要3分钟左右。本文记录多进程按日更新股票数据的过程。主要代码分析新建源文件,命名为data_center_v11.py,全部内容见文末,v11新增2个函数:新增更新数据函数def update_data(stock_codes, query_days=60, adjustflag='2'):该函数用于更新日线数.

2022-01-09 07:52:57 3748 4

原创 多进程统计策略盈亏分布——从零到实盘12

前文介绍了统计策略盈亏分布的过程,本文将使用多进程进行实现。在前面文章中,我们实现了用多进程创建股票数据,本文多进程实现的主要区别是,需要主进程获取子进程的返回值。主要代码分析新建源文件,命名为data_center_v10.py,全部内容见文末,v10主要涉及3个方面改动:修改盈亏统计函数def profit_loss_statistic(stock_codes, hold_days=10):该函数用于盈亏分布统计,计算当日candidate为True,持仓hold_days天的收益分布,其.

2022-01-04 06:39:10 3089 2

原创 策略盈亏分布统计——从零到实盘11

本文统计策略盈亏分布的过程,并以图表形式展示策略的盈亏分布。策略策略主要内容:加入候选股票池条件:候选因子(参考前文)为True买入条件进入候选股票池的第2日,最低价小于等于进入候选股票池当日的收盘价若进入候选股票池的第2日的开盘价小于进入候选股票池当日的收盘价,则以该开盘价买入;否则以进入候选股票池当日的收盘价买入盈亏统计条件持股hold_days(本文设置为10)天以上所描述的内容其实并不是完整的策略,没有卖出条件、持仓限制等约束。为了统计策略盈亏分布,我们先.

2021-12-30 06:47:53 3739 4

原创 从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 5980 8

原创 股票数据写入MySQL——从零到实盘9

前文介绍了MySQL的安装和配置过程,本文记录将股票数据写入到MySQL的过程。安装pymysql使用python实现与MySQL的数据读写时,需要安装相关的包。由于我们搭建开发环境时选择的是Anaconda,大部分包已经被默认安装好,这里只需要手动安装pymysql:pip install pymysql主要代码分析新建源文件,命名为data_center_v7.py,全部内容见文末,v7主要涉及2个方面改动:新增创建数据库引擎对象函数def create_mysql_engine():.

2021-12-22 19:23:26 7544 28

原创 MySQL安装与配置——从零到实盘8

前面文章完成了股票数据创建的流程,下一步将把数据存储到MySQL中。由于MySQL的安装和配置稍显繁琐,本文专门来记录一下相关的过程。下载安装Microsoft .NET Framework 4.5.2下载安装Microsoft Visual C++ Redistributable打开MySQL官网,下载MySQL Installer for Windows,笔者下载时,版本号为8.0.26.0安装和配置MySQL Server,整个过程基本都按默认的选项进行,只需要手动设置一下密码即可:.

2021-12-22 19:21:02 3790

原创 多进程创建股票数据——从零到实盘7

前面文章已经记录了股票数据的下载及相关因子计算的过程,本文记录使用多进程创建股票数据的方法。这里所说的创建数据,包括股票数据的下载和相关因子的计算,会把所有股票的全部历史数据进行下载和计算。后面的文章会介绍如何更新数据,即只处理未创建过的数据。还有一点说明,这里使用多进程,而非多线程进行数据创建,主要是由于BaoStock不支持多线程下载数据。因此使用Python的多进程模块multithreading进行数据创建。主要代码分析新建源文件,命名为data_center_v6.py,全部内容见文末,.

2021-12-07 21:53:41 5241 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 4046 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 5493 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 7909 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 8047 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 9332 1

原创 开发环境搭建——从零到实盘1

前言这是《从零到实盘》的第一篇文章,记录量化开发环境的搭建。我会控制每篇博客的长度,力求言简意赅,只上干货,避免文章过长影响可读性。开发环境为了真正做到从零开始,我在虚拟机里新装了Windows 7,分配了16G内存,200G硬盘(只有C盘),主机CPU是i5-8500。量化对象A股。开发软件(后续如用到其他软件包,再记录其安装方法)Anaconda3 个人版 Python3.8 64位PyCharm 社区版(目前我的量化开发全部使用的是免费软件,只有这个博客是真花了银两.

2021-10-16 20:33:43 7023

原创 Hello, World——从零到实盘0

经过近两年的python量化交易学习,对量化的知识有了一定的积累,也已实现A股的自动化实盘交易,还结识了很多新朋友,已经建立了两个微信学习交流群。前期量化交易的学习笔记主要发布在CSDN和今日头条上,回头看这些文章,有的需要重新梳理,有的已经抛弃不再适用了。在好友建议下,开设了自己的博客,计划把学习笔记进行重新梳理,避免读者看我的笔记跟踪学习时,再走我之前走过的弯路。目前计划在博客里分享以下几方面的内容:从零到实盘:在有Python基础的前提下,记录从数据下载、策略胜率分析、实盘对接的完整过程;.

2021-10-14 20:46:01 20148 3

原创 Python量化交易学习笔记(58)——backtrader多股回测的开始时间

在使用bt进行多股回测时,经常会出现回测开始的日期比预期日期要晚很多的情况,本文将结合案例,分析这一现象的原因。本文仅对实践中用到的日线回测进行分析,如要处理分时数据,可参考本文方法分析。本文将先通过3个案例展示多股回测的开始时间的变化情况,然后通过分析源代码说明产生这种变化情况的原因。案例在以下3个案例中,分别使用[600035]、[600035,300412]、[600035,300412,300919]3组股票作为股票池,回测开始时间选定为2018年1月8日,在策略的next函数中打印以下信息.

2021-08-28 11:31:27 6259 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 3344 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 2907 1

原创 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 3626 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 2827 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 3767 2

原创 Python量化交易学习笔记(52)——再读backtrader文档

实盘了两个月,5月份盈利14.34%,6月份亏损2.82%,整体表现尚可。实盘的策略是基于前面选股规则准确率计算的文章,找出准确率高的规则进行选股,严格执行止盈止损条件。这其中存在一些问题,一是止盈条件可以根据准确率计算得到,但是止损条件不明确,缺少对参数的优化过程;二是没有进行回测,对策略的收益和回撤情况缺少整体把握。因此,还是决定回归到backtrader,踏实地写好回测程序,边实盘边回测边优化策略。目前回测出的策略结果中,从2018年至今的收益率, 最高为103.77%,年化为22.55%。在实

2021-07-04 22:53:47 3352 11

原创 Python量化交易学习笔记(51)——程序化交易2

本文

2021-04-10 07:48:58 6645 5

原创 Python量化交易学习笔记(50)——程序化交易1

easytrader安装pip install easytrader下载安装e海通财PC独立交易版

2021-01-24 15:28:02 7088 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 4776 2

原创 Python量化交易学习笔记(48)——选股规则准确率计算

上篇文章记录了因子扩展的过程,这篇文章利用这些因子,来演示如何实现特定选股规则准确率的判断。本文代码主要实现以下功能:通过遍历历史数据,实现某个选股规则下,N日内收益M%的准确率判断(例如10日内收益超过6%)。记录符合选股规则的个股及日期,并分为正负样本分别保存为文件,便于后续分析。正样本是指,在当前规则下,N日内能收益M%的某次选股;负样本是指,在当前规则下,N日内未能收益M%的某次选股。对所有选股的最大收益进行图形化显示。预期收益持股2周(10个交易日),收益6%# 持股天数g_da

2021-01-19 22:45:07 5506 2

原创 Python量化交易学习笔记(47)——因子扩展

用这篇文章记录一下目前学习过程中使用到的因子,包括使用纯指标规则以及使用机器学习方法所使用到的因子,以便于后续文章描述使用。这里以日线数据为例,周线、月线的因子扩展需要注意适度减小均线周期大小等参数。规则选股因子扩展全部因子扩展代码在本节末,这里进行几点说明:只实现了部分因子的扩展,便于后面规则选股时使用。可以根据具体需要,增删相应因子。在首次运行代码时,会进行扩展因子的全量计算;当后续日线数据更新后,再运行代码,只会计算更新日期的扩展因子,避免了全量计算而带来的过长时间消耗。即实现了增量计算。

2021-01-18 21:58:05 5155 4

原创 Python量化交易学习笔记(46)——通达信日线数据获取

序从2020年初开始接触量化,马上就要满一年了。在这一年里,想过去做量化,想过去做机器学习,想过去做少儿编程教育。就这样大概折腾了小半年时间,最后在CSDN上看到这样一句话:“你把时间投在专业上,两三年,你就能在圈子里小有名气。四五年,你就能靠这个专业赚钱。过了10年以上,你就能成为这个领域的专家。”觉得自己可以按这句话努力一把,于是便坚定了探索量化的决心。python、backtrader、量化、机器学习基本上都是从零学起,对近一年来的学习进度总体还算满意。CSDN的粉丝量280+,博客升级为5级,访

2021-01-17 21:43:19 15217 26

backtrader订单类型示例代码

backtrader中7种订单类型的示例代码,包括订单类型Market、Close、Limit、Stop、StopLimit、StopTrail、StopTrailLimit。

2020-06-04

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除