一项智能交易系统失败原因分析

为了研究这些问题,我们取货币 16 年的 15分钟数据,以及一种试验烛台策略,即移动平均交叉。 对于移动平均线交叉(MAC)触发器来说,当快速 SMA 上穿慢速 SMA 时生成买入信号,当快速 SMA 下穿慢速 SMA 时生成卖出信号。 MAC 策略理应为研究提供良好的试验平台。 MAC 策略的关键输入参数是快速和慢速 SMA 周期。 在这些研究中,快速 SMA 周期通常为 1 至 4,慢速 SMA 周期为 10 至 150,且假设这两者在试验期间是固定的。

图例 1 从 2006 年 1 月到 2021 年 12 月显示了 EURUSD 的 SMA 交叉行为触发器的利润回报。 对于优化的 SMA,快速周期和慢速周期分别为 2 和 80,EA 在某些时间段给出正回报,而在其它时间段则给出负回报。 2008 年 1 月 – 2013 年 6 月 间盈利稳步增长。 图例 2 显示了在相同时间间隔内,优化的 SMA 周期分别为 1 和 80,GBPUSD 的 SMA 交叉行为触发器的利润回报。 GBPUSD 图表显示仅有短暂的正盈利表现。

 图例 1.  EURUSD SMA 交叉触发器盈利 (0.1 手)

     

  图例 2. GBPUSD SMA 交叉触发器盈利 (0.1 手)

鉴于图例 1 和图例 2 所示的时间行为,我们可以验证常见技术指标的时间行为,并判定技术指标行为时间和移动平均交叉行为盈利回报时间之间是否存在任何关系。 

传统技术指标的行为

可以检查若干个标准技术指标,看看它们在正回报和负回报的时间区域中的行为是否不同。 图例 3 示意 EURUSD 在 16 年间的月平均真实范围(ATR)指标。 ATR 指标提供了货币对波动性的度量。 它表现出明确的时间依赖行为,但与图例 1 中的利润时间行为没有对应关系。 有趣的是,图例 3 显示了 2008 年末和 2020 年初经济危机前后的极端波动。 它还建言,采用价格变化的绝对阈值作为触发逻辑是不明智的,应该考虑平滑的 ATR 值。 另一个常见的技术指标是布林带上下边界的扩张。 该指标应受到波动性和趋势强度的影响。 令人惊讶的是,它在月度的长线行为里,如图例 4 所示,几乎与 ATR 指标相同。 与 ATR 指标一样,在图例 1 的 EURUSD 数据中,它未显现出对应于正回报时间区域和负回报时间区域的行为。 GBPUSD 的数据也有类似的结果。 长期波动性不能解释图例 1 和图例 2 所示的时间行为。

图例 3. EURUSD ATR,月度平均值

图例 4. EURUSD 布林带扩散,月度平均值

作为指标的自相关函数

与 ATR 和布林带指标不同,自相关函数(ACF)不依赖于波动性。 ACF 是在时间序列数据中寻找形态的有用工具。 ACF 衡量一个时间序列中的元素与该时间序列中延迟一定间隔的元素之间的相关性。 当数据中出现趋势时,对于小规模滞后,ACF 将具有正值。在该分析中,时间序列中的 Y[i] 元素被定义为柱线 [i] 的(收盘价-开盘价)。

对于拥有 N 个元素的时间序列,i=1...N,ACF 的定义如下:

针对价格序列数据的自相关函数,与针对柱线序列的价格变化数据的自相关函数有很大不同。 举例来说,对于数字序列 {1,2,3..14},ACF 为 0.786。 对于该数组的连续元素之间的一系列差值,ACF 将接近于零(假设值中存在少量噪声,以避免除零异常)。

ACF 的计算在以下代码段中实现:

 double GetAtCorrVal(double &ClsOpn[],int CorrPer, int LagPer,int joff ) {
   double corr;
   double AIn[],BIn[];
   double XMean,XNum,XDen;
   int jj;
   ArrayResize(AIn,CorrPer);
   ArrayResize(BIn,CorrPer);
   XMean = 0.;
   XNum = 0.;
   XDen = 0.;
   corr = 0.;
   if(CorrPer<2)
    {
     Print("No AutoCorr Processing Allowed ");
     return(corr);
    }
   // mean
   for(jj=0;jj<CorrPer;jj++)
    {
     XMean +=ClsOpn[jj+joff];
    }
   XMean = XMean/CorrPer;
  // variances
   for(jj=0;jj<CorrPer;jj++)
    {
     if(jj<(CorrPer-LagPer))
       XNum  += (ClsOpn[jj+joff]-XMean)*(ClsOpn[jj+LagPer+joff]-XMean);
     XDen += (ClsOpn[jj+joff]-XMean)*(ClsOpn[jj+joff]-XMean);
    }  
    if(XDen==0.)
     {
      corr = 0.;
     }
    else
    corr = XNum/XDen;
   return(corr);
  }
//----------------------------------------------------------------
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值