Perguntas de Iniciantes MQL5 MT5 MetaTrader 5 - página 282

 

amavladi:


Quero compreender a mecânica dos loops para poder escrever uma EA complexa. O operador "volta" atira-me para um novo "começo". Nem sempre preciso dele.

Obrigado pela resposta de qualquer forma.

De nada. A questão é que se quiser compreender a "mecânica" com a ajuda de "terceiros", então precisa de formular o problema a esses mesmos "terceiros", ou seja, descrever o que gostaria de obter do algoritmo, e não o que obteve.

O "loop loops" não é um problema, porque se não houver nada no loop excepto o operador contínuo, então é obrigado a loopar até que a condição do loop se torne falsa.

Ou seja, não se devem fazer perguntas parvas como: "o que não funciona em código não funcional". Afinal, até um porco-espinho bêbado sabe que o código de não-trabalho não funciona porque é não-trabalho. Mas ninguém sem poderes telepáticos, excepto o autor do código, pode compreender o que deveria ter funcionado no código de trabalho.

 
amavladi:

AJUDA!

Estou à procura de boas pessoas neste site, por favor informe-me dos meus erros. Comecei agora a aprender MQL4e escrevi um simples Expert Advisor que abre uma encomenda e depois a fecha com um pequenotakeprofit.Tentei verificá-lo no testador de estratégias e descobri que o meu laço para e enquanto as declarações são laçadas se escritas desta forma:

//--------------------------------------------------------------------

   while (Ask<=Level)

   { RefreshRates();

     continue;

   }         

Bem, aqui tudo parece ser simples.

O testador de estratégia gera um tick, as chamadas começam() e espera até que esta função termine para gerar o tick seguinte.

Portanto, se quiser que o seu robô não fique pendurado no testador, afaste-se de tal construção. No seu caso, o preço Ask não mudará até que saia desde o início().

E quando o comando de retorno for recebido, a função começará a terminar, e o testador compreenderá que o próximo tick deve ser gerado.

Além disso, não no testador de estratégias, mas no modo real, o seu código funcionará como espera, porque o RefreshRates actualizará o preço Ask.

O seu código funciona bem, mas para o testador de estratégias entra num loop infinito.

A utilização do retorno ajudará aqui. Quando ganhar mais experiência irá livrar-se de tais construções. Boa sorte para si.

 
Reshetov:


Ou seja, não se devem fazer perguntas parvas como "o que não funciona em código não funcional". Afinal, mesmo um porco-espinho bêbado sabe que o código de não-trabalho não funciona porque não funciona. Mas ninguém sem poderes telepáticos, excepto o autor do código, pode compreender o que deveria ter funcionado no código de trabalho.

O código funciona, só que há sempre nuances que os novatos desconhecem...
 
Reshetov:

De nada. A questão é que se quiser compreender a "mecânica" com a ajuda de "terceiros", então precisa de formular o problema a essas mesmas "partes", ou seja, descrever o que gostaria de obter do algoritmo, e não o que obteve.

O "loop loops" não é um problema, porque se não houver nada no loop a não ser o operador contínuo, este está obrigado a loopar até que a condição do loop se torne falsa.

Isto é, não se devem fazer perguntas parvas como: "o que não funciona em código não funcional". Afinal, até um porco-espinho bêbado sabe que o código de não-trabalho não funciona porque é não-trabalho. Mas ninguém sem poderes telepáticos, excepto o autor do código, pode compreender o que deveria ter funcionado no código de trabalho.

Não gosto quando as pessoas atiram muita sujidade aos principiantes. Basta escrever de uma forma humana como - a questão é mal/actualizada/ mal formulada, ou - um erro aqui ou ali. Lembre-se de si próprio quando também começou a aprender a fazer algo, mais do que uma vez, provavelmente fez uma pergunta estúpida. E a metáfora de um porco-espinho bêbado traz alguma solução positiva para o problema? Só é agradável sentir-se fresco no brilho da sua própria grandeza diante de um recém-chegado.
 
paladin800:
Não gosto quando os novatos são atirados com muita sujidade para cima deles.

Um porco encontra sujidade por todo o lado © Provérbio popular

Onde encontrou a sujidade? Se o encontrou, pergunte a um moderador.

paladin800:
Será que a metáfora do ouriço bêbado traz alguma positividade ao problema?

Pedir à administração que acrescente uma proibição de metáforas e porcos-espinhos às regras.

 
Reshetov:

Um porco encontra sujidade por todo o lado © Provérbio popular

Onde encontrou a sujidade? Se o encontrar, dirija-se a um moderador.

Pedir à administração que acrescente uma proibição de metáforas e porcos-espinhos às regras.

E porquê moderadores e administradores... É uma questão de reprodução, ética profissional, tacto, tolerância, humanidade no final... ...os administradores não podem ajudar.

E se não compreende totalmente o problema, é melhor não dar conselhos... Às vezes é melhor mastigar... Embora exibir-se à custa dos outros seja um direito seu.

 
elugovoy:

É tudo uma questão de educação, ética profissional, tacto, tolerância, humanidade no final.

Mm-hmm. O jardim-de-infância e o instituto das nobres mulheres, todos enrolados num só.

Então porque não saltamos as coisas pessoais e continuamos a responder às perguntas dos novatos? Caso contrário, obtemos uma espécie de fluderastia de apoiantes de abordagens humanitárias num tópico puramente técnico.

 
Gostaria de agradecer a Evgeniy Lugovoy (ele tem grandes capacidades telepáticas). Respondeu cem por cento à minha pergunta sobre os problemas reais e do ciclo de testes. Na mesma noite li o artigo "Testing and Optimizing Expert Advisors " através do link http://articles.Na mesma noite, cruzei o artigo "Testando e optimizando a EA" pelo link . mql4.com/pt/824 (isto é para novatos como eu) e percebi que o testador cria um verdadeiro movimento de preço discreto e dá novas cotações apenas na próxima iteração da EA, por isso reescrevi o código para testes, usando uma série de declarações IF, onde antes havia loops de operadores. Para principiantes como eu aconselho a conhecer as "Funções Comuns" da MQL4 (link http://docs.mql4.com/ru/common). Fiquei surpreendido ao descobrir a diferença no funcionamento de uma e a mesma função em terminal real e em testador de estratégia, por exemplo Sleep() em testador não faz nenhum atraso como deveria e funciona apenas em terminal real.E finalmente, para os amantes imprudentes (como eu) de loops condicionados infinitos no início() { duplo nível=1300; enquanto (Pergunte<=Nível) As duas últimas linhas do código, apesar da sua inocência, depois de o executar num terminal numa janela de dinheiro real, desde que o preço atinja 1300, demorará uma enorme quantidade de tempo de CPU (nos meus 25 % de 2 núcleos).O meu amigo sugeriu que se não puder desistir do laço, terá de inserir Sleep ( int 100), ou seja, dar um intervalo de 100 a 200 milissegundos para aliviar o processador.int start() { double Level=1300; enquanto (Ask<==Level) { Sleep( int 100) continue; }
P.S. Para "terceiros" admiradores das expressões: porco-espinho bêbado, screwball, fluderasty e assim por diante. (embora estejamos num tópico puramente técnico), permito-me fazer uma pequena referência a Fyodor Mikhailovich Dostoyevsky, que no seu romance "O Idiota" através do Príncipe Myshkin diz uma coisa muito estranha: "A beleza salvará o mundo! E a ti Eugene, peço-te que digas olá à Moldávia, apesar de viver noutro país, mas nasci em Kishinev.
 
amavladi:

Não há nada de telepático )))) Penso que todos cometeram os mesmos erros quando querem "apanhar" um preço por, digamos, uma rede de arrasto... incluindo eu há cerca de 6 anos atrás.

A propósito, o tópico é para principiantes e não é "estritamente técnico".

Vou dizer olá.

Boa sorte.

 
elugovoy:

Não há nada de telepático )))) Penso que todos cometeram os mesmos erros quando querem "apanhar" um preço por, digamos, uma rede de arrasto... incluindo eu há cerca de 6 anos atrás.

A propósito, o tópico é para principiantes e não é "estritamente técnico".

Vou dizer olá.

Boa sorte.

Sobre telepatia e "puramente técnica" - Sou para o Sr.Reshetov: ))))

Boa sorte para si também.