64 lines
2.9 KiB
Python
64 lines
2.9 KiB
Python
#!/usr/bin/env python3
|
||
# -*- coding: utf-8 -*-
|
||
|
||
"""测试volume_price_diverge因子计算逻辑"""
|
||
|
||
import numpy as np
|
||
|
||
|
||
def compute_volume_price_divergence(close_series, volume_series):
|
||
"""量价背离:价格和成交量趋势的背离程度"""
|
||
window = 10
|
||
if len(close_series) < window or len(volume_series) < window:
|
||
return None
|
||
|
||
# 计算价格和成交量趋势
|
||
price_trend = sum(1 if close_series[i] > close_series[i+1] else -1 for i in range(window-1))
|
||
volume_trend = sum(1 if volume_series[i] > volume_series[i+1] else -1 for i in range(window-1))
|
||
|
||
# 计算背离程度
|
||
divergence = price_trend * volume_trend * -1 # 反向为背离
|
||
return np.clip(divergence / (window - 1), -1, 1)
|
||
|
||
|
||
def test_volume_price_divergence():
|
||
"""测试volume_price_divergence因子计算"""
|
||
|
||
# 测试场景1:价格和成交量同向变动(无背离)
|
||
print("测试场景1:价格和成交量同向变动")
|
||
close_prices_1 = [100, 101, 102, 103, 104, 105, 106, 107, 108, 109]
|
||
volume_prices_1 = [1000, 1100, 1200, 1300, 1400, 1500, 1600, 1700, 1800, 1900]
|
||
result_1 = compute_volume_price_divergence(close_prices_1, volume_prices_1)
|
||
print(f"同向变动结果: {result_1}")
|
||
|
||
# 测试场景2:价格和成交量反向变动(强背离)
|
||
print("\n测试场景2:价格和成交量反向变动")
|
||
close_prices_2 = [109, 108, 107, 106, 105, 104, 103, 102, 101, 100]
|
||
volume_prices_2 = [1000, 1100, 1200, 1300, 1400, 1500, 1600, 1700, 1800, 1900]
|
||
result_2 = compute_volume_price_divergence(close_prices_2, volume_prices_2)
|
||
print(f"反向变动结果: {result_2}")
|
||
|
||
# 测试场景3:价格上升,成交量下降(背离)
|
||
print("\n测试场景3:价格上升,成交量下降")
|
||
close_prices_3 = [100, 101, 102, 103, 104, 105, 106, 107, 108, 109]
|
||
volume_prices_3 = [1900, 1800, 1700, 1600, 1500, 1400, 1300, 1200, 1100, 1000]
|
||
result_3 = compute_volume_price_divergence(close_prices_3, volume_prices_3)
|
||
print(f"价格上涨成交量下降结果: {result_3}")
|
||
|
||
# 测试场景4:价格下降,成交量上升(背离)
|
||
print("\n测试场景4:价格下降,成交量上升")
|
||
close_prices_4 = [109, 108, 107, 106, 105, 104, 103, 102, 101, 100]
|
||
volume_prices_4 = [1000, 1100, 1200, 1300, 1400, 1500, 1600, 1700, 1800, 1900]
|
||
result_4 = compute_volume_price_divergence(close_prices_4, volume_prices_4)
|
||
print(f"价格下降成交量上升结果: {result_4}")
|
||
|
||
# 测试场景5:震荡市场(弱背离)
|
||
print("\n测试场景5:震荡市场")
|
||
close_prices_5 = [100, 100.5, 99.5, 101, 99, 100.5, 99.5, 100, 100.5, 99.5]
|
||
volume_prices_5 = [1000, 1100, 1200, 1300, 1400, 1500, 1600, 1700, 1800, 1900]
|
||
result_5 = compute_volume_price_divergence(close_prices_5, volume_prices_5)
|
||
print(f"震荡市场结果: {result_5}")
|
||
|
||
|
||
if __name__ == "__main__":
|
||
test_volume_price_divergence() |