[AVISO FECHADO!] Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por aqui. Não posso ir a lugar algum sem você. - página 556

 
Só que eu preciso de uma condição não(Ask<tmp || Ask>tmp) mas apenas uma trivial (Ask<=tmp), ou seja, assim que um único tick aparece na outra direção... e exatamente com um loop)... eu sei, a verdade está em algum lugar próximo)))).
 
maryan.dirtyn >>:
в вашем варианте работает, и ЕТО уже большой прорыв ). только мне нужно условие не (Ask<tmp || Ask>tmp), а просто банально (Ask<=tmp). тоесть как только появиться хоть один тик в другую сторону... и именно с циклом).. я знаю, истина где то рядом))). хотя б на реале работало, бог с ним, с тестером то.

Bem, a mesma lógica. Antes do loop, trazemos a variável para tal estado, no qual a condição do loop será verdadeira. Em seguida, a cada iteração de loop, atualizamos os dados usando RefreshRates() e verificamos se a cotação está fresca, depois executamos alguma ação e quebramos o loop com força. Se quisermos que o código, que está abaixo do loop, seja executado, então o quebramos com o comando de quebra. Se não quisermos que seja executado, interrompemos a função int start() da EA com o comando return(0)
 

Entendo a lógica de como fazê-lo... Não entendo porque nenhum dos projetos funciona, outros poucos caíram no abismo da tentativa.

double tmp=Ask; while(Ask<=tmp) tmp=Ask; Print("Заработало");
 double tmp=0;  while(Ask<=tmp || tmp==0) { RefreshRates(); if(Ask>tmp) break;} Print("Заработало");
 
maryan.dirtyn >>:

я логику понимаю, как ето сделать.. я не понимаю почему не работает ни одна конструкция, еще несколько канули в бездну перебора вариантов


Você tem que fechar os olhos e imaginar o que acontece em cada iteração do ciclo.

Sua primeira opção:

O tempo é igual a asc. A condição de igualdade é satisfeita, de modo que o laço entra num número quase infinito de iterações. Pois mesmo que chegue uma nova citação, não é certo que ela quebre a condição de verdade do ciclo. Casal ou três em uma fila de ascs em queda e podemos esperar até que o ciclo seja quase infinito...

 

Quando o tutorial da MQL4 saiu, eu o folheei e não voltei a ele - não gostei do fato de que o autor deste livro-texto tenha colocado while() loop em todos os lugares. Ele deixou uma marca em muitas pessoas que tentaram aprender MQL com este livro.

Diga-me, seu consultor especializado tem uma tarefa tão terrível que você não pode passar sem este loop? Bem, você vê como é fácil executar este loop para um número infinito de iterações, apenas perdendo o controle. Você não pode passar sem o loop for() em seu caso? Ou escrevendo uma função simples separada...?

 

O principal é que funciona... Estou cansado de comprar uma faca que cai. Preciso de qualquer solução, mesmo a mais elegante, para o problema:

double tmp=Ask; 
                 while(Ask<=tmp) tmp=Ask; 
                                              Print("Заработало");
 
drknn >>:

Честно-говоря, когда вышел учебник по MQL4, я его пролистал и больше к нему не возвращался - мне не понравилось, что автор этого сочинения суёт там цикл while() везде где ни попадя. Это наложило отпечаток на многих, кто пытался освоить MQL по данной книге.

Вот скажите, что у Ваего советника, такая жуткая задача, что нельзя обойтись без этого цикла? Ну ведь сами видите, насколько легко запустить этот цикл в бескоенчное число итераций, просто потеряв контроль. Циклом for() в Вашем случае обойтись нельзя? Ну или написанием каой-то отдельной простенькой функции?...

Eu não sou novo no mql. Eu o domino há dois anos. sim, eu preciso dele enquanto. eu volto ao tutorial de vez em quando para ver se bocejo)... você não vê um coelho... mas eu vejo. não é tão simples assim.
 
Desculpe interferir, mas desta forma o loop será infinito. tmp deve ser tornado estático com um valor inicial conscientemente maior do que o Ask. Ou =0 se utilizarmos a construção proposta com OR. Caso contrário, Ask será sempre = tmp.
 
Svinozavr >>:
Извините, что вмешиваюсь, но в таком виде цикл и будет бесконечным. tmp нужно сделать static с присвоением ей началного значения заведомо большего Ask. Или =0, если использовать предложенную конструкцию с ИЛИ. А так Ask всегда будет = tmp.
O problema é simples... enquanto o preço estiver descendo, não compre até que o tique esteja do outro lado... e o código deve ser laçado em um lugar, enquanto estiver descendo, não toque em nada...
 

Só não está claro porque existe um ciclo aqui. Verifique a cada preço e aja de acordo com as realidades.

Razão: