问题标签 [backtrader]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - Backtrader 给出 IndexError:数组分配索引超出范围
我正在尝试运行以下策略:
完整的错误是:
任何帮助将不胜感激。
我从 Yahoo 获取数据并将其存储在 csv 文件中,然后将其加载并添加到 Cerebro。有时,代码无法获取 SPY 的完整列表,但我认为这不是问题所在。
python - 在 Python 中回测投资组合
我正在尝试对 Markowitz 投资组合进行回测。到目前为止,我已经尝试过 zipline、backtrader 和 QSTrader(虽然 QSTrader 可能有效,但没有文档,所以很难)。我没有任何运气来创建我想要的回测。
我的数据结构是一个 csv,包含 200 只不同股票的调整后收盘价。我想每季度或每年进行一次投资组合重新平衡。我已经有了实际投资组合优化的代码和它返回的权重。我只需要一个实际的框架来插入这些权重,然后每年每季度重做一次计算。到目前为止,我已经做了大约 5 个小时,我只是无法进行任何回测。Zipline 在处理数据方面非常令人困惑,在导入具有我描述的结构的本地 csv 时更是如此。Backtrader 也遇到了同样的问题。QSTrader 似乎对我不起作用,它在加载数据后抛出以下错误:
回测的开始日期是正确的,基本上在月底需要重新平衡时,它只是中风。我也无法解决这个问题。
我希望有人对此有一个半即插即用的解决方案。
python - Python动态函数参数
调用下面的函数时,我可以提供将使用的值而不是函数中的默认参数(见下文)。
这对于少数已知参数非常有效,但我正在转向更复杂的系统。本质上,我需要传递一个 fast_1、fast_2、fast_3 等。这些参数的总量会发生变化(总是在 100 左右,但可能会有所不同)。是否有我可以编写的语句将动态添加 X 数量的参数到我的函数调用?
我尝试在函数调用中使用 for 语句,但收到语法错误。
python - 我在 Backtrader Lib 遇到问题
我有兴趣通过 backtrader 对我的策略进行回测,但一开始我遇到了问题。
这是我的代码:
当我运行它时,输出是:
它显示cerebro.run()
python - Backtrader 重采样到每日的问题
使用 backtrader,我想以五分钟的规模检索报价并以每日的规模重新采样。
我可以重新采样五分钟到六十分钟,但不能每天都这样做。这是代码:
我得到一个连接,但没有天。这是输出(没有打印条):
但是,如果我进行 60 分钟的重新采样,一切都很好。编码
结果是
我正在使用这些版本:
TL; DR 我做了其他几个实验。
获取数据时间范围 | 获取数据压缩 | 重新采样时间范围 | 重采样压缩 | 结果 |
---|---|---|---|---|
分钟 | 5 | 分钟 | 60 | 正如预期的那样,可以每小时查看一次 |
分钟 | 5 | 天 | 1 | (空的) |
(空白的) | (空白的) | 天 | 1 | (空的) |
天 | 1 | 天 | 1 | (空的) |
天 | 1 | (注释掉) | (注释掉) | (空的) |
python - 在 backtrader 上运行回测,我收到了许多订单取消/保证金/拒绝,而他们不应该这样做
许多买单在回测中被取消,我找不到原因。查看 Writefile 日志,似乎购买订单是在第二天收盘时创建的。在大多数情况下,买入价在当天的范围内,但仍未执行。
我尝试了不同的资产、不同大小的数据源、不同的策略,但结果相同。
在 Jupyter 笔记本上运行。我包括代码和日志。
最后,我将 AllInSizerInt() 中的默认参数 ('100') 更改为低于 100 并且它起作用了。我真的不明白为什么,我以为sizer会从经纪人那里得到现金头寸并调整订单。
这是修复:
这是原始代码:
这是日志:
python-3.x - 建议修复 backtrader.py 上的“'numpy.int64' 对象没有属性 'to_pydatetime'”?
我正在尝试在 backtrader 上回测一个简单的交易策略,但我不断收到一个错误,指出 pydatetime 没有属性。我试图将日期时间转换为 unix 并返回,但没有太大成功。希望有人可以提出解决办法?我正在从 cryptocompare 中提取比特币数据。
请看下面的代码:
python - 如何使用 backtrader 回测投资组合组合?
我有一个dataframe
看起来像这样的 csv 文件/熊猫。它包含根据我自己的计算每天重新平衡的投资组合的各种投资组合组合。
我想测试一个包含 12 个资产组合的策略。
AAPL,TSM,IBM,KO,AMD,DELL,NKE,TSLA,CSCO,JPM,BA,ORCL
因此,假设在 2021 年 1 月 4 日,投资组合的构成将是苹果的 12%,TSM 的 1%。等等。我希望能够检查价格并知道我应该持有多少。
第二天,2021 年 1 月 5 日,戴尔的成分股将变为 23%。等等,如果股票不在此列表中,则表示当天为 0%。
我一直将 backtrader 视为一个回测平台,但是,我在 repo 中看到的代码主要显示了如何处理指标,如 SMA 交叉、RSI ......
我的问题是:是否可以根据我拥有的这些组合创建和测试投资组合,以便我可以检查该策略的回报?它会检查这个框架,并知道在特定的一天有多少股票可以买卖。
所以我买卖的股票范围是AAPL,TSM,IBM,KO,AMD,DELL,NKE,TSLA,CSCO,JPM,BA,ORCL
所以在 21 年 1 月 4 日,它可能看起来像,
在 21 年 1 月 5 日,它看起来像,
如果代码不存在意味着它的 0%。投资组合的构成每天都需要改变。