Fragen von Anfängern MQL4 MT4 MetaTrader 4 - Seite 206

 
a.lxrn:

Dies ist eine Frage eines Anfängers) Bedingung im Code für ein Beispiel, bitte helfen.

Wie man eine Nachricht an der wahren Zustand wurde einmal ausgegeben, das heißt, Preis>ma Ausgabe einer Nachricht (und nicht multiplizieren), ich denke, Sie wissen, was ich meine.

Wie verschreibt man den Zähler richtig?

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

Wie auch immer, aber Sie müssen die Meldung nicht einmal anzeigen bzw. die Flagge zurücksetzen.

 

Hallo, können Sie mir sagen, wie ich einen benutzerdefinierten Indikator so programmieren kann, dass keine zusätzlichen Zeilen (Puffer) angezeigt werden, wenn der Indikator an das Diagramm angehängt ist?


 
Alexey Kazmin:

Hallo, können Sie mir sagen, wie ich einen benutzerdefinierten Indikator so programmieren kann, dass keine zusätzlichen Zeilen (Puffer) angezeigt werden, wenn der Indikator an das Diagramm angehängt ist?


diese Eigenschaften nutzen

#property indicator_buffers 5
#property indicator_plots   1
 
Vitaly Muzichenko:


Forum für Handel, automatisierte Handelssysteme und Strategietests

FAQ von Anfängern MQL4 MT4 MetaTrader 4

Vitaly Muzichenko, 2020.06.14 16:29

Funktioniert in MT5, aber ich habe Ruhe in MT4 mit den gleichen Einstellungen

Gebäude 1260


Seltsame Dinge. Gestern und heute hat das Senden nicht funktioniert, aber gerade eben hat es funktioniert und die Nachricht wurde gesendet. Es wurde überhaupt nichts verändert oder umgebaut.

 
Igor Makanu:

diese Eigenschaften nutzen

Danke, ich werde es ausprobieren.

 
Ich bin verwirrt über grafische Objekte, ich kann nicht herausfinden, wie man X Y Koordinaten High[0] in Pixel von CORNER_RIGHT_UPPER? Mit welchen Funktionen kann man int X und int Y berechnen?
 
Valeriy Yastremskiy:

Irgendwie schon, aber Sie müssen die Meldung mehr als einmal anzeigen, also muss das Kennzeichen zurückgesetzt werden.

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

Ich verstehe es immer noch nicht.

Angenommen, es gibt eine Bedingung für die Eröffnung einer Position, z. B. muss der Kurs über dem Handgelenk liegen, und es wird ein Kaufauftrag eröffnet.

Diese Bedingung wird über einen langen Zeitraum erfüllt sein und bei jeder Iteration wird ein Auftrag durch diesen Code eröffnet

Wie kann ich erreichen, dass eine Bestellung unter dieser Bedingung geöffnet wird und das war's dann?

 
a.lxrn:

Das verstehe ich nicht.

Nehmen wir an, dass es eine Bedingung für die Eröffnung einer Position gibt, nehmen wir an, dass der Preis höher sein sollte als das Handgelenk und ein Kaufauftrag eröffnet wird.

Diese Bedingung wird über einen langen Zeitraum erfüllt sein und bei jeder Iteration wird ein Auftrag durch diesen Code eröffnet

Wie kann ich erreichen, dass eine Bestellung unter dieser Bedingung geöffnet wird und das war's dann?

Wenn die Bedingung für einen offenen Auftrag erfüllt ist und das Kennzeichen für einen offenen Auftrag falsch ist, dann eröffnen Sie einen Auftrag und setzen das Kennzeichen für einen offenen Auftrag auf wahr.
 
a.lxrn:

Das verstehe ich nicht.

Nehmen wir an, dass es eine Bedingung für die Eröffnung einer Position gibt, nehmen wir an, dass der Preis höher sein sollte als das Handgelenk und ein Kaufauftrag eröffnet wird.

Diese Bedingung wird über einen langen Zeitraum erfüllt sein und bei jeder Iteration wird ein Auftrag durch diesen Code eröffnet

Wie kann ich erreichen, dass eine Bestellung unter dieser Bedingung geöffnet wird und das war's dann?

Wenn die Bedingung für einen offenen Auftrag erfüllt ist und das Kennzeichen für einen offenen Auftrag falsch ist, dann eröffnen Sie einen Auftrag und setzen das Kennzeichen für einen offenen Auftrag auf wahr.
 

OrderDelete

Bitte helfen Sie mir, einen Fehler im Code zu finden. Weder Compiler noch Tester zeigen einen Fehler an, aber die Grenzen werden nicht gelöscht...

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);
}
Grund der Beschwerde: