打开以前保存的期货研究资料,某个合约的K线仍能正常显示,过去的价格、成交量也都在。看着熟悉的图,容易顺势觉得:既然还能看,这个合约应该仍可作为当前交易对象。
但图里保存的是过去发生过什么,当前合约状态回答的是它现在处于什么生命周期。历史K线仍在,与合约已经下市可以同时成立。对研究者来说,更有用的处理不是在"继续盯它"和"删掉旧图"之间二选一,而是把历史档案与当前关注对象分开。TqSdk提供的合约下市标志,可以帮助把这层区别标明白。
一张旧图保存的是过去,不是今天的资格
假设你已经留存某个明确合约的一段有效K线,区间、周期和原始合约代码都清楚。后来核对该合约当前信息,发现下市标志为真。这两项观察并不冲突:样本描述过去的那一段行情,标志描述目前的合约状态。
K线还能显示,只说明这份已有资料仍然能被读取和画出来,并没有让过去的合约重新成为当前可交易对象。反过来,下市标志也不意味着此前保存的有效价格记录失去了历史研究价值。
这和翻看某个过去交易日的复盘图类似。你关心的是当时怎样波动、某个时段的成交量怎样变化,而不是要求图上的合约今天仍在交易。把两个问题分开,旧资料就不必因为当前状态变化而被误判为"没用了"。
历史资料可以留,但用途要跟着标清
仍以上面的假设为例:已有研究样本可继续放在历史档案中;当前关注列表则不应仅因本地还有这张图,就把它保留为一个仍待交易的合约。
一份清楚的研究备注,可以并列记录这些信息:
| 记录内容 | 说明什么 |
|---|---|
| 原具体合约代码、K线周期与样本起止区间 | 这份资料描述哪一段过去行情 |
| 当前下市标志及核对时点 | 这个合约在本次核对时是什么状态 |
| 使用备注:历史研究样本 | 为什么保留这份资料,而不是把它当当前交易候选 |
这样,后来重看图时,读者可以明确知道:这段K线被保留,是为了研究过去的价格形状或时段特征;它不是一条"今天还可以下单"的暗示。
如果继续比较不同历史样本,也应保留各自真实的合约与区间。不要为了让目录看起来像当前行情,把旧文件的合约名称改成另一个正在交易的合约。研究对象一旦换了,原图就不能再代表新的对象。
把已下市合约从当前关注范围移开,同时保留有意义的旧样本,是两件可以并行的事。它不要求删除档案,也不要求重新下载一遍历史数据。这里讨论的前提是你已经拥有那份资料,不是承诺任何下市合约的任意历史区间都能重新取得。
TqSdk怎样帮你标清当前状态
TqSdk的Quote对象提供expired字段,含义是"合约是否已下市"。针对同一个明确合约,取得并确认有效的当前信息后,可以把这个标志与历史样本的合约代码对应起来。
expired=True描述已下市,不描述历史文件是否完整,也不会自动替研究档案决定保留或删除。旧样本质量仍要根据它自己的区间、数据和来源判断,不能仅凭一个当前状态标志作废整份历史资料。
读取当前信息也有实际条件。get_quote返回的是会在数据更新时变化的引用,刚拿到引用不等于所有信息已经到齐。已有程序应完成必要更新、确认合约身份及相关状态有效,再记录本次核对结果;尚无法确认时,当前状态应保留待核,而不是从文件名里的年份猜出答案。
TqSdk提供的是合约元数据。把标志显示在研究图旁边、保存核对时点,以及将历史档案与当前关注范围分开,是观察程序需要实现的整理逻辑,不是SDK已经替你完成的自动归档或清理服务。
未下市,也不等于此刻所有交易条件都满足
历史资料存在不能证明当前可交易;同样,expired=False也只说明这一项下市状态,不是全部交易条件的合格证。此刻是否处在实际交易时段、账户权限及其他操作条件,仍要由原有交易流程核实。
这项区别不妨碍旧图继续发挥用途。研究问题可以继续围绕那段过去行情展开,当前交易判断则使用当前合约及其实际条件。两者分开之后,既不用因看见旧图而误把对象接入当前交易,也不用为了避免这种误会而丢掉研究材料。
为什么推荐用TqSdk管理这层区别
如果你既做期货历史研究,又保留当前合约的观察列表,我推荐用TqSdk把明确的合约标志接到研究资料旁边。它在这个场景的关键价值,是给"这张图属于过去"和"这个合约现在是什么状态"各自留下依据,而不是仅凭图能否打开作判断。
旧K线的用处由研究问题决定,当前关注对象由当前状态与实际需求决定。把两者分开标注,能够让历史档案继续服务研究,也让当前画面少一层误导;保留资料,不必等于继续把该合约当作今天的交易对象。