指标喷发整体特征计算实战
用MQL5将喷发点提炼为可量化交易信号
什么是指标喷发
指标喷发是时间序列分析中的一种新方向,其核心不在于研究指标线本身,而是关注指标线进入未来或过去发生的交叉喷发。通过喷发分析,交易者可以预测未来支撑阻力、趋势方向以及过去积累的变动强度。在作者前作中,喷发被定义为所考虑指标特定线交叉点上的一组点,而喷发点具有同类集群倾向,密集集群可吸引或排斥价格。
喷发标绘示例显示,左侧为DCMV指标喷发,右侧为iMA与iEnvelopes指标喷发。喷发图集直观呈现了价格与喷发点的空间关系,为后续整体特征计算提供了可视化基础。
- 喷发是指标线交叉点的一组点
- 同类型喷发点有集群倾向
- 密集集群吸引或排斥价格
- 喷发可用于预测支撑阻力与趋势
选取指标与EA标绘喷发
为计算整体特征,我们选取移动平均线轨道线iEnvelopes与不同周期iMA本身。线数及平均周期、方差为随机选择,只要指标线在空间上有交叉即可标绘喷发。我们创建EA交易作为分析基础程序,利用iMA和iEnvelopes获取计算数据,采用负责任何两条线交叉点计算显示的CEmission类实例。
标绘喷发只需为每条线设两个点,取当前柱与前一柱指标值。前一柱价格静态,当前柱动态,新价格变动持续生成新点。喷发点通过图形对象Text描述,对象锚点对准符号中心,可大范围调整尺寸,为复杂喷发提供潜力。
input int ma_period=140; // averaging period of the iEnvelopes indicator
double ENV[]={0.01,0.0165,0.0273,0.0452,0.0747,01234,0.204,0.3373,0.5576,0.9217,1.5237};
int MA[]={4,7,11,19,31,51,85};
喷发整体特征的需求与初步计算
将EA放到图表后,得到大量不同颜色点:浅绿为iMA与iEnvelopes上轨交叉,蓝色为下轨交叉,洋红为iMA自交叉。这种混乱图像无法直接自动化交易,我们需要信号、价位等量化特征。整体特征用于归纳喷发数据,也为新型指标市场调查提供机会:整体通道、线、水平、信号等。
首先确定最典型喷发值,计算每类点平均价格并绘制水平线。接着计算每类点平均时间值,在平均价格线标出,得到首批量化特征:喷发特征不静止,始终空间移动。我们还在标记旁显示点数作为权重,并采用百分比:以iMA与iEnvelopes交叉和为100%,洋红自交叉为参考值。
#define NUMBER_TYPES_POINT 3
double sum[NUMBER_TYPES_POINT],sumprev[NUMBER_TYPES_POINT];
datetime sum_time[NUMBER_TYPES_POINT];
int n[NUMBER_TYPES_POINT],W[NUMBER_TYPES_POINT];
color colorLine[]={clrAqua,clrBlue,clrMagenta};
ArrayInitialize(n,0);
ArrayInitialize(sum,0.0);
ArrayInitialize(sum_time,0.0);
for(int obj=total-1;obj>=0;obj--)
{
string obj_name=ObjectName(0,obj,0,OBJ_TEXT);
datetime obj_time=(datetime)ObjectGetInteger(0,obj_name,OBJPROP_TIME);
if(obj_time>T[0])
{
color obj_color=(color)ObjectGetInteger(0,obj_name,OBJPROP_COLOR);
double obj_price=ObjectGetDouble(0,obj_name,OBJPROP_PRICE);
for(int i=ArraySize(n)-1; i>=0; i--)
if(obj_color==colorPoint[i])
{
n[i]++; sum[i]+=obj_price; sum_time[i]+=obj_time;
}
}
}
for(int i=ArraySize(n)-1; i>=0; i--)
if(n[i]>0)
{
name="H.line."+(string)i;
ObjectCreate(0,name,OBJ_HLINE,0,0,0,0);
ObjectSetInteger(0,name,OBJPROP_COLOR,colorLine[i]);
ObjectSetDouble(0,name,OBJPROP_PRICE,sum[i]/n[i]);
}
图形分析绘制整体通道
仅有点百分比仍难直接分析。利用与主喷发点百分比成比例的不同厚度绘制整体曲线,当前部分沿当前与前一柱平均价格线绘制,形成指标喷发主导整体通道。洋红iMA自交叉点在此用作整合移动平均线参考。
进一步考虑平均时间坐标,添加PRICE_MEDIAN线根据更接近末柱的标记颜色改变。同时可计算整体线的二阶喷发(整体线彼此交叉产生新点),重复计算直至不可行,获得多层喷发整体特征。
if(n[ArrayMinimum(n)]>0)
{
datetime d[2];
for(int j=0;j<2;j++) d[j]=sum_time[j]/n[j];
int i=ArrayMinimum(d);
name="Price.line"+(string)T[1];
ObjectCreate(0,name,OBJ_TREND,0,0,0);
ObjectSetInteger(0,name,OBJPROP_WIDTH,8);
ObjectSetDouble(0,name,OBJPROP_PRICE,0,HL(H[1],L[1]));
ObjectSetInteger(0,name,OBJPROP_TIME,0,T[1]);
ObjectSetDouble(0,name,OBJPROP_PRICE,1,HL(H[0],L[0]));
ObjectSetInteger(0,name,OBJPROP_TIME,1,T[0]);
ObjectSetInteger(0,name,OBJPROP_COLOR,colorLine1[i]);
}
pEmission=EnvMa.CalcPoint(sumprev[0],sum[0]/n[0],sumprev[2],sum[2]/n[2],T[0]);
if(pEmission.real)
{
name="test/up"+(string)GTC;
EnvMa.CreatePoint(name,pEmission,styleUpper2);
}
喷发的时间序列与俭省计算
为摆脱大量图形对象,使用专用数组(缓冲区)积累喷发信息,即喷发时间序列。它与标准时间序列不同,数据非严格按时间排序,但时间是关键字段。新元素存于空单元格或原值单元格,通过CTimeEmission类实现写入与读取。
拥有时间序列后,可创建俭省算法计算整体特征,代码变短且速度提高,无需可视化即可测试优化机器人。CTimeEmission类使用ARRMAX与ARRDELTA管理数组大小,Write方法寻找空单元格写入点,Read方法返回整体特征。
struct pIntegral
{
double y; datetime t; int n;
};
class CTimeEmission
{
private:
pIntegral time_series_Emission[];
int size_ts;
datetime t[1];
public:
void Write(PointEmission &point);
pIntegral Read();
};
整体特征在交易中的使用
整体特征可作信号生成器:通道突破、彼此或与价格交叉、改变方向。例如价格向上穿蓝色曲线生成卖出信号,向下穿浅绿曲线生成买入信号。二阶喷发整体特征进一步丰富信号维度。
相比传统指标,喷发整体特征提供动态移动的水平与通道,且通过时间序列实现高速计算,适合自动化策略开发。但需注意洋红自交叉参考值如何融入分析,以及不同周期参数对喷发密度的影响。
总结与对比
指标喷发整体特征计算为市场分析提供新工具。对比传统指标:传统指标给出固定线,喷发给出交叉点集;传统信号静态,喷发整体特征动态移动;传统计算轻量,喷发初版图形密集,优化后用时间序列俭省。本文方法已打开自动化交易策略开发大门,交易者可在其基础上研发通道突破或交叉信号EA。
- 传统指标线 vs 喷发点集
- 静态信号 vs 动态整体特征
- 图形对象密集 vs 时间序列俭省
- 单一周期 vs 多参数交叉