Cálculo de la PPZ - ayuda para afinar - página 2

 
Es un poco pesado para un EA, pero es una buena idea. Tal vez podamos aligerarlo, pero dudo que sirva de mucho para el comercio visual como análisis adicional.
 
En cuanto a la optimización. En mi opinión, deberías ordenar el array resultante Fr0[j] y luego bailar sobre él, el resultado será una sola pasada.
 

Este código no tiene en cuenta las barras con dos fractales al mismo tiempo:


j=0;
for(i = loopbegin; i > Nfirst; i--) {
f0 = -1.0;
f0 = iFractals(NULL,0,MODE_UPPER,i);
if (f0<=0.0 ) f0 = iFractals(NULL,0,MODE_LOWER,i);
si (f0>0,0) {
Fr0[j]=f0;
Ind0[j]=i;
j++;
}
}
Nmax = j;


Y aquí no es necesario pasar por todos los fractales, no importa si se compara el fractal #1 con el #2 o el #2 con el #1.
La forma de solucionarlo es la siguiente:


for(i = 0; i < Nmax; i++) {
f0 = Fr0[i];
for(j = i+1; j < Nmax; j++) {
f1=Fr0[j];
if(MathAbs(Ind0[i]-Ind0[j])>minBars) {
for(k = j+1; k < Nmax; k++) {
f2 = Fr0[k];
if(MathAbs(Ind0[i]-Ind0[k])>minBars && MathAbs(Ind0[k]-Ind0[j])>minBars) {
for(l = k+1; l < Nmax; l++) {
f3 = Fr0[l];
if (MathAbs(Ind0[i]-Ind0[l])>minBars && MathAbs(Ind0[j]-Ind0[l])>minBars && MathAbs(Ind0[k]-Ind0[l])>minBars) {
p0 = (f0+f1+f2+f3)/4,0;
s0 = (f0-p0)*(f0-p0)+(f1-p0)*(f1-p0)+(f2-p0)*(f2-p0)+(f2-p0)*(f2-p0);
si (s0<smin) {
smin=s0;
pmin=p0;
imin=i;
jmin=j;
kmin=k;
lmin=l;
}
}
}
}
}
}
}
}

Y este código debe ser puesto en la función y utilizado 4 veces en lugar de copiar el código. Los fractales en Fr0 deben ponerse a cero, para que no participen en la siguiente pasada.



 

¿Por qué pasar por los fractales en cada iteración? ¿No es más fácil hacerlo una vez y analizarlo después? Además, la comparación debe converger a un triángulo, no a un cuadrado (no tiene sentido comparar dos veces el fractal 1 y el 2, y luego el 2 y el 1). Lo hice un poco diferente - el indicador está buscando secuencialmente la divergencia de 0 pips y más hasta que encuentra cuatro niveles. No he limitado la distancia entre los niveles:


Archivos adjuntos:
 
Scriptong писал(а) >>

¿Por qué pasar por los fractales en cada iteración? ¿No es más fácil hacerlo una vez y analizarlo después? Además, la comparación debe converger a un triángulo, no a un cuadrado (no tiene sentido comparar dos veces el fractal 1 y el 2, y luego el 2 y el 1). Lo hice un poco diferente - el indicador está buscando secuencialmente la divergencia de 0 pips y más hasta que encuentra cuatro niveles. No he limitado la distancia entre los niveles:

¡Genial! La velocidad es totalmente diferente... :)

¿Puedo guardar también los valores de los niveles recibidos en los buffers del indicador? Para poder procesarlas posteriormente desde el Asesor Experto.

 

Voy a hacer un experto yo mismo. Tengo algunas ideas. Pero tal vez alguien tenga ideas más interesantes. Haré uno y lo publicaré en Code Base.

 
Scriptong писал(а) >>

Voy a hacer un experto yo mismo. Tengo algunas ideas. Pero tal vez alguien tenga ideas más interesantes. Los haré y los publicaré en Code Base.

Puede intentar añadirlo de esta manera:

if (period == 0) {period = WindowBarsPerChart();}
Y mostrar en algún lugar de la pantalla el número de barras a calcular...

 
mikola2 >>:

if (period == 0) {period = WindowBarsPerChart();}
И выводить где-нибудь на экране количество баров для расчета...

No me refería a eso :)

Ideas sobre el Asesor Experto. Está claro que hay mucho más que añadir al propio indicador

 
Alguna idea, que sea una función, me refiero a la lógica del pavo, ¿se puede hacer?
 
qwerewq >>:
Идеи есть, сделайте его в виде функции, логику индюка имею в виду, сможете?


ya está en forma de funciones...