问题标签 [back-testing]

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.

0 投票
1 回答
466 浏览

psql - 带再平衡的回测 - 自动化

我目前正在尝试为投资组合回测设置 PSQL 数据库,并且想知道是否有人为未来的更改提供了更自动化的解决方案。

假设我有一个包含股票 A、B 和 C 的投资组合。我每个月都会更改投资组合的权重。假设 2015 年 1 月,我的体重是 A-25%、B-25%、C-40%。为了计算一个 1000 美元的投资组合我需要的股票数量,我只计算 A * 1000/A 的股票价格的权重,以此类推 B 和 C。每天,我检查 A、B 和 C 的价格并相乘通过股票数量来获得总投资组合的价值。

在 2 月份,如果我将投资组合的价值更改为 A-25%、B-35%、C-40%,那么我需要通过取 1 月最后一天的投资​​组合价值并乘以 2 月份的权重来重新平衡,除以股票的股价。

问题是我想测试如果我在月中添加重新平衡会发生什么。我不想只存储投资组合的总价值,因为如果我添加再平衡,它可能会改变。

我目前将每个月的投资组合百分比输入数据库。在调整额外的再平衡时,计算投资组合每日价值的最简单方法是什么?

为该月的每一天插入等于上次重新平衡的股票数量的行是否更好?例如,我是否应该只有每次重新平衡的股票数量,所以 2015 年 1 月 - 每股股票数量,2015 年 2 月 - 每股股票数量。或者我应该有 2015 年 1 月 1 日 - 每个股票的数量,2015 年 1 月 2 日 - 和以前一样,2015 年 1 月 3 日 - 和以前一样...... 2015 年 2 月 - 每个新的股票数量。如果在第一个示例中这样做,我将如何在 SQL 中设置条件,以便我使用最后一次重新平衡,但在下一次重新平衡时停止?我是否只需要获取重新平衡的日期列表,然后一次循环两个,一个作为开始日期,一个作为结束日期?

任何帮助将不胜感激

0 投票
2 回答
285 浏览

r - 多个股票回测

我已经建立了以下模型,它只对间谍进行回测。我的问题是我想将此交易策略应用于多个代码(例如 qqq 和 spy)。

我该怎么做呢?见下文:

请参阅下面的多个代码版本:

0 投票
1 回答
947 浏览

python - 使用基于百分比的佣金的 Python 回测

我正在编写一个脚本来回测使用 python 的 bt 框架对一组股票的一些策略。在 bt 文档(回测模块)中它说:

佣金(fn(数量)):要使用的佣金函数。

所以当我运行我的代码时

我想传递一个函数,该函数返回基于百分比的佣金,例如交易的 0.5%。由于我不知道交易的大小,这甚至可能吗?使用固定佣金如何解决?

0 投票
1 回答
132 浏览

python - Pyalgotrade 的 ninjatraderfeed 在 7 次 onBars() 调用后失败

我正在尝试通过包含分钟数据的 CSV 文件使用ninjaTrader提要。该程序按预期运行七个 onBars 调用,然后吐出一个错误:

self.info(str(instr) + "当前开盘价: %.2f" % (bars.getBar(instr).getOpen())) AttributeError: 'NoneType' 对象没有属性 'getOpen'

我的代码:

亚马逊.csv

MMM.csv

输出:

我在 ninjatraderfeed.py 中唯一改变的是 getDelimiter() 使用“,”而不是“;”

为什么它会在七次 onBars 调用后停止工作?

编辑:从每个 csv 文件复制前 8 个值。

0 投票
0 回答
360 浏览

r - Quantstrat 中的多符号

首先,我要感谢社区的大力支持和反应。

我在多仪器上应用简单的 MA 交叉策略时遇到问题。

基本上,我维护一个 csv 价格文件的数据库。我使用此代码检索这些文件

然后我导入数据,这些数据创建了具有正确索引的有效 xts 对象

然后我运行通常的初始化过程

然后(我怀疑问题就在这里),我启动了投资组合。如果我启动投资组合,我直接输入工具的名称,这样它就可以正常工作。

但我想将策略应用于“符号”,而不是逐个运行它。我知道我应该写以下内容,但不幸的是,它不起作用。

最后,这是我找不到任何逻辑的地方,如果我像这样启动投资组合,它适用于 2 个工具,而不是 3 个

我得到的错误信息是

再次,提前感谢您的支持。

尼古拉斯

0 投票
1 回答
874 浏览

r - 限制 Quantstrat 中的仓位数量

过去几天我一直在摸索,试图了解如何限制策略中的头寸数量。它是一种通道突破策略(做多/穿上 20 天的突破通道,设置 10 天的高点/低点止损。

我不希望系统金字塔。只接受 1 个头寸,即 - 如果在第 1 天我有一个信号,并且市场保持趋势,它将打印新的信号,但由于我们已经在一个头寸中,它们必须被忽略。

我尝试了我发现的一切,但我无法实现任何目标。我知道我必须调整 osMaxPos 和 addPosLimit 但似乎我做错了。

这是我的代码。提前致谢。

0 投票
1 回答
262 浏览

limit - Amibroker:每日亏损限额

我想实现一个 afl 代码来查找日内交易中的每日亏损限制。我将使用代码进行大约 200 天的回测。我有以下代码,但有错误。

任何帮助将不胜感激。谢谢。

0 投票
1 回答
3247 浏览

r - 在 quantstrat 中不断出现“暗淡与对象的长度不匹配”

我一直在修改几个月前使用 quantstrat 进行的回测。在我添加信号和规则 6(donchian 通道低)之前一切正常,我的完整代码如下。任何帮助将不胜感激。

提前致谢。

PS:对不起,如果代码看起来很乱,这是我第一次在这里提问。

0 投票
1 回答
977 浏览

python - 使用 Pandas 进行简单的回测:使用 until

我有一个日期时间索引为 1990-2015 的熊猫 df。

它具有标普 500 的 adj 收盘价、FOR(财务义务比率)、PE 比率等列。我创建了图表来查看不同比率和市场之间的关系。我现在正在尝试回测投资策略。我已经在 Quantopian 中做过一些这样的事情,但从来没有靠我自己做过,而且我还是 pandas 的新手。

我的表的前两列如下所示:

在此处输入图像描述

我弄乱了一些代码,但不知道该怎么做。想法如下:在 FOR 跌至 16.5 以下的第一个月投资 1,000,000 美元的起始投资组合。骑标准普尔,直到 FOR 达到 16.5,卖出。当它再次跌至下方时买回。我认为我需要使用 while 语句

这会打印出我想要投资的所有时间段。有没有办法使用“while”和“next idx”来使这个程序成功

0 投票
0 回答
367 浏览

r - 每月双移动平均线交叉

我正在构建一个简单的交易策略,每月使用双移动平均线交叉。我正在使用简单的 2 个月 MA 和 10 个月 MA。如果 2Ma 上穿 10Ma,则买入,如果下穿,则卖出。问题是我的资产曲线不正确。为了获得每月移动平均线,我将每日价格转换为每月价格。这在计算移动平均线时似乎效果很好,但是当我在回测环境中将信号应用于我的价格时,它看起来像是考虑了每日数据,因此信号与日期不匹配。

我收到了这个警告:

接着:

这是代码:

不确定我是否做错了其他事情,但我很感激你的帮助。

谢谢,玛丽亚