Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 1884

 
Vladimir Makhnin #:
É possível ter várias listas de relógios (visões gerais do mercado) em Metatrader? Por exemplo: índices em um, ações em outro

Faça o seu. A MQL5 torna isto fácil.

 
Mihail Matkovskij #:

É tudo uma questão de fórmula para calcular o ângulo. O código mostra que apenas uma coordenada é usada para calculá-la e algum coeficiente, cuja finalidade não é clara. O que é isso? Por favor, elabore os dados que você está utilizando para calcular o ângulo.

Tanto quanto eu posso ver

double d

é um vetor. Mas ainda assim, é apenas uma coordenada. Mas para calcular um ângulo, são necessárias duas coordenadas ou um vetor composto por duas coordenadas.

 

ambos no... minha resposta foi eliminada

 
Maxim Kuznetsov #:

ambos no... minha resposta foi eliminada.

Algo está confuso - seu posto deste tópico não está nos suprimidos.

 
Vladimir Karputov #:

Algo está confuso - seu posto deste tópico não está nos suprimidos.

Eu também olhei. Não o encontrei.

 

OK, vou duplicar isso... em resposta ahttps://www.mql5.com/ru/forum/160683/page1884#comment_27290699

CalcAngleTrend não tem nada a ver com isso. Em algum outro lugar o coefAngle é contado incorretamente ou há mais cálculos tortuosos

ps/ e talvez o conceito de "declive" seja geralmente mal interpretado. Não é expressável em graus ou radianos (sem um tipo de curvatura do espaço) e a função atan retorna um valor fisicamente incorreto.

 
Mihail Matkovskij #:

É tudo uma questão de fórmula para calcular o ângulo. O código mostra que apenas uma coordenada é usada para calculá-la e algum coeficiente, cuja finalidade não é clara. O que é isso? Por favor, elabore os dados que você está utilizando para calcular o ângulo.

Isso mesmo, é um vetor
e um valor é usado porque a mudança delta dividida por 1 (Um) será delta.
a variável coefAngle é uma constante int igual a 2.
eu verifiquei que todos os dados inseridos na função são exatamente os mesmos.
 
Maxim Kuznetsov #:

OK, vou duplicar isso... em resposta ahttps://www.mql5.com/ru/forum/160683/page1884#comment_27290699

CalcAngleTrend não tem nada a ver com isso. Em algum outro lugar o coefAngle é contado incorretamente ou há mais cálculos tortuosos

ps/ e talvez o conceito de "declive" seja geralmente mal interpretado. Ela não é expressa em graus ou radianos (sem uma curvatura do tipo de excesso de espaço) e a função atan retorna um valor fisicamente incorreto.

o coeficiente é uma constante, não muda
não há cálculos, exceto para esta função, a função obteve o valor delta através da média dos valores dos vetores em vários pontos, mais ou menos reduzindo para um segmento de 2x pontos, com um período de 1 unidade

É claro que isto não é uma realização completa de vetores, é mais para "mais ou menos" resultado expressivo adequado.
tecnicamente pode-se fazer com uma simples aplicação de um coeficiente multiplicador e é isso...

De qualquer forma, não vejo razão para que esta função funcione de forma alguma(

A única possibilidade é que haja algo errado com a conversão do tipo na própria expressão no processo de cálculo,

 
Владимир Казаков escrever um Consultor Especialista, e quando eu testo acontece uma coisa estranha...

Eu tenho uma função

Qual é a situação, eu começo uma instância da EA rodando em um gráfico, e corro a segunda no modo de depuração no mesmo gráfico com o MT4
Os dados de entrada para a função são os mesmos, mas os dados de saída são diferentes!!!? Eu simplesmente não entendo algo, parece que...(

aconselhar qual caminho cavar para obter informações!!!

PS: calculou a diferença de exatamente 2,5 vezes a produção

Decompôs as expressões em ações... ...e, oh, meu Deus, os resultados são todos iguais!?

double CalcAngleTrend(double d)
 {
Print("d: ", d, " coefAngle: ", (double) coefAngle);
  double
    a = (double) (d*pow(10,_Digits-2));
Print("(d*pow(10,_Digits-2)): ", a);
    double rad = (double) (180/M_PI);
Print("rad: ", rad);
    a = (double) (atan(a));
Print("(atan(a)): ", a);
    a = (double) (a*rad*(double) coefAngle);
Print("(a*rad*(double) coefAngle): ", a);
  return(NormalizeDouble(a, ANGLE_DIGITS));
 }

Portanto, acho que a fundição de tipos não está funcionando como eu gostaria

qualquer um que conheça e entenda pode esclarecer qual foi o problema?!
) a fim de evitar a repetição de erros))

PS: aqui a mesma expressão neste formato funciona da mesma maneira

  double a = (double) ((d*pow(10,_Digits-2))*(180/M_PI)*(double) coefAngle);

O método de exclusão foi um duplo infalível para a int.

Espero ter acertado.

 
Владимир Казаков #:

Decompôs as expressões em ações... e, oh meu deus, os resultados são os mesmos!!!?

Então, mesmo com a redução de tipos algo não funciona como eu gostaria

de especialistas e entendidos, alguém pode explicar qual foi o problema?!
Bem, para não repetir erros))))

PS: aqui a mesma expressão neste formato funciona da mesma maneira

O método de exclusão foi um duplo infalível para a int.

Espero ter acertado.

double a = (double) ((d*pow(10,_Digits-2))*(180/M_PI)*(double) coefAngle);
double a = (double) ((d*pow(10,_Digits-2))*(180.0/M_PI)*(double) coefAngle);