如何使用多个顺序过滤器和插入来加速或并行化 django 函数?

问题描述 投票:0回答:1

我正在用 python 进行一些回溯测试,并在 Django 中设置了我的数据库模型,如下所示。一种是以代码为键的股票数据库,一种是以代码+日期为键的价格数据库。像这样的东西:

股票数据库:

  1. 面子书
  2. 微软
  3. 谷歌

价格数据库:

  1. 脸书 | 2023 年 1 月 1 日 | 150.0
  2. 脸书 | 2023 年 1 月 2 日 | 151.0
  3. 脸书 | 2023 年 1 月 3 日 | 160

然后我运行我的回测算法来做类似的事情

for stock in stock_list:
    prices = Price.objects.filter(stock=stock)
    backtest = run_backtest(prices)

基本上是尝试针对 500-1000 个代码进行优化,我注意到最大的瓶颈是“Price.objects.filter(stock=stock)”,因为它必须为每次回测获取全新的价格。

我怎样才能最好地加速过滤器?我应该尝试一次加载 5 个符号然后从中过滤吗?或者第二个线程在第一个回测运行时获取下一个交易品种?我在这里缺少什么吗?我觉得我可以轻松地将其速度提高 10-20 倍。谢谢!

python django django-models algorithmic-trading
1个回答
0
投票

您可以通过.prefetch_related(…)

 
[Django-doc]:获得bulk

的价格
stock_list = Stock.objects.prefetch_related('price_set')
for stock in stock_list:
    backtest = run_backtest(stock.price_set.all())

这将在一个额外的查询中获取(过滤的)股票的所有

Price
,并在 Python 级别进行连接。

© www.soinside.com 2019 - 2024. All rights reserved.