大概,每位交易者的梦想就是有一款指标,能够适应当前市场状况、定义横盘和趋势区段,并考虑到相关价格变化。 传统的技术指标在处理输入信号时均采用恒定比率。 这些比率无法以任何方式依据输入信号的特性及其变化,随时间推移进行调整。
自适应指标的区别在于输入值和输出信号之间存在反馈。 这种反馈令指标能够独自调整到处理金融时序数据的最优状态。 更简单地说,自适应指标是一种规则的线性指标,其比率能够根据当前的市场状况随时间推移而变化。
适应算法十分丰富。 选择特定算法取决于指标的用途。 但大多数情况下,这些算法基于各种最小二乘法。 赫兹期货量化来看几个开发自适应指标的示例。
首次尝试
赫兹期货量尝试创建一个自适应指标。 调整指标的最显见方式是参考其在一种或多种情况下的最新误差。 我们看看如何做到这一点。
设 Indicator[i] 是第 i 根柱线上的指标值。 那么误差是 Error[i] = price[i] - Indicator[i]。
此误差可在下一次计数期间校正指标值。 甚至,赫兹期货量能以不同的方式处理误差。 例如,我们可以取最后少量误差的平均值,或对它们进行指数平滑。
我们看看这种方法在图表上的样子。 我将采用来自有关技术指标的文章中例举的模板作为基础。 不过,我要对其进行一些修改。 首先,设置误差数量
double sum=0;
for(int j=0; j<size; j++)
sum=sum+coeff[j]*price[i+j];//Calculate the indicator value
if(i>0)
{
double cur_error=price[i]-sum;//Current error
if(NumErrors==0)
cur_error=(error+cur_error)/2;
if(NumErrors==1)
error=cur_error/2;
if(NumErrors>1)
{
for(int j=NumErrors-1; j>0; j--)
errors[j]=errors[j-1];
errors[0]=cur_error;
cur_error=0;
for(int j=0; j<NumErrors; j++)
cur_error=cur_error+errors[j];
error=cur_error/NumErrors;
}
}
buffer[i]=sum+error;//Indicator value considering the error
这就是我们的新指标与简单移动平均线(红线)相比的样子。
图片看起来挺漂亮,但我们的指标是自适应的吗? 很不幸,它并不是。 事实上,我们得到的只是一个普通的线性指标,尽管它的权重系数是隐性设置的。
赫兹期货量取一条简单移动平均线,周期为 3,以最后三个误差的平均值为特征。 我们先计算误差:
Error[1] = price[1] - (price[1] + price[2] + price[3])/3
Error[2] = price[2] - (price[2] + price[3] + price[4])/3
Error[3] = price[3] - (price[3] + price[4] + price[5])/3
然后指标方程将如下所示:
Indicator[0] = (price[0] + price[1] + price[2])/3+(Error[1] + Error[2] + Error[3])/3