我有开始日期列表和结束日期列表。他们排序...
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)]
开始日期代表我们收到建议购买股票的日期。结束日期是我们收到出售建议的日期。建议的来源是不同的,我们正在回测如果我们使用来自一个来源的买入建议,而使用来自另一个来源的卖出建议会发生什么。因此,我们有两个日期序列,我们希望将它们分解成对 - 或间隔 - 我们将在这些日期上持有股票头寸。
因此,我们将从 start_dates 中选择一个日期来决定何时购买股票:11 月 5 日我们买入一个头寸。然后我们在 end_dates 中循环寻找第一个卖出建议:12 月 14 日。然后重复,当我们从一个来源获得建议时没有持有头寸时买入,当我们从另一个来源持有头寸时卖出。
你可能会说我们想要在循环遍历的两个列表中的哪一个之间切换。
因此上面的输入生成:
result = (
(datetime.date(2009, 11, 5), datetime.date(2009, 12, 14)),
(datetime.date(2009, 12, 29), None)
)
我在 for 循环中使用 for 循环,想知道是否没有更好的方法。性能令人感兴趣,因为它将在 40 年的时间跨度内应用于数千种场景;一些列表涉及数千个日期。