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

 
AlexeyVik:

Bem, meu horário local é 1 hora a mais do que o do servidor.

Então, você pode explicar o que há de confuso sobre esses valores?

Não há nada de confuso sobre estes valores, eles são corretos, mas não é disso que estamos falando.

O problema com a sexta-feira em particular não é relevante se sua hora local for X horas a mais do que a hora do corretor.

Mas imagine se em seu computador local não houvesse +1, mas -1 hora de diferença com o corretor.

E há esta simples condição:

if(TimeDayOfWeek(TimeCurrent()) == 5 && TimeCurrent() >= StringToTime("21:30"))
   Print("Настала пятница и время больше чем 21:30");

Neste caso:

1. o corretor terá o primeiro tique da sexta-feira, por exemplo, o tique de hoje, que tem um horário de 2014.11.07 00:00

2. o número de segundos decorridos de01.01.1970 00:00 até o tick em questão, ou seja,2014.11.07 00: 00

3. levamos o número de segundos decorridos de 01.01.1970 00:00 até06.11.2014 21:30 (é a data de ontem, porque tomamos o horário do PC local, que no momento do tick não é sexta-feira, mas quinta-feira, que é o 6º dia, ou, para ser mais preciso, 2014.11.06 23:00, a diferença de 1 hora)

Voila, o número de segundos no ponto 2 é maior do que no ponto 3.

Isto significa que o primeiro tick de sexta-feira executará a impressão especificada no código, embora se a funçãoStringToTime() tirar a data do servidor do corretor, então tudo funcionaria como planejado, a impressão só apareceria na sexta-feira após o horário passar das21h30min.

 
Leonid123456:

Olá.

Há uma tarefa como esta. (não pode ser anexado a um carrapato)

Se uma ordem pendente desencadear {então...}.

No meu EA, uso Terminal.mqh para calcular pedidos.

Terminal // Mas_Tip[0] abrir Comprar

// se o número de pedidos de comprativer aumentado em 1

se (Mas_Tip[0]+1)

{

função

}

Tudo funciona. Mas isso aciona em cada próximo tique.

Como anexar este caso a um carrapato? E depois compare o valor no tick anterior e no tick atual.

E você pode traduzir o fio destacado para nossa língua humana? O que deve ser e o que você recebe ao executar esta linha...
 
AlexeyVik:
Você pode traduzir a linha em destaque para nosso idioma? O que deve ser e o que você recebe ao executar esta linha...

// se o número de pedidos decompra tiver aumentado em 1, então...

{

função, por exemplo, abre ou fecha outras ordens...

}

Não tem que ser assimse (Mas_Tip[0]+1) pudermos fazerse (Mas_Tip[0] >Mas_Tip[1]) // se houver mais pedidos de compra do que Célula. Abra um pendente, por exemplo.

A questão é que no próximo tick estes dados são novamente verdadeiros.

 
Leonid123456:

// se o número de pedidos decompra tiver aumentado em 1, então...

{

função, por exemplo, abre ou fecha outras ordens...

}

se (Mas_Tip[0]+1)

Nos parênteses de se deve haver um bool, ou seja, verdadeiro ou falso.

Aqui é obviamente intrigante. Isso é um número inteiro.

Naturalmente, verdadeiro é 1 e falso é 0 (se não estou enganado). Mas ainda não está certo. O que aMas_Tip[0] retorna?

 
ikatsko:

se (Mas_Tip[0]+1)

entre parênteses de se deve ser um bool, ou seja, verdadeiro ou falso.

Mas aqui é obviamente intrigante. Isso é um número inteiro.

Naturalmente, verdadeiro é 1 e falso é 0 (se não estou enganado). Mas ainda não está certo. O que aMas_Tip[0] retorna?

Número de ordens de compra em aberto.

 
Leonid123456:

// se o número de pedidos decompra tiver aumentado em 1, então...

{

função, por exemplo, abre ou fecha outras ordens...

}

Não, isso é o que você quer. Na verdade, não é. Há algum valor na matriz Mas_Tip[0], e se for maior que zero, a condição if(Mas_Tip[0]) será verdadeira. E se acrescentarmos 1 a este valor, será sempre verdade, pois o número de ordens em aberto não pode ser igual a -1.

 
AlexeyVik:

Não, é assim que você quer. Na verdade, não é. Há algum valor na matriz Mas_Tip[0] e se for maior que zero, a condição if(Mas_Tip[0]) já será verdadeira. E se acrescentarmos 1 a este valor, será sempre verdade, pois o número de ordens em aberto não pode ser igual a -1.


Eu tentei fazer desta maneira

   bool  Fact_1 = false;                    // Глобальная перемен.
       bool  Fact_2 = false;                    // Глобальная перемен.
//--------------------------------------------------------------------
int start()                                     // Спец. функция start
  {
                          // Локальная перемен.
   if (Fact_2==true)                            //Если сообщение уже..
      return;                                   //..было, то выходим
 
   if (Mas_Tip[0]+1)
      Fact_1 = true;                            // Произошло событие 1
 
   
 
   return;                                      // Выход из start()
  }
//--------------------------------------------------------------------
                               // Пользовательс. ф-ия
  {
             // Сообщение
   Fact_2 = true;                               // Произошло событие 2
   return;                                      // Выход из польз.ф-ии

}

Acontece que se trata de um evento único.

 
ikatsko:

se (Mas_Tip[0]+1)

entre parênteses de se deve ser um bool, ou seja, verdadeiro ou falso.

Mas aqui é obviamente intrigante. Isso é um número inteiro.

Naturalmente, verdadeiro é 1 e falso é 0 (se não estou enganado). Mas ainda não está certo. O que aMas_Tip[0] retorna?

falso é 0 e verdadeiro se não for 0.

Experimente esta linha

bool b;
b = 7.40;
if(b) Print("b = ", b);
O compilador pode advertir sobre uma possível perda de precisão, mas ele funcionará.
 

você pode descartar aMas_Tip[0]

Como obter um evento. Uma compra foi aberta.

 
Leonid123456:

você pode descartar aMas_Tip[0]

Como obter um evento. Uma compra foi aberta.

Lembre-se da velha contagem de compras em alguma variável e compare-a com o valor atual retornado pela função de Contagem de compras, de que outra forma?