最高最低都一样,价格就同样集中吗
两个窗口最低都是100、最高都是120,极差都为20,中间价格却未必分布得一样。只保留最高最低,会把中间位置的信息压掉。如果要比较这部分跨度,还需要先说清楚分位位置怎样取。
本文选定一种明确的作者口径:完整样本排序后,对上下两个半组分别取中位数,再求差。推荐借助天勤TqSdk的median实现这两个基础步骤,并同时保存排序副本和原样本身份;不是在接口中寻找一个并未被本文资料支持的原生IQR函数。
两个范围相同的假设窗口
给定两组纯假设:
text
A = [100,104,105,106,107,108,109,120]
B = [100,100,100,110,110,120,120,120]
本文限定样本数是4的正整数倍。各组排序后,下半组中位数记为Q1,上半组中位数记为Q3,定义IQR=Q3−Q1。
A的下半组为100、104、105、106,中位数104.5;上半组为107、108、109、120,中位数108.5,所以IQR为4。B按同一方法得到Q1=100、Q3=120,IQR为20。极差相同,中间位置跨度不同。以上只是作者算术,不是行情或SDK输出。
用排序副本分别求半组中位数
TqSdk的median(series,n)对n项取中位数,偶数项取中间两项平均。这里把半组当成一次完整输入,并取该半组长度窗口的末项结果,不是对原时序逐项滚动后随便挑两个值。
原数据保持不变。先确认完整窗口、单位、有效性和原身份,再对独立副本排序;同时保存排序位置到原身份的映射。排序只服务这次位置统计,不意味着可以把排序后的价格当原市场路径。
下面的未执行示例,只接收长度为4的正整数倍的完整研究窗口,没有连接行情或回写原序列。
python
from math import isfinite
from tqsdk.tafunc import median
def half_median_iqr(prices, original_ids):
n = len(prices)
if n < 4 or n % 4 or len(original_ids) != n:
raise ValueError("this definition requires n = 4m, m >= 1")
original = prices.copy().reset_index(drop=True)
if not all(isfinite(float(x)) for x in original):
raise ValueError("no missing-input deletion or zero fill")
order = sorted(range(n), key=lambda i: float(original.iloc[i]))
sorted_copy = original.iloc[order].copy().reset_index(drop=True)
half = n // 2
lower = sorted_copy.iloc[:half].copy().reset_index(drop=True)
upper = sorted_copy.iloc[half:].copy().reset_index(drop=True)
outputs = [median(part, half) for part in (lower, upper)]
if any(len(s) != half or list(s.index) != list(range(half)) for s in outputs):
raise ValueError("half-window position mismatch")
q1, q3 = [float(s.iloc[-1]) for s in outputs]
iqr = q3 - q1
span = float(sorted_copy.iloc[-1]) - float(sorted_copy.iloc[0])
if not all(isfinite(x) for x in (q1, q3, iqr, span)) or iqr < 0:
raise ValueError("unusable position summary")
return {"definition": "median_of_lower_and_upper_halves_n_multiple_of_4",
"original_ids": list(original_ids), "original_values": original.tolist(),
"sorted_ids": [original_ids[i] for i in order],
"sorted_values": sorted_copy.tolist(),
"q1": q1, "q3": q3, "author_iqr": iqr, "range": span}
保留方法,别把位置比例说成概率
分位数有不同的位置与插值约定,不能把本例半组法当成所有平台唯一默认。比较两份结果时,原样本相同还不够,方法也必须一致;否则差别可能来自计算约定。
Q1、Q3描述本方法下的排序位置,不保证恰好50%的不同取值落在区间内。重复值会改变这种直观数数,B的例子尤其说明:Q1到Q3覆盖整个100到120区间,不代表模型证明了真实价格的某种概率。
实际记录应包含方法、样本数、原窗口与身份、排序副本、两半组以及Q1/Q3/IQR和极差。本机SDK行为未在这里实测;缺失不靠补零凑够4m项,也不根据这个跨度自动删除所谓异常点。
天勤TqSdk的中位数函数,让这份作者定义能落到可回查的半组计算。读者由此能区分"最高最低范围一样"和"中间位置一样",而不是从一段样本跨度推断价格分布、未来区间或收益。