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

 
Artyom Trishkin:

Código do problema.

Por que...? Se se trata de duplicar a lógica para cada cruzamento da mesma linha, é claro que toda a lógica (que eu não escrevi) deve ser escrita diretamente pela pessoa. Não sei seu objetivo final, talvez ele queira fazer uma contagem de quantas vezes o preço cruza cada linha, desde que passe por ela

Eu entendi que o homem não foi capaz de obter tal evento para seus propósitos. Agora ele obterá tal evento, e então fica a seu critério.


Seria lógico renomear a própria linha para um determinado formato no primeiro cruzamento (ou colocar algum rótulo na descrição desta figura). E quando todos os objetos forem cruzados, verifique a linha para verificar a ausência desta marca.

Se estamos falando da ineficácia de experimentar todos os objetos a cada tique, então é um outro tópico ao todo.

 
Roman:

Tente usar valor retornado por variável _Periodo para períodos superiores a H1 em seus cálculos matemáticos.
Você saberá imediatamente quem está errado.

Ninguém em seu perfeito juízo usaria os valores das constantes nomeadas para cálculos matemáticos. Constantes nomeadas estão lá para facilitar a compreensão do que você está se referindo, ou qual identificador de propriedade você está usando para recuperar os dados. As constantes nomeadas substituem o valor do identificador de propriedade solicitado por uma descrição textual.

Ao buscar dados de, por exemplo, SymbolInfoDouble(), você pode usar o valor numérico do identificador para indicar qual valor você deseja buscar da função. Mas para fazer isso, é preciso lembrar qual valor identificador substituir na função. Foram introduzidas constantes de enumeração nomeadas para liberá-lo de referências constantes ou para evitar que você memorize de cor o valor de cada identificador de cada função na MQL. Para obter o valor do preço atual Ask, você deve escrever o valor do identificador igual a 4 quando solicitar dados para o símbolo atual: SymbolInfoDouble(NULL,4) ou escrever SymbolInfoDouble(NULL,SYMBOL_ASK);

Por que você não se importa, e não causa dissonância, que SYMBOL_ASK retorne 4 e não o preço Ask atual?

Por que você está escolhendo então os identificadores do período do gráfico? Isso era o que os desenvolvedores queriam. Por suas razões internas. Há um nome identificador para você, por exemplo PERÍODO_H4. Você não deve se importar com o valor numérico que lhe foi atribuído pelo desenvolvedor por algum motivo ou outro. Você recebeu um nome (texto substituto de um valor numérico) de uma constante - use-o para sua conveniência. Mas usar o valor desta constante em seus cálculos é, desculpe, um disparate. Esta constante nomeada é usada para indicar de qual gráfico você quer obter os dados. Mas não retorna o período do gráfico. É usado para um propósito bem diferente - para facilitar sua vida, para dizer à função o que ela deve retornar.

Se você quiser o número de minutos no período, obtenha-o a partir do número de segundos no período dividido por 60. E não chame algo que não seja uma muleta. As muletas são o que você está fazendo - tentando usar nomes numéricos em seus cálculos.

Isso é uma chatice...

 
Vadim Lin:

Por que...? Se se trata de duplicar a lógica para cada cruzamento da mesma linha, é claro que toda a lógica (que eu não escrevi) deve ser escrita diretamente pela pessoa. Não sei seu objetivo final, talvez ele queira fazer uma contagem de quantas vezes o preço cruza cada linha, desde que passe por ela

Entendi que o homem não conseguiu obter tal evento para seus propósitos. Agora ele terá tal evento e, então, fica a seu critério.


Seria lógico renomear a própria linha para um determinado formato no primeiro cruzamento (ou colocar algum rótulo na descrição desta figura). E quando todos os objetos forem cruzados, verifique a linha para verificar a ausência desta marca.

Se estamos falando da ineficácia de experimentar todos os objetos a cada tique, esse é outro tópico.

Você está usando funções antigas que estão prestes a desaparecer no esquecimento. O código não é uma plataforma cruzada por causa disso, embora você possa facilmente fazê-lo funcionar em qualquer plataforma sem alterações.

E a renomeação é muito divertida. Basta olhar os nomes das linhas fornecidas pelo indicador, extrair o identificador explícito das mesmas e usá-lo para encontrar as linhas certas.

 
Vadim Lin:

Muito obrigado! Foi owchar_t que ajudou! Eu li sobre isso, ele armazena 2 bytes por personagem, ao contrário do char.

Mas o parâmetro da função "str" ainda não retorna o valor atribuído a ele. Eu me pergunto por que...

Provavelmente porque você tem que devolver o valor de retorno da função.

extern "C" __declspec(dllexport) wchar_t* __stdcall ToString(wchar_t* str)
{
   wchar_t wcs[256];
   wcscpy(wcs, str);

   wchar_t* addStr = L" --- Привет! ---";
   
   wchar_t* res = wcsncat(wcs, addStr, wcslen(addStr) + 1);
   
   return(res);
}
 
Artyom Trishkin:

Você está usando funções antigas que estão prestes a desvanecer-se em esquecimento. E o código não é uma plataforma cruzada, embora você possa facilmente fazê-lo funcionar em qualquer plataforma sem alterações.

E a renomeação é muito divertida. Basta olhar os nomes das linhas no indicador, extrair o identificador explícito e usá-lo para encontrar as linhas necessárias.

Obrigado pela edição!

De fato, tenho programado na MQL4 relativamente raramente, enquanto eu mal utilizei a MQL5. Portanto, admito que alguns métodos estão ultrapassados (mas eu estou trabalhando de qualquer forma!).

Нужно просто поглядеть какие имена линий выдаёт индикатор, вычленить из них их явный идентификатор

Definitivamente, mas não você ou eu - não conhecemos as peculiaridades de nomenclatura dessas linhas. "Memorizar" tais níveis também é uma opção, mas então os resultados de nossas "memorizações" teriam que ser salvos em algum lugar em um arquivo, e sem isso - com qualquer colapso do terminal, a imagem do que está acontecendo seria bem pouco clara. A renomeação, pelo menos, resolverá este problema, embora este método possa não ser o melhor.

Eu poderia estar errado, mas a pessoa escreveu que até 100 linhas são usadas de cada vez, e apenas linhas, e não há mais nada no gráfico. Todas as linhas, como eu as entendo, precisam ser monitoradas para cruzamentos. Então o que você vai "extrair" dos nomes, eu não sei))

 
Artyom Trishkin:


O ponto é que a variável _Periodo deve retornar valores de tempo.
E as constantes devem corresponder a valores de período, não apenas enumerar constantes.
Caso contrário, perdemos o significado desta variável, que foi especialmente projetada para obter rapidamente o valor de tempo, sem conversão por funções adicionais.

 
Vadim Lin:

Obrigado pela edição!

De fato, tenho programado na MQL4 relativamente raramente nos últimos anos, e mal tenho usado a MQL5. Portanto, admito que alguns métodos estão ultrapassados (mas eu estou trabalhando de qualquer forma!).

Definitivamente, mas não você ou eu - não conhecemos as peculiaridades de nomenclatura dessas linhas. "Memorizar" tais níveis também é uma opção, mas então os resultados de nossas "memorizações" teriam que ser salvos em algum lugar em um arquivo, e sem isso - a qualquer momento que o terminal se chocasse, a imagem do que está acontecendo seria muito pouco clara. A renomeação, pelo menos, resolverá este problema, embora este método possa não ser o melhor.

Eu poderia estar errado, mas a pessoa escreveu que até 100 linhas são usadas de cada vez, e apenas linhas, e não há mais nada no gráfico. Todas as linhas, como eu as entendo, precisam ser monitoradas para cruzamentos. Então o que você estará "escolhendo" dos nomes, eu não sei))

Se o terminal cair, ele terá que ser reiniciado. O indicador terá que ser aplicado ao gráfico novamente, ou para executar o Expert Advisor que usa os dados deste indicador (então a EA carregará este indicador ela mesma ao acessá-lo). Neste caso (e mesmo durante o reinício normal do terminal com um carregamento automático dos programas instalados na carta), o indicador desenhará de novo todas as suas linhas - não há necessidade de salvar nada. Estas linhas podem ser lidas novamente mais tarde. Além disso, eles têm que ser lidos de qualquer maneira.

Para a EA monitorar apenas as linhas criadas pelo indicador, basta olhar os nomes das linhas criadas pelo indicador e tentar encontrar o substrato de repetição em nomes - o mesmo para todas as linhas. Estes substratos são utilizados para encontrar as linhas necessárias.

É simples - basta olhar para a lista de objetos quando o indicador está funcionando.

 
Roman:

A questão é que a variável _Periodo deve retornar valores de tempo.
E as constantes devem corresponder a valores de período, não apenas enumerar constantes.
Caso contrário, perdemos o significado desta variável, que foi especialmente projetada para obter rapidamente o valor de tempo, sem conversão por funções adicionais.

Tem gente e cavalos misturados por toda parte... Não apenas sobre esta questão. Se você fizer mudanças de acordo com suas sugestões, metade de tudo o que funcionou até agora simplesmente morrerá.

Apenas equiparar um tamanho de carrapato com um tamanho de ponto não vale nada...

 
Roman:

Tente usar o valor retornado pela variável _Periodo por períodos superiores a H1 em seus cálculos matemáticos.
Você vai ver imediatamente quem está errado.

Eu o uso em quase todas as EA. Já não tem mais graça. Desculpe, esta é a primeira vez que vejo isto.
 
Artyom Trishkin:

Tem gente e cavalos misturados por toda parte... Não apenas sobre esta questão. Se você fizer mudanças de acordo com suas sugestões, metade de tudo o que funcionou até agora simplesmente desaparecerá.

Equacionando apenas o tamanho do carrapato com o tamanho do ponto.

Porque há muita inconsistência com a realidade atual.
E você está tentando encontrar desculpas para essas inconsistências.
Pelo contrário, eu escrevi que um tique não é igual a um ponto!
É o seu próprio ponto interno, inventado.
Tendo em vista que o Point costumava corresponder exatamente a um ponto, quando havia apenas quatro dígitos.
Mas após a introdução do quinto dígito, você começou a inventar nomes com suas desculpas.

Razão: