Um sub-workshop para preencher o FAQ (perguntas mais freqüentes). Vamos ajudar os camaradas! - página 5

 

Eu prometi, vou começar com o mais simples)

Pergunta: A MQL faz operações aritméticas de forma incorreta? Por que a divisão de um número por outro resulta em 0?

Resposta:

O mais provável é que você tenha escrito uma expressão como

c = a/b;  // (1)

declarando as variáveis a e b como números inteiros:

int a,b;

Nesse caso, o compilador MQL interpreta o sinal "slash" como uma operação de "divisão inteira". Assim, mesmo que antes (1) apareça no código, aos valores a e b sejam atribuídos quaisquer valores, mesmo que não inteiros, a variável c ainda conterá a resposta " b cabe no número um tantas vezes inteiro". Isto significa que se antes do cálculo (1) a era menor que b, o resultado será zero, independentemente do tipo da variável c (pode ser o dobro neste exemplo).

O erro descrito é freqüentemente a razão do comportamento "incorreto" do programa no terminal do cliente - mensagem " dividir por zero" nos logs do Expert Advisors, não exibição de uma ou mais linhas indicadoras na janela do terminal, etc.

A solução para o problema:

Corrigir o tipo de dados na declaração variável àquele correspondente às operações a serem utilizadas:

double a,b;
 
Pergunta: Por que 3 é dividido por 2 é igual a 1 e não 1,5?

Alert(3/2);

Resposta: Os números 3 e 2 nesta expressão são números inteiros. Um número inteiro não é divisível sem um resto. Para obter o resultado 1,5, é preciso especificar que o divisor é um número de ponto flutuante:

Alert(3.0/2);

* * *

Pergunta: Por que a expressão não calcula corretamente?

  double price=1.0; // Цена
  double point=0.0001; // Величина пункта
  double level=272.0; // Уровень в пунктах от цены
  double levelprice; // Значение цены уровня
   
  levelprice=price+point*level; // должно быть 1.0272
   
  if(levelprice==1.0272){
  Alert("Правильно");
  }
  else{
  Alert("Неправильно");
  }

R: As variáveis de ponto flutuante têm um número limitado de casas decimais. Devido a isso, os valores podem ser ligeiramente distorcidos no processo de cálculo. Após o cálculo da expressão, antes de comparar números de ponto flutuante, eles devem ser normalizados para o nível de precisão exigido:

  levelprice=NormalizeDouble(levelprice,4);

  if(levelprice==1.0272){
  Alert("Правильно");
  }
  else{
  Alert("Неправильно");
  }

* * *

Pergunta: Como posso obter o valor de um indicador personalizado em meu Expert Advisor?

Resposta: Para este fim, temos a função iCustom().

* * *

Pergunta: Onde eu começo a aprender MQL4?

Resposta: Há um guia de ajuda muito detalhado incorporadoao MetaEditor (Abrir MetaEditor - Menu Principal - Visualizar - Navegador - Dicionário).
O terminal vem com dois Expert Advisors - MACD Sample e Moving Average, você pode começar com a análise de seu código.
Além disso, no mql4.com há um tutorial, um grande número de artigos e todos os tipos de código.
 
P: Por que o valor 0, embora definitivamente não seja 0?

  double point=0.00001; // Величина пункта
  Print(point);

A: Impressão() e Alerta() só produzem quatro casas decimais. Se precisar de mais, você deve converter o número duplo em cadeia usando DoubleToStr().
Print(DoubleToStr(point,5));
 

P: A EA emite um grande número de mensagens com Print(), mas mais da metade das mensagens estão faltando em algum lugar no testador.

R: Durante o teste, se a freqüência de saída for alta, uma parte das mensagens não é impressa na guia "Log", mas todas as mensagens podem ser vistas no arquivo de log do testador após o teste. O arquivo está na pasta tester/logs.

 
Obrigado a todos vocês, escrevam novamente.
Vou fazer um FAQ somente à noite, quando chegar lá.
 

Uma sugestão aos moderadores, e àqueles dispostos a fornecer uma ajuda mínima.

Você concordará que o fórum não é suficiente para uma apresentação estruturada das informações, processamento e pesquisa. Vejo que a única saída é criar o manual CHM mais completo, que pode então ser usado para criar uma seção inteira no fórum.

Para começar, eu criei uma estrutura de ajuda.
Ela está dividida em 3 grandes seções .

1) COMO. Esta seção descreve respostas pró-ativas a possíveis perguntas. Por exemplo, como obter dados indicadores, como fechar todos os pedidos, etc. Além disso, esta seção contém uma grande base de dados sistematizada de funções (analógicas de funções Kim). E o mais importante - exemplos de TOR primitivos completos com uma explicação detalhada do código e comentários. Esta é uma seção muito complexa, pois requer uma maior sistematização do conhecimento e análise. Será preenchido no último lugar.

2) PORQUE. esta seção descreve perguntas freqüentes de novatos (seus exemplos foram bem demonstrados por alsu e integer neste tópico)

3) ONDE. Esta seção é principalmente um link para onde procurar ou onde encontrar algo. Não vou descrevê-lo, veja por si mesmo.
Estou anexando o arquivo da estrutura pronta para chm (download na parte inferior do post)


1. Estrutura manual


2. Demonstrações - ir para "Onde: Links úteis -> MQL4 Tutorial".

Arquivos anexados:
mql4_4.zip  53 kb
 


O caminho a seguir é o seguinte:

1. Oscolaboradores freelance são necessários para preencher as subseções. Isto é, em essência, eles precisam de perguntas ponderadas e respostas detalhadas com uma explicação detalhada, um conjunto de referências cruzadas, etc. (o modelo postal que é sugerido na primeira página do tópico FAQ). (de acordo com aquele modelo de postagem oferecido na primeira página do tópico FAQ).

2. Todas as perguntas criadas para uma subseção são coletadas pelo curador para essa subseção (1-2 pessoas). Eles os manipulam, os trazem para um estilo comum e formam uma referência cruzada conforme apropriado. Isto terá cada subseção do proprietário, e não bagunçará o banco de dados será um estilo e padrão de resposta.
Por exemplo, a seção Onde está dividida em 4 subseções: Perguntas sobre o testador, o terminal, o fórum, e links úteis . Haveria 1 pessoa suficiente para cada subseção. Eles estarão totalmente engajados em classificar a base de conhecimento recebida dos freelancers, que eles considerem necessária, bem como todas as sugestões que possam vir de outros membros de seções vizinhas. E, claro, eles mesmos devem participar ativamente do preenchimento da base e da criação de perguntas.

3. Como subseções de preenchimento - são transferidas para o coletor (como eu). É necessário coletá-los em um arquivo chm e manter tudo em um só estilo. Criar referências cruzadas adicionais, indexar, adicionar palavras-chave para consultas de pesquisa.

As subseções podem ser reordenadas ou expandidas mediante sugestão do curador e acordo da nova estrutura com a montadora.

Conclusão:
Participantes: Bem-vindos à nossa barraca. :) Se você gostaria de ser um curador de subsecções e aqueles que já têm algo para contribuir, sinta-se à vontade para responder aqui.
Moderadores: Haverá muito material. Por favor, não permita discussões e mensagens vazias e distraídas neste tópico. Também será necessário apagar os postos dos participantes após a transferência do posto para a base comum, para facilitar o trabalho da seção.
Curadores: O arquivo de ajuda é criado em WinCHM 4.17 (para aqueles que precisam dele, entrem em contato comigo). Requisitos para nomes de arquivos e localização:
- a estrutura de pastas deve repetir exatamente a estrutura de ajuda
- todos os nomes de arquivos/pastas devem ser dados somente em inglês em frases significativas
- exemplo da base atual, que "compila" o WinCHM em arquivo

Arquivos anexados:
chm4_2.zip  19 kb
 

sergeev:

...


1) COMO. Esta seção descreve as respostas antecipadas a possíveis perguntas. Por exemplo, como obter dados indicadores, como fechar todos os pedidos, etc. Esta seção também contém uma grande base de dados sistematizada de funções (Kima, etc.). E o mais importante - exemplos de TOR primitivos prontos com uma explicação detalhada do código e comentários. Esta é uma seção muito complexa, pois requer uma maior sistematização do conhecimento e análise. Será preenchido no último.

...

Alexey, todas as funções do pedido Kim são muito questionáveis em termos de confiabilidade e precisão. Você está rebite EAs neles também?

 
Integer:

Alexey, todas as funções do pedido Kim são muito questionáveis em termos de confiabilidade e precisão. Você rebite EAs neles também?

Não. Vou usar o meu próprio, realisticamente testado. :)

Para ser honesto, eu não vi os Kim's praticamente em nenhum lugar, exceto nas recomendações deste fórum. Eu os dei apenas na descrição da seção como exemplo, para que você saiba do que estamos falando. E não tenho certeza de que a kim's consiga fazer parte do manual em seu código. Somente uma idéia será tirada e trabalhada em estilo geral.

A seção COMO é a mais séria. Deve ser tratado por um máximo de 2-3 pessoas, uma vez que todas as seções de COMO são uma entrada para a última seção - "Exemplos de TOR e sua implementação", que mostrará todas as opções possíveis e utilizará combinações de todas as funções das seções anteriores.

 

Pergunta: Como posso comparar dois números reais do tipo "duplo" ?


Resposta:

double A;
double B;

if(NormalizeDouble(MathAbs(A-B),Digits)<0.1*Point)return(true);
else return(false);
Razão: