1. 首页 > 基金定投

股票选股代码(聊聊回测选股代码框架)

2月3日周五收盘后的数据,没有发出买入信号。其他一些之前买入的股票,这几周要么获利要么回本,陆续都在卖出,回笼资金等着下一波信号出来再实盘直播。估计一周内不一定有新的信号,所以打算在没有操作的时间里和大家聊一聊自己做的基于backtrader的回测选股程序的框架。

程序有两个版本,一个是在本地分几个py文件分别运行的,一个是打包成一个EXE文件定期执行然后邮件发送回测结果(以便出差的时候可以收到每日回测结果)。核心代码都一样,只是结构上稍有区别,打包运行的版本为了缩短运行时间采用多进程,在更新当日数据的同时就开始个股回测。

main-mail.py就是整合了数据更新、个股回测和邮件发送的脚本,再用Pyinstaller打包成exe文件

程序在编写时都是一点点码起来的,从获取平台数据,数据加工整理到backtrader回测库框架搭建,策略编写,策略优化,回测结果分析输出等等。不过在回顾的时候从大框架开始,再到一个个细分部件的代码会更有逻辑一点。今天就先从整体框架和需要的基本工具开始,本人也只是会一点点python,略懂一点点证券,不会也没有能力讲太深,请大家见谅并多多指正交流。

要做一个量化选股的程序,首先要确定就是用什么语言,用什么开发工具。因为只是自己自学自用的小程序,不需太要考虑语言的效率等问题,最重要的就是稳定易学,同时第三方库要越多越好,这当然首选Python了。Python有很完善的自带和第三方库,也是公认的最适合数据处理分析的(有pandas)语言,而且各个数据平台也都有python的API,最重要的是有个免费开原的量化框架Backtrader。

Python环境的搭建,建议用Anaconda,比较省心。开发工具我用的Pycharm,也是因为有免费好用的版本,而且代码提示做的比较好。Anaconda的安装使用可以百度下,网上好多教程,比如 下图的。

 

 

Pycharm可以到官网下载 ,首页Download,选择Community版本。

 


 

证券数据平台,常用的有Baostock和Tushare(引用外网地址审核老是过不了,网址大家看图片吧)我K线数据用的Baostock,Tushare只是定期手动更新下全部股票清单。

baostock的数据是免费的,不限次数。日K线当天17:30更新,分钟K线20:30更新。


Tushare我只用来手动更新股票列表,因为我的策略基本都要120交易日的数据

Tushare我只用来手动更新股票列表,因为我的策略基本都要120交易日的数据,新股基本不在考虑,所以也不需要经常更新。

最重要的就是一个好的量化框架,我自己也自己学着写过量化程序,但是功能很简单。直到22年底发现有backtrader这么优秀且免费开源的python量化框架,真是后悔没早点发现,浪费了一年的时间Backtrader单独拿出来可以写一本书,作者真的很伟大,各个模块的搭建设置也很合理。Backtrader官网见下图

 

官方文档也写的很细很全,英文不错的可以直接看文档学习。英文一般的也可以百度一些教程。

 

有编程基础的,推荐CSDN上“仓鼠大王”的几篇文章,从代码和整体框架的角度来学习。

选好语言,选好编译工具,选好回测框架程序也找到了数据来源,那么我们就可以开始编写自己的回测程序了。

 

先从导入的模块来谈下这个程序总的结构。

import os
import baostock as bs
import backtrader as bt
import datetime
import pandas as pd
from backtrader.feeds import PandasData
from strategys.strategy_Inflection_point_Ver2 import Mystrategy
import time
import numpy as np
import smtplib
from email.mime.multipart import MIMEMultipart
from email.header import Header
from email.mime.application import MIMEApplication
import talib.stream
from multiprocessing import Process

os, datetime, time, 这些都是常用的python自带库,后面介绍详细代码的时候会顺带讲到。

import baostock as bs # 导入baostock的API模块,简写为bs,从baostock平台获取数据用。

import backtrader as bt # 导入最核心的backtrader框架。我们回测所用的策略,要加载的数据,以及回测后的收益、指标分析、数据可视化等都需要通过backtrader相关的模块来处理。

import pandas as pd # 导入pandas模块,这个是最有名的数据分析模块,各类科学计算大数据分析都离不开它。我们用他来读取、保存数据,筛选加工数据,最重要的是各个平台和backtrader框架也是默认pandas格式数据的。

import numpy as np # 导入numpy模块,这个也是科学计算常用模块

import smtplib # 导入 smtplib 模块,这是一个邮件模块,用来通过SMTP协议发送邮件用的。我用它来登录邮箱,将当日回测后的统计表发给我另一个邮箱(这样外出也不会错过明天的买入卖出信号)。

import email. XXXXXXXX # 导入email 模块的各个包,主要用来编写邮件内容和添加附件的。

from multiprocessing import Process # 导入multiprocessing 模块的Process 包,这是个多进程执行的包,可以在更新数据的同时开始执行回测。后面会讲到,因为有4000多支股票,更新所有股票当日数据就要个把小时。执行4000多个回测也要1~2小时。

import talib.stream # talib是个第三方金融指标库,backtrader里可以直接引用,其实不需要单独import。这边主要是因为打包成EXE文件时报错过,所以把talib.stream也手动加载了。

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站不拥有所有权,不承担相关法律责任。如发现有侵权/违规的内容, 联系QQ15101117,本站将立刻清除。

联系我们

在线咨询:点击这里给我发消息

微信号:666666