Molto tempo fa ho scritto indicatori di regressione lineare in MQL3, ho iniziato a riscriverli in 4, non funzionano. Specialisti per favore aiutatemi a scrivere o a correggere un errore.
E uno simile: regressione iperbolica (non si trova nemmeno l'errore)
//+------------------------------------------------------------------+ //| гиперболическая регрессия.mq4 | //| Copyright © 2008, MetaQuotes Software Corp. | //| http://www.metaquotes.net | //+------------------------------------------------------------------+ #property copyright "Copyright © 2008, MetaQuotes Software Corp." #property link "http://www.metaquotes.net" //#property indicator_chart_window #property indicator_separate_window #property indicator_buffers 1 #property indicator_color1 Red //---- input parameters extern int nn=21; //---- buffers double ExtMapBuffer1[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- indicators SetIndexStyle(0,DRAW_LINE); SetIndexBuffer(0,ExtMapBuffer1); //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { int counted_bars=IndicatorCounted(); //---- double barr, as, bs,cs,ds,e, f,k,LR,ExtMapBuffer1[]; int n,n1; // Индикатор Гиперболической Регресии for (barr=0;barr<=100;barr++){ for (n=1;n<=nn;n++){ n1=barr+n-1; as=as+1/n; bs=bs+1/(n*n); cs=cs+Close[n1]; ds=ds+Close[n1]/n; } e=nn*bs-as*as; f=cs*bs-ds*as; k=nn*ds-as*cs; f=f/e; k=k/e; LR = f+k/nn; as=0; bs=0; cs=0; ds=0; ExtMapBuffer1[n]=LR; } //---- return(0); } //+------------------------------------------------------------------+
Cerca per https://www.mql5.com/ru/code
https://forum.mql4.com/ru/10446/page13
Grazie, interessante, ma dove ho sbagliato l'indicatore?
kvn:
Grazie, interessante, ma dove ho sbagliato l'indicatore?
Proprio così -incasinato.
Grazie, interessante, ma dove ho sbagliato l'indicatore?
Rosh:
È vero -ho fatto un casino.
kvn:
Grazie, interessante, ma dove ho sbagliato l'indicatore?
Grazie, interessante, ma dove ho sbagliato l'indicatore?
È vero -ho fatto un casino.
Lei è alfabetizzato, vero? Allora mi dica dove, e grazie mille.
kvn:
Allora dimmi dove, e grazie mille.
C'è stato molto sull'argomento qui. Posso solo darvi un'idea generale: l'equazione della somma delle deviazioni standard della curva approssimativa con tanti parametri dati quanti ne volete. Poi le derivate parziali di ogni parametro sono trovate ed equiparate a zero. Dal sistema risultante di equazioni lineari si trovano tutti i parametri necessari. L'algoritmo, come potete vedere, è semplice, e non è affatto creativo per farlo.
Rosh:
Proprio così -incasinato.
kvn:
Grazie, interessante, ma dove ho sbagliato l'indicatore?
Grazie, interessante, ma dove ho sbagliato l'indicatore?
Proprio così -incasinato.
Allora dimmi dove, e grazie mille.
Quello che dici non è esattamente una regressione lineare. La tecnica LR è descritta nel mio indicatore.
//L'indicatore è costruito con la formula:LR = at+b
//Dove LR - prezzo "medio" previsto di chiusura,
//t - punto nel tempo,Pt - prezzo di chiusura degli ultimi n periodi.
//a = (n*SUMM(t*Pt) -SUMM(t)*SUMM(Pt))/(n*SUMM(t^2) - (SUMM(t))^2) - angolo tangente della linea di regressione,
//b = 1/n*(SOMMA(Pt) - a*SOMMA(t)), - spostamento orizzontale}
Ma quando lo eseguo, prima ottengo dati sbagliati (quando n=1-100,) e poi n=22 e vengono fuori valori corretti. C'è un piccolo errore da qualche parte e non riesco a trovarlo.
Sospetto che l'errore sia nell'operatore del ciclo.
//L'indicatore è costruito con la formula:LR = at+b
//Dove LR - prezzo "medio" previsto di chiusura,
//t - punto nel tempo,Pt - prezzo di chiusura degli ultimi n periodi.
//a = (n*SUMM(t*Pt) -SUMM(t)*SUMM(Pt))/(n*SUMM(t^2) - (SUMM(t))^2) - angolo tangente della linea di regressione,
//b = 1/n*(SOMMA(Pt) - a*SOMMA(t)), - spostamento orizzontale}
Ma quando lo eseguo, prima ottengo dati sbagliati (quando n=1-100,) e poi n=22 e vengono fuori valori corretti. C'è un piccolo errore da qualche parte e non riesco a trovarlo.
Sospetto che l'errore sia nell'operatore del ciclo.
Anche se non mi piace wikipedia, ma sto fornendo un link ad essa sul tema della regressione lineare. Ho anche trovato questo su un certo blog - http://cmacfm.mazoo.net/archives/000936.html
Non voglio discutere di LR. QUINDI DOV'È L'ERRORE NEL CODICE DELL'INDICATORE???????
Ti stai perdendo delle opportunità di trading:
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Registrazione
Accedi
Accetti la politica del sito e le condizioni d’uso
Se non hai un account, registrati