74 lines
2.5 KiB
Python
74 lines
2.5 KiB
Python
import pandas as pd
|
||
import numpy as np
|
||
import sys
|
||
import os
|
||
|
||
from core.biz.metrics_calculation import MetricsCalculation
|
||
|
||
def test_k_shape():
|
||
# 创建测试数据
|
||
test_data = pd.DataFrame({
|
||
'open': [9.3030000000],
|
||
'high': [9.3030000000],
|
||
'low': [9.3020000000],
|
||
'close': [9.3020000000]
|
||
})
|
||
|
||
print("测试数据:")
|
||
print(test_data)
|
||
print()
|
||
|
||
# 计算基本特征
|
||
test_data['high_low_diff'] = test_data['high'] - test_data['low']
|
||
test_data['open_close_diff'] = abs(test_data['close'] - test_data['open'])
|
||
test_data['open_close_fill'] = test_data['open_close_diff'] / test_data['high_low_diff']
|
||
test_data['price_range_ratio'] = test_data['high_low_diff'] / test_data['close'] * 100
|
||
|
||
print("计算的特征:")
|
||
print(f"high_low_diff: {test_data['high_low_diff'].iloc[0]}")
|
||
print(f"open_close_diff: {test_data['open_close_diff'].iloc[0]}")
|
||
print(f"open_close_fill: {test_data['open_close_fill'].iloc[0]}")
|
||
print(f"price_range_ratio: {test_data['price_range_ratio'].iloc[0]}%")
|
||
print()
|
||
|
||
# 检查"一字"条件
|
||
price_range_ratio = test_data['price_range_ratio'].iloc[0]
|
||
open_close_fill = test_data['open_close_fill'].iloc[0]
|
||
|
||
print("条件检查:")
|
||
print(f"price_range_ratio < 0.01: {price_range_ratio < 0.01}")
|
||
print(f"open_close_fill > 0.9: {open_close_fill > 0.9}")
|
||
print()
|
||
|
||
# 使用MetricsCalculation类
|
||
mc = MetricsCalculation()
|
||
|
||
# 为了测试,我们需要创建一个有足够数据的DataFrame
|
||
# 复制测试数据多次以创建滚动窗口
|
||
extended_data = pd.concat([test_data] * 25, ignore_index=True)
|
||
|
||
# 运行set_k_shape函数
|
||
result = mc.set_k_shape(extended_data.copy())
|
||
|
||
print("分类结果:")
|
||
print(f"k_shape: {result['k_shape'].iloc[0]}")
|
||
print()
|
||
|
||
# 详细分析为什么没有被分类为"一字"
|
||
print("详细分析:")
|
||
print(f"价格范围比例: {price_range_ratio:.6f}%")
|
||
print(f"实体占比: {open_close_fill:.6f}")
|
||
print()
|
||
|
||
if price_range_ratio < 0.01:
|
||
print("✓ 满足价格范围比例 < 0.01% 的条件")
|
||
else:
|
||
print(f"✗ 不满足价格范围比例 < 0.01% 的条件 (实际: {price_range_ratio:.6f}%)")
|
||
|
||
if open_close_fill > 0.9:
|
||
print("✓ 满足实体占比 > 0.9 的条件")
|
||
else:
|
||
print(f"✗ 不满足实体占比 > 0.9 的条件 (实际: {open_close_fill:.6f})")
|
||
|
||
if __name__ == "__main__":
|
||
test_k_shape() |