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 13

 
Krokus:

Talvez sim:

Outros pensamentos não vêm...




Você está lendo nas entrelinhas. De qualquer forma, veja o que você coloca no laço em primeiro lugar. A zona de ação do laço...
 
Olá, em mt4 android para tablet precisa baixar o terminal para cada servidor separadamente ? login como em pc via arquivo de login não é possível ? Você também sabe se o autoclick pode ser instalado em uma placa andróide para comercializar o mt4 ?
 

Boa tarde! Não consigo colocar esta condição para trabalhar:

OrderCloseTime()!=hora()

Não quero que mais de um pedido seja aberto em uma hora!

Todas as mesmas ordens são abertas!

 
lowech:

Boa tarde! Não consigo colocar esta condição para trabalhar:

OrderCloseTime()!=hora()

Não quero que mais de um pedido seja aberto em uma hora!

Mas todas as mesmas ordens são abertas!

Antes de mais nada: OrderCloseTime() - este é o momento do fechamento do pedido. Se a ordem não for fechada, é igual a zero. Você precisa olhar para o momento da abertura.

Em segundo lugar: Hora() - esta é a hora de início da EA, e esta hora não muda durante a execução do programa. Você precisa compará-lo com a hora da última cotação de chegada - TimeCurrent()

Esta função retorna o número de segundos depois que a última posição do símbolo atual foi aberta:

//+----------------------------------------------------------------------------+
datetime SecondsAfterOpenLastPos(int op, int mn) {
   datetime t=0;
   int      i, k=OrdersTotal();

   for (i=0; i<k; i++) {
      if (OrderSelect(i, SELECT_BY_POS)) {
         if (OrderSymbol()!=Symbol())  continue;
         if (OrderType()!=op)          continue;
         if (OrderMagicNumber()!=mn)   continue;
         if (t<OrderOpenTime()) t=OrderOpenTime();
         }
      }
   return(TimeCurrent()-t);
}
//+----------------------------------------------------------------------------+

Isto é, para verificar o número de segundos após a abertura da última posição de compra com Magic, você precisa

if (SecondsAfterOpenLastPos(OP_BUY, Magic)>3600) {
   // Можно открывать следующий
   }
 
Olá, quando você abre o terminal novamente, após o fim de semana, todos os gráficos, incluindo os gráficos de trabalho com EAs, desapareceram em uma conta de centavos. Em vez do gráfico há um campo cinza, embora as posições abertas, o saldo e os fundos tenham sido salvos na parte inferior. Tive que recarregar o terminal e reinstalar os gráficos de trabalho com os Expert Advisors. Depois disso, tudo estava bem. Por favor, me diga do que se trata e como eliminar este defeito no futuro da maneira mais indolor?
 

Primeiro: OrderCloseTime() é o momento de fechar o pedido. Se a ordem não for fechada, é igual a zero. Você precisa observar o tempo aberto.

Segundo: Hora() - esta é a hora de início do Expert Advisor, e esta hora não muda durante a execução do programa. Você precisa compará-lo com a hora da última cotação de chegada - TimeCurrent()

Esta função retorna o número de segundos depois que a última posição do símbolo atual foi aberta:

//+----------------------------------------------------------------------------+
datetime SecondsAfterOpenLastPos(int op, int mn) {
   datetime t=0;
   int      i, k=OrdersTotal();

   for (i=0; i<k; i++) {
      if (OrderSelect(i, SELECT_BY_POS)) {
         if (OrderSymbol()!=Symbol())  continue;
         if (OrderType()!=op)          continue;
         if (OrderMagicNumber()!=mn)   continue;
         if (t<OrderOpenTime()) t=OrderOpenTime();
         }
      }
   return(TimeCurrent()-t);
}
//+----------------------------------------------------------------------------+

Isto é, para verificar o número de segundos após a abertura da última posição de compra com Magic, você precisa

if (SecondsAfterOpenLastPos(OP_BUY, Magic)>3600) {
   // Можно открывать следующий
   }
obrigado pela função! você não tem outra?! para que apenas um pedido seja aberto por bar?!
 
lowech:
obrigado pelo recurso! você não tem outro?! para que apenas um pedido seja aberto por bar?!
//+----------------------------------------------------------------------------+
datetime BarsAfterOpenLastPos(int op, int mn) {
   datetime t=0;
   int      i, k=OrdersTotal();

   for (i=0; i<k; i++) {
      if (OrderSelect(i, SELECT_BY_POS)) {
         if (OrderSymbol()!=Symbol())  continue;
         if (OrderType()!=op)          continue;
         if (OrderMagicNumber()!=mn)   continue;
         if (t<OrderOpenTime()) t=OrderOpenTime();
         }
      }
   return((TimeCurrent()-t)/60/Period());
}
//+----------------------------------------------------------------------------+

a mesma coisa, verifique apenas o número de barras, não segundos

 
//+----------------------------------------------------------------------------+
datetime BarsAfterOpenLastPos(int op, int mn) {
   datetime t=0;
   int      i, k=OrdersTotal();

   for (i=0; i<k; i++) {
      if (OrderSelect(i, SELECT_BY_POS)) {
         if (OrderSymbol()!=Symbol())  continue;
         if (OrderType()!=op)          continue;
         if (OrderMagicNumber()!=mn)   continue;
         if (t<OrderOpenTime()) t=OrderOpenTime();
         }
      }
   return((TimeCurrent()-t)/60/Period());
}
//+----------------------------------------------------------------------------+

a mesma coisa, verificar apenas o número de barras, não segundos


Funciona! Mas quando eu fecho um pedido por TP, um novo se abrirá imediatamente!
 
Por que as camadas comerciais não são exibidas na plataforma e por que a EA não está funcionando?
 
lowech:

a mesma coisa, verifique apenas o número de barras, não segundos


Mas quando um pedido é fechado na TP, um novo pedido abre imediatamente! Como podemos consertá-lo?

Portanto, precisamos fazer outra verificação: para o número de barras após o último pedido ter sido fechado:

//+----------------------------------------------------------------------------+
int BarsAfterCloseLastPos (int fi_MG, int fi_Type = -1)
{
    datetime ldt_Time = 0;
    int      li_Total = OrdersTotal();
//----
    for (int li_pos = 0; li_pos < li_Total; li_pos++)
    {
        if (!OrderSelect (li_pos, SELECT_BY_POS, MODE_HISTORY)) continue;
        if (OrderSymbol() != Symbol()) continue;
        if (fi_Type >= 0) if (OrderType() != fi_Type) continue;
        if (OrderMagicNumber() != fi_MG) continue;
        if (ldt_Time >= OrderCloseTime()) continue;
        ldt_Time = OrderCloseTime();
    }
    //---- Обрабатываем событие - отсутствие своих ордеров
    if (ldt_Time == 0) return (-1);
//----
    return (iBarShift (NULL, 0, ldt_Time));
}
//+----------------------------------------------------------------------------+
Razão: