inputdouble Distance=100;
//каждый элемент массива будет содержать три поля: дата, цена и положение экстремума (верх, низ) struct sextr{datetime time; double price; int position;} Extremes[];
voidOnStart()
{
int Total=iBars(Symbol(),0);
for(int i=Total-1; i>=0; i--)
{
WriteExtremum(Extremes,Distance,Symbol(),0,i);
}
}
//здесь записываем экстремумы в массивvoid WriteExtremum(sextr &eExtremes[], double eDistance, string eSymbol, int eTimeFrame, int eShift)
{
int eFinish=ArraySize(eExtremes)-1;
double eHigh=iHigh(eSymbol,eTimeFrame,eShift);
double eLow=iLow(eSymbol,eTimeFrame,eShift);
datetime eTime=iTime(eSymbol,eTimeFrame,eShift);
//если массив пустойif(eFinish<0)
{
ArrayResize(eExtremes,++eFinish+1);
eExtremes[eFinish].time=eTime;
//пока мы не знаем какой из экстремумов будет в первом элементе, поэтому берём цену по середине//можно сделать более грамотнее, но лень. Поэтому первый экстремум у нас будет бракованный
//и мы его потом затрём
eExtremes[eFinish].price=(eHigh+eLow)/2;
eExtremes[eFinish].position=0;
}
//если в массиве есть элементыelse
{
//текущий элемент - максимумif(eExtremes[eFinish].position==1)
{
//произошло обновление текущего экстремумаif(eHigh-eExtremes[eFinish].price>0)
{
eExtremes[eFinish].time=eTime;
eExtremes[eFinish].price=eHigh;
}
//произошло превышение расстояния между противоположными экстремумамиif(eExtremes[eFinish].price-eLow>eDistance)
{
ArrayResize(eExtremes,++eFinish+1);
eExtremes[eFinish].time=eTime;
eExtremes[eFinish].price=eLow;
eExtremes[eFinish].position=-1;
}
}
//текущий элемент - минимумif(eExtremes[eFinish].position==-1)
{
//произошло обновление текущего экстремумаif(eExtremes[eFinish].price-eLow>0)
{
eExtremes[eFinish].time=eTime;
eExtremes[eFinish].price=eLow;
}
//произошло превышение расстояния между противоположными экстремумамиif(eHigh-eExtremes[eFinish].price>eDistance)
{
ArrayResize(eExtremes,++eFinish+1);
eExtremes[eFinish].time=eTime;
eExtremes[eFinish].price=eHigh;
eExtremes[eFinish].position=1;
}
}
//эта ситуация, когда первый элемент не закрылся, и не понятно максимум это будет или минимум//если произошло превышение в любую сторону, тогда затираем значения первого элементаif(extremes[eFinish].position==0)
{
//произошло превышение расстояния между противоположными экстремумамиif(eHigh-eExtremes[eFinish].price>eDistance)
{
eExtremes[eFinish].time=eTime;
eExtremes[eFinish].price=eHigh;
eExtremes[eFinish].position=1;
}
if(eExtremes[eFinish].price-eLow>eDistance)
{
eExtremes[eFinish].time=eTime;
eExtremes[eFinish].price=eLow;
eExtremes[eFinish].position=-1;
}
}
}
}
好的,...
- 也许是其他的东西...
历史上理想的进入点--ZigZag,你已经拒绝了
我不想用ZigZag,因为它亵渎了这个想法。如果ZZ是一个完美的完美点指标,那么它就是所有指标中最理想的,因为它比其他任何指标都更准确地击中了完美点。事实证明--ZigZag应该出现在所有策略的每一个贸易信号构建中。而这是无稽之谈。
我认为,历史上的交易区域应该由以下标准决定:时间/利润/风险和使用GA。
我不想用ZigZag,因为它亵渎了这个想法。如果ZZ是一个完美的完美点指标,那么它就是所有指标中最理想的,因为它比其他任何指标都更准确地击中了完美点。事实证明--ZigZag应该出现在所有策略的每一个贸易信号构建中。而这是无稽之谈。
我认为,历史上的交易领域应该由以下标准决定:时间/利润/风险和使用GA。
我不反对
我看不出有什么可讨论的,我先走了。
我们需要以某种方式让大会参与寻找IT(理想点)。我正在考虑这个问题。
我不明白,完美点在历史上已经是众所周知的了。 它们是极值,你可以用眼睛看到它们。它不需要复杂的算法来寻找极值。我们只需要确定识别它们的条件(例如,在两个相对相邻的极值之间超过一定数量的点)。然后我们可以创建一个由这些极值(价格,日期)组成的数组,并使用相同的历史记录检查每个极值点(或其接近点)的任何指标的值。对吗?
这里有一个 "不成功便成仁 "的代码,用于搜索和存储历史的极值(没有性能保证)。
此外,这段代码应该捕捉和处理螺柱--也就是说,当一个蜡烛同时与最大值和最小值重叠时,以及极值之间的最小时间。
现在,带有极值的数组被填满了,你知道在哪里和什么时候看你的指标。但对其有用性的怀疑仍然存在:)
我不想用ZigZag,因为它亵渎了这个想法。如果ZZ是一个完美点的指标,那么它就是所有指标中最理想的,因为它比其他任何指标都更准确地击中了完美点。事实证明--ZigZag应该出现在所有策略的每一个贸易信号构建中。而这是无稽之谈。
我认为,历史上的交易区域应该由以下标准决定:时间/利润/风险和使用GA。
你不了解Zig-Zag指标的BIT...
ZZ指标确实是一个理想的指标,但只是 作为 其他指标的 一个设置。
你不明白Zig-Zag指标的意义...
ZZ指标确实是一个理想的指标,但只是 作为 其他指标的 一个设置。
我不明白,理想的点在历史上已经知道了。 这些是极点,可以用眼睛看到。它不需要复杂的算法来寻找极值。我们只需要确定识别它们的条件(例如,在两个相对相邻的极值之间超过一定数量的点)。然后我们可以创建一个由这些极值(价格、日期)组成的数组,并使用相同的历史记录检查每个极值点(或其接近点)的任何指标的值。对吗?
这里有一个搜索和存储历史极值 的碎裂的代码例子(不保证性能)。
此外,这段代码应该捕捉和处理尖峰--当一个蜡烛图同时覆盖最大和最小,以及极值之间的最小时间。
现在,带有极值的数组已经填好,你知道在什么地方和什么时候看你的指标。但对其有用性仍有疑问:)
彼得,你能在图表上画出几个手绘交易的例子吗?进入和退出。最好是取一块有各种价格变动的图表。并在这些点上解释原因。交易的时间/利润/风险比率是多少?
因为我不太理解你对理想点的看法。
彼得,你能在图表上画出几个手绘交易的例子吗?进入和退出。最好是取一块有各种价格变动的图表。并在这些点上解释原因。交易的时间/利润/风险比率是多少?
因为我不太理解你对理想点的看法。
没问题。
你把气撒在Zig-Zag身上,这很有意义。Zig-Zag对这个趋势一无所知。它就像时钟一样,既是趋势又是平坦的。 他的波浪(膝盖)不是趋势波。趋势波是根据以下规则建立的:如果一个趋势征服了新的山峰,则被认为是持续的。这意味着下一个趋势波总是超过前一个趋势波,如果它没有,那么它就不是一个波。