您好我在java中有以下功能,它似乎在计算maximum drawdown时按预期工作。
该功能如下:
DecimalFormat df = new DecimalFormat("########");
double max_dd = 100;
for(double t0:returns.keySet()){
for(double t1:returns.keySet()){
if(t1>t0){
double r = returns.get(t1)/returns.get(t0)-1;
if(r<max_dd){
max_dd = r;
System.out.println(df.format(t1) +"," +df.format( t0) + "," + max_dd + "," +returns.get(t1) + "," + returns.get(t0));
}
}
}
}
我在这里得到一个结果。
然后我在python中运行以下函数:
下面的 pd
是大熊猫,这是常见的符号。
def max_dd_(ser):
max2here = pd.expanding_max(ser)
dd2here = ser - max2here
return dd2here.min()
结果是一个非常不同的数字。
数据来自同一源文件,格式为:Date,Wealth
(例如:2014-01-1,12.5)
由于简洁性和透明性,我相信java代码,但由于其简洁性而更喜欢python。
关于我在这里可能缺少什么的任何指示?
答案 0 :(得分:0)
数学不同。 Py函数应该是:
def max_dd_(ser):
max2here = pd.expanding_max(ser)
dd2here = ser / max2here - 1
return dd2here.min()