Método de planimetria tendencial - página 4

 
Mathemat:

mas então você teria que rejeitar o algoritmo padrão de metaquota.


Tem que ser rejeitada, se o tempo for essencial.
 
Mathemat:

O problema é que precisamos aprender como calcular os mashups ainda mais otimamente do que no pacote padrão de metaquotas. Precisamos de algum algoritmo de recorrência para calcular mashes, onde um mash do período N é calculado usando um conhecido mash do período N+1. Em princípio não é difícil, mas então é preciso rejeitar o algoritmo padrão do metacquot.

Quanto à densidade das bolsas: precisamos claramente de algum tipo de algoritmo de agrupamento, pois elas podem ser muito pouco homogêneas verticalmente (para uma determinada barra). Em resumo, a tarefa não é nada fácil do ponto de vista técnico.

Podemos fazer um indicador, no qual os últimos cem (se usarmos cem sacolas) valores devolvem os valores das sacolas. Mas, neste caso, estamos falando apenas de SMA. O algoritmo é um pouco diferente para as outras varinhas, mas, em princípio, também é viável.
 

Eu não entendo muito bem, Victor. Por favor, explique com mais detalhes. O que é a "última centena" na matriz unidimensional?

Em princípio, a recorrência no algoritmo das metaquotas já está embutida para todos os feiticeiros. Mas é bom para chamar toalhetes do mesmo período. E temos períodos diferentes a cada vez.

 
Mathemat:

Em princípio, a recorrência no algoritmo da metaquota já está embutida para todos os feiticeiros. Mas é bom para chamadas a mashups do mesmo período. E nossos períodos são diferentes a cada vez.

for (i = 2; i<=N;i++) {
  Sum += Close[i];
  MA[i] = Sum/i;
}
P.S. Parece que as somas também deveriam ser arrays :)
 
Mathemat:

Eu não entendo muito bem, Victor. Por favor, explique com mais detalhes. O que é a "última centena" na matriz unidimensional?

Em princípio, a recorrência no algoritmo das metaquotas já está embutida para todos os feiticeiros. Mas é bom para chamar toalhetes do mesmo período. E nossos períodos são diferentes a cada vez.


Se você contar pela média,

int i,j;
double sum=0, Count;
for (i=0;i<100;i++) {
   for (j=0;j<step;j++) {
       sum+=Close[i*step+j];
       Count++;
   }
   Buffer[i]=sum/Count;
}
Algo parecido com isso.
 

Não era isso que eu queria dizer.

double SMA( int newperiod, int sh, double SMAprev )
{
   return( ( SMAprev * ( newperiod - 1 ) + Close[ sh + newperiod - 1 ] ) / newperiod );
}

Ao invés de uma chamada cara para iMA() (que somará um monte de somas), a função calcula uma máscara com período incremental de 1 independentemente do período. Assim, de fato, iMA() pode ser chamada apenas uma vez em cada barra contada, primeira e última.

Para a EMA, um algoritmo semelhante também é recorrente, embora não tão óbvio. SMMA é equivalente a EMA, somente LWMA permanece para ser visto.

 
Chamar qualquer função é uma sobrecarga adicional. Se, por outro lado, uma quantia é memorizada em vez de um SMAprev, várias operações podem ser evitadas.
 
Bem sim, a quantidade é lembrada, ou melhor, o antigo SMA. Não há problema em colocar dois códigos fazendo mil cálculos em uma barra com o método padrão, e o mesmo com o meu método. E comparar sua eficiência.
 

É claro que é mais rápido. Mas eu estou falando de "ainda mais rápido" :). Compare-o com o meu, que está acima.

 
Aha, Candidato, entendi agora. Para um bar arbitrário com um sh:

// размер массива SMA[] уже установлен равным N+1 перед вызовом функции
void createSMAsArray( int sh, double& SMA[] ) 
{
   double Sum = 0;
   for ( int i = 1; i <= N; i ++ ) 
   {
     Sum += Close[ sh + i - 1 ];
     SMA[ i ] = Sum / i;
   }
   return;
}
É assim? Observe o índice de soma inicial.