Indicadores: Predicción del precio usando el vecino más cercano, encontrado mediante un coeficiente de correlación ponderado - página 2

 
tolga gogebakan:

Hay una advertencia. ¿Podría ayudarme? Gracias de antemano.

Es benigno - seguir utilizándolo como es, ya que no influye en el trabajo del indicador
 
Hola Vladimir, muchas gracias por su amabilidad de compartir su hermoso, impresionante, asombroso e increíble pensamiento e ideas futuristas y avanzadas. Soy tu fan de la codificación de este ya sea mql4 o 5. Sigamos así. Como bien apreciado mucho por McLaden ayuda aunque corta explicación pero muy útil. Dios los bendiga a todos.
 

Felicitaciones al autor.

Todo está escrito de forma inteligente y compacta. Gracias.

Hay deseos de mejora, si es que sigues haciéndolo.

1. En la historia es necesario dibujar no un vecino, sino el último punto de la previsión, desplazado hacia atrás por su longitud (Nfut). Es decir, calcular y dibujar la previsión para algún intervalo en el pasado. Entonces, la calidad de la predicción será evidente. Sin embargo, el indicador tardará mucho tiempo en pensar al inicio.....

2. ¡Un vecino es muy poco! El resultado es inestable.

Teóricamente, es necesario tomar el número de vecinos = 3 longitudes del vector de partida (es decir, el patrón), y luego promediar todas las previsiones (y mejor, con pesos proporcionales a los coeficientes de correlación).

 

Hola Vladimir,

Quería hablar contigo sobre este indicador para un trabajo de personalización.

Ponte en contacto conmigo si puedes: najnudel@gmail.com.

tks

 
Creo que el porcentaje correcto es algo así como 50:50, pero los resultados previstos son útiles para la negociación manual.
 

Tengo un algoritmo de vecino más próximo mejorado que utilizo para mis fines. Supera los inconvenientes mencionados. La idea es sencilla. Cuando se busca el vecino más próximo en patrones históricos, se almacenan todos los patrones pasados, sus patrones futuros conocidos y los coeficientes de correlación entre estos patrones pasados y el patrón actual. Llamemos r a estos coeficientes de correlación, que son el vector de todas las correlaciones pasadas. En lugar de seleccionar el patrón pasado con los abs (r) más altos como el vecino más cercano, utilice TODOS los patrones pasados como "vecinos más cercanos" pero con sus contribuciones ponderadas exp(sw*abs(r)), donde sw es un exponente seleccionado por el usuario que controla la selectividad de la predicción de los patrones pasados con los coeficientes de correlación más altos. Un valor de sw muy grande hará que la predicción se vea influida sólo por el vecino con la correlación más fuerte (el verdadero "vecino más cercano"). Un sw muy pequeño hará que todos los patrones pasados tengan la misma importancia. Quien entienda la idea puede reescribir el código anterior y publicar un nuevo indicador. A continuación se muestra la implementación en Matlab. Si necesita incluir sólo patrones pasados con correlación positiva, elimine la función abs () en r = abs (...). Entonces los patrones pasados con correlación negativa tendrán automáticamente el peso más bajo.

% Inputs
% sp is a time series to be predicted as a column vector
np=100;             	% past pattern length
nf=np;              	% future pattern length
sw=100;             	% weighting exponent in kNN

% Compute correlations to past patterns in sp
m  =numel(sp);		% number of bars in sp
x  =sp(1:m-np-nf);      % past patterns
y  =sp(m-np-nf+1:m-nf); % current past pattern
f  =sp(np+1:m-nf);      % future patterns
yf =sp(m-nf:m);         % current future pattern
Sx =movsum(x,np,'Endpoints','discard');
Sxx=movsum(x.^2,np,'Endpoints','discard');
Sy =sum(y);
Syy=sum(y.^2);
Sxy=conv(x,flip(y),'valid');
num=Sxy*np-Sx*Sy;
den=Sxx*np-Sx.*Sx;
r  =abs(real(num./sqrt(den)/sqrt(Syy*np-Sy*Sy)));

% Find nearest neighbor and extrapolate
w=exp(sw*r);
wsum=sum(w);
w=w/wsum;		% weighting coefficients of past patterns
a1=num./den;
a0=(Sxx.*Sy-Sx.*Sxy)./den;
a1=w.*a1;
a0=w.*a0;
a0_sum=sum(a0);
xp=conv(x,flip(a1),'valid')+a0_sum; % composite matched past pattern
xf=conv(f,flip(a1),'valid')+a0_sum; % predicted future pattern
xf=[xp(end);xf];

% Plot
figure
plot(1:np,y,'-k'); hold on;
plot(1:np,xp,'-b'); hold on;
plot(np:np+nf,yf,':k'); hold on;
plot(np:np+nf,xf,'-r');
 
Vladimir seleccionado por el usuario que controla la selectividad de la predicción de los patrones pasados con los coeficientes de correlación más altos. Un valor de sw muy grande hará que la predicción se vea influida sólo por el vecino con la correlación más fuerte (el verdadero "vecino más cercano"). Un sw muy pequeño hará que todos los patrones pasados tengan la misma importancia. Quien entienda la idea puede reescribir el código anterior y publicar un nuevo indicador. A continuación se muestra la implementación en Matlab. Si necesita incluir sólo patrones pasados con correlación positiva, elimine la función abs () en r = abs (...). Entonces los patrones pasados con correlación negativa tendrán automáticamente el peso más bajo.

Vladimir, entiendo la idea.
Pero seguirá siendo una predicción aleatoria.

Experimenté mucho con la búsqueda de patrones hace unos 10 años. Con reflejo, inversión, suma de paterns. Conclusión - aleatoriedad completa en la continuación de un paternus en el futuro. Todas las coincidencias son aleatorias.

 
Nikolai Semko #:

Vladimir, entiendo la idea.
Pero seguirá siendo una predicción aleatoria.

Experimenté mucho con la búsqueda de paternos hace unos 10 años. Con reflejo, inversión, suma de paternos. Conclusión - aleatoriedad completa en la continuación de un paternus en el futuro. Todas las coincidencias son aleatorias.

Estoy de acuerdo

 
Nikolai Semko #:

Vladimir, entiendo la idea.
Pero seguirá siendo una predicción aleatoria.

Experimenté mucho con la búsqueda de paternos hace unos 10 años. Con reflejo, inversión, suma de paternos. Conclusión - aleatoriedad completa en la continuación de un paternus en el futuro. Todas las coincidencias son aleatorias.

Si consideras el tiempo real, en absoluto. Movimientos similares en momentos similares. Quitas el factor tiempo del sistema y obtienes aleatoriedad.

 
okayjustask comercio manual.

este código necesita ligeras mejoras, pero okayjustask su idea tiene sentido