talvez o contador receba outro valor em algum outro lugar dentro da EA tente :
void start() { int counter=0, MaxCount = 10000; while( counter <= MaxCount ) {Print("Counter ", counter); counter++; } return; }
Olá a todos!
Eu tenho uma EA (nunca a testei em pré 600 construções, mas o código tem 2 anos de idade) que fica presa durante um WHILE na construção 625.
O fato é que quando o WHILE começa parece ser incapaz de verificar as expressões: o resultado é que ele nunca sai. Ele é colocado na função de início.
Eu tentei uma EA muito simples para entender o que se passa:
Bem, o primeiro valor do contador geralmente começa a partir de um valor aleatório acima de 9500 e não a partir de 0.
Por que ele é? Alguma sugestão?
Você declarou o contador de forma global, o que significa que é estático.
Seu código em OnStart(), contador++ empurra o valor do contador até 10.000
Então, como é estático, no próximo tique seu contador está em 10.000 para começar.
Você declarou que o contador é global, o que significa que é estático.
Seu código em OnStart(), contador++ empurra o valor do contador até 10.000
Então, como é estático, no próximo tique seu contador está em 10.000 para começar.
ele escreveu:
Bem, o primeiro valor do contador geralmente começa de um valor aleatório acima de 9500 e não a partir de 0.
Por que é assim? Alguma sugestão?
portanto, esta é minha resposta
talvez o contador receba outro valor em algum outro lugar dentro da EA tente :
void start() { int counter=0, MaxCount = 10000; while( counter <= MaxCount ) {Print("Counter ", counter); counter++; } return; }
Olá a todos!
Eu tenho uma EA (nunca a testei em pré 600 construções, mas o código tem 2 anos de idade) que fica presa durante um WHILE na construção 625.
O fato é que quando o WHILE começa parece ser incapaz de verificar as expressões: o resultado é que ele nunca sai. Ele é colocado na função de início.
Eu tentei uma EA muito simples para entender o que se passa:
Bem, o primeiro valor do contador geralmente começa a partir de um valor aleatório acima de 9500 e não a partir de 0.
Por que ele é? Alguma sugestão?
O mais provável é que você esteja procurando na guia de Especialistas, que não consegue acompanhar loops rápidos como este.
Abra o arquivo de registro real.
Posso lhe dizer uma coisa, que enquanto o loop nunca executaria uma segunda vez a menos que em algum outro lugar no código você chamasse aquela variável contador novamente e alterasse seu valor de volta para menos de 10.001. Você deve ter cuidado ao declarar as variáveis de forma global.
GumRai, você está certo: o registro relata todas as saídas a partir de 1.
A diferença entre colocar a declaração variável no espaço global ao invés de dentro do OnStart() é que no primeiro caso o laço executa uma vez enquanto no segundo se repete indefinidamente.
Mas... É evidente que eu escolho o exemplo errado de depuração porque o ciclo de contagem é bem executado.
Tudo começou com a seguinte EA.
Aqui está o código:
extern int SwingBarCount = 100;
int start() { int SwingHighShift = 0; string StringHighStatus = "False"; int SwingHigh = 0; while (StringHighStatus == "False" || SwingHighShift <= SwingBarCount) { if(iFractals(NULL, 0, MODE_UPPER, SwingHighShift) == iHigh(NULL, 0, SwingHighShift) && iFractals(NULL, 0, MODE_UPPER, SwingHighShift) > Close[0]) { StringHighStatus = "True"; SwingHigh = SwingHighShift; ObjectDelete("SwingHigh"); ObjectCreate("SwingHigh", OBJ_VLINE, 0, Time[SwingHigh], 0); ObjectSet("SwingHigh", OBJPROP_COLOR, Red); } else { SwingHighShift++; } } }}
Eu removi o outro código não relevante para maior clareza e ele é executado até o QUANDO, porque eu coloquei alguns pontos de interrupção antes.
Ele deve começar com a condição WHILE sendo verdadeira e ciclando o IF ELSE até que o StringHighStatus se torne verdadeiro ou o StringHighShift alcance o SwingBarCount.
O que eu vejo ao invés disso é que nunca termina porque depois do WHILE há uma série de comandos de COMENTÁRIO e IMPRESSÃO que não retornam nenhuma saída.
Enquanto o StringHighStatus pode permanecer falso, o contador tem que chegar ao SwingBarCount.
Eu tive que modificar assim para que ele funcionasse:
while (!EndCycle) { if(iFractals(NULL, 0, MODE_UPPER, SwingHighShift) == iHigh(NULL, 0, SwingHighShift) && iFractals(NULL, 0, MODE_UPPER, SwingHighShift) > Close[0]) { StringHighStatus = "True"; SwingHigh = SwingHighShift; ObjectDelete("SwingHigh"); ObjectCreate("SwingHigh", OBJ_VLINE, 0, Time[SwingHigh], 0); ObjectSet("SwingHigh", OBJPROP_COLOR, Red); } else { SwingHighShift++; } if( StringHighStatus == "True" ) EndCycle = TRUE; if( SwingHighShift > SwingBarCount ) EndCycle = TRUE; }
Não percebo porque ele processa o EndCycle e não a outra condição.
Agradecemos a todos por suas respostas!
if( StringHighStatus == "True" ) EndCycle = TRUE; else if( SwingHighShift > SwingBarCount ) EndCycle = TRUE;tente incluir outros.
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Você concorda com a política do site e com os termos de uso
Olá a todos!
Eu tenho uma EA (nunca a testei em pré 600 construções, mas o código tem 2 anos de idade) que fica presa durante um WHILE na construção 625.
O fato é que quando o WHILE começa parece ser incapaz de verificar as expressões: o resultado é que ele nunca sai. Ele é colocado na função de início.
Eu tentei uma EA muito simples para entender o que se passa:
Bem, o primeiro valor do contador geralmente começa a partir de um valor aleatório acima de 9500 e não a partir de 0.
Por que ele é? Alguma sugestão?