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

 
Jenya77769:

Hallo! Die beiden Minuszahlen q und w werden falsch verglichen, wenn sie gleich sind, denkt der if-Operator, dass die eine größer ist als die andere.Worin liegt der Fehler? Wenn q = -0,0002 und w ebenfalls -0,0002 ist, ist res12=falsch, warum?

weil es sich um ein Double handelt und sie nicht genau gleich sind.

ABBILDUNG: Vergleich der normalisierten Werte

 
Jenya77769:

Hallo! Die beiden Minuszahlen q und w werden falsch verglichen, wenn sie gleich sind, denkt der if-Operator, dass die eine größer ist als die andere.Worin liegt der Fehler? Wenn q = -0,0002 und w ebenfalls -0,0002 ist, ist res12=falsch, warum?


Vergleichen Sie ihre Differenz mit Null, das ist korrekter und funktioniert für Zahlen jeder Art.

 

Leute, ich habe eine Frage.

Es gibt eine horizontale Linie, die einen Tag lang ist.

Es hat eine Textbeschriftung, ein Label-Objekt.

Wie kann ich dafür sorgen, dass diese Textbeschriftung immer in der Mitte der Linie (in der Mitte des Tages) liegt, egal wie groß das Diagramm ist?

 
John Smith:

Leute, ich habe eine Frage.

Es gibt eine horizontale Linie, die einen Tag lang ist.

Es hat eine Textbeschriftung, ein Label-Objekt.

Wie kann ich dafür sorgen, dass diese Textbeschriftung immer in der Mitte der Linie (in der Mitte des Tages) liegt, egal wie groß das Diagramm ist?

Ändern Sie die X-Koordinate der Beschriftung, d.h. berechnen Sie sie als Mitte der Linie
 
Renat Akhtyamov:
Ändern Sie die X-Koordinate der Markierung, d.h. berechnen Sie sie als Mitte der Linie

Nun, das ist verständlich, aber wie mache ich das?


Ich hatte eine zweite Option - mit einer an den Tagesanfang gebundenen Markierung, die eine Textvariable verwendet, um Leerzeichen vor dem Wert der Markierung einzufügen, je nach Zoom des Diagramms.

Im Wesentlichen möchte ich, dass sich die Beschriftung bei Nahaufnahme auf der linken Seite befindet, und bei Verkleinerung sollte die Beschriftung in die Mitte verschoben werden. Da die Zoomstufen in mt4 standardisiert sind, ist es nicht so schwierig, für jede Zoomstufe die richtige Anzahl von Leerzeichen zu finden. Aber hier ist eine Frage - hat mql4 eine solche Funktion, die die aktuelle Zoomstufe des Diagramms bestimmen würde?

Dann wird alles ganz einfach sein, etwa so: "if chartzoom = 50% then spacesnumber = 10", usw.

Wobei spacesnumber eine String-Variable ist, die die Anzahl der Leerzeichen vor dem Beschriftungstext definiert, z. B. __________.23456 - es gibt 10 Leerzeichen mit _-Zeichen.

 
John Smith:

Nun, das ist verständlich, aber wie mache ich das?


Ich hatte eine zweite Option - mit einer Markierung, die an den Tagesanfang gebunden war, und mit einer Textvariablen, die je nach Zoom des Diagramms Leerzeichen vor dem Markierungswert einfügte.

Im Wesentlichen möchte ich, dass sich die Beschriftung bei Nahaufnahme auf der linken Seite befindet, und bei Verkleinerung sollte die Beschriftung in die Mitte verschoben werden. Da die Zoomstufen in mt4 standardisiert sind, ist es nicht so schwierig, für jede Zoomstufe die richtige Anzahl von Leerzeichen zu finden. Aber hier ist eine Frage - hat mql4 eine solche Funktion, die die aktuelle Zoomstufe des Diagramms bestimmen würde?

Dann wird alles ganz einfach sein, etwa so: "if chartzoom = 50% then spacesnumber = 10", usw.

Wobei spacesnumber eine String-Variable ist, die die Anzahl der Leerzeichen vor dem Beschriftungstext definiert, z. B. __________.23456 - es gibt 10 Leerzeichen mit _-Zeichen.

Lesen Sie meine Kommentarehier
 

Hallo zusammen, ich brauche wieder Hilfe. Ich kann nicht herausfinden, was der Fehler ist. Schleppnetz wiederholen. Schleppnetz von MA. Ich muss mehrere Bestellungen durchgehen. Es kann Schleifen geben. Solange es einen offenen Auftrag gibt, funktioniert alles perfekt. Sobald ein weiterer Auftrag geöffnet wird, beginnt das Bacchanalien - ständige Änderung (mit ein und demselben Parameter) des ersten Auftrags (Fehler 1 wird nicht angezeigt). In diesem Fall wird die zweite Ordnung so modifiziert, wie sie sein sollte - wenn die entsprechenden Bedingungen erfüllt sind (die erste Ordnung ändert ihre Parameter, wenn sich die Bedingungen ändern, und setzt die ständige Modifikation mit neuen Parametern fort). Ich kann den Grund dafür nicht finden. Wer kann mir einen Tipp geben?

void TrailingStop()
{
   int i;
   int k          = OrdersTotal(); 
   double Ma      = iAlligator(NULL, 0, 13, 8, 8, 5, 5, 3, MODE_SMMA, PRICE_MEDIAN, MODE_GATORLIPS, 1); 
   int MinDistans = int(MarketInfo(Symbol(), MODE_STOPLEVEL));
   
   double lips1  = iAlligator(NULL, 0, 13, 8, 8, 5, 5, 3, MODE_SMMA, PRICE_MEDIAN, MODE_GATORLIPS, 1); 
   double lips2  = iAlligator(NULL, 0, 13, 8, 8, 5, 5, 3, MODE_SMMA, PRICE_MEDIAN, MODE_GATORLIPS, 2);
   double teeth1 = iAlligator(NULL, 0, 13, 8, 8, 5, 5, 3, MODE_SMMA, PRICE_MEDIAN, MODE_GATORTEETH, 1);
   double teeth2 = iAlligator(NULL, 0, 13, 8, 8, 5, 5, 3, MODE_SMMA, PRICE_MEDIAN, MODE_GATORTEETH, 2);
   double jaw1   = iAlligator(NULL, 0, 13, 8, 8, 5, 5, 3, MODE_SMMA, PRICE_MEDIAN, MODE_GATORJAW , 1);
   double jaw2   = iAlligator(NULL, 0, 13, 8, 8, 5, 5, 3, MODE_SMMA, PRICE_MEDIAN, MODE_GATORJAW , 2);
   
   for (i = 0; i < k; i++)
   {
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
      {
         if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
         {
            if(OrderType() == OP_BUY)
            {
               if(lips2 < teeth2 && teeth2 < jaw2 && lips1 < teeth1 && teeth1 < jaw1)
                  break;
               
               if(lips2 > teeth2 && teeth2 > jaw2 && lips1 > teeth1 && teeth1 > jaw1)
               {   
                  if((OrderStopLoss() + TrailingStep*Point) < Ma)
                  {
                     double Sl = NormalizeDouble(Ma, Digits);                 
                     
                     if((Bid - MinDistans) > Sl && (OrderStopLoss() + TrailingStep*Point) < Sl)
                     { 
                        OrderModifyX(OrderTicket(), OrderOpenPrice(), Sl, OrderTakeProfit(), OrderExpiration(), 0);
                     }
                  }
               }
            }
         }
      }     
 
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))  
      {
         if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
         {
            if(OrderType() == OP_SELL)
            {
               if(lips2 > teeth2 && teeth2 > jaw2 && lips1 > teeth1 && teeth1 > jaw1)
                  break;
                  
               if(lips2 < teeth2 && teeth2 < jaw2 && lips1 < teeth1 && teeth1 < jaw1)
               {
                  if(MathAbs(OrderStopLoss() - TrailingOpen*Point) > Ma)
                  {
                     double Sl = NormalizeDouble(Ma, Digits);
                 
                     if((Ask + MinDistans) < Sl && (OrderStopLoss() - TrailingStep*Point) > Sl)
                     {
                        OrderModifyX(OrderTicket(), OrderOpenPrice(), Sl, OrderTakeProfit(), OrderExpiration(), 0);
                     }
                  }
               }
            }
         }
      }
   }
}



 
Youri Lazurenko:

Hallo zusammen, ich brauche wieder Hilfe. Ich kann nicht herausfinden, was der Fehler ist. Schleppnetz wiederholen. Schleppnetz von MA. Ich muss mehrere Bestellungen durchgehen. Es kann Schleifen geben. Solange es einen offenen Auftrag gibt, funktioniert alles perfekt. Sobald ein weiterer Auftrag geöffnet wird, beginnt das Bacchanalien - ständige Änderung (mit ein und demselben Parameter) des ersten Auftrags (Fehler 1 wird nicht angezeigt). In diesem Fall wird die zweite Ordnung so geändert, wie es sein sollte - wenn die entsprechenden Bedingungen erfüllt sind (die erste Ordnung ändert ihre Parameter, wenn sich die Bedingungen ändern, und setzt die ständige Änderung mit neuen Parametern fort). Ich kann den Grund dafür nicht finden. Wer kann mir helfen?


1. Der Zyklus sollte umgekehrt werden.

2. wofür ist die Pause?

 
Artyom Trishkin:

1. Der Kreislauf muss umgekehrt werden.

2. Wozu dient die Pause?


Hallo.

1 - "Die Schleife muss invers sein" - meinen Sie for(i = k; i > 0; i--)?

2. "Wozu ist die Pause gut?" - Zum Beenden. In der Regel zu Beginn, nach Auswahl der Auftragsart und wenn es gegen den Trendbruch ist. Dann wählen wir die Auftragsart erneut aus, und wenn sie sich im Trend befindet, ändern wir sie.

Diese Variante des Bruchs hat mir schon einmal geholfen. Als Sie eine Lösung für das Schleppnetz von MA vorschlugen. Wenn z.B. bei einem Kauf der Stop über dem MA lag, bekam ich den Fehler 1, bis der MA über dem Stop lag, danach verschwand der Fehler. Als ich die Bedingung einführte, dass, wenn der Stopp über dem MA ist, dann brechen, ging alles zurück zu normal.

 
Youri Lazurenko:

Hallo.

1 - "Die Schleife muss umgedreht werden" - meinen Sie for(i = k; i > 0; i--)?

2. "Wozu ist die Pause gut?" - Zum Beenden. In der Regel zu Beginn, nach Auswahl der Auftragsart und wenn es gegen den Trendbruch ist. Dann wählen wir die Auftragsart erneut aus, und wenn sie sich im Trend befindet, ändern wir sie.

Diese Variante des Bruchs hat mir schon einmal geholfen. Als Sie eine Lösung für das Schleppnetz von MA vorschlugen. Wenn z.B. bei einem Kauf der Stop über dem MA lag, bekam ich den Fehler 1, bis der MA über dem Stop lag, danach verschwand der Fehler. Wenn ich die Bedingung, dass, wenn die Haltestelle über dem MA ist, hat alles normalisiert.

Pause schließt die Schleife vollständig ab. Wie sieht es dann mit den übrigen Positionen aus?
Prüfen Sie, wo sich die Haltestelle im Verhältnis zu ihrem neuen Niveau befindet.
Die Kehrschleife von OrdersTotal()-1 bis >=0