【发布时间】:2018-12-13 06:25:47
【问题描述】:
我正在尝试计算 R 中交易策略的年回报率。我尝试了各种方法,但始终得到不一致的结果。
这是一些测试数据;
CumBal
2007-01-03 1000000.0
2007-01-04 1000000.0
2007-01-05 1114999.4
2007-01-08 889999.4
2007-01-09 1109997.6
2007-01-10 1179998.8
2007-01-11 1229998.8
2007-01-12 1050000.0
2007-01-16 979998.8
2007-01-17 1284997.6
...
2018-05-10 2161996.3
2018-05-11 2161996.3
2018-05-14 2161996.3
2018-05-15 2161996.3
2018-05-16 2137496.0
2018-05-17 2128995.8
2018-05-18 2128995.8
2018-05-21 2128995.8
2018-05-22 2128995.8
策略的总体结果是;
Results
Balance 1000000.0000
Final Balance 2133996.1000
Net-Profit 1133996.1000
CAGR 0.0681
Total Return (%) 1.1340
Sharpe Ratio 0.0000
Profit Factor 1.1432
Max Loss on Inv % -0.1100
Max loss on Inv £ -664999.4000
Total Number of Trade 259.0000
% of Win Trades 0.2432
Win:Loss 0.5207
Ulcer Peformance Index 0.0000
我面临的问题是计算每月和每年的回报。我想这样做来确定年度和月度回报的标准差来计算夏普比率。我试过使用PerformanceAnalytics 包,但是得到的结果与实际性能不一致;
table.CalendarReturns(a.1)
Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec CumBal
2007 0.0 0 0 0.0 0.0 0 0 0.0 0 0.0 0.0 0.0 NA
2008 0.0 0 0 0.0 12.7 0 0 0.0 0 -18.9 0.0 0.0 -8.6
2009 0.0 0 0 0.0 0.0 0 0 0.0 0 0.0 0.0 0.0 NA
2010 -1.2 0 0 0.0 0.0 0 0 0.0 0 0.0 0.0 0.0 -1.2
2011 0.0 0 0 0.0 0.7 0 0 0.0 0 0.0 0.0 0.0 0.7
2012 0.0 0 0 0.0 0.0 0 0 0.0 0 0.0 0.0 0.0 NA
2013 0.0 0 0 -0.5 0.0 0 0 0.0 0 0.0 -0.5 0.4 -0.5
2014 0.0 0 0 0.0 0.0 0 0 0.3 0 0.0 0.0 0.0 0.3
2015 0.0 0 0 0.0 0.0 0 0 0.0 0 0.0 0.0 0.0 NA
2016 -3.8 0 0 -0.6 0.0 0 0 -0.5 0 0.0 0.3 0.0 -4.5
2017 0.0 0 0 0.0 0.0 0 0 0.0 0 0.0 0.0 0.0 NA
2018 -0.7 0 0 0.0 0.0 0 0 NA NA NA NA NA -0.7
然后我尝试了论坛上一位成员的建议,即使用Return.calculaute(),然后使用to.monthly,然后使用table.CalendarReturns()。但是to.monthly 以某种方式输出下面的结果,因此table.CalendarReturns() 不起作用;
a.1 <- data.frame(a.1)
a.z <- Return.calculate(a.1)
a.q <- to.monthly(a.z)
结果是……
> a.q
a.z.Open a.z.High a.z.Low a.z.Close
Jan 2007 0.000000000 0.3112236464 -0.201793831 0.000000000
Feb 2007 0.000000000 0.0000000000 0.000000000 0.000000000
...
Apr 2018 0.000000000 0.0000000000 -0.047367213 0.000000000
May 2018 0.000000000 0.0000000000 -0.011332235 0.000000000
Jun 2018 0.000000000 0.0023486660 0.000000000 0.000000000
Jul 2018 0.000000000 0.0000000000 0.000000000 0.000000000
【问题讨论】:
-
使用
PerformanceAnalytics包,将CumBal视为价格并使用Return.calculate获得每日回报。然后使用to.monthly将每日收益转换为每月收益。然后可以使用table.CalendarReturns正确显示每月回报表。 -
好像不行,我试过了;
a.1 <- data.frame(a.1) a.z <- Return.calculate(a.1) a.q <- to.monthly(a.z) table.CalendarReturns(a.q)和table.CalendarReturns不起作用,因为to.monthly这样做;> a.q a.z.Open a.z.High a.z.Low a.z.Close Jan 2007 0.000000000 0.3112236464 -0.201793831 0.000000000 Feb 2007 0.000000000 0.0000000000 0.000000000 0.000000000我现在将编辑帖子以包含此内容。有什么想法吗? -
我希望您的输入数据是
xts格式。然后table.CalendarReturns(df_in_xts_format)应该为您提供所需的月/年回报表。如果这没有帮助,那么您可能需要使用dput(df)使用示例数据更新您的帖子,以便我们可以重现问题。 -
除了验证您的数据是否为
xts格式之外,请查看您的数据值。您 2018 年的结果显示变化不大,有些日子根本没有变化。如果这是大多数数据的典型情况,那么a.q结果可能是正确的。table.CalendarReturns默认情况下仅显示一位数,因此较小的回报将显示为零。最后,我们需要在月表输入中进行更正。试试table.CalendarReturns(a.q[,4], digits = 4)。如果我们有您几个月的数据,这将更容易解决。
标签: r dataframe time-series finance