Hace mucho tiempo escribí indicadores de regresión lineal en MQL3, empecé a reescribirlos en 4, no funcionan. Especialistas por favor ayúdenme a escribir o corregir un error.
Y otro similar: regresión hiperbólica (tampoco encuentro el error)
//+------------------------------------------------------------------+ //| гиперболическая регрессия.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); } //+------------------------------------------------------------------+
Busque en https://www.mql5.com/ru/code
https://forum.mql4.com/ru/10446/page13
Gracias, interesante, pero ¿dónde me he equivocado con el indicador?
kvn:
Gracias, interesante, pero ¿dónde me he equivocado con el indicador?
Eso es, unlío.
Gracias, interesante, pero ¿dónde me he equivocado con el indicador?
Rosh:
Así es,lo he estropeado.
kvn:
Gracias, interesante, pero ¿dónde me he equivocado con el indicador?
Gracias, interesante, pero ¿dónde me he equivocado con el indicador?
Así es,lo he estropeado.
Eres alfabetizado, ¿no? Entonces dime dónde. Y muchas gracias.
kvn:
¿Literatura, eh? Entonces dime dónde, y muchas gracias.
Se ha informado mucho sobre este tema aquí. Sólo puedo darte una idea general: la ecuación de la suma de las desviaciones estándar de la curva de aproximación con tantos parámetros dados como quieras. A continuación, se hallan las derivadas parciales de cada parámetro y se igualan a cero. A partir del sistema de ecuaciones lineales resultante se encuentran todos los parámetros necesarios. El algoritmo, como puedes ver, es sencillo, y nada creativo para hacerlo.
Rosh:
Eso es, unlío.
kvn:
Gracias, interesante, pero ¿dónde me he equivocado con el indicador?
Gracias, interesante, pero ¿dónde me he equivocado con el indicador?
Eso es, unlío.
¿Literatura, eh? Entonces dime dónde, y muchas gracias.
Lo que dices no es exactamente una regresión lineal. La técnica LR se describe en mi indicador.
//El indicador se construye con la fórmula:LR = at+b
//donde LR - precio "medio" previsto de cierre,
//t - punto en el tiempo, Pt - precio de cierre de los últimos n períodos.
/a = (n*SUMM(t*Pt) -SUMM(t)*SUMM(Pt))/(n*SUMM(t^2) - (SUMM(t))^2) - ángulo tangente de la recta de regresión,
//b = 1/n*(SUMM(Pt) - a*SUMM(t)), - desplazamiento horizontal}
Pero durante la ejecución al principio datos erróneos (cuando n=1-100,) y luego n=22 y salen valores correctos. Hay un pequeño error en alguna parte y no lo encuentro.
Sospecho que el error está en el operador de bucle.
//El indicador se construye con la fórmula:LR = at+b
//donde LR - precio "medio" previsto de cierre,
//t - punto en el tiempo, Pt - precio de cierre de los últimos n períodos.
/a = (n*SUMM(t*Pt) -SUMM(t)*SUMM(Pt))/(n*SUMM(t^2) - (SUMM(t))^2) - ángulo tangente de la recta de regresión,
//b = 1/n*(SUMM(Pt) - a*SUMM(t)), - desplazamiento horizontal}
Pero durante la ejecución al principio datos erróneos (cuando n=1-100,) y luego n=22 y salen valores correctos. Hay un pequeño error en alguna parte y no lo encuentro.
Sospecho que el error está en el operador de bucle.
Aunque no me gusta la wikipedia, pero pongo un enlace sobre el tema de la regresión lineal. También encontré esto en cierto blog - http://cmacfm.mazoo.net/archives/000936.html
Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese