Indikatoren: Kursprognose mit Nearest Neighbor ermittelt durch einen gewichteten Korrelationskoeffizienten - Seite 2

 
tolga gogebakan:

Es gibt eine Warnung. Könnten Sie mir bitte helfen? Ich danke Ihnen im Voraus.

Sie ist harmlos - verwenden Sie sie weiterhin, da sie die Arbeit des Indikators nicht beeinflusst
 
Hallo Vladimir, vielen Dank für deine Freundlichkeit, deine schönen, großartigen, erstaunlichen und unglaublichen futuristischen und fortschrittlichen Gedanken und Ideen zu teilen. Ich bin dein Fan der Codierung dieser entweder mql4 oder 5. Lassen Sie uns das so beibehalten. Ich bin auch sehr dankbar für die Hilfe von McLaden, obwohl die Erklärung kurz, aber sehr nützlich ist. Gott segne Sie alle.
 

Hut ab vor dem Autor!

Alles ist intelligent und kompakt geschrieben. Vielen Dank dafür.

Verbesserungswünsche gibt es, falls Sie noch dabei sind.

1. In der Historie ist es notwendig, nicht einen Nachbarn zu zeichnen, sondern den letzten Punkt der Vorhersage, um seine Länge (Nfut) zurückversetzt. D.h. man berechnet und zeichnet die Vorhersage für ein Intervall in der Vergangenheit. Dann wird die Qualität der Vorhersage deutlich. Der Indikator wird jedoch lange brauchen, um zu denken: .....

2. ein Nachbar ist sehr klein! Das Ergebnis ist unbeständig.

Theoretisch ist es notwendig, die Anzahl der Nachbarn = 3 Längen des Startvektors (d.h. des Musters) zu nehmen und dann den Durchschnitt aller Vorhersagen zu bilden (besser noch, mit Gewichten proportional zu den Korrelationskoeffizienten).

 

Hallo Vladimir,

ich wollte mit dir über diesen Indikator für einen Anpassungsauftrag sprechen.

Kontaktieren Sie mich, wenn Sie können: najnudel@gmail.com.

tks

 
Ich denke, die korrekte Quote ist eher 50:50, aber die vorhergesagten Ergebnisse sind für den manuellen Handel nützlich.
 

Ich habe einen verbesserten Nearest-Neighbour-Algorithmus, den ich für meine Zwecke verwende. Er überwindet die genannten Nachteile. Die Idee ist einfach. Bei der Suche nach dem nächsten Nachbarn in historischen Mustern speichern Sie alle vergangenen Muster, ihre bekannten zukünftigen Muster und die Korrelationskoeffizienten zwischen diesen vergangenen Mustern und dem aktuellen Muster. Nennen wir diese Korrelationskoeffizienten r, die den Vektor aller vergangenen Korrelationen darstellen. Anstatt das vergangene Muster mit dem höchsten abs (r) als nächsten Nachbarn auszuwählen, verwenden Sie ALLE vergangenen Muster als "nächste Nachbarn", aber mit einer Gewichtung ihrer Beiträge exp(sw*abs(r)), wobei sw ein vom Benutzer gewählter Exponent ist, der die Selektivität der Vorhersage vergangener Muster mit den höchsten Korrelationskoeffizienten steuert. Ein sehr großer sw-Wert führt dazu, dass die Vorhersage nur von dem Nachbarn mit der stärksten Korrelation (dem wahren "nächsten Nachbarn") beeinflusst wird. Ein sehr kleiner sw-Wert führt dazu, dass alle vergangenen Muster gleich wichtig sind. Diejenigen, die die Idee verstehen, können den obigen Code umschreiben und einen neuen Indikator veröffentlichen. Unten sehen Sie die Implementierung in Matlab. Wenn Sie nur vergangene Muster mit positiver Korrelation berücksichtigen wollen, entfernen Sie die Funktion abs () in r = abs (...). Dann haben vergangene Muster mit negativer Korrelation automatisch das geringste Gewicht.

% 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 vom Benutzer gewählter Exponent ist, der die Selektivität der Vorhersage von vergangenen Mustern mit den höchsten Korrelationskoeffizienten steuert. Ein sehr großer sw-Wert führt dazu, dass die Vorhersage nur von dem Nachbarn mit der stärksten Korrelation (dem wahren "nächsten Nachbarn") beeinflusst wird. Ein sehr kleiner sw-Wert führt dazu, dass alle vergangenen Muster gleich wichtig sind. Diejenigen, die die Idee verstehen, können den obigen Code umschreiben und einen neuen Indikator veröffentlichen. Unten sehen Sie die Implementierung in Matlab. Wenn Sie nur vergangene Muster mit positiver Korrelation berücksichtigen wollen, entfernen Sie die Funktion abs () in r = abs (...). Dann haben vergangene Muster mit negativer Korrelation automatisch das geringste Gewicht.

Vladimir, ich verstehe die Idee.
Aber es wird immer noch eine zufällige Vorhersage sein.

Ich habe vor etwa 10 Jahren viel mit der Suche nach Mustern experimentiert. Mit Spiegelung, Umkehrung, Summierung von Mustern. Fazit: Völlige Zufälligkeit bei der Fortsetzung eines Paterns in die Zukunft. Alle Zufälle sind zufällig.

 
Nikolai Semko #:

Vladimir, ich verstehe die Idee.
Aber es wird immer noch eine zufällige Vorhersage sein.

Ich habe vor etwa 10 Jahren viel mit der Paternosuche experimentiert. Mit Spiegelung, Umkehrung, Summierung von Paternos. Fazit: Völlige Zufälligkeit bei der Fortsetzung eines Paternos in die Zukunft. Alle Zufälle sind zufällig.

Ich stimme zu

 
Nikolai Semko #:

Vladimir, ich verstehe die Idee.
Aber es wird immer noch eine zufällige Vorhersage sein.

Ich habe vor etwa 10 Jahren viel mit der Paternosuche experimentiert. Mit Spiegelung, Umkehrung, Summierung von Paternos. Fazit: Völlige Zufälligkeit bei der Fortsetzung eines Paternos in die Zukunft. Alle Zufälle sind zufällig.

wenn man die reale Zeit betrachtet, überhaupt nicht. Ähnliche Bewegungen zu ähnlichen Zeitpunkten. Nimmt man den Zeitfaktor aus dem System heraus, erhält man Zufälligkeit.

 
okayjustask manuellen Handel nützlich.

dieser Code braucht leichte Verbesserungen, aber okayjustask Ihre Idee macht Sinn