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

 
Yevhenii Levchenko:

O que tenho a dizer: isso acontece e também é devido a algum tipo de rachaduras nas citações ou estou escrevendo algo errado?

Você quer que eu lhe diga que o testador MT4 não está funcionando corretamente? - Você não ouvirá sua captura de tela com erros em carrapatos ou barras - o testador irá gerar tudo a partir de qualquer possível TF baixa

os desenvolvedores sempre responderam perguntas como as suas - escreva os códigos corretamente!

eu lhe mostrei um exemplo de como escrever seu código.... não consigo ver, e não é interessante :))) - ocupado, lendo artigos, vou começar a trabalhar em meus códigos

 
Igor Makanu:

Você quer que eu lhe diga que o testador MT4 não está funcionando corretamente? - Você não ouvirá sua captura de tela com erros em carrapatos ou barras - o testador irá gerar tudo a partir de qualquer possível TF baixa

os desenvolvedores sempre responderam perguntas como as suas - escreva os códigos corretamente!

eu lhe mostrei um exemplo de como escrever seu código.... não consigo ver, e não é interessante :))) - ocupado, lendo artigos, vou começar a trabalhar em meus códigos

Certo! Obrigado

 
Yevhenii Levchenko:

Certo! Obrigado

Pode vir a ser útil: https://www.mql5.com/ru/forum/165405#comment_5602248

Архивные котировки от Metaquotes
Архивные котировки от Metaquotes
  • 2017.01.02
  • www.mql5.com
Ситуация: В терминале MT4 по клавише F2 можно закачать архивные котировки. Они нужны всем, кто разрабатывает свою торговую систему...
 

Boa tarde, camaradas. Estou aprendendo a escrever coisas simples em mql4, agora estou tentando trabalhar com arrays. Não consigo entender o erro neste pedaço de código:

   double d1 = NormalizeDouble(Low[iLowest(NULL, 0, MODE_LOW, MaxLimit, 0)],4);
   double d2 = NormalizeDouble(High[iHighest(NULL, 0, MODE_HIGH, MaxLimit, 0)],4);
   double CrossBarsNum[][2];
   for (double d = d1; d <= d2; d += 0.0001)
     {
       double a = 0.0;
       for(int i = 0; i < MaxLimit; i++)
           if(d > Low[i] && d < High[i])
               a+=1;
               CrossBarsNum[(d-d1)/0.0001,0] = d;
               CrossBarsNum[(d-d1)/0.0001,1] = a;

Está caindo nas duas últimas linhas com a expressão inteira do texto esperado. Tanto quanto eu entendi, um índice em uma matriz pode ser definido usando uma fórmula. É necessário pesquisar através das cordas da matriz e registrar sequencialmente as citações e o número de barras contendo tal citação. A fórmula dá um valor inteiro (de 0 e maior em incrementos de um), então qual é o erro?

 
Azat0t:

Boa tarde, camaradas. Estou aprendendo a escrever coisas simples em mql4, agora estou tentando trabalhar com arrays. Não consigo entender o erro neste pedaço de código:

Está caindo nas duas últimas linhas com a expressão inteira do texto esperado. Tanto quanto eu entendi, um índice em uma matriz pode ser definido usando uma fórmula. É necessário pesquisar através das cordas da matriz e registrar sequencialmente as citações e o número de barras contendo tal citação. A fórmula retorna um valor inteiro (a partir de 0 e maior em etapas de um), então qual é o erro?

Faça do índice da matriz um tipo int, não o dobro. O índice da matriz deve ser um número inteiro.

 
Sergey Basov:

Pode vir a ser útil: https://www.mql5.com/ru/forum/165405#comment_5602248

Obrigado! Eu quase sempre fiz isso. Após o carregamento, pressionei "Atualizar" - as aspas eram diferentes. Esqueci que tinha estabelecido um limite de tempo para o trabalho do robô. :)
 
Azat0t:

Boa tarde, camaradas. Estou aprendendo a escrever coisas simples em mql4, agora estou tentando trabalhar com arrays. Não consigo entender o erro neste pedaço de código:

Está caindo nas duas últimas linhas com a expressão inteira do texto esperado. Tanto quanto eu entendi, um índice em uma matriz pode ser definido usando uma fórmula. É necessário pesquisar através das cordas da matriz e registrar sequencialmente as citações e o número de barras contendo tal citação. A fórmula retorna um valor inteiro (a partir de 0 e maior em etapas de um), então onde está o erro?

Use uma conversão do tipo explícita

               CrossBarsNum[int((d-d1)/0.0001),0] = d;
               CrossBarsNum[int((d-d1)/0.0001),1] = a;
 
Obrigado, consertei o erro, mas ainda não há resultado: o conjunto não se enche. A que isto pode estar ligado?
   int handle;
   handle = FileOpen("FindLevels.txt", FILE_CSV|FILE_WRITE, '\t');
   double d1 = NormalizeDouble(Low[iLowest(NULL, 0, MODE_LOW, MaxLimit, 0)],4);
   double d2 = NormalizeDouble(High[iHighest(NULL, 0, MODE_HIGH, MaxLimit, 0)],4);
   double CrossBarsNum[][2];
   for (double d = d1; d <= d2; d += 0.0001)
     {
       double a = 0.0;
       for(int i = 0; i < MaxLimit; i++)
           if(d > Low[i] && d < High[i])
               a++;
               CrossBarsNum[int((d-d1)/0.0001),0] = a;
               CrossBarsNum[int((d-d1)/0.0001),1] = d;
     } 
   FileWrite(handle, CrossBarsNum[11,1], d, d1, d2, a, ArraySize(CrossBarsNum));
   //FileWriteArray(handle, CrossBarsNum, 0, WHOLE_ARRAY);
   FileClose(handle);
   return(0);
As variáveis d, d1, d2 funcionam exatamente
 
Azat0t:
Obrigado, corrigi o erro, mas ainda não obtive nenhum resultado: a matriz não está cheia. As variáveis d, d1, d2 funcionam exatamente com o que podem ser conectadas?
Seu tamanho de matriz é sempre zero na primeira dimensão. Eu não vi o ArrayResize() em nenhum lugar
 
Azat0t:
Obrigado, corrigi o erro, mas ainda não obtive nenhum resultado: a matriz não está cheia. O que pode ser isso? As variáveis d, d1, d2 funcionam exatamente

Não se esqueça de colocar

#property strict
Conserte todos os erros e talvez tudo dê certo. Aprenda a usar o depurador. Com a execução passo a passo, todos os problemas são revelados.