Domande dai principianti MQL4 MT4 MetaTrader 4 - pagina 206

 
a.lxrn:

Questa è una domanda di un principiante) condizione nel codice per un esempio, aiuto per favore.

Come fare un messaggio alla condizione vera è stato emesso una volta, che è prezzo>ma uscita un messaggio (e non moltiplicare), penso che tu sappia cosa voglio dire.

Come prescrivere correttamente il contatore?

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

Come così, ma non hai una volta bisogno di visualizzare l'avviso, rispettivamente, la bandiera dovrà resettare.

 

Ciao, potresti dirmi come programmare un indicatore personalizzato in modo che le linee extra (buffer) non vengano visualizzate quando l'indicatore è collegato al grafico?


 
Alexey Kazmin:

Ciao, potresti dirmi come programmare un indicatore personalizzato in modo che le linee extra (buffer) non vengano visualizzate quando l'indicatore è collegato al grafico?


utilizzare queste proprietà

#property indicator_buffers 5
#property indicator_plots   1
 
Vitaly Muzichenko:


Forum sul trading, sistemi di trading automatico e test di strategia

FAQ da principianti MQL4 MT4 MetaTrader 4

Vitaly Muzichenko, 2020.06.14 16:29

Funziona in MT5, ma ho ottenuto il silenzio in MT4 con le stesse impostazioni

Costruire 1260


Cose strane. Ieri e oggi il mio invio non ha funzionato, ma proprio ora ha funzionato e il messaggio è stato inviato. Non ha cambiato o ricostruito assolutamente nulla.

 
Igor Makanu:

utilizzare queste proprietà

Grazie, farò una prova.

 
Sono confuso sugli oggetti grafici, non riesco a capire come ottenere le coordinate X Y High[0] in pixel da CORNER_RIGHT_UPPER? Quali sarebbero le funzioni per calcolare int X e int Y?
 
Valeriy Yastremskiy:

In qualche modo, ma devi visualizzare l'avviso più di una volta, quindi il flag dovrà essere resettato.

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

Ancora non capisco

Supponiamo che ci sia una condizione per l'apertura di una posizione, ad esempio il prezzo deve essere sopra il polso e viene aperto un ordine Buy.

Questa condizione sarà vera per molto tempo e ad ogni iterazione un ordine sarà aperto da questo codice

Come posso fare in modo che un ordine sia aperto da questa condizione e che sia tutto?

 
a.lxrn:

Non capisco.

Supponiamo che ci sia una condizione per aprire una posizione, supponiamo che il prezzo debba essere superiore al polso e che venga aperto un ordine di acquisto.

Questa condizione sarà vera per molto tempo e ad ogni iterazione un ordine sarà aperto da questo codice

Come posso fare in modo che un ordine sia aperto da questa condizione e che sia tutto?

Se la condizione di ordine aperto è vera e il flag di ordine aperto è falso, allora apri un ordine e imposta il flag di ordine aperto a vero.
 
a.lxrn:

Non capisco.

Supponiamo che ci sia una condizione per aprire una posizione, supponiamo che il prezzo debba essere superiore al polso e che venga aperto un ordine di acquisto.

Questa condizione sarà vera per molto tempo e ad ogni iterazione un ordine sarà aperto da questo codice

Come posso fare in modo che un ordine sia aperto da questa condizione e che sia tutto?

Se la condizione di ordine aperto è vera e il flag di ordine aperto è falso, allora apri un ordine e imposta il flag di ordine aperto a vero.
 

OrderDelete

Per favore aiutatemi a trovare un errore nel codice. Né il compilatore né il tester mostrano un errore, ma i limiti non vengono cancellati...

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