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

 
a.lxrn:

Esta é uma pergunta de um principiante) condição no código para um exemplo, por favor, ajude.

Como fazer uma mensagem na verdadeira condição foi emitida uma vez, ou seja, preço>ma saída uma mensagem (e não multiplicar), eu acho que você sabe o que quero dizer.

Como prescrever corretamente o balcão?

if(Work==false) // Критическая ошибка
     {
      if(AlertWork==false)   // Если Алерта еще не было
        {  Alert("Критическая ошибка. Эксперт не работает."); AlertWork=true; }
      return;
     }                        

Como assim, mas não é necessário exibir o alerta uma única vez, respectivamente, a bandeira terá que ser rearmada.

 

Olá, você poderia me dizer como programar um indicador personalizado para que linhas extras (buffers) não sejam exibidas quando o indicador for anexado ao gráfico?


 
Alexey Kazmin:

Olá, você poderia me dizer como programar um indicador personalizado para que linhas extras (buffers) não sejam exibidas quando o indicador for anexado ao gráfico?


utilizar estas propriedades

#property indicator_buffers 5
#property indicator_plots   1
 
Vitaly Muzichenko:


Fórum sobre Comércio, Sistemas Automatizados de Comércio e Testes de Estratégia

FAQ de Iniciantes MQL4 MT4 MetaTrader 4

Vitaly Muzichenko, 2020.06.14 16:29

Funciona no MT5, mas tenho silêncio no MT4 com as mesmas configurações

Construir 1260


Coisas estranhas. Ontem e hoje meu envio não funcionou, e só agora funcionou e a mensagem foi enviada. Não mudou ou reconstruiu absolutamente nada.

 
Igor Makanu:

utilizar estas propriedades

Obrigado, vou tentar.

 
Estou confuso sobre objetos gráficos, não consigo descobrir como obter as coordenadas X Y Altas[0] em pixels de CORNER_RIGHT_UPPER? Quais seriam as funções para calcular int X e int Y?
 
Valeriy Yastremskiy:

De alguma forma, mas você tem que exibir o alerta mais de uma vez, portanto, a bandeira terá que ser rearmada.

   if(sizeBar && maxmin)
     {
      
                   while(true)
                   {
                         int ticket = OrderSend(Symbol(), OP_BUY, 0.01, Ask, 5, sl, tp);
                         if(ticket>0) break;                        
                   }      
             
     }

Eu ainda não entendo

Suponha que haja uma condição para a abertura de uma posição, digamos que o preço deve estar acima do pulso e uma ordem de compra seja aberta.

Esta condição será válida por muito tempo e a cada iteração uma ordem será aberta por este código.

Como devo fazer para que um pedido seja aberto por esta condição e será assim?

 
a.lxrn:

Eu não entendo.

Vamos assumir que existe uma condição para a abertura de uma posição, vamos assumir que o preço deve ser mais alto do que o pulso e que uma ordem de compra será aberta.

Esta condição será válida por muito tempo e a cada iteração uma ordem será aberta por este código.

Como devo fazer para que um pedido seja aberto por esta condição e será assim?

Se a condição de ordem aberta for verdadeira e a bandeira de ordem aberta for falsa, então abra uma ordem e coloque a bandeira de ordem aberta como verdadeira.
 
a.lxrn:

Eu não entendo.

Vamos assumir que existe uma condição para a abertura de uma posição, vamos assumir que o preço deve ser mais alto do que o pulso e que uma ordem de compra será aberta.

Esta condição será válida por muito tempo e a cada iteração uma ordem será aberta por este código.

Como devo fazer para que um pedido seja aberto por esta condição e será assim?

Se a condição de ordem aberta for verdadeira e a bandeira de ordem aberta for falsa, então abra uma ordem e coloque a bandeira de ordem aberta como verdadeira.
 

OrderDelete

Por favor, ajude-me a encontrar um erro no código. Nem o compilador nem o testador mostram um erro, mas os limites não são eliminados...

void OnTick()
            
      if (Low[1] < val2 && BUY() == 0 && BUYLIMIT1() == 0 && BUYLIMIT2() == 0)

      {
      
      SL = NormalizeDouble(Ask - StopLoss*Point, 5);
      TP = NormalizeDouble(Ask + TakeProfit*Point, 5); 
          
      ticket = OrderSend(Symbol(), OP_BUY, Lots, price, 3, SL, TP, "EU buy", Magic, 0, Red);
      
      if(ticket<0)
         Print("Не удалось открыть ордер");
      }
            
      {
      if (BUY() == 1 && BUYLIMIT1() == 0 && BUYLIMIT2() == 0)
      {
      
      SL = NormalizeDouble(price1 - StopLoss1*Point, 5);
      TP = NormalizeDouble(price1 + TakeProfit1*Point, 5); 
     
      ticket1 = OrderSend(Symbol(), OP_BUYLIMIT, Lots1, price1, 3, SL, TP, "EU buy", Magic1, 0, Red);
      

            {
            if (BUY() == 0 && BUYLIMIT1() == 1)
            {
            for(int i=OrdersTotal()-1; i>=X; i--)
            if(OrderSelect(i,SELECT_BY_TICKET,MODE_TRADES)&&
               OrderType() == OP_BUYLIMIT &&
               OrderMagicNumber()==Magic1)
               {
            res=OrderDelete(OrderTicket(),clrWhite);
               Print("OrderDelete error ",GetLastError());
               }
              return;}
      } } }
      
      {
      if (BUYLIMIT1() == 1 && BUYLIMIT2() == 0)
      {
      
      SL = NormalizeDouble(price2 - StopLoss2*Point, 5);
      TP = NormalizeDouble(price2 + TakeProfit2*Point, 5); 

      ticket2 = OrderSend(Symbol(), OP_BUYLIMIT, Lots2, price2, 3, SL, TP, "GU buy", Magic2, 0, Red);
      

            {
            if (BUY1() == 0 && BUYLIMIT2() == 1)
            {
            for(int i=OrdersTotal()-1; i>=X; i--)
            if(OrderSelect(i,SELECT_BY_TICKET,MODE_TRADES)&&
               OrderType() == OP_BUYLIMIT &&
               OrderMagicNumber()==Magic2)
               {
            res=OrderDelete(OrderTicket(),clrWhite);
               Print("OrderDelete error ",GetLastError());
               }
              return;}
      } } }     
      
                               
}


//+------------------------------------------------------------------+
int BUY()
{
   int count = 0;
   for(int i=OrdersTotal()-1; i>=X; i--)
   {
     if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == true &&
         OrderMagicNumber() == Magic &&
         OrderType() == OP_BUY)
         {
         count++;
         }

     }
     return(count);
}

//+------------------------------------------------------------------+
int BUYLIMIT1()
{
   int count = 0;
   for(int i=OrdersTotal()-1; i>=X; i--)
   {
     if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == true &&
         OrderMagicNumber() == Magic1 &&
         OrderType() == OP_BUYLIMIT)
         {
         count++;
         } 
     }
     return(count);
}

//+------------------------------------------------------------------+
int BUY1()
{
   int count = 0;
   for(int i=OrdersTotal()-1; i>=X; i--)
   {
     if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == true &&
         OrderMagicNumber() == Magic1 &&
         OrderType() != OP_BUYLIMIT)
         {
         count++;
         } 
     }
     return(count);
}

//+------------------------------------------------------------------+
int BUYLIMIT2()
{
   int count = 0;
   for(int i=OrdersTotal()-1; i>=X; i--)
   {
     if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == true &&
         OrderMagicNumber() == Magic2 &&
         OrderType() == OP_BUYLIMIT)
         {
         count++;
         }
     }
     return(count);
}

//+------------------------------------------------------------------+
int BUY2()
{
   int count = 0;
   for(int i=OrdersTotal()-1; i>=X; i--)
   {
     if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == true &&
         OrderMagicNumber() == Magic2 &&
         OrderType() != OP_BUYLIMIT)
         {
         count++;
         }
     }
     return(count);
}
Razão: