Price Prediction By Nearest Neighbor Indicator For MT5
Table Of Contents:
- Price Prediction By Nearest Neighbor Indicator For MT5
- Εγκατάσταση του Price Prediction By Nearest Neighbor Indicator For MT5
- Παράμετροι του Price Prediction By Nearest Neighbor Indicator For MT5
- Buffers του Price Prediction By Nearest Neighbor Indicator For MT5
- Κύρια μέρη του κώδικα
Η Price Prediction By Nearest Neighbor Indicator For MT5 αντλεί τις αναμενόμενες μελλοντικές κινήσεις τιμών οι οποίες υπολογίζονται από τα πρόσφατα πρότυπα τιμών. Τα πρόσφατα πρότυπα τιμών είναι οι λεγόμενοι πλησιέστεροι γείτονες που έδωσαν το όνομα αυτού του δείκτη. Τα πρότυπα τιμών χρησιμοποιούνται για να υπολογιστεί μια σταθμισμένη ψηφοφορία. Από αυτό το αποτέλεσμα οι μελλοντικές κινήσεις των τιμών σχεδιάζονται στο γράφημα.
Εγκατάσταση του Price Prediction By Nearest Neighbor Indicator For MT5
Αφού κατεβάσετε την ένδειξη μέσω της παραπάνω φόρμας, πρέπει να αποσυνδέσετε το αρχείο zip. Στη συνέχεια, πρέπει να αντιγράψετε το αρχείο nearest_neighbor.mq5 στο φάκελο MQL5Indicators της εγκατάστασης MT5 . Στη συνέχεια, κάντε επανεκκίνηση του MT5 και, στη συνέχεια, θα μπορείτε να δείτε τον δείκτη στη λίστα των δεικτών.
Παράμετροι του Price Prediction By Nearest Neighbor Indicator For MT5
Το Price Prediction By Nearest Neighbor Indicator For MT5 έχει παραμέτρους 2 για να ρυθμίσετε τις παραμέτρους.
input int Npast =300; // Past bars in a pattern input int Nfut =50; // Future bars in a pattern (must be < Npast)
Buffers του Price Prediction By Nearest Neighbor Indicator For MT5
Το Price Prediction By Nearest Neighbor Indicator For MT5 παρέχει buffers 2 .
SetIndexBuffer(0,ynn,INDICATOR_DATA); SetIndexBuffer(1,xnn,INDICATOR_DATA);
Κύρια μέρη του κώδικα
int OnCalculate(const int rates_total, const int prev_calculated, const datetime &Time[], const double &Open[], const double &High[], const double &Low[], const double &Close[], const long &tick_volume[], const long &volume[], const int &spread[]) { //--- check for insufficient data and new bar int bars=rates_total; if(bars lt Npast+Nfut) { Print("Error: not enough bars in history!"); return(0); } if(PrevBars==bars) return(rates_total); PrevBars=bars; //--- initialize indicator buffers to EMPTY_VALUE ArrayInitialize(xnn,EMPTY_VALUE); ArrayInitialize(ynn,EMPTY_VALUE); //--- main cycle //--- compute correlation sums for current pattern //--- current pattern starts at i=bars-Npast and ends at i=bars-1 double my=0.0; double syy=0.0; for(int i=0;i lt Npast;i++) { double y=Open[bars-Npast+i]; my +=y; syy+=y*y; } double deny=syy*Npast-my*my; if(deny lt =0) { Print("Zero or negative syy*Npast-my*my = ",deny); return(0); } deny=MathSqrt(deny); //--- compute correlation sums for past patterns //--- past patterns start at k=0 and end at k=bars-Npast-Nfut ArrayResize(mx,bars-Npast-Nfut+1); ArrayResize(sxx,bars-Npast-Nfut+1); ArrayResize(denx,bars-Npast-Nfut+1); int kstart; if(FirstTime) kstart=0; else kstart=bars-Npast-Nfut; FirstTime=false; for(int k=kstart;k lt =bars-Npast-Nfut;k++) { if(k==0) { mx[0] =0.0; sxx[0]=0.0; for(int i=0;i lt Npast;i++) { double x=Open[i]; mx[0] +=x; sxx[0]+=x*x; } } else { double xnew=Open[k+Npast-1]; double xold=Open[k-1]; mx[k] =mx[k-1]+xnew-xold; sxx[k]=sxx[k-1]+xnew*xnew-xold*xold; } denx[k]=sxx[k]*Npast-mx[k]*mx[k]; } //--- compute cross-correlation sums and correlation coefficients and find NN double sxy[]; ArrayResize(sxy,bars-Npast-Nfut+1); double b,corrMax=0; int knn=0; for(int k=0;k lt =bars-Npast-Nfut;k++) { //--- Compute sxy sxy[k]=0.0; for(int i=0;i lt Npast;i++) sxy[k]+=Open[k+i]*Open[bars-Npast+i]; //--- Compute corr coefficient if(denx[k] lt =0) { Print("Zero or negative sxx[k]*Npast-mx[k]*mx[k]. Skipping pattern # ",k); continue; } double num=sxy[k]*Npast-mx[k]*my; double corr=num/MathSqrt(denx[k])/deny; if(corr gt corrMax) { corrMax=corr; knn=k; b=num/denx[k]; } } Print("Nearest neighbor is dated ",Time[knn]," and has correlation with current pattern of ",corrMax); //--- Compute xm[] and ym[] by scaling the nearest neighbor double delta=Open[bars-1]-b*Open[knn+Npast-1]; for(int i=0;i lt Npast+Nfut;i++) { if(i lt =Npast-1) xnn[bars-Npast+i]=b*Open[knn+i]+delta; if(i gt =Npast-1) ynn[bars-Npast-Nfut+i]=b*Open[knn+i]+delta; } return(rates_total); } //+------------------------------------------------------------------+