Provavelmente, o melhor neste caso é encontrar a média aritmética de todos os X[i], subtraí-la dos próprios valores, calcular os coeficientes de regressão e corrigi-los novamente. Em princípio, nada impede que você faça o mesmo com Y[i]. Mas eu não tentei encontrar a fórmula, embora obviamente não seja difícil. Há obviamente algum truque com matrizes fracamente condicionadas.
P.S. Você também pode normalizar as séries de dados para aproximadamente a mesma ordem.
Provavelmente, o melhor neste caso é encontrar a média aritmética de todos os X[i], subtraí-la dos próprios valores, calcular os coeficientes de regressão e corrigi-los novamente. Em princípio, nada impede que você faça o mesmo com Y[i]. Mas eu não tentei encontrar a fórmula, embora obviamente não seja difícil. Há obviamente algum truque com matrizes fracamente condicionadas.
P.S. Você também pode normalizar as séries de dados para aproximadamente a mesma ordem.
E eu tenho e sugeri através do MOJ. Fórmula direta, sem necessidade de correção.
Agora você também pode colocar o ACF na base de código. Verificado novamente, tudo coincide com uma precisão de 8 caracteres, mas é mais provável que isso se deva à entrada nos valores do arquivo de ACF calculados em MQL.
Sergei, eu já tropecei nisto alguns anos atrás quando estava escrevendo meu LR. A saída é simples - ouça a recomendação do Candidato. A única coisa que eu especificaria nesta recomendação é subtrair não o Tempo [Bars-1], mas o tempo do primeiro valor X[]. Em primeiro lugar, ele torna o código de procedimento universal desde que o X de início é movido dentro do procedimento. Em segundo lugar, se houver muitas barras no gráfico (3 anos são 1000000 minutos, ou seja, 60000000 segundos), então, subtrair o tempo da primeira barra no gráfico não mudará fundamentalmente a situação. Em terceiro lugar, você poderá voltar a suas fórmulas originais sem nenhum MOs, o que significa que você será capaz de remover a repetição de ciclos, mantendo a precisão.
Mais uma coisa. Notei que seu X[] é a hora da ata. Ou seja, os X estão dispostos de forma equidistante. O que significa que você pode fugir completamente do tempo e usar o número da barra. Se você fizer esta transição, tudo será contado com precisão e rapidez. Você pode verificar. Isto também é preferível do ponto de vista de que seu LR trabalhará o mesmo em M1 e D1 (imagine como os valores X em D1 serão diferentes se for Tempo, e não número de barras).
Eu acabei de expor minha versão do cálculo, talvez alguém o considere útil. Eu não preciso mover nada. Não me sinto confortável em mudar X para 0. Eu uso esta função para calcular ACF, ela deve ser limitada no tempo (há algumas dependências).
Em geral, não há necessidade de mover o próprio X para o ponto 0. Para isso, é suficiente utilizar uma matriz interna deslocada por X[1] na função LR em vez do próprio X. Você pode até mesmo prescindir de uma matriz - basta subtrair o valor de X[1] no momento em que as somas são calculadas.
Em geral, não há necessidade de mover o próprio X para o ponto 0. Para isso, é suficiente utilizar uma matriz interna deslocada por X[1] na função LR em vez do próprio X. Você pode até mesmo prescindir de uma matriz - basta subtrair o valor de X[1] no momento em que as somas são calculadas.
A propósito, se você tentou, será que funcionou?
Eu tentei e parece funcionar. Mas existe uma nuança. Se o algoritmo der tal erro para um conjunto de 6 números, não temos nenhuma garantia de que o erro não se acumulará mesmo com uma compensação. A matriz com a qual eu trabalho é 7200 (minutos). Foi por isso que encontrei este algoritmo, e ele funciona corretamente. Eu tive que desistir do outro, porque não confio mais nele.
//+------------------------------------------------------------------+//| Формула предлагаемая мной |//| Рассчет коэффициентов A и B в уравнении |//| y(x)=A*x+B |//| используються формулы https://forum.mql4.com/ru/10780/page5 |//+------------------------------------------------------------------+voidLinearRegr(doubleX[], doubleY[], intN, double& A, double& B){doublemo_X = 0.0, mo_Y = 0.0, var_0 = 0.0, var_1 = 0.0;
for(inti = 0; i < N; i ++ ){mo_X +=X[i];
mo_Y +=Y[i];
}mo_X /=N;
mo_Y /=N;
for(i = 0; i < N; i ++ ){var_0 +=(X[i]-mo_X)*(Y[i]-mo_Y);
var_1 +=(X[i]-mo_X)*(X[i]-mo_X);
}A = var_0 / var_1;
B = mo_Y - A * mo_X;
}
Não há problema, Sergei, use o que você quiser. Quero apenas chamar sua atenção para um pequeno detalhe.
Como você certamente entende, o MO está entre o máximo e o mínimo para qualquer fila. Seu código na verdade significa mover a origem para [mo_X, mo_Y]. E para fazer isso, você percorre todos os seus 7200 valores. E então você subtrai, enquanto calcula as somas, as coordenadas do ponto zero das coordenadas da linha. Você pode também tomar qualquer ponto em uma série [Xm, Ym] como origem e realizar o cálculo do segundo ciclo, substituindo [mo_X, mo_Y] por [Xm, Ym].
O parâmetro A de uma regressão linear é invariante no que diz respeito às transferências de origem. MO não tem nada a ver com isso.
Você pode verificar este fato em 3 minutos no papel.
É por isso que o ciclo de cálculo de RI é desnecessário. Só precisamos trazer os valores de X e Y para fechar os pedidos.
Se o algoritmo der tal erro para um conjunto de 6 números, não há garantia de que o erro não se acumulará mesmo com uma compensação.
A questão aqui não é o número de números, mas o fato de que em cada um desses 6 se encontra como um aditivo permanente (inútil) 1216600000. Ela simplesmente não contém qualquer informação. Mas são 10 dígitos significativos. Que sejam 9, o último 0 não é informativo porque todos os 6 também estão presentes. Ao quadrado, este lixo irá bloquear 17 dígitos significativos da mantissa. E são apenas 15. Ou seja, ele despejará os dígitos mais baixos (pelo banheiro). Entretanto, são estes dígitos descartados que contêm as informações necessárias (eles contêm parte das informações sobre o componente variável X).
Então eu não inventei esta fórmula. Está nos livros. E dessa fórmula, que utiliza quadrados, esta é derivada (sem quadrados). Basta sentar-se com um lápis. Quando chegar ao scanner, postarei uma página de Tikhonov V.I. "Statistical Radio Engineering" p.446.
Exatamente, basta sentar com um lápis e você verá que se você substituir Xi -> Xi-X0 e Yi -> Yi-Y0 em sua fórmula original para a inclinação b, então esta nova fórmula é equivalente à fórmula original. Para quaisquer valores de X0 e Y0. Portanto, as somas Xi e Yi (que é o cálculo MO) podem ser movidas dentro do segundo ciclo, o que reduz pela metade o tempo de cálculo do LR. E para obter precisão, devemos escolher o X0 e Y0 adequados. E é melhor fazer isso para que as ordens das séries X e Y estejam mais próximas uma da outra.
Para login e uso do site MQL5.com, você deve ativar o uso de cookies.
Ative esta opção no seu navegador, caso contrário você não poderá fazer login.
Você entrou na conta. A autenticação de dois fatores foi desativada. Configure-a novamente e escaneie um novo código QR ou continue com a autenticação de dois fatores desativada.
Provavelmente, o melhor neste caso é encontrar a média aritmética de todos os X[i], subtraí-la dos próprios valores, calcular os coeficientes de regressão e corrigi-los novamente. Em princípio, nada impede que você faça o mesmo com Y[i]. Mas eu não tentei encontrar a fórmula, embora obviamente não seja difícil. Há obviamente algum truque com matrizes fracamente condicionadas.
P.S. Você também pode normalizar as séries de dados para aproximadamente a mesma ordem.
Provavelmente, o melhor neste caso é encontrar a média aritmética de todos os X[i], subtraí-la dos próprios valores, calcular os coeficientes de regressão e corrigi-los novamente. Em princípio, nada impede que você faça o mesmo com Y[i]. Mas eu não tentei encontrar a fórmula, embora obviamente não seja difícil. Há obviamente algum truque com matrizes fracamente condicionadas.
P.S. Você também pode normalizar as séries de dados para aproximadamente a mesma ordem.
E eu tenho e sugeri através do MOJ. Fórmula direta, sem necessidade de correção.
Agora você também pode colocar o ACF na base de código. Verificado novamente, tudo coincide com uma precisão de 8 caracteres, mas é mais provável que isso se deva à entrada nos valores do arquivo de ACF calculados em MQL.
Sergei, eu já tropecei nisto alguns anos atrás quando estava escrevendo meu LR. A saída é simples - ouça a recomendação do Candidato. A única coisa que eu especificaria nesta recomendação é subtrair não o Tempo [Bars-1], mas o tempo do primeiro valor X[]. Em primeiro lugar, ele torna o código de procedimento universal desde que o X de início é movido dentro do procedimento. Em segundo lugar, se houver muitas barras no gráfico (3 anos são 1000000 minutos, ou seja, 60000000 segundos), então, subtrair o tempo da primeira barra no gráfico não mudará fundamentalmente a situação. Em terceiro lugar, você poderá voltar a suas fórmulas originais sem nenhum MOs, o que significa que você será capaz de remover a repetição de ciclos, mantendo a precisão.
Mais uma coisa. Notei que seu X[] é a hora da ata. Ou seja, os X estão dispostos de forma equidistante. O que significa que você pode fugir completamente do tempo e usar o número da barra. Se você fizer esta transição, tudo será contado com precisão e rapidez. Você pode verificar. Isto também é preferível do ponto de vista de que seu LR trabalhará o mesmo em M1 e D1 (imagine como os valores X em D1 serão diferentes se for Tempo, e não número de barras).
Sergei...
Obrigado. Experimentei tudo.
Eu acabei de expor minha versão do cálculo, talvez alguém o considere útil. Eu não preciso mover nada. Não me sinto confortável em mudar X para 0. Eu uso esta função para calcular ACF, ela deve ser limitada no tempo (há algumas dependências).
Em geral, não há necessidade de mover o próprio X para o ponto 0. Para isso, é suficiente utilizar uma matriz interna deslocada por X[1] na função LR em vez do próprio X. Você pode até mesmo prescindir de uma matriz - basta subtrair o valor de X[1] no momento em que as somas são calculadas.
A propósito, se você tentou, isso não ajudou?
Em geral, não há necessidade de mover o próprio X para o ponto 0. Para isso, é suficiente utilizar uma matriz interna deslocada por X[1] na função LR em vez do próprio X. Você pode até mesmo prescindir de uma matriz - basta subtrair o valor de X[1] no momento em que as somas são calculadas.
A propósito, se você tentou, será que funcionou?
Eu tentei e parece funcionar. Mas existe uma nuança. Se o algoritmo der tal erro para um conjunto de 6 números, não temos nenhuma garantia de que o erro não se acumulará mesmo com uma compensação. A matriz com a qual eu trabalho é 7200 (minutos). Foi por isso que encontrei este algoritmo, e ele funciona corretamente. Eu tive que desistir do outro, porque não confio mais nele.
>> Eu não preciso de turnos.
Não há problema, Sergei, use o que você quiser. Quero apenas chamar sua atenção para um pequeno detalhe.
Como você certamente entende, o MO está entre o máximo e o mínimo para qualquer fila. Seu código na verdade significa mover a origem para [mo_X, mo_Y]. E para fazer isso, você percorre todos os seus 7200 valores. E então você subtrai, enquanto calcula as somas, as coordenadas do ponto zero das coordenadas da linha. Você pode também tomar qualquer ponto em uma série [Xm, Ym] como origem e realizar o cálculo do segundo ciclo, substituindo [mo_X, mo_Y] por [Xm, Ym].
O parâmetro A de uma regressão linear é invariante no que diz respeito às transferências de origem. MO não tem nada a ver com isso.
Você pode verificar este fato em 3 minutos no papel.
É por isso que o ciclo de cálculo de RI é desnecessário. Só precisamos trazer os valores de X e Y para fechar os pedidos.
Se o algoritmo der tal erro para um conjunto de 6 números, não há garantia de que o erro não se acumulará mesmo com uma compensação.
A questão aqui não é o número de números, mas o fato de que em cada um desses 6 se encontra como um aditivo permanente (inútil) 1216600000. Ela simplesmente não contém qualquer informação. Mas são 10 dígitos significativos. Que sejam 9, o último 0 não é informativo porque todos os 6 também estão presentes. Ao quadrado, este lixo irá bloquear 17 dígitos significativos da mantissa. E são apenas 15. Ou seja, ele despejará os dígitos mais baixos (pelo banheiro). Entretanto, são estes dígitos descartados que contêm as informações necessárias (eles contêm parte das informações sobre o componente variável X).
Então eu não inventei esta fórmula. Está nos livros. E dessa fórmula, que utiliza quadrados, esta é derivada (sem quadrados). Basta sentar-se com um lápis. Quando chegar ao scanner, postarei uma página de Tikhonov V.I. "Statistical Radio Engineering" p.446.