期货量化软件:赫兹量化中MQL5中的替代风险回报标准

概述
所有交易员都希望尽可能最大限度地提高投资回报率,但更高的回报率通常会带来更高的风险。这就是为什么风险调整后的回报是衡量投资行业业绩的主要指标的原因。风险调整收益有许多不同的衡量标准,每一种都有自己的优点和缺点。夏普比率是一种流行的风险收益衡量标准,以对所分析的收益分配强加不切实际的先决条件而闻名。这不可避免地导致了替代性能指标的发展,这些指标试图提供夏普比率的同样普遍性,而不存在其不足之处。在本文中,我们提供了替代风险回报指标的实现,并生成假设的权益曲线来分析其特征。

MaxD是根据净值计算的最大T绝对回撤的系列。N表示计算中使用的净值的数量

净利润 Burke 比率实现为netprofit_Burke()函数。该函数需要一组描述净值曲线的净值数值,以及一个表示计算中要考虑的最高回撤次数的整数值。

//+------------------------------------------------------------------+
//|Net profit based Burke ratio                                      |
//+------------------------------------------------------------------+
double netprofit_burke(double &in_ec[],int n_highestdrawdowns=0)
  {
   double outdd[];
   double sumdd=0;
   int insize=ArraySize(in_ec);

   if(n_highestdrawdowns<=0)
      n_highestdrawdowns=int(insize/20);

   if(MaxNDrawdowns(n_highestdrawdowns,in_ec,outdd))
     {
      for(int i=0; i<ArraySize(outdd); i++)
        {
         sumdd+=(outdd[i]*outdd[i]);
        }
      return (in_ec[insize-1]-in_ec[0])/(MathSqrt((1.0/double(insize)) * sumdd));
     }
   else
      return 0;
  }

当指定默认值为零时,函数使用公式N/20设置要考虑的回撤次数,其中N是权益数组的大小。

为了收集指定数量的回撤,将调用MaxNDradowns()函数。它输出一系列按升序排列的最高绝对回撤。

//+------------------------------------------------------------------+
//|Maximum drawdowns function given equity curve                     |
//+------------------------------------------------------------------+
bool MaxNDrawdowns(const int num_drawdowns,double &in_ec[],double &out_dd[])
  {
   ZeroMemory(out_dd);

   ResetLastError();

   if(num_drawdowns<=0)
     {
      Print("Invalid function parameter for num_drawdowns ");
      return false;
     }
   double u[],v[];

   int size = ArraySize(in_ec);

   if((ArrayResize(v,(size*(size-1))/2)< int((size*(size-1))/2))||
      (ArraySize(out_dd)!=num_drawdowns && ArrayResize(out_dd,num_drawdowns)<num_drawdowns))
     {
      Print(__FUNCTION__, " resize error ", GetLastError());
      return false;
     }

   int k=0;
   for(int i=0; i<size-1; i++)
     {
      for(int j=i+1; j<size; j++)
        {
         v[k]=in_ec[i]-in_ec[j];
         k++;
        }
     }

   ArraySort(v);

   for(int i=0; i<k; i++)
     {
      if(v[i]>0)
        {
         if(i)
           {
            if(!ArrayRemove(v,0,i))
              {
               Print(__FUNCTION__, " error , ArrayRemove: ",GetLastError());
               return false;
              }
            else
               break;
           }
         else
            break;
        }
     }

   size=ArraySize(v);

   if(size && size<=num_drawdowns)
     {
      if(ArrayCopy(out_dd,v)<size)
        {
         Print(__FUNCTION__, " error ", GetLastError());
         return false;
        }
      else
         return (true);
     }


   if(ArrayCopy(out_dd,v,0,size-num_drawdowns,num_drawdowns)<num_drawdowns)
     {
      Print(__FUNCTION__, " error ", GetLastError());
      return false;
     }


   return(true);

  }

使用平均收益作为分子的Burke比率计算被实现为 meanreturns_Burke 函数,并且具有类似的输入参数。

//+------------------------------------------------------------------+
//|Mean return based Burke ratio                                     |
//+------------------------------------------------------------------+
double meanreturns_burke(double &in_ec[],int n_highestdrawdowns=0)
  {
   double outdd[];
   double rets[];

   double sumdd=0;
   int insize=ArraySize(in_ec);

   if(ArrayResize(rets,insize-1)<insize-1)
     {
      Print(__FUNCTION__," Memory allocation error ",GetLastError());
      return 0;
     }

   for(int i=1; i<insize; i++)
      rets[i-1] = (in_ec[i]/in_ec[i-1]) - 1.0;

   if(n_highestdrawdowns<=0)
      n_highestdrawdowns=int(insize/20);

   if(MaxNDrawdowns(n_highestdrawdowns,in_ec,outdd))
     {
      for(int i=0; i<ArraySize(outdd); i++)
         sumdd+=(outdd[i]*outdd[i]);
      return MathMean(rets)/(MathSqrt((1.0/double(insize)) * sumdd));
     }
   else
      return 0;
  }

净利润与最大回撤率
以净利润为分子的Burke比率公式类似于净利润与最大回撤的比率(Netprofit to Maximum Drawdown ratio,NPMD)。不同之处在于在NPMD比率的计算中使用了单个最高回撤。


NPMD 比率公式


NPMD计算被实现为netProfiMaxDD()函数,需要净值数组作为输入。

//+------------------------------------------------------------------+
//|Net profit to maximum drawdown ratio                              |
//+------------------------------------------------------------------+
double netProfiMaxDD(double &in_ec[])
  {
   double outdd[];
   int insize=ArraySize(in_ec);

   if(MaxNDrawdowns(1,in_ec,outdd))
      return ((in_ec[insize-1]-in_ec[0])/outdd[0]);
   else
      return 0;
  }
Jensen 的 Alpha 的解释
如果Jensen的Alpha为正,则表明与基准相比,投资组合/策略产生了超额回报,这表明在考虑其风险水平后表现出色。否则,如果Jensen的Alpha为负值,则意味着该策略相对于基准回报表现不佳。

除了alpha值之外,最小二乘法计算的beta值还提供了回报相对于基准的敏感性的衡量标准。beta系数为1表示该策略的回报与基准同步。beta系数小于1表明净值曲线的波动性小于基准曲线,而beta系数大于1表明波动性更高


结论
我们已经描述了一些风险调整回报指标的实施,这些指标可以用作夏普比率的替代品。在我看来,最好的候选者是omega标准。它提供了夏普比率的相同优势,而没有任何收益分布正态性的预期。不过,还应该注意的是,在做出投资决策时,最好考虑多个策略绩效指标。只凭一个永远无法提供预期风险或回报的全貌。此外,请记住,大多数风险回报指标都提供了可追溯的衡量标准,历史表现并不能保证未来的结果。因此,在评估投资选择时,重要的是要考虑其他因素,如投资目标、时间范围和风险承受能力

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值