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

本文涉及的产品
云解析DNS,个人版 1个月
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
简介: PandasTA 源码解析(十九)

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

.\pandas-ta\tests\test_ext_indicator_volume.py

# 导入所需的模块
from .config import sample_data
from .context import pandas_ta
# 导入测试用例相关的模块
from unittest import TestCase
# 从 pandas 模块中导入 DataFrame 类
from pandas import DataFrame
# 定义测试类 TestVolumeExtension,继承自 TestCase 类
class TestVolumeExtension(TestCase):
    # 在整个测试类执行之前调用,设置测试所需的数据
    @classmethod
    def setUpClass(cls):
        # 获取示例数据
        cls.data = sample_data
        # 获取示例数据中的 "open" 列
        cls.open = cls.data["open"]
    # 在整个测试类执行之后调用,清理测试所用到的数据
    @classmethod
    def tearDownClass(cls):
        # 删除示例数据
        del cls.data
        # 删除示例数据中的 "open" 列
        del cls.open
    # 在每个测试方法执行之前调用,可用于设置测试前的准备工作
    def setUp(self): pass
    
    # 在每个测试方法执行之后调用,可用于清理测试后的工作
    def tearDown(self): pass
    # 测试 AD 指标扩展功能
    def test_ad_ext(self):
        # 调用 ad 方法计算 AD 指标并将其追加到数据帧中
        self.data.ta.ad(append=True)
        # 断言数据类型为 DataFrame
        self.assertIsInstance(self.data, DataFrame)
        # 断言数据帧的最后一列为 "AD"
        self.assertEqual(self.data.columns[-1], "AD")
    # 测试 AD 指标中 open 参数扩展功能
    def test_ad_open_ext(self):
        # 调用 ad 方法计算 AD 指标,传入 open_ 参数,并将其追加到数据帧中
        self.data.ta.ad(open_=self.open, append=True)
        # 断言数据类型为 DataFrame
        self.assertIsInstance(self.data, DataFrame)
        # 断言数据帧的最后一列为 "ADo"
        self.assertEqual(self.data.columns[-1], "ADo")
    # 测试 ADOSC 指标扩展功能
    def test_adosc_ext(self):
        # 调用 adosc 方法计算 ADOSC 指标并将其追加到数据帧中
        self.data.ta.adosc(append=True)
        # 断言数据类型为 DataFrame
        self.assertIsInstance(self.data, DataFrame)
        # 断言数据帧的最后一列为 "ADOSC_3_10"
        self.assertEqual(self.data.columns[-1], "ADOSC_3_10")
    # 测试 AOBV 指标扩展功能
    def test_aobv_ext(self):
        # 调用 aobv 方法计算 AOBV 指标并将其追加到数据帧中
        self.data.ta.aobv(append=True)
        # 断言数据类型为 DataFrame
        self.assertIsInstance(self.data, DataFrame)
        # 断言数据帧的最后七列为给定列表中的列名
        self.assertEqual(
            list(self.data.columns[-7:]),
            ["OBV", "OBV_min_2", "OBV_max_2", "OBVe_4", "OBVe_12", "AOBV_LR_2", "AOBV_SR_2"],
        )
        # 移除 "OBV" 列,以免干扰 test_obv_ext() 测试方法
        self.data.drop("OBV", axis=1, inplace=True)
    # 测试 CMF 指标扩展功能
    def test_cmf_ext(self):
        # 调用 cmf 方法计算 CMF 指标并将其追加到数据帧中
        self.data.ta.cmf(append=True)
        # 断言数据类型为 DataFrame
        self.assertIsInstance(self.data, DataFrame)
        # 断言数据帧的最后一列为 "CMF_20"
        self.assertEqual(self.data.columns[-1], "CMF_20")
    # 测试 EFI 指标扩展功能
    def test_efi_ext(self):
        # 调用 efi 方法计算 EFI 指标并将其追加到数据帧中
        self.data.ta.efi(append=True)
        # 断言数据类型为 DataFrame
        self.assertIsInstance(self.data, DataFrame)
        # 断言数据帧的最后一列为 "EFI_13"
        self.assertEqual(self.data.columns[-1], "EFI_13")
    # 测试 EOM 指标扩展功能
    def test_eom_ext(self):
        # 调用 eom 方法计算 EOM 指标并将其追加到数据帧中
        self.data.ta.eom(append=True)
        # 断言数据类型为 DataFrame
        self.assertIsInstance(self.data, DataFrame)
        # 断言数据帧的最后一列为 "EOM_14_100000000"
        self.assertEqual(self.data.columns[-1], "EOM_14_100000000")
    # 测试 KVO 指标扩展功能
    def test_kvo_ext(self):
        # 调用 kvo 方法计算 KVO 指标并将其追加到数据帧中
        self.data.ta.kvo(append=True)
        # 断言数据类型为 DataFrame
        self.assertIsInstance(self.data, DataFrame)
        # 断言数据帧的倒数第二和最后一列为给定列表中的列名
        self.assertEqual(list(self.data.columns[-2:]), ["KVO_34_55_13", "KVOs_34_55_13"])
    # 测试 MFI 指标扩展功能
    def test_mfi_ext(self):
        # 调用 mfi 方法计算 MFI 指标并将其追加到数据帧中
        self.data.ta.mfi(append=True)
        # 断言数据类型为 DataFrame
        self.assertIsInstance(self.data, DataFrame)
        # 断言数据帧的最后一列为 "MFI_14"
        self.assertEqual(self.data.columns[-1], "MFI_14")
    # 测试 NVI 指标扩展功能
    def test_nvi_ext(self):
        # 调用 nvi 方法计算 NVI 指标并将其追加到数据帧中
        self.data.ta.nvi(append=True)
        # 断言数据类型为 DataFrame
        self.assertIsInstance(self.data, DataFrame)
        # 断言数据帧的最后一
    # 测试 pvol 方法是否正常运行并将结果附加到数据框中
    def test_pvol_ext(self):
        self.data.ta.pvol(append=True)
        # 断言数据类型为 DataFrame
        self.assertIsInstance(self.data, DataFrame)
        # 断言最后一列的列名为 "PVOL"
    
    # 测试 pvr 方法是否正常运行并将结果附加到数据框中
    def test_pvr_ext(self):
        self.data.ta.pvr(append=True)
        # 断言数据类型为 DataFrame
        self.assertIsInstance(self.data, DataFrame)
        # 断言最后一列的列名为 "PVR"
    
    # 测试 pvt 方法是否正常运行并将结果附加到数据框中
    def test_pvt_ext(self):
        self.data.ta.pvt(append=True)
        # 断言数据类型为 DataFrame
        self.assertIsInstance(self.data, DataFrame)
        # 断言最后一列的列名为 "PVT"
    
    # 测试 vp 方法是否正常运行并返回 DataFrame
    def test_vp_ext(self):
        result = self.data.ta.vp()
        # 断言返回结果的数据类型为 DataFrame
        self.assertIsInstance(result, DataFrame)
        # 断言返回结果的名称为 "VP_10"

.\pandas-ta\tests\test_indicator_candle.py

# 从项目的config模块中导入错误分析、样本数据、相关性、相关性阈值和详细程度
from .config import error_analysis, sample_data, CORRELATION, CORRELATION_THRESHOLD, VERBOSE
# 从项目的context模块中导入pandas_ta
from .context import pandas_ta
# 导入TestCase类和skip装饰器从unittest模块
from unittest import TestCase, skip
# 导入pandas测试模块作为pdt别名
import pandas.testing as pdt
# 从pandas模块导入DataFrame和Series类
from pandas import DataFrame, Series
# 导入talib库作为tal别名
import talib as tal
# 定义测试类TestCandle,继承自TestCase类
class TestCandle(TestCase):
    # 设置测试类的类方法setUpClass,在所有测试方法之前运行
    @classmethod
    def setUpClass(cls):
        # 初始化测试数据
        cls.data = sample_data
        # 将列名转换为小写
        cls.data.columns = cls.data.columns.str.lower()
        # 初始化开盘价、最高价、最低价和收盘价
        cls.open = cls.data["open"]
        cls.high = cls.data["high"]
        cls.low = cls.data["low"]
        cls.close = cls.data["close"]
        # 如果数据中包含成交量列,则初始化成交量
        if "volume" in cls.data.columns:
            cls.volume = cls.data["volume"]
    # 设置测试类的类方法tearDownClass,在所有测试方法之后运行
    @classmethod
    def tearDownClass(cls):
        # 删除开盘价、最高价、最低价和收盘价
        del cls.open
        del cls.high
        del cls.low
        del cls.close
        # 如果测试数据中存在成交量列,则删除成交量
        if hasattr(cls, "volume"):
            del cls.volume
        # 删除测试数据
        del cls.data
    # 设置测试方法的setUp,在每个测试方法之前运行
    def setUp(self): pass
    
    # 设置测试方法的tearDown,在每个测试方法之后运行
    def tearDown(self): pass
    # 测试Heikin-Ashi指标的方法
    def test_ha(self):
        # 计算Heikin-Ashi指标
        result = pandas_ta.ha(self.open, self.high, self.low, self.close)
        # 断言结果类型为DataFrame
        self.assertIsInstance(result, DataFrame)
        # 断言结果名称为"Heikin-Ashi"
        self.assertEqual(result.name, "Heikin-Ashi")
    # 测试蜡烛图形态指标的方法
    def test_cdl_pattern(self):
        # 计算所有蜡烛图形态指标
        result = pandas_ta.cdl_pattern(self.open, self.high, self.low, self.close, name="all")
        # 断言结果类型为DataFrame
        self.assertIsInstance(result, DataFrame)
        # 断言结果列数与蜡烛图形态指标名称列表长度相等
        self.assertEqual(len(result.columns), len(pandas_ta.CDL_PATTERN_NAMES))
        # 计算特定蜡烛图形态指标(doji)的方法
        result = pandas_ta.cdl_pattern(self.open, self.high, self.low, self.close, name="doji")
        # 断言结果类型为DataFrame
        self.assertIsInstance(result, DataFrame)
        # 计算多个蜡烛图形态指标(doji、inside)的方法
        result = pandas_ta.cdl_pattern(self.open, self.high, self.low, self.close, name=["doji", "inside"])
        # 断言结果类型为DataFrame
        self.assertIsInstance(result, DataFrame)
    # 测试Doji蜡烛图形态指标的方法
    def test_cdl_doji(self):
        # 计算Doji蜡烛图形态指标
        result = pandas_ta.cdl_doji(self.open, self.high, self.low, self.close)
        # 断言结果类型为Series
        self.assertIsInstance(result, Series)
        # 断言结果名称为"CDL_DOJI_10_0.1"
        self.assertEqual(result.name, "CDL_DOJI_10_0.1")
        try:
            # 使用talib计算Doji蜡烛图形态指标
            expected = tal.CDLDOJI(self.open, self.high, self.low, self.close)
            # 断言结果与talib计算结果相等
            pdt.assert_series_equal(result, expected, check_names=False)
        except AssertionError:
            try:
                # 如果断言失败,计算结果与talib计算结果的相关性
                corr = pandas_ta.utils.df_error_analysis(result, expected, col=CORRELATION)
                # 断言相关性大于相关性阈值
                self.assertGreater(corr, CORRELATION_THRESHOLD)
            except Exception as ex:
                # 如果出现异常,调用错误分析函数
                error_analysis(result, CORRELATION, ex)
    # 测试Inside蜡烛图形态指标的方法
    def test_cdl_inside(self):
        # 计算Inside蜡烛图形态指标
        result = pandas_ta.cdl_inside(self.open, self.high, self.low, self.close)
        # 断言结果类型为Series
        self.assertIsInstance(result, Series)
        # 断言结果名称为"CDL_INSIDE"
        self.assertEqual(result.name, "CDL_INSIDE")
        # 计算Inside蜡烛图形态指标,并转换为布尔值
        result = pandas_ta.cdl_inside(self.open, self.high, self.low, self.close, asbool=True)
        # 断言结果类型为Series
        self.assertIsInstance(result, Series)
        # 断言结果名称为"CDL_INSIDE"
        self.assertEqual(result.name, "CDL_INSIDE")
    # 测试Z蜡烛图形态指标的方法
    def test_cdl_z(self):
        # 计算Z蜡烛图形态指标
        result = pandas_ta.cdl_z(self.open, self.high, self.low, self.close)
        # 断言结果类型为DataFrame
        self.assertIsInstance(result, DataFrame)
        # 断言结果名称为"CDL_Z_30_1"
        self.assertEqual(result.name, "CDL_Z_30_1")
相关文章
|
16天前
|
机器学习/深度学习 缓存 算法
netty源码解解析(4.0)-25 ByteBuf内存池:PoolArena-PoolChunk
netty源码解解析(4.0)-25 ByteBuf内存池:PoolArena-PoolChunk
|
18天前
|
XML Java 数据格式
深度解析 Spring 源码:从 BeanDefinition 源码探索 Bean 的本质
深度解析 Spring 源码:从 BeanDefinition 源码探索 Bean 的本质
25 3
|
3天前
|
存储 安全 Java
深度长文解析SpringWebFlux响应式框架15个核心组件源码
以上是Spring WebFlux 框架核心组件的全部介绍了,希望可以帮助你全面深入的理解 WebFlux的原理,关注【威哥爱编程】,主页里可查看V哥每天更新的原创技术内容,让我们一起成长。
|
4天前
|
关系型数据库 分布式数据库 数据库
PolarDB-X源码解析:揭秘分布式事务处理
【7月更文挑战第3天】**PolarDB-X源码解析:揭秘分布式事务处理** PolarDB-X,应对大规模分布式事务挑战,基于2PC协议确保ACID特性。通过预提交和提交阶段保证原子性与一致性,使用一致性快照隔离和乐观锁减少冲突,结合故障恢复机制确保高可用。源码中的事务管理逻辑展现了优化的分布式事务处理流程,为开发者提供了洞察分布式数据库核心技术的窗口。随着开源社区的发展,更多创新实践将促进数据库技术进步。
11 3
|
9天前
|
NoSQL Java Redis
【源码解析】自动配置的这些细节都不知道,别说你会 springboot
【源码解析】自动配置的这些细节都不知道,别说你会 springboot
|
17天前
|
存储 NoSQL 算法
Redis(四):del/unlink 命令源码解析
Redis(四):del/unlink 命令源码解析
|
4天前
|
前端开发 开发者
深入解析Vite.js源码
【7月更文挑战第1天】Vite.js 深入解析:以其无bundle开发、动态ES模块加载提升开发效率;本地HTTP服务器配合WebSocket实现热更新;按需加载减少资源占用;预构建优化生产环境性能;基于Rollup的插件系统增强灵活性。Vite,一个创新且高效的前端构建工具。
14 0
|
9天前
|
Java 容器 Spring
Spring5源码解析5-ConfigurationClassPostProcessor (上)
Spring5源码解析5-ConfigurationClassPostProcessor (上)
|
16天前
|
XML Java 数据格式
Spring容器启动源码解析
Spring容器启动源码解析
|
18天前
|
Java Spring
深入解析Spring源码,揭示JDK动态代理的工作原理。
深入解析Spring源码,揭示JDK动态代理的工作原理。
18 0

推荐镜像

更多