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

 
Valeriy Yastremskiy:

Ich danke Ihnen. Ich werde es ausprobieren. Ich weiß nicht, ob es funktionieren wird.)

 
Ich habe offene und geschlossene Aufträge.
1. Wenn ich einen Auftrag eröffne, muss ich sein Ticket in ein Array schreiben, wenn das Array nicht belegt ist (wahrscheinlich =0), damit ich später im Overshoot davon berichten kann.
2. Nachdem der Auftrag geschlossen wurde (er darf nicht geschlossen werden), sollte ein Bericht über den Gewinn der geschlossenen Aufträge gestartet werden. Wenn ein bestimmter Gewinn erreicht wird, d.h.: Gewinn + Take Profit >= Gewinn einer offenen Order (nennen wir sie Order 123), die früher als alle anderen eröffnet wurde, oder mit einem maximalen Verlust (ich habe mich noch nicht entschieden).
3. wenn die Bedingungen erfüllt sind: "Summe des Gewinns + Taka-Gewinn >= Gewinn der offenen Order (nennen wir sie Order 123)", wird die Order 123 geschlossen und das Array wird auf Null gesetzt (wahrscheinlich wird es = 0).

1. Wenn Sie einen EA platzieren, haben Sie bereits offene und geschlossene Aufträge, die Sie berücksichtigen möchten, oder nicht und der EA startet immer ohne offene Aufträge und berücksichtigt keine bereits geschlossenen Aufträge?

2. Das ist überhaupt nicht klar. Sie haben mehrere Aufträge. Wenn ein Auftrag geschlossen wird, wird der Gesamtgewinn berechnet und es werden die Gewinndaten des geschlossenen Auftrags angezeigt. Und es gibt die Daten über die Gewinne der nicht abgeschlossenen Aufträge; Sie können sie berechnen. Was wird mit was verglichen. Wir haben zum Beispiel 3 Aufträge. 1 ist geschlossen, 2 wird gerade geschlossen, 3 ist offen. Wir haben die Profile Pr1, Pr2 und das geschätzte Pr3. Wir vergleichen, was wir haben, mit was. Wir verstehen, dass wir die Provisionen und Swaps nicht berücksichtigen, wenn der Auftrag nicht geschlossen wird.

3. Wenn Sie das Array mit den Tickets auf Null setzen, was passiert dann? Die Marktaufträge bleiben auf dem Markt. Wie würden Sie sie schließen?

 
Oksana_Timakova:
Frage: Wie behalte ich den Wert von High bar aund Low bar b bei, umsie mit einer Indikatorlinie zu verbinden?
Muss ich dafür zwei zusätzliche Arrays erstellen?
Ja. Puffer-Arrays.
 
Valeriy Yastremskiy:
Ja. Puffer-Arrays.
Es ist also dasselbe wie bei ZigZag. Und man muss eine spezielle Funktion anwenden, um nicht zwei von ihnen zu zeichnen?
 
Oksana_Timakova:
Es wird also wie in ZigZag. Und man muss eine spezielle Funktion anwenden, um nicht zwei von ihnen zu zeichnen?
Der Linientyp ist derselbe. Ich verstehe nicht, was nicht zeichnen würde. Sie deklarieren 2 Puffer-Arrays. Sie legen die Eigenschaften fest. Dies ist die Art der Linie und die Farbe der Dicke. Und Sie ordnen das erste Kurshoch und das zweite Kurstief barweise der Zeitreihe zu.
 
Valeriy Yastremskiy:

1. Wenn Sie einen EA platzieren, haben Sie bereits offene und geschlossene Aufträge, die Sie berücksichtigen möchten oder nicht, und jedes Mal, wenn der EA ohne offene Aufträge startet und keine zuvor geschlossenen Aufträge berücksichtigt?

2. Das ist überhaupt nicht klar. Sie haben mehrere Aufträge. Wenn ein Auftrag geschlossen wird, wird der Gesamtgewinn berechnet und es werden die Gewinndaten des geschlossenen Auftrags angezeigt. Und es gibt die Daten über die Gewinne der nicht abgeschlossenen Aufträge; Sie können sie berechnen. Was wird mit was verglichen. Wir haben zum Beispiel 3 Aufträge. 1 ist geschlossen, 2 wird gerade geschlossen, 3 ist offen. Wir haben die Profile Pr1, Pr2 und das geschätzte Pr3. Wir vergleichen was mit was. Wir verstehen, dass wir die Provisionen und Swaps nicht berücksichtigen, wenn der Auftrag nicht geschlossen wird.

3. Wenn Sie das Array mit den Tickets auf Null setzen, was passiert dann? Die Marktaufträge bleiben auf dem Markt. Wie kann man sie schließen?

Noch einmal ))))

Wir haben offene Aufträge, nehmen wir an, 5 Aufträge, die alle negativ sind. Der erste (123) mit 0,5 Losen ist ins Minus gefallen. Wir eröffnen eine neue Order (456) mit 0,1 Lot, das Ticket dieser Order wird in das Array geschrieben, wenn sie eröffnet wird. Dann fahren wir mit einer weiteren Serie von Aufträgen mit demselben Los fort; wir erzielen einige Gewinne und verlieren einige. Aber Auftrag 123 bleibt negativ und offen. Sobald der Gewinn aller geschlossenen Aufträge nach dem Auftrag 456 (der ebenfalls geschlossen ist) höher ist als der Gewinn des Auftrags 123, suchen wir den Auftrag 123, da er der erste noch offene Auftrag ist, schließen ihn und löschen das Array auf Null.

Wenn wir mehrere offene Aufträge haben, eröffnen wir unter bestimmten Bedingungen einen weiteren. Angenommen, wenn Auftragssumme>=5

Auftragsende (Ticket 456)

wenn die Bestellung erfolgreich geöffnet wurde

wenn das Feld nicht belegt ist

Ticket 456 wird in das Array geschrieben

Order 456 wurde mit Gewinn geschlossen (unabhängig von Gewinn oder Verlust), danach wurden andere Orders geöffnet und geschlossen, aber das Array speichert Ticket 456.


CalCloseProfi () - diese Funktion prüft den Gewinn der geschlossenen Aufträge

geht die abgeschlossenen Aufträge durch Magie, Kauf, Verkauf durch, beginnend mit dem Auftrag mit Ticket 456 (aus dem Array) und aufwärts, und zählt ihren Gewinn


FirstOrder() - diese Funktion sucht nach der ersten offenen Bestellung (sie sollte 123 finden)

Wenn dasCalCloseProfi-Profil> FirstOrder ist, dann schließe Auftrag 123 und setze das Array auf Null, so dass es dort wieder schreiben kann, wenn die Bedingungen erfüllt sind.


Ich weiß nicht, wie ich es sonst erklären soll)

Die Bedingungen, unter denen diese Funktion ausgeführt wird, kann ich schreiben, aber ich bin nicht mit Arrays konfrontiert.
Ich brauche ein Beispiel, wie man Informationen in das Array, nämlich OrederTicket, wenn geöffnet, und wie man es danach zu erhalten.
Es ist wünschenswert, ein Doppel-Array zu verwenden und schreiben Sie den Zauberer in einem Teil davon, so dass bei der Arbeit an einem Konto auf verschiedene Einstellungen nicht gemischt werden (oder vielleicht nicht, ich bin nicht gut in Arrays).

Vielen Dank im Voraus

 
makssub:

Noch einmal ))))

Wir haben offene Aufträge, sagen wir 5, alle negativ. Die allererste (123) mit 0,5 Losen war negativ. Wir eröffnen eine neue Order (456) mit 0,1 Lot, das Ticket dieser Order wird in das Array geschrieben, wenn sie eröffnet wird. Dann fahren wir mit einer weiteren Serie von Aufträgen mit demselben Los fort; wir erzielen einige Gewinne und verlieren einige. Aber Auftrag 123 bleibt negativ und offen. Sobald der Gewinn aller geschlossenen Aufträge nach dem Auftrag 456 (der ebenfalls geschlossen ist) höher ist als der Gewinn des Auftrags 123, suchen wir den Auftrag 123, da er der erste noch offene Auftrag ist, schließen ihn und löschen das Array auf Null.

Wenn wir mehrere offene Aufträge haben, eröffnen wir unter bestimmten Bedingungen einen weiteren. Angenommen, wenn Auftragssumme>=5

Auftragsende (Ticket 456)

wenn die Bestellung erfolgreich geöffnet wurde

wenn das Feld nicht belegt ist

Ticket 456 wird in das Array geschrieben

Order 456 wurde mit Gewinn geschlossen (unabhängig von Gewinn oder Verlust), danach wurden andere Orders geöffnet und geschlossen, aber das Array speichert Ticket 456.


CalCloseProfi () - diese Funktion prüft den Gewinn der geschlossenen Aufträge

geht die abgeschlossenen Aufträge durch Magie, Kauf, Verkauf durch, beginnend mit dem Auftrag mit Ticket 456 (aus dem Array) und aufwärts, und zählt ihren Gewinn


FirstOrder() - diese Funktion sucht nach der ersten offenen Bestellung (sie sollte 123 finden)

Wenn dasCalCloseProfi-Profil> FirstOrder ist, dann schließe Auftrag 123 und setze das Array auf Null, so dass es dort wieder schreiben kann, wenn die Bedingungen erfüllt sind.


Ich weiß nicht, wie ich es sonst erklären soll)

Die Bedingungen, unter denen diese Funktion ausgeführt wird, kann ich schreiben, aber ich bin nicht mit Arrays konfrontiert.
Ich brauche ein Beispiel, wie man die Informationen in das Array, nämlich OrederTicket beim Öffnen, und wie man sie danach abrufen kann.
Es ist wünschenswert, ein Doppel-Array zu verwenden und schreiben Sie den Zauberer in einem Teil davon, so dass bei der Arbeit an einem Konto auf verschiedene Einstellungen nicht gemischt werden (oder vielleicht nicht, ich bin nicht gut in Arrays).

Vielen Dank im Voraus

Schreiben Sie die Bedingungen für die Funktionen auf.
 

Guten Tag. Können Sie mir sagen, warum es einen Fehler gibt: array out of range in '.......' (152,41)


ticket = OrderSend (Symbol(), OP_SELL, lastlot, Bid, Slippage, 0, tpl, Magic, 0, Red);
if (ticket <1)
{
Print("Fehler beim Öffnen des Verkaufs");
}
if (ticket >1 && SaveTick[1] <= 0 && SaveTick[0] == Magic)
{
FindTicket();
Print(" Ticketbestellung: ", FindTicket(), " Order Array: ", SaveTick[1], " Array Magic: ", SaveTick[0]);
}

int FindTicket()
{
int oldticket;
int tick=0;
ticket=0;
ArrayResize( SaveTick, 2 );
for(int cnt = OrdersTotal ()-1; cnt>=0; cnt--)
{
if(OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES))
{
if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
{
oldticket = OrderTicket();
if (oldticket > ticket)
{
ticket = oldticket;
tick = OrderTicket();
SaveTick[1] = tick;
SaveTick[0] = Magic;
}
}
}
}
return(tick);
}

 
makssub #:

Guten Tag. Können Sie mir sagen, warum es einen Fehler gibt: array out of range in '.......' (152,41)


ticket = OrderSend (Symbol(), OP_SELL, lastlot, Bid, Slippage, 0, tpl, Magic, 0, Red);
            if (ticket <1)
            {
               Print("Ошибка открытия на продажу");
            }
               if (ticket >1 && SaveTick[1] <= 0 && SaveTick[0] == Magic)
            {
               FindTicket();
               Print(" Тикет ордера: ", FindTicket(), " Массив ордера: ", SaveTick[1], " Магик массива: ", SaveTick[0]);
    }

int FindTicket()
   {
   int oldticket;
   int tick=0;
   ticket=0;
   ArrayResize( SaveTick, 2 );
   for(int cnt = OrdersTotal ()-1; cnt>=0; cnt--)
      {
      if(OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES))
         {
         if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
            {
            oldticket = OrderTicket();
            if (oldticket > ticket)
               {
               ticket = oldticket;
               tick = OrderTicket();
               SaveTick[1] = tick;
               SaveTick[0] = Magic;
               }
            }
         }
      }
   return(tick);
  }              

Fügen Sie den Code korrekt ein, Alt S oder über das Symbol, Hinweis Code.

Warum brauchen Sie dasSaveTick-Array?

Sie verwenden nur 2 Elemente des Arrays. Ersetzen Sie sie durch globale oder statische Variablen, wenn Sie sie in einer Funktion deklarieren.

Es ist nicht sinnvoll, ein Array für 2 Variablen zu verwenden.

Und Sie scheinen Arrays aufzurufen, bevor die FunktionFindTick() aufgerufen wird, bei der die Größe des SaveTick-Arrays festgelegt wird. Und es gibt eine Überschreitung des Feldes.

 
Funktioniert es nicht mehr 🤖?
Grund der Beschwerde: