我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Python量化因子测算与绘图的代码怎么写

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Python量化因子测算与绘图的代码怎么写

这篇“Python量化因子测算与绘图的代码怎么写”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Python量化因子测算与绘图的代码怎么写”文章吧。

量化因子的测算通常都是模拟交易,计算各种指标,其中:

  • 测算需要用到的第三方库:numpy,pandas,talib

  • 绘图需要用到的第三方库:matplotlib,seaborn

其他库随策略的需要额外添加

因子测算框架

这里博主分享自己测算时常使用的流程,希望与大家共同进步!

测算时从因子到收益的整个流程如下:策略(因子组合) -> 买卖信号 -> 买点与卖点 -> 收益

因此我们在测算时,针对每一个个股:

1. 预处理股票数据

首先这里是常用的一个工具导入,包括测算用的库与绘图用的库(含图片中文显示空白解决方案)

# 测算用import numpy as npimport pandas as pdfrom copy import deepcopyfrom tqdm import tqdmfrom datetime import datetimeimport talib# 绘图用import matplotlib as mplimport matplotlib.pyplot as pltimport seaborn as sns%matplotlib inline# 绘图现实中文sns.set()plt.rcParams["figure.figsize"] = (20,10)plt.rcParams['font.sans-serif'] = ['Arial Unicode MS']  # 当前字体支持中文plt.rcParams['axes.unicode_minus'] = False  # 解决保存图像是负号'-'显示为方块的问题# 其他import warningswarnings.filterwarnings("ignore")

然后是循环读取股票的代码:

import osdef readfile(path, limit=None):    files = os.listdir(path)    file_list = []    for file in files:  # 遍历文件夹        if not os.path.isdir(file):            file_list.append(path + '/' + file)    if limit:        return file_list[:limit]    return file_liststock_dict = {}for _file in tqdm(readfile("../data/stock_data")):    if not _file.endswith(".pkl"):        continue    # TODO 这里可以添加筛选,是否需要将当前的股票添加到测算的股票池中    file_df = pd.read_pickle(_file)    file_df.set_index(["日期"], inplace=True)    file_df.index.name = ""    file_df.index = pd.to_datetime(file_df.index)    file_df.rename(columns={'开盘':'open',"收盘":"close","最高":"high","最低":"low","成交量":"volume"},inplace=True)    stock_code = _file.split("/")[-1].replace(".pkl", '')    # TODO 这里可以添加日期,用来截取一部分数据    stock_dict[stock_code] = file_df

上面一部分是处理股票数据,处理后的数据都会保存在 stock_dict 这个变量中,键是股票的代码,值是股票数据

2. 指标测算

测算指标时,我们以一只股票为例:

for _index,_stock_df in tqdm(stock_dict.items()):    measure_df = deepcopy(_stock_df)

代码中的:

  • 这里的measure_df即要测算的dataframe数据

  • 使用deepcopy是防止测算的过程影响到原始数据

然后我们就可以循环这一个股票的每一行(代表每一天),测算的交易规则如下:

  • 买入规则:买入信号发出&当前没有持仓,则买入

  • 卖出规则:卖出信号发出&当前有持仓,则卖出

# 开始测算trade_record_list = []this_trade:dict = Nonefor _mea_i, _mea_series in measure_df.iterrows(): # 循环每一天    if 发出买入信号:        if this_trade is None:  # 当前没有持仓,则买入            this_trade = {                "buy_date": _mea_i,                "close_record": [_mea_series['close']],            }    elif 发出卖出信号:        if this_trade is not None:  # 要执行卖出            this_trade['sell_date'] = _mea_i            this_trade['close_record'].append(_mea_series['close'])            trade_record_list.append(this_trade)            this_trade = None    else:        if this_trade is not None:  # 当前有持仓            this_trade['close_record'].append(_mea_series['close'])

上述代码中,我们将每一个完整的交易(买->持有->卖),都保存在了trade_record_list变量中,每一个完整的交易都会记录:

{    'buy_date': Timestamp('2015-08-31 00:00:00'), # 买入时间    'close_record': [41.1,42.0,40.15,40.65,36.6,32.97], # 收盘价的记录    'sell_date': Timestamp('2015-10-12 00:00:00')} # 卖出时间    # TODO 也可以添加自定义记录的指标}

3. 测算结果整理

直接使用 pd.DataFrame(trade_record_list),就可以看到总的交易结果:

Python量化因子测算与绘图的代码怎么写

整理的过程也相对简单且独立,就是循环这个交易,然后计算想要的指标,比如单次交易的年化收益可以使用:

trade_record_df = pd.DataFrame(trade_record_list)for _,_trade_series in trade_record_df.iterrows():    trade_record_df.loc[_i,'年化收益率'] = (_trade_series['close_record'][-1] - _trade_series['close_record'][0])/_trade_series['close_record'][0]/(_trade_series['sell_date'] - _trade_series['buy_date']).days * 365 # 年化收益    # TODO 这里根据自己想要的结果添加更多的测算指标

4. 结果绘图

绘图的代码通常比较固定,比如胜率图:

# 清理绘图缓存plt.cla()plt.clf()# 开始绘图plt.figure(figsize=(10, 14), dpi=100)# 使用seaborn绘制胜率图fig = sns.heatmap(pd.DataFrame(total_measure_record).T.round(2), annot=True, cmap="RdBu_r",center=0.5)plt.title("胜率图")scatter_fig = fig.get_figure()# 保存到本地scatter_fig.savefig("胜率图")scatter_fig.show() # 最后显示

以上就是关于“Python量化因子测算与绘图的代码怎么写”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注编程网行业资讯频道。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Python量化因子测算与绘图的代码怎么写

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Python量化因子测算与绘图的代码怎么写

这篇“Python量化因子测算与绘图的代码怎么写”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Python量化因子测算与绘图
2023-07-05

Python量化因子测算与绘图超详细流程代码

这篇文章主要介绍了Python量化因子测算与绘图,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
2023-02-24

python绘制词云图的代码怎么写

Python绘制词云图词云图可视化文本数据中词频,用于探索文本数据集中的话题。Python提供了WordCloud和matplotlib库来简化词云图创建。使用WordCloud:导入库生成文本数据创建WordCloud对象并生成图像使用matplotlib显示图像使用matplotlib创建词云图:导入库创建WordCloud对象使用matplotlib绘制词云图WordCloud和matplotlib提供选项来自定义颜色、字体、形状、大小和布局。高级功能包括词频分析、停用词处理、词干化和情感分析。通过
python绘制词云图的代码怎么写
2024-04-13

python绘制词云图的代码怎么写

要绘制词云图,你可以使用Python中的wordcloud库。以下是一个简单的例子:from wordcloud import WordCloudimport matplotlib.pyplot as plt# 读取文本数据text
python绘制词云图的代码怎么写
2024-04-09

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录