PandasTA 源码解析(二十二)(3)

本文涉及的产品
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: PandasTA 源码解析(二十二)

PandasTA 源码解析(二十二)(2)https://developer.aliyun.com/article/1506320

.\pandas-ta\tests\test_utils_metrics.py

# 导入 unittest 模块中的 skip 和 TestCase 类
from unittest import skip, TestCase
# 导入 pandas 模块中的 DataFrame 类
from pandas import DataFrame
# 从当前目录下的 config 模块中导入 sample_data 变量
from .config import sample_data
# 从当前目录下的 context 模块中导入 pandas_ta 模块
from .context import pandas_ta
# 定义测试类 TestUtilityMetrics,继承自 TestCase 类
class TestUtilityMetrics(TestCase):
    # 类方法,设置测试所需的数据
    @classmethod
    def setUpClass(cls):
        cls.data = sample_data
        cls.close = cls.data["close"]
        # 计算价格序列的百分比收益率,不累积
        cls.pctret = pandas_ta.percent_return(cls.close, cumulative=False)
        # 计算价格序列的对数收益率,不累积
        cls.logret = pandas_ta.percent_return(cls.close, cumulative=False)
    # 类方法,清理测试所需的数据
    @classmethod
    def tearDownClass(cls):
        del cls.data
        del cls.pctret
        del cls.logret
    # 设置测试用例的前置操作
    def setUp(self): pass
    # 设置测试用例的后置操作
    def tearDown(self): pass
    # 测试计算 CAGR 的函数
    def test_cagr(self):
        # 调用 utils 模块中的 cagr 函数计算 CAGR
        result = pandas_ta.utils.cagr(self.data.close)
        # 断言返回结果类型为浮点数
        self.assertIsInstance(result, float)
        # 断言计算结果大于 0
        self.assertGreater(result, 0)
    # 测试计算 Calmar 比率的函数
    def test_calmar_ratio(self):
        # 调用 calmar_ratio 函数计算 Calmar 比率
        result = pandas_ta.calmar_ratio(self.close)
        # 断言返回结果类型为浮点数
        self.assertIsInstance(result, float)
        # 断言计算结果大于等于 0
        self.assertGreaterEqual(result, 0)
        # 传入参数 years=0 调用 calmar_ratio 函数
        result = pandas_ta.calmar_ratio(self.close, years=0)
        # 断言返回结果为 None
        self.assertIsNone(result)
        # 传入参数 years=-2 调用 calmar_ratio 函数
        result = pandas_ta.calmar_ratio(self.close, years=-2)
        # 断言返回结果为 None
        self.assertIsNone(result)
    # 测试计算下行偏差的函数
    def test_downside_deviation(self):
        # 调用 downside_deviation 函数计算下行偏差
        result = pandas_ta.downside_deviation(self.pctret)
        # 断言返回结果类型为浮点数
        self.assertIsInstance(result, float)
        # 断言计算结果大于等于 0
        self.assertGreaterEqual(result, 0)
        # 调用 downside_deviation 函数计算下行偏差
        result = pandas_ta.downside_deviation(self.logret)
        # 断言返回结果类型为浮点数
        self.assertIsInstance(result, float)
        # 断言计算结果大于等于 0
        self.assertGreaterEqual(result, 0)
    # 测试计算回撤的函数
    def test_drawdown(self):
        # 调用 drawdown 函数计算回撤
        result = pandas_ta.drawdown(self.pctret)
        # 断言返回结果类型为 DataFrame
        self.assertIsInstance(result, DataFrame)
        # 断言结果的名称为 "DD"
        self.assertEqual(result.name, "DD")
        # 调用 drawdown 函数计算回撤
        result = pandas_ta.drawdown(self.logret)
        # 断言返回结果类型为 DataFrame
        self.assertIsInstance(result, DataFrame)
        # 断言结果的名称为 "DD"
        self.assertEqual(result.name, "DD")
    # 测试计算 Jensen's Alpha 的函数
    def test_jensens_alpha(self):
        # 从百分比收益率中随机抽取与收盘价序列长度相同的样本作为基准收益率
        bench_return = self.pctret.sample(n=self.close.shape[0], random_state=1)
        # 调用 jensens_alpha 函数计算 Jensen's Alpha
        result = pandas_ta.jensens_alpha(self.close, bench_return)
        # 断言返回结果类型为浮点数
        self.assertIsInstance(result, float)
        # 断言计算结果大于等于 0
        self.assertGreaterEqual(result, 0)
    # 测试计算对数最大回撤的函数
    def test_log_max_drawdown(self):
        # 调用 log_max_drawdown 函数计算对数最大回撤
        result = pandas_ta.log_max_drawdown(self.close)
        # 断言返回结果类型为浮点数
        self.assertIsInstance(result, float)
        # 断言计算结果大于等于 0
        self.assertGreaterEqual(result, 0)
    # 测试计算最大回撤的函数
    def test_max_drawdown(self):
        # 调用 max_drawdown 函数计算最大回撤
        result = pandas_ta.max_drawdown(self.close)
        # 断言返回结果类型为浮点数
        self.assertIsInstance(result, float)
        # 断言计算结果大于等于 0
        self.assertGreaterEqual(result, 0)
        # 传入参数 method="percent" 调用 max_drawdown 函数
        result = pandas_ta.max_drawdown(self.close, method="percent")
        # 断言返回结果类型为浮点数
        self.assertIsInstance(result, float)
        # 断言计算结果大于等于 0
        self.assertGreaterEqual(result, 0)
        # 传入参数 method="log" 调用 max_drawdown 函数
        result = pandas_ta.max_drawdown(self.close, method="log")
        # 断言返回结果类型为浮点数
        self.assertIsInstance(result, float)
        # 断言计算结果大于等于 0
        self.assertGreaterEqual(result, 0)
        # 传入参数 all=True 调用 max_drawdown 函数
        result = pandas_ta.max_drawdown(self.close, all=True)
        # 断言返回结果类型为字典
        self.assertIsInstance(result, dict)
        # 断言字
    # 测试 optimal_leverage 函数,计算最佳杠杆倍数
    def test_optimal_leverage(self):
        # 调用 optimal_leverage 函数,计算默认参数情况下的最佳杠杆倍数
        result = pandas_ta.optimal_leverage(self.close)
        # 断言结果为整数类型
        self.assertIsInstance(result, int)
        # 调用 optimal_leverage 函数,计算开启日志情况下的最佳杠杆倍数
        result = pandas_ta.optimal_leverage(self.close, log=True)
        # 断言结果为整数类型
        self.assertIsInstance(result, int)
    # 测试 pure_profit_score 函数,计算纯利得分
    def test_pure_profit_score(self):
        # 调用 pure_profit_score 函数,计算纯利得分
        result = pandas_ta.pure_profit_score(self.close)
        # 断言结果大于等于0
        self.assertGreaterEqual(result, 0)
    # 测试 sharpe_ratio 函数,计算夏普比率
    def test_sharpe_ratio(self):
        # 调用 sharpe_ratio 函数,计算夏普比率
        result = pandas_ta.sharpe_ratio(self.close)
        # 断言结果为浮点数类型
        self.assertIsInstance(result, float)
        # 断言结果大于等于0
        self.assertGreaterEqual(result, 0)
    # 测试 sortino_ratio 函数,计算索提诺比率
    def test_sortino_ratio(self):
        # 调用 sortino_ratio 函数,计算索提诺比率
        result = pandas_ta.sortino_ratio(self.close)
        # 断言结果为浮点数类型
        self.assertIsInstance(result, float)
        # 断言结果大于等于0
        self.assertGreaterEqual(result, 0)
    # 测试 volatility 函数,计算波动率
    def test_volatility(self):
        # 计算收益率
        returns_ = pandas_ta.percent_return(self.close)
        # 调用 volatility 函数,计算波动率,返回结果包含收益率信息
        result = pandas_ta.utils.volatility(returns_, returns=True)
        # 断言结果为浮点数类型
        self.assertIsInstance(result, float)
        # 断言结果大于等于0
        self.assertGreaterEqual(result, 0)
        # 遍历不同时间段
        for tf in ["years", "months", "weeks", "days", "hours", "minutes", "seconds"]:
            # 调用 volatility 函数,计算指定时间段的波动率
            result = pandas_ta.utils.volatility(self.close, tf)
            # 使用子测试,传入时间段参数
            with self.subTest(tf=tf):
                # 断言结果为浮点数类型
                self.assertIsInstance(result, float)
                # 断言结果大于等于0
                self.assertGreaterEqual(result, 0)


相关文章
|
2月前
|
监控 网络协议 Java
Tomcat源码解析】整体架构组成及核心组件
Tomcat,原名Catalina,是一款优雅轻盈的Web服务器,自4.x版本起扩展了JSP、EL等功能,超越了单纯的Servlet容器范畴。Servlet是Sun公司为Java编程Web应用制定的规范,Tomcat作为Servlet容器,负责构建Request与Response对象,并执行业务逻辑。
Tomcat源码解析】整体架构组成及核心组件
|
21天前
|
存储 缓存 Java
什么是线程池?从底层源码入手,深度解析线程池的工作原理
本文从底层源码入手,深度解析ThreadPoolExecutor底层源码,包括其核心字段、内部类和重要方法,另外对Executors工具类下的四种自带线程池源码进行解释。 阅读本文后,可以对线程池的工作原理、七大参数、生命周期、拒绝策略等内容拥有更深入的认识。
什么是线程池?从底层源码入手,深度解析线程池的工作原理
|
25天前
|
开发工具
Flutter-AnimatedWidget组件源码解析
Flutter-AnimatedWidget组件源码解析
|
21天前
|
设计模式 Java 关系型数据库
【Java笔记+踩坑汇总】Java基础+JavaWeb+SSM+SpringBoot+SpringCloud+瑞吉外卖/谷粒商城/学成在线+设计模式+面试题汇总+性能调优/架构设计+源码解析
本文是“Java学习路线”专栏的导航文章,目标是为Java初学者和初中高级工程师提供一套完整的Java学习路线。
178 37
|
13天前
|
编解码 开发工具 UED
QT Widgets模块源码解析与实践
【9月更文挑战第20天】Qt Widgets 模块是 Qt 开发中至关重要的部分,提供了丰富的 GUI 组件,如按钮、文本框等,并支持布局管理、事件处理和窗口管理。这些组件基于信号与槽机制,实现灵活交互。通过对源码的解析及实践应用,可深入了解其类结构、布局管理和事件处理机制,掌握创建复杂 UI 界面的方法,提升开发效率和用户体验。
64 12
|
2月前
|
测试技术 Python
python自动化测试中装饰器@ddt与@data源码深入解析
综上所述,使用 `@ddt`和 `@data`可以大大简化写作测试用例的过程,让我们能专注于测试逻辑的本身,而无需编写重复的测试方法。通过讲解了 `@ddt`和 `@data`源码的关键部分,我们可以更深入地理解其背后的工作原理。
30 1
|
2月前
|
开发者 Python
深入解析Python `httpx`源码,探索现代HTTP客户端的秘密!
深入解析Python `httpx`源码,探索现代HTTP客户端的秘密!
72 1
|
2月前
|
开发者 Python
深入解析Python `requests`库源码,揭开HTTP请求的神秘面纱!
深入解析Python `requests`库源码,揭开HTTP请求的神秘面纱!
132 1
|
2月前
|
NoSQL Redis
redis 6源码解析之 ziplist
redis 6源码解析之 ziplist
25 5
|
2月前
|
算法 安全 Java
深入解析Java多线程:源码级别的分析与实践
深入解析Java多线程:源码级别的分析与实践

热门文章

最新文章

推荐镜像

更多
下一篇
无影云桌面