我有一列开始日期和一列结束日期。它们已经排序好了...
start_dates = [
datetime.date(2009, 11, 5), datetime.date(2009, 11, 13),
datetime.date(2009, 11, 25), datetime.date(2009, 11, 26),
datetime.date(2009, 12, 4), datetime.date(2009, 12, 7),
datetime.date(2009, 12, 29), datetime.date(2009, 12, 30)]
end_dates = [
datetime.date(2009, 10, 1), datetime.date(2009, 10, 2),
datetime.date(2009, 10, 9), datetime.date(2009, 10, 12),
datetime.date(2009, 11, 4), datetime.date(2009, 12, 14),
datetime.date(2009, 12, 15)]
起始日期表示我们收到购买股票建议的日期。结束日期是我们收到卖出建议的日期。建议的来源不同,我们正在回测如果我们使用一个来源的购买建议,但使用另一个来源的卖出建议会发生什么。因此,我们有两个日期序列,我们想将它们解析成一对或多对持有该股票的时间间隔。
因此,我们将从起始日期中选择一个日期来决定何时购买该股票:在11月5日我们购买了一份股票。然后我们循环遍历结束日期,寻找第一个卖出建议:12月14日。然后重复这个过程,当我们从另一个来源得到购买建议时不持有头寸,当我们持有头寸时从另一个来源得到卖出建议。
你可以说我们想在两个列表之间来回切换。
因此,上面的输入生成以下内容:
result = (
(datetime.date(2009, 11, 5), datetime.date(2009, 12, 14)),
(datetime.date(2009, 12, 29), None)
)
我正在使用嵌套的for循环,不知道是否有更好的方法。性能十分重要,因为它将在40年的时间内应用于数千种情况;有些列表涉及数千个日期。
datetime.date(2009, 12, 15)
而是datetime.date(2009, 12, 14)
?我有什么遗漏吗? - Avaris