Questions des débutants MQL4 MT4 MetaTrader 4 - page 206

 
a.lxrn:

Ceci est une question d'un débutant) condition dans le code pour un exemple, aide s'il vous plaît.

Comment faire un message à la condition vraie a été sortie une fois, c'est-à-dire prix>ma sortie d'un message (et non pas multiplier), je pense que vous savez ce que je veux dire.

Comment prescrire correctement le compteur ?

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

Comment, mais vous n'avez pas une fois besoin d'afficher l'alerte, respectivement, le drapeau devra être réinitialisé.

 

Bonjour, pourriez-vous me dire comment programmer un indicateur personnalisé pour que les lignes supplémentaires (tampons) ne soient pas affichées lorsque l'indicateur est attaché au graphique ?


 
Alexey Kazmin:

Bonjour, pourriez-vous me dire comment programmer un indicateur personnalisé pour que les lignes supplémentaires (tampons) ne soient pas affichées lorsque l'indicateur est attaché au graphique ?


utiliser ces propriétés

#property indicator_buffers 5
#property indicator_plots   1
 
Vitaly Muzichenko:


Forum sur le trading, les systèmes de trading automatisé et les tests de stratégie

FAQ des débutants MQL4 MT4 MetaTrader 4

Vitaly Muzichenko, 2020.06.14 16:29

Fonctionne dans MT5, mais j'ai obtenu le silence dans MT4 avec les mêmes paramètres

Construire 1260


Des choses étranges. Hier et aujourd'hui, mon envoi n'a pas fonctionné, et juste maintenant, il a fonctionné et le message a été envoyé. Je n'ai rien changé ou reconstruit du tout.

 
Igor Makanu:

utiliser ces propriétés

Merci, je vais essayer.

 
Je suis confus à propos des objets graphiques, je n'arrive pas à comprendre comment obtenir les coordonnées X Y High[0] en pixels de CORNER_RIGHT_UPPER ? Quelles seraient les fonctions pour calculer int X et int Y ?
 
Valeriy Yastremskiy:

D'une certaine manière, mais vous devez afficher l'alerte plus d'une fois, donc le drapeau devra être réinitialisé.

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

Je ne comprends toujours pas

Supposons qu'il existe une condition pour ouvrir une position, disons que le prix doit être supérieur au poignet et qu'un ordre d'achat est ouvert.

Cette condition sera vraie pendant une longue période et à chaque itération un ordre sera ouvert par ce code

Comment faire pour qu'une commande soit ouverte par cette condition et que ce soit tout ?

 
a.lxrn:

Je ne comprends pas.

Supposons qu'il existe une condition pour ouvrir une position, supposons que le prix soit supérieur au poignet et qu'un ordre d'achat soit ouvert.

Cette condition sera vraie pendant une longue période et à chaque itération un ordre sera ouvert par ce code

Comment faire pour qu'une commande soit ouverte par cette condition et que ce soit tout ?

Si la condition d'ouverture de l'ordre est vraie et que l'indicateur d'ouverture de l'ordre est faux, alors ouvrez un ordre et mettez l'indicateur d'ouverture de l'ordre à true.
 
a.lxrn:

Je ne comprends pas.

Supposons qu'il existe une condition pour ouvrir une position, supposons que le prix soit supérieur au poignet et qu'un ordre d'achat soit ouvert.

Cette condition sera vraie pendant une longue période et à chaque itération un ordre sera ouvert par ce code

Comment faire pour qu'une commande soit ouverte par cette condition et que ce soit tout ?

Si la condition d'ouverture de l'ordre est vraie et que l'indicateur d'ouverture de l'ordre est faux, alors ouvrez un ordre et mettez l'indicateur d'ouverture de l'ordre à true.
 

OrderDelete

S'il vous plaît, aidez-moi à trouver un bug dans le code. Ni le compilateur ni le testeur ne montrent une erreur, mais les limites ne sont pas supprimées...

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);
}
Raison: