Python实现交易策略评价指标-收益率

1.收益率的定义

收益率几乎是所有投资者都会关注的一个指标,收益率的高低决定了投资策略的赚钱能力,常见关于收益率的指标如下:

  1. 持有期收益率
    持有期收益率 = 期末投资权益 − 期初投资权益 期初投资权益 持有期收益率 = \frac {期末投资权益 - 期初投资权益}{期初投资权益} 持有期收益率=期初投资权益期末投资权益期初投资权益

  2. 单利年化收益率(算术收益率)

    单利年化收益率 = 持有期收益率 持有期交易天数 ∗ 年交易天数 单利年化收益率 = \frac{持有期收益率}{持有期交易天数} * 年交易天数 单利年化收益率=持有期交易天数持有期收益率年交易天数

  3. 复利年化收益率(几何收益率)
    复利年化收益率 = ( 1 + 持有期收益率 ) 年交易天数 持有期交易天数 − 1 复利年化收益率 = (1 + 持有期收益率)^{\frac{年交易天数}{持有期交易天数}} - 1 复利年化收益率=1+持有期收益率)持有期交易天数年交易天数1

在实际计算中,一般年交易日天数可以取250

2. 计算收益率
  1. 获取贵州茅台2018.6.1 ~ 2019.12.31期间的日k数据

    import pandas as pd
    import numpy as np
    import baostock as bslg = bs.login()
    # 显示登陆返回信息
    print('login respond error_code:'+lg.error_code)
    print('login respond  error_msg:'+lg.error_msg)#### 获取沪深A股历史K线数据 ####
    # 详细指标参数,参见“历史行情指标参数”章节;“分钟线”参数与“日线”参数不同。“分钟线”不包含指数。
    # 分钟线指标:date,time,code,open,high,low,close,volume,amount,adjustflag
    # 周月线指标:date,code,open,high,low,close,volume,amount,adjustflag,turn,pctChg
    rs = bs.query_history_k_data_plus("sh.600519","date,code,open,high,low,close,volume",start_date='2018-06-01', end_date='2019-12-31',frequency="d", adjustflag="3")
    print('query_history_k_data_plus respond error_code:'+ rs.error_code)
    print('query_history_k_data_plus respond  error_msg:'+ rs.error_msg)data_list = []
    while (rs.error_code == '0') & rs.next():# 获取一条记录,将记录合并在一起data_list.append(rs.get_row_data())
    result = pd.DataFrame(data_list, columns=rs.fields)#### 结果集输出到csv文件 ####   
    result.to_csv("贵州茅台_k_data.csv", index=False)
    print(result)#### 登出系统 ####
    bs.logout()
    
  2. 读取贵州茅台的数据,并绘制股价走势图

    # 读取贵州茅台的日k数据,读入日期和收盘价
    data = pd.read_csv("贵州茅台_k_data.csv")[["date", "close"]];# 画出持有期股价走势图
    data.set_index('date', inplace=True)
    data.plot(figsize=(16, 10), subplots=True)
    

    在这里插入图片描述

  3. 计算单利年化收益率

    # 计算累计收益率
    total_return = (data.iloc[-1] - data.iloc[0]).close / data.iloc[0].close
    print("累计收益率:%.2f%%" %(total_return * 100))
    >> 累计收益率:58.77%# 计算持有期天数
    data_length = len(data.index)
    # 计算单利年化收益(算术收益率)
    annual_return1 = (total_return / data_length) * 250
    print("单利年化收益:%.2f%%" %(annual_return1 * 100))
    >> 单利年化收益:37.87%
    
  4. 计算复利年华收益率

    # 计算复利年化收益(几何收益率)
    annual_return2 = pow(1 + total_return, 250 / data_length) - 1
    print("复利年化收益:%.2f%%" %(annual_return2 * 100))
    >> 复利年化收益:34.70%
    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/165475.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

GeoTrust SSL数字安全证书介绍

一、GeoTrust OV证书的介绍 GeoTrust OV证书是由GeoTrust公司提供的SSL证书,它是一种支持OpenSSL的数字证书,具有更高的安全性和可信度。GeoTrust是全球领先的网络安全解决方案提供商,为各类用户提供SSL证书和信任管理服务。GeoTrust OV证书…

docker国内镜像加速

创建或修改 /etc/docker/daemon.json 文件,修改为如下形式 {"registry-mirrors": ["https://registry.docker-cn.com","http://hub-mirror.c.163.com","https://docker.mirrors.ustc.edu.cn"] } Docker中国区官方镜像htt…

51单片机应用从零开始(八)·循环语句(for循环、while 语句、do‐while 语句)

51单片机应用从零开始(七)循环语句(if语句,swtich语句)-CSDN博客 目录 1. 用for 语句控制蜂鸣器鸣笛次数 2. 用while 语句控制 LED 3. 用 do‐while 语句控制 P0 口 8 位 LED 流水点亮 1. 用for 语句控制蜂鸣器鸣笛…

Kafka 控制器(controller)

Kafka 控制器(controller) 在kafka集群中 会存在一个或者多个broker(一个服务器就是一个broker),其中有一个broker会被选举为控制器 kafka controller ,负责管理整个集群中所有副本、分区的状态&#xff0…

多语言快速排序算法

快速排序是一种高效的排序算法,使用分治法策略。它的基本思想是:选择一个元素作为“基准”(pivot),重新排序数列,所有比基准值小的元素摆放在基准前面,所有比基准值大的摆在基准的后面。在这个分…

python内置模块binascii,二进制数据和ASCII字符串之间进行转换

一、简介 binascii是Python标准库中的一个模块,提供了在二进制数据和ASCII字符串之间进行转换的功能。它包含了一些用于处理二进制数据的函数,可以进行二进制数据的编码、解码和转换。 二、方法 binascii.unhexlify(hexstr):将十六进制表示…

事件循环机制及常见面试题

借鉴: 《Javascript 忍者秘籍》第二版,事件循环篇 面试 | JS 事件循环 event loop 经典面试题含答案 - 知乎 (zhihu.com) 概念 主栈队列就是一个宏任务,每一个宏任务执行完就会执行宏任务中的微任务,直到微任务全部都执行完&a…

Python 使用XlsxWriter操作Excel

在数据处理和报告生成的领域中,Excel 文件一直是广泛使用的标准格式。为了让 Python 开发者能够轻松创建和修改 Excel 文件,XlsxWriter 库应运而生。XlsxWriter 是一个功能强大的 Python 模块,专门用于生成 Microsoft Excel 2007及以上版本&a…

Vue3-provide和inject

作用和场景:顶层组件向任意的底层组件传递数据和方法,实现跨层组件通信 跨层传递普通数据: 1.顶层组件通过provide函数提供数据 2.底层组件通过inject函数获取数据 既可以传递普通数据,也可以使用ref传递响应式数据&#xff08…

批量插入SQL 错误 [933] [42000]: ORA-00933: SQL 命令未正确结束

使用DBeaver向【oracle数据库】插入大量数据 INSERT INTO Student(name,sex,age,address,birthday) VALUES(Nike,男,18,北京,2000-01-01) ,(Nike,男,18,北京,2000-01-01) ,(Nike,女,18,北京,2000-01-01) ,(Nike,女,18,北京,2000-01-01) ,(Nike,男,18,北京,2000-01-01) ,(Nike…

使用Arrays.Sort并定制Comparator排序解决合并区间

合并区间-力扣算法题56题 以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] [starti, endi] 。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间 。 示例 1: 输入&am…

新能源行业碳酸氢锂纯化除钙镁工艺

在碳酸氢锂纯化中常规的沉淀或者其它工艺不能够满足钙镁等碱土金属的深度去除。通常采用离子交换工艺实现钙离子、镁离子的去除,以提升碳酸锂的品质,但是国产树脂在此行业应用中存在的使用量过大的问题,会导致设备造价偏高、废水量太大&#…

C++二分向量算法:最多可以参加的会议数目 II

本题的其它解法 C二分算法:最多可以参加的会议数目 II 本文涉及的基础知识点 二分查找算法合集 题目 给你一个 events 数组,其中 events[i] [startDayi, endDayi, valuei] ,表示第 i 个会议在 startDayi 天开始,第 endDayi …

gitt开源项目的意义,公司为什么会对在gitt上有开源项目的人更大机会

Git是一种分布式版本控制系统,它可以帮助程序员管理代码的历史版本和协同工作。同时,Git也成为了开源项目的主要托管平台之一。Git的开源项目意义重大,因为这种开源项目托管平台可以帮助开发者将代码和项目分享给全球的开发者,并且…

从0开始学习JavaScript--JavaScript元编程

JavaScript作为一门灵活的动态语言,具备强大的元编程能力。元编程是一种通过操作程序自身结构的编程方式,使得程序能够在运行时动态地创建、修改、查询自身的结构和行为。本文将深入探讨JavaScript中元编程的各个方面,包括原型、反射、代理等…

2023亚太杯数学建模C题思路模型代码

已完成C题思路代码,文末名片获取 C题是我们的一个数据分析问题,这个题目主要就是我们要去收集数据,清洗处理后进行分析。 问题1:分析影响中国新能源电动汽车发展的主要因素,建立数学模型,描述这些因素对中…

对未来新能源车测试工具的看法

汽车行业正在经历变革的说法算是比较轻描淡写的了,还记得我1983年加入这个行业时,行业聚焦点是引入发动机管理系统。当时还是以家庭掀背车为主的时代,发动机分析仪的体积像衣柜一样大,还没出现“CAN”通信协议。现在经常听到我的导…

PHP预约上门回收废品系统的代码披露

PHP预约上门回收废品系统的代码披露 <?phpnamespace app\admin\controller;class Code {public function getTopDomainhuo(){error_reporting(0);$host $_SERVER["HTTP_HOST"];$matchstr "[^\\.]\\.(?:(" . $host . ")|\\w{2}|((" . $ho…

【第一部分:概述】ARM Realm Management Monitor specification

目录 概述机密计算系统软件组成MonitorRealmRealm Management Monitor (RMM)Virtual Machine (VM)HypervisorSecure Partition Manager (SPM)Trusted OS (TOS)Trusted Application (TA) Realm Management Monitor 参考文献 概述 RMM是一个软件组件&#xff0c;它构成了实现ARM…