Jede Anfängerfrage, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Nirgendwo ohne dich - 6. - Seite 100

 
alexey1979621:
Hallo zusammen! Hier ist die Frage. Wie misst man den Abstand zwischen Hoch und Tief der ersten, zweiten und dritten Kerze und schreibt die Bedingung vor, dass dieser Abstand bei jeder Kerze nicht kleiner als, sagen wir, 10 Punkte sein darf. Ich danke Ihnen im Voraus.

Hier sind die Marktumfeldvariablen, die Ihnen helfen https://docs.mql4.com/ru/predefined/variables
 
artmedia70:
Aufstand der Roboter... :)


Aha ha ha. Yosuf, Cyborg schickt dich... )))))))
 
artmedia70:

Hier ist ein EA zum Testen der Funktion. Sie enthält die Funktion selbst und ihren Aufruf. Vor dem Aufruf müssen Sie eine Nachricht vorbereiten, die bis zu vier Zeilen lang sein kann. Wenn ich mich richtig erinnere, sollte die Länge jeder Zeile 64 Zeichen nicht überschreiten. Aus diesem Grund habe ich eine Nachricht in mehrere Zeilen aufgeteilt. Jede Zeile einer Nachricht kann in einer anderen Farbe ausgegeben werden. Im Code ist das ziemlich klar - zuerst bereiten wir die Nachrichtenzeilen vor, dann rufen wir die Funktion auf. Ich habe dort nicht viel kommentiert - ich habe es vor langer Zeit in einem Rutsch geschrieben. Jetzt habe ich schon vergessen, wofür es da ist. Wenn ich Fragen habe, werde ich mich erinnern, aber ich erinnere mich nur noch an das Nötigste.

Und einen Truthahn:

So ist das nun mal... Ich hoffe, Sie haben den Dreh raus.

Natürlich kann ich ein Underlay machen, anstatt es auf dem Hauptchart im Fenster des Indikators auszugeben, aber ich bin zu faul ... :)



Artem, ich habe mir deinen Code angesehen, der Truthahn ist der Hammer: )))). Im Wesentlichen ist alles klar mit mehr, obwohl ich ein paar Punkte in der Umsetzung gesehen haben, ein bisschen anders als das, was ich getan hätte, aber das ist nur eine Kleinigkeit.

Das Interessante daran ist Folgendes. Nur das, was im Experten steht, wird im Truthahn gedruckt. Aber wie können Sie sie zu Ihrem Vorteil nutzen?

 
hoz:


Artem, ich habe mir deinen Code angesehen, der Truthahn ist der Hammer: )))). Im Wesentlichen ist alles klar, mit mehr, obwohl ich ein paar Punkte in der Umsetzung gesehen haben, ein bisschen anders als das, was ich getan haben würde, aber das ist nur Kleinigkeiten.

Interessant ist Folgendes. Nur das, was im Expert Advisor steht, wird auf der Drehscheibe gedruckt. Aber wie kann ich sie zu meinem Vorteil nutzen?

Ich verstehe die Frage nicht. Sie ersetzt die Funktion Print(). Gibt alle Meldungen in das Indikatorfenster aus. Sie können für jede Zeile einer Nachricht eine Farbe festlegen (wie die Priorität der Nachricht). Bequemer als Drucken. Das ist der einzige Nutzen.
 

Es ist eine Funktion. Dieser Experte soll nur zeigen, was die Funktion bewirkt. Verwenden Sie also diese Funktion, um Ihre Nachrichten aus Ihrem EA anzuzeigen.

Dieser Experte zeigt nur, wie man es benutzt.

 
artmedia70:

Es ist eine Funktion. Dieser Experte soll nur zeigen, was die Funktion bewirkt. Verwenden Sie also diese Funktion, um Ihre Nachrichten aus Ihrem EA anzuzeigen.

Dieser Experte zeigt nur, wie man es benutzt.


Obwohl, ja... Es ist eine Funktion... Ich habe das Wichtigste übersehen, als ich es herausfinden wollte :(
 

Es gibt ein neues Kopfproblem. Hier ist, was man dafür tun muss:

1. Es gibt eine Reihe von Aufträgen auf dem Markt, d.h. es gibt ständig Markt- und schwebende Aufträge auf dem Markt.

2. Zu einem bestimmten Zeitpunkt, wenn die letzte bisher geöffnete Order durch einen TP geschlossen wird, müssen wir alle geöffneten Orders schließen und auch alle schwebenden Orders löschen.

Ich habe es so gemacht (ich habe es in die start() -Funktion eingebaut):

for (int ord=OrdersTotal()-1; ord>=0; ord--)
   {
      if (!OrderSelect(ord,SELECT_BY_POS)) continue;
      if (OrderMagicNumber() != i_magic) continue;
      if (OrderSymbol() != Symbol()) continue;
        
      g_ticket = OrderTicket();
      g_type = OrderType();
              
      // Блок модификации ордеров       
      if (i_sl != 0 || i_tp != 0)
      {
         if (OrderStopLoss() == 0 && OrderTakeProfit() == 0)
         {
            OrdersModifyer(g_ticket);
         }
      }
      // Закрытие всех ордеров, если последний ордер закрыт
      if (GetLastOrderState() != 0)              
      {
          if (g_type > 1)
          {
              DeletePendingOrders(g_ticket);
          }
          else
          {
              CloseMarketOrders(g_ticket);
          }
      }
   }

Die Funktion GetLastOrderState() prüft, ob die letzte Bestellung abgeschlossen ist:

//+-------------------------------------------------------------------------------------+
//| Получаем состояние последней позиции (Открыта или закрыта)                          |
//+-------------------------------------------------------------------------------------+
datetime GetLastOrderState()
{
   datetime lastOrderCloseTime = -1,                   // Время закрытия последнего ордера
            lastOrderOpenTime = -1;                    // Время открытия последнего ордера
   
   for (int i=OrdersTotal()-1; i>=0; i--)
   {
      if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;
      if (OrderMagicNumber() != i_magic) continue;
      if (OrderSymbol() != Symbol()) continue;
  
      if (lastOrderOpenTime < OrderOpenTime())
          lastOrderOpenTime = OrderOpenTime();
   }
   Comment("Время открытия последнего открытого ордера = ", lastOrderOpenTime);
   for (int h=OrdersHistoryTotal()-1; i>=0; i--)
   {
      if (!OrderSelect(h, SELECT_BY_POS, MODE_HISTORY)) continue;
      if (OrderMagicNumber() != i_magic) continue;
      if (OrderSymbol() != Symbol()) continue;
      
      if (OrderOpenPrice() == lastOrderOpenTime)
          lastOrderCloseTime = OrderCloseTime();
   }
  // Comment("Время закрытия последнего открытого ордера = ", lastOrderCloseTime);
   return (lastOrderCloseTime);
}

Und dann Funktionen zum Löschen ausstehender und geschlossener Marktaufträge. Ich sehe, dass es irgendwie nicht richtig funktioniert. Ist meine Funktion in Ordnung?

Ich verstehe, dass die Funktion nach Idee geordnet ist. Aber die Logik ist hier nicht in Ordnung. Haben Sie eine Meinung zu diesem Thema? Es stellt sich heraus, dass in jedem Fall, auch wenn keine der EA-Aufträge durch TP geschlossen wurde, alles in einem Wimpernschlag geschlossen wird, nachdem es durch das Signal geöffnet wurde...

 
hoz:

Aha ha ha. Yosuf, Cyborg schickt dich... )))))))
Dennoch, ein guter, reaktionsschneller Proger. Als ob alle Probleme seine sind, für die das Schicksal zurückzahlen wird, ohne Frage, oder, kommen über den Gral.
 
yosuf:
Dennoch, ein guter, reaktionsschneller Proger. Als ob alle Probleme waren seine, für die das Schicksal wird belohnen, ohne Frage, oder, kommen über den Gral.


Aber es gab keine Konkretisierung und somit auch keine Frage. Ich weiß nicht, was ich antworten soll.... Sie müssen versuchen, die Situation so klar wie möglich zu erklären, um eine Antwort zu erhalten.
 
hoz:

Es gibt ein neues Kopfproblem. Hier ist, was man dafür tun muss:

1. Es gibt eine Reihe von Aufträgen auf dem Markt, d.h. es gibt ständig Markt- und schwebende Aufträge auf dem Markt.

2. Zu einem bestimmten Zeitpunkt, wenn die letzte bisher geöffnete Order durch einen TP geschlossen wird, müssen wir alle geöffneten Orders schließen und auch alle schwebenden Orders löschen.

Ich habe es so gemacht (ich habe es in die start() -Funktion eingebaut):

Die Funktion GetLastOrderState() prüft, ob die letzte Bestellung abgeschlossen ist:

Und dann Funktionen zum Löschen ausstehender und geschlossener Marktaufträge. Ich sehe, dass es irgendwie nicht richtig funktioniert. Ist meine Funktion in Ordnung?

Ich verstehe, dass die Funktion nach Idee geordnet ist. Aber die Logik ist hier nicht in Ordnung. Haben Sie eine Meinung zu diesem Thema? Es stellt sich heraus, dass in jedem Fall, auch wenn keine der EA-Aufträge bei TP geschlossen wurde, alles blitzschnell geschlossen wird, nachdem es durch das Signal geöffnet wurde...

Victor, nehmen Sie die bewährte Funktion von Kim, die prüft, ob eine Position durch TP geschlossen ist:

isCloseLastPosByTake - Gibt ein Flag zum Schließen der letzten Position auf dem Take zurück. Finden Sie in Nur nützliche Funktionen
Und dann alles schließen.