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")