【发布时间】:2012-08-19 15:00:38
【问题描述】:
我有开始日期列表和结束日期列表。它们已排序...
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 年的时间跨度内应用于数千种场景;有些列表涉及数千个日期。
【问题讨论】:
-
您想要达到的结果看起来如何。很难从你希望结果如何的问题中说出来
-
@PabloKarlsson 我相信问题中已经指定了所需的结果?!这是一个日期元组列表。
-
是的,但是如何映射它们(start_dates[1],end_dates[1])?
-
@PabloKarlsson 抱歉,您没有关注。我为你详细说明了q。
-
没问题,我想我已经提供了答案,希望它适合你..