Há muito tempo escrevi indicadores de regressão linear em MQL3, comecei a reescrevê-los em 4, eles não funcionam. Especialistas, por favor, me ajudem a escrever ou corrigir um erro.
E um semelhante: regressão hiperbólica (também não consegue encontrar o erro)
//+------------------------------------------------------------------+ //| гиперболическая регрессия.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); } //+------------------------------------------------------------------+
Procure por https://www.mql5.com/ru/code
https://forum.mql4.com/ru/10446/page13
Obrigado, interessante, mas onde eu estraguei o indicador?
kvn:
Obrigado, interessante, mas onde eu estraguei o indicador?
É isso mesmo -bagunçado.
Obrigado, interessante, mas onde eu estraguei o indicador?
Rosh:
É isso mesmo -eu fiz asneira.
kvn:
Obrigado, interessante, mas onde eu estraguei o indicador?
Obrigado, interessante, mas onde eu estraguei o indicador?
É isso mesmo -eu fiz asneira.
Você é alfabetizado, não é? Então me diga onde. E muito obrigado.
kvn:
Alfabetizado, eh? Então me diga onde, e muito obrigado.
Tem havido muitas informações sobre este tópico aqui. Só posso lhe dar uma idéia geral: a equação da soma dos desvios padrão da curva aproximada com tantos parâmetros dados quantos você desejar. Em seguida, as derivadas parciais de cada parâmetro são encontradas e equiparadas a zero. A partir do sistema resultante de equações lineares, todos os parâmetros necessários são encontrados. O algoritmo, como você vê, é simples, e não é nada criativo para fazê-lo.
Rosh:
É isso mesmo -bagunçado.
kvn:
Obrigado, interessante, mas onde eu estraguei o indicador?
Obrigado, interessante, mas onde eu estraguei o indicador?
É isso mesmo -bagunçado.
Alfabetizado, eh? Então me diga onde, e muito obrigado.
O que você diz não é exatamente uma regressão linear. A técnica LR está descrita em meu indicador.
//Indicador é construído usando a fórmula:LR = at+b
// onde LR - preço "médio" previsto de fechamento,
//t - ponto no tempo,Pt - preço de fechamento dos últimos n períodos.
//a = (n*SUMM(t*Pt) -SUMM(t)*SUMM(Pt))/(n*SUMM(t^2) - (SUMM(t))^2) - ângulo tangente da linha de regressão,
//b = 1/n*(SUMM(Pt) - a*SUMM(t)), - deslocamento horizontal}
Mas quando o executo, primeiro recebo dados errados (quando n=1-100) e depois n=22 e saem valores corretos. Há um pequeno erro em algum lugar e eu não consigo encontrá-lo.
Suspeito que o erro esteja no operador do laço.
//Indicador é construído usando a fórmula:LR = at+b
// onde LR - preço "médio" previsto de fechamento,
//t - ponto no tempo,Pt - preço de fechamento dos últimos n períodos.
//a = (n*SUMM(t*Pt) -SUMM(t)*SUMM(Pt))/(n*SUMM(t^2) - (SUMM(t))^2) - ângulo tangente da linha de regressão,
//b = 1/n*(SUMM(Pt) - a*SUMM(t)), - deslocamento horizontal}
Mas quando o executo, primeiro recebo dados errados (quando n=1-100) e depois n=22 e saem valores corretos. Há um pequeno erro em algum lugar e eu não consigo encontrá-lo.
Suspeito que o erro esteja no operador do laço.
Embora eu não goste de wikipedia, mas estou fornecendo um link para ela sobre o tema da regressão linear. Também encontrei isto em um certo blog - http://cmacfm.mazoo.net/archives/000936.html
Não vou discutir sobre a LR. ENTÃO ONDE ESTÁ O ERRO NO CÓDIGO INDICADOR???????
![MQL5 - Linguagem para estratégias de negociação inseridas no terminal do cliente MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se