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

 
Nikolay Ivanov #:

Seu código imprime 0, não -1...

Talvez -1 seja impresso em outro lugar, o mais provável é que todo o código esteja nas impressoras

Sim, você está certo, cada passo é pré-impresso para ver onde "empatou".

Exemplo é incorreto, desculpe, o código em si é grande.

Mas, a solução de Konstantin resolveu o problema! De fato, trocou i... e verificação zero em toda parte, e agora a lógica funciona como deveria, em vez de -1, produz 0 ou 1. (antes de 0 ou -1, com este último um erro imediatamente).

 
Nikolay Ivanov #:

Seu código imprime 0, não -1...

É possível que -1 seja impresso em outro lugar, muito provavelmente todo o código esteja nas impressoras...

Antes de tentar resolver o problema, você precisa identificá-lo... Certifique-se de que está lá e localize-o antes de resolvê-lo...

Pegue uma caneta e um pedaço de papel. E escreva como o laço conta. Neste código.

void OnStart()
  {
int i=10;
for (i; i>0; i--)
{
i--;
if (i==0) break;
}

Print(i);
  }

verificando

if (i==0) break;

nunca irá funcionar neste código. A menos que você defina inicialmente

int i=11;

um valor ímpar. Se estiver quites, este código irá

int i=10;
for (i; i>0; i--)
{
i--;
if (i==0) break;
}

para

if (i==0) break;

virá com um valor estranho.

 
Nikolay Ivanov #:

Antes de tentar resolver um problema, você precisa identificá-lo... Certifique-se de que está lá e localize-o, e depois resolva-o...

Estou entendendo o que você quer dizer.

 
Konstantin Nikitin #:

Pegue uma caneta e um pedaço de papel. E anote como o ciclo é contado. Neste código.

Por que eu pegaria caneta e papel se a condição diz impressão =-1, mas na verdade (eu verifiquei) ela imprime como 0, ou seja, o exemplo é dado incorretamente. E é impossível dar uma resposta correta a um exemplo incorreto...

 
Nikolay Ivanov #:

Por que eu pegaria caneta e papel se a condição diz impressão =-1, mas na verdade (eu verifiquei) ela imprime como 0, então o exemplo está incorreto. E é impossível dar uma resposta correta a um exemplo incorreto...

Zero é impresso a partir desta linha

for (i; i>0; i--)

e não da saída de verificação e quebra.

Em geral, é mais correto escrever

for (i; i>= 0; i--)

porque as arrays começam com um índice zero

 
Konstantin Nikitin #:

Zero é impresso a partir desta linha

não de verificação e saída de pausa.

0 é impresso a partir desta linha, para aquele código que foi dado...

Print(i);

A questão não era por que a pausa não funciona, a questão era por que a impressora imprimiu -1... só isso. E não importa se o i começa é igual ou estranho, nunca imprime -1...

 
Você pode me dizer como calcular carrapatos ou velas durante um longo período de tempo? (Um ano, por exemplo).

Trying Close[], mas o índice não dá mais de 5000.
 
Ivan Butko #:
Você pode me dizer como calcular carrapatos ou velas durante um longo período de tempo? (Um ano, por exemplo).

Eu tentei Close[], mas o índice não dá mais de 5000.

Carrapatos ou velas fazem uma diferença tão grande, é no mínimo assustador...

 
Alexey Viktorov #:

Há tanta diferença entre carrapatos e velas que é assustador dizer...

Por exemplo, um EA, se você especificar qualquer período para ele, no testador ele irá por carrapatos ou por barras M1, todos o levarão em consideração.

Mas se você levar um EA que vai para a longa história em tempo real e leva dados de lá, eu não entendo como organizá-lo. O terminal não dá mais de 5000 velas.


UPD
Vou tentar usar esta coisa, o código está na rede

MqlRates rates[];

   int copied=CopyRates(NULL,0,0,100,rates);

   if(copied<=0)

      Print("Ошибка копирования ценовых данных ",GetLastError());

   else Print("Скопировано ",ArraySize(rates)," баров");


UPD
Estranho. De repente, funciona. Até a milionésima barra é verificada. Não fez nada, leu a documentação, bebeu chá. Acabou de ser executado novamente e funcionou. Tive erro o dia todo, embora tivesse baixado o histórico e mudado as configurações ontem.
Portanto, também não havia necessidade de verificar código adicional (acima).
MT4 é um pouco temperamental. Ou talvez o forex chif tenha essa característica. Vou ter que colocar o padrão em vez do padrão do corretor.

 
Ivan Butko #:

Por exemplo, um Expert Advisor, se você especificar qualquer período para ele, ele passará pelo testador por ticks ou por barras M1, todos o levarão em consideração.

E se você levar um Expert Advisor, que no modo de tempo real vai para a longa história e leva dados de lá, eu não entendo como organizá-lo. O terminal não dá mais de 5000 velas.


UPD
Vou tentar usar esta coisa, o código está na rede

MqlRates rates[];

   int copied=CopyRates(NULL,0,0,100,rates);

   if(copied<=0)

      Print("Ошибка копирования ценовых данных ",GetLastError());

   else Print("Скопировано ",ArraySize(rates)," баров");


UPD
Estranho. De repente, funciona. Até a milionésima barra é verificada. Não fez nada, leu a documentação, bebeu chá. Acabou de ser executado novamente e funcionou. Tive erros o dia todo, embora tivesse baixado o histórico e mudado as configurações ontem.
Portanto, também não havia necessidade de verificar código adicional (acima).
MT4 é um pouco temperamental. Ou talvez o forex chif tenha essa característica. Terei que colocar o padrão, não o de corretagem.

A primeira chamada para CopyRates() iniciou o bombeamento de dados históricos (não os execute por uma semana e você terá a mesma coisa novamente, bem, talvez não uma semana, mas algum tempo).
Você só precisa verificar quantos dados há no servidor e comparar a quantidade disponível com o Expert Advisor. Se for menos do que o necessário - deixar a EA até o próximo tick. No próximo tick, verifique novamente. Se para algumas tentativas o histórico exigido não for obtido - então este erro deve ser processado como é exigido.

Razão: