Perguntas de Iniciantes MQL4 MT4 MetaTrader 4 - página 212

 
Aleksei Stepanenko:

É ainda melhor fazer uma estrutura

não se esqueça de zerar os elementos antes de começar a usá-los

e depois aumentar a contagem onde for necessário

então compare

Agora você fez um loop em torno das 10 velas anteriores em cada vela nova. Isto não é racional. Você deve sempre se livrar de ciclos desnecessários, lembrando-se dos resultados dos cálculos dos valores anteriores. No seu caso, quando uma vela nova chegar, basta aumentar a contagem quando a condição for cumprida, e se a condição não for cumprida, então subtraia-a. E verifique se não há excesso. Seu ciclo para 10 elementos não é necessário, apenas o principal.

Aleksei, tentou fazer isso, mas ainda não funciona direito:

não adiciona um à contagem.

 for(int i=1;i<=10;i++)              
     {    
     count.up=0;
     count.dn=0;
     double hig10 = iMA (NULL,CP,WPER, 0, MODE_SMA, PRICE_CLOSE, i);                                     
     if (hig10>iClose(Symbol(),CP,i))
     {
     count.up++;
     }
    else
    {
    count.dn++;
    }
    }
    
    
    if (count.up>=8)
    {
    Comment("dsdsD");
    }
 

Você precisa remover do laço

count.up=0;
count.dn=0;

porque a cada iteração, você está zerando os valores anteriores. Escreva-o antes do laço.

 
Aleksei Stepanenko:

Você precisa remover do laço

porque a cada iteração, os valores anteriores serão zerados. Escreva-o antes do laço

Muito obrigado agora funciona!

Entretanto, é estranho, eu estava fazendo a mesma coisa sem a estrutura, mas apenas com valores normais como

  for(int i=1;i<=10;i++)              
     {    
     double hig10 = iMA (NULL,CP,WPER, 0, MODE_SMA, PRICE_CLOSE, i);                                     
     if (hig10>iClose(Symbol(),CP,i))
     {
     J=J+1;
    else
    {
    J=0;
    }
    }
    
    
    if (J>=8)
    {
    Comment("dfdf");

e começaria a somar cada carrapato))

 

A estrutura também será tic-tac. Para trabalhar somente no início de uma vela nova, o tempo dessa vela deve ser rastreado

datetime LastTime;

if(LastTime!=Time[0])
   {
   LastTime=Time[0];
   //Здесь ваш код
   }
 
Pode me aconselhar, por favor? Eu tenho funções personalizadas em arquivos separados .mqh prescrito através de #include, eu as chamo no início por seqüência, quando o início vai para uma função, então dependendo das ações o programa precisa acessar outro arquivo .mqh (por exemplo, para obter o valor do volume do pedido) e isso não acontece. Se eu escrever tudo em uma folha, funciona ou se eu escrever a fórmula para calcular o lote diretamente nos parâmetros de abertura do pedido. Procurei nas lições da MQL4 e li a documentação do programa, mas não encontrei nada. Eu realmente não entendo porque uma função .mqh não pode interagir com outra função .mqh dentro dos cálculos. Ou, devemos fazer o programa voltar a começar se enfrentarmos tal necessidade - ele retornaria o resultado para começar e então começar com este cálculo voltaria para a função abrindo uma ordem .mqh? Isto é algo idiota... Ou talvez devêssemos de alguma forma declarar todas as funções existentes de uma maneira diferente para que elas interajam juntas? Obrigado
 
Boa tarde!
Qual é a maneira mais fácil de se livrar do ano (2020) e dos minutos na fila? O TimeToStr ainda não tem outros formatos de saída?
TimeToStr(TimeCurrent(),TIME_DATE|TIME_MINUTES);
 
Nauris Zukas:
Boa tarde!
Qual é a maneira mais fácil de se livrar do ano (2020) e dos minutos na fila? O TimeToStr ainda não tem outros formatos de saída?
tm=(string)Hour();
 
Vitaly Muzichenko:

Obrigado!

 
Denis Diakonov:
Você pode me dar uma dica? Tenho funções definidas pelo usuário em arquivos .mqh separados e tenho-as escritas através de #include. Chamo-as no início e quando o início vai para uma função, o programa precisa chamar outro arquivo .mqh (por exemplo, para obter um valor do volume de pedidos) e isso não acontece. Se eu escrever tudo em uma folha, isso funciona ou se eu escrever a fórmula para calcular o lote diretamente nos parâmetros de abertura de ordem. Procurei nas lições da MQL4 e li a documentação do programa, mas não encontrei nada. Eu realmente não entendo porque uma função .mqh não pode interagir com outra função .mqh dentro dos cálculos. Ou, devemos fazer o programa voltar a começar se enfrentarmos tal necessidade - ele retornaria o resultado para começar e então começar com este cálculo voltaria à função abrindo uma ordem .mqh? Isto é algo idiota... Ou talvez devêssemos de alguma forma declarar todas as funções existentes de uma maneira diferente para que elas interajam juntas? Obrigado

Consulte funções, não arquivos, a partir de funções, se você tiver se conectado através de uma linha. Se eu o entendi corretamente, é claro.

 
Eu tentei reescrever "olyakish_fractals_01" de acordo com minha idéia, a minha é baseada em barras verdes de Williams. Tenho uma idéia errada, mas tenho pouco conhecimento da MQL4 e ela não está aparecendo no gráfico. Se alguém tiver alguma idéia, ajude-me, se não lhe custar nada).
Arquivos anexados:
18wbguVOL.mq4  13 kb