[ARQUIVO] Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 3. - página 53

 

Algo parece estar esclarecendo.... A situação é a seguinte: a variável global duplo Delete_Level é declarada. No corpo da declaração de se, um novo valor é atribuído a ela:

Delete_Level = MA3

E ao deixar o corpo, o valor global do Delete_Level não muda. Pergunta: como posso mudar o valor da variável global Delete_Level quando saio do corpo da declaração de se?

 
vovan-gogan:

Desculpe, mas você poderia ir com calma?) Ajude-me a entender o erro em


O fato de que NUNCA haverá uma igualdade perfeita - este é o mundo real, o mundo real, no qual existem algumas incertezas e tolerâncias para este ou aquele processo, operação, etc. Aprenda o 'básico'... P Não poderia ser mais simples. Faça como eu recomendei e me diga se a condição funciona, funcionará? Eu mesmo estou interessado nisso. Obrigado.


 
vovan-gogan:

Algo parece estar esclarecendo.... A situação é a seguinte: a variável global duplo Delete_Level é declarada. No corpo da declaração de se, um novo valor é atribuído a ela:

E ao deixar o corpo, o valor global do Delete_Level não muda. Pergunta: como posso mudar o valor da variável global Delete_Level quando saio do corpo da declaração de se?


Como isso não muda? É claro que isso muda. Imprima o código e veja a aba Log, com F12 - teste passo a passo no modo de visualização.
 
sergeev:

qual é a data como você e a MQL a entendem ?
Eu gostaria de fazer um cheque antes de fazer um pedido. Suponha que uma sessão comece às 10-30, depois às 10-35 todas as condições para abrir uma ordem de compra sejam cumpridas, mas não deve ser colocada até que o tempo atual seja maior ou igual a 10-45.
 
Roman.:

Como isso não muda? É claro que isso muda.


É assim. Por exemplo, em uma EA, primeiro declaro uma variável global int Ordens, e depois, se uma ordem pendente for colocada, o valor da int Ordens deve mudar como mostrado abaixo:

int Orders;
if (MA2_2<MA1_2 && MA2_1>MA1_1)//пересечение МА
{
   if (OrdersTotal()>= 1)
   {
   return;
   }
         SL = 30;
         TP = 12;
         S_Price = Low[1] - 1* Point;
         if (OrderSend (Symbol(), OP_SELLSTOP, Lots, S_Price, 0, SL, TP, "My order", Magic)>0)
            {
               Orders++;
               Alert ("Ордер выставлен. Orders=",Orders );
            }
}           

Mas isto não mudará nas Ordens. Toda vez que recebemos uma mensagem de que "Aordem está definida".Encomendas=1".

 
vovan-gogan:


É assim. Por exemplo, em um EA, eu primeiro declaro uma variável global de ordens int e depois, no caso de uma ordem pendente, o valor da ordem int deve mudar como mostrado abaixo:

Mas não há mudança nas encomendas. Toda vez que recebo uma mensagem de que "opedido é feito".Encomendas=1".


Você não precisa de uma variável global, mas de uma variável local da função inicial. Então, por favor, tente

int start()                            // Спец. функция start
  {
    int Orders=0;
     if (MA2_2<MA1_2 && MA2_1>MA1_1)  //пересечение МА
        {
          if (OrdersTotal()>= 1) return(0);   
          SL = 30;
          TP = 12;
          S_Price = Low[1] - 1* Point;
          if (OrderSend (Symbol(), OP_SELLSTOP, Lots, S_Price, 0, SL, TP, "My order", Magic)>0)
            {
               Orders++;
               Alert ("Ордер выставлен.Orders = ",Orders );
            }
        }   
       Alert ("Ордеров нет. Orders = ",Orders );    
//----------------------------------------------------------------  
   return;                             // Выход из start()
  }
 
Roman.:


Lá não é necessária uma variável global, mas uma variável local para a função inicial. Então tente


Não é o mesmo no meu exemplo? Qual é a diferença? Exceto que eu não adicionei uma função inicial.
 
vovan-gogan:

Não é o mesmo no meu exemplo? Qual é a diferença? Exceto que eu não adicionei uma função inicial.

Você deveria tentar meu exemplo.
 
Roman.:

Você experimenta minha versão.

Mas eu não vejo a diferença para tentar. Por favor, diga-me o que eu fiz de errado.
 
Diga-me por que quando eu abro um gráfico (em tempo real) com Prazo M30 e aplicar o indicador com parâmetro int shift=iBarShift(NULL,PERÍODO_M5,some_time); shift será como deve ser, mas quando eu executar o mesmo indicador através do testador com o período M30 shift não é calculado?
Razão: