Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 375

 
Falx:

Guten Tag zusammen!

Bitte geben Sie mir einen Befehl, damit der Roboter nicht mehr als 1 Order pro Kerze eröffnet.

Auch wenn er seinen Take auf diese Kerze genommen hat - nicht, um den nächsten Auftrag auf derselben Kerze zu eröffnen.

Nun stellt sich heraus, dass - wenn die Bedingungen der Indikatoren erfüllt sind - ein Handel zu eröffnen ist.

Wenn ein Geschäft zum Mitnehmen geschlossen wird, wird sofort ein neues Geschäft auf demselben Kerzenständer eröffnet, und hier ist es für mich schon unnötig und schafft Probleme.

Ich halte es für wichtig, ein Feedback zu geben.

Es braucht eine streng so 1 Kerze - 1 Deal.

Vielen Dank im Voraus!

DerZeitpunkt der Eröffnung einer Position, der Zeitpunkt der Schließung der Position - die Kerze, bei der dieser Zeitpunkt und der Zeitpunkt der Eröffnung dieser Kerze.
 
Falx:

Guten Tag zusammen!

Bitte geben Sie mir einen Befehl, damit der Roboter nicht mehr als 1 Order pro Kerze eröffnet.

Auch wenn er seinen Take auf diese Kerze genommen hat - nicht, um den nächsten Auftrag auf derselben Kerze zu eröffnen.

Nun stellt sich heraus, dass - wenn die Bedingungen der Indikatoren erfüllt sind - ein Handel zu eröffnen ist.

Wenn ein Geschäft zum Mitnehmen geschlossen wird, wird sofort ein neues Geschäft auf demselben Kerzenständer eröffnet, und hier ist es für mich schon unnötig und schafft Probleme.

Ich halte es für wichtig, ein Feedback zu geben.

Es braucht eine streng so 1 Kerze - 1 Deal.

Vielen Dank im Voraus!

Sie können auch die Flagge verwenden.

Deklarieren Sie eine statische bool-Variable oder eine globale Variable, z. B. flag. Order eröffnet - Flagge = true, eine neue Kerze eröffnet - Flagge = false und fügen Sie diese Flagge der Bedingung der Ordereröffnung hinzu.

 
Alexey Viktorov:

Sie können auch eine Flagge verwenden.

Deklarieren Sie eine statische bool-Variable oder eine Variable auf globaler Ebene, die ein Flag sein soll. Order geöffnet - Flagge = true, eine neue Kerze geöffnet - Flagge = false und fügen Sie diese Flagge der Orderöffnungsbedingung hinzu.

Das Flag sollte im globalen Terminal gespeichert und beim Neustart wiederhergestellt werden.
 
Artyom Trishkin:
Das Flag sollte im globalen Terminal gespeichert und beim Neustart wiederhergestellt werden.

Es hängt davon ab, in welchem Zeitraum der Handel stattfindet und ob es möglich ist, das Terminal innerhalb eines Taktes neu zu starten, um einen Auftrag zu eröffnen und das Terminal neu zu starten.

Ich mag GV nicht und versuche, ohne es auszukommen. Wenn Sie einen EA starten, sollten Sie ohnehin alle Informationen über offene Aufträge sammeln. Warum also nicht den Wert des Flags beim Start wiederherstellen? Dies ist eine Möglichkeit. Die zweite Variante ist, dass der Anfangswert der Flagge die Eröffnung von Aufträgen verbietet und erst der nächste Balken die Erlaubnis erteilt. Selbst wenn wir den EA auf dem aktuellen Balken geöffnet und neu gestartet haben, verbietet uns die Flagge, bis zum nächsten Balken Aufträge zu öffnen.

Wenn Sie solche Ratschläge mit so viel Feingefühl erteilen, müssen Sie über nichts nachdenken. Die Zahl der Fragen wird also entsprechend steigen... Warum etwas selbst entscheiden... Fragen Sie im Forum und Sie erhalten eine funktionierende Version. Und das Einzige, was bleibt, ist, das Produkt auf den Markt zu bringen...

 
Alexey Viktorov:

Es hängt davon ab, in welchem Zeitraum der Handel stattfindet und ob es möglich ist, das Terminal innerhalb eines Taktes neu zu starten, um einen Auftrag zu eröffnen und das Terminal neu zu starten.

Ich mag GV nicht und versuche, ohne es auszukommen. Wenn Sie einen EA starten, sollten Sie ohnehin alle Informationen über offene Aufträge sammeln. Warum also nicht den Wert des Flags beim Start wiederherstellen? Dies ist eine Möglichkeit. Die zweite Variante ist, dass der Anfangswert der Flagge die Eröffnung von Aufträgen verbietet und erst der nächste Balken die Erlaubnis erteilt. Selbst wenn wir also eine neue Order auf dem aktuellen Balken öffnen und den EA neu starten, verbietet die Flagge die Öffnung von Orders bis zum nächsten Balken.

Wenn wir solche subtilen Ratschläge erteilen, müssen wir über nichts nachdenken. Folglich kann sich die Zahl der Fragen erhöhen. Warum etwas selbst entscheiden... Fragen Sie im Forum und Sie werden eine funktionierende Version erhalten. Und das Einzige, was bleibt, ist, das Produkt auf den Markt zu bringen...

:)
Ich habe die Angewohnheit, geradeaus zu schauen.
Für mich ist es gerade deshalb, weil die Fahnen noch wiederhergestellt werden müssen, besser, den Eröffnungsbalken der Position zu betrachten und um ihn herum zu tanzen, als sich mit Fahnen und ihrer Speicherung zu beschäftigen.
 
Artyom Trishkin:
:)
Ich habe die Angewohnheit, geradeaus zu schauen.
Ich denke, es ist besser, sich den Eröffnungsbalken einer Position anzusehen und dann zu beginnen, um ihn herumzutanzen, ohne sich um Flaggen und deren Speicherung kümmern zu müssen.

Das ist der gleiche Grund, warum wir verschiedene Frauen mögen.

Welchen Unterschied macht es, die Flagge oder den Zeitpunkt der Eröffnung einer Position? Wie man es auch dreht und wendet, man muss trotzdem etwas überprüfen...
 

Hallo! Können Sie mir sagen, wie man die Anzahl der letzten Verlustaufträge nach den Gewinnaufträgen zurückgibt?

Hier ist mein Code, was ist falsch?

int GetProfitLoss()// Verlust bei geschlossenen Aufträgen (Anzahl der letzten Verlustaufträge)

{

int Verlust = 0;

datetime lastCloseTime = 0;

int cnt = OrdersHistoryTotal();

for(int i=0; i < cnt; i++)

{

if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))

{

if (OrderSymbol() == Symbol() && OrderMagicNumber() == OrderId && lastCloseTime < OrderCloseTime())

{

lastCloseTime = OrderCloseTime();

}

wenn (AuftragGewinn()<0)

{

Verlust ++;

}

if(AuftragGewinn()>0)

{

break; // Beenden der Schleife bei der ersten profitablen Begegnung }

}

}

}

}

Rückgabe(Verlust);

}

 
Falx:

Guten Tag zusammen!

Bitte geben Sie mir einen Befehl, damit der Roboter nicht mehr als 1 Order pro Kerze eröffnet.

Auch wenn er seinen Take auf diese Kerze genommen hat - nicht, um den nächsten Auftrag auf derselben Kerze zu eröffnen.

Nun stellt sich heraus, dass - wenn die Bedingungen der Indikatoren erfüllt sind - ein Handel zu eröffnen ist.

Wenn ein Geschäft auf dem Take geschlossen wird, wird sofort ein neues Geschäft auf demselben Candlestick eröffnet, und hier wird es nicht mehr benötigt und bereitet mir Probleme.

Ich halte es für wichtig, ein Feedback zu geben.

Es braucht eine streng so 1 Kerze - 1 Deal.

Vielen Dank im Voraus!

Funktion NumberOfBarCloseLastPos().

Diese Funktion gibt die Taktnummer der letzten zu schließenden Position oder-1 zurück. Die Auswahl der zu berücksichtigenden Positionen wird durch externe Parameter festgelegt:

  • sy- Bezeichnung des Marktinstruments. Wenn dieser Parameter gesetzt ist, berücksichtigt die Funktion nur Positionen dieses Instruments. Der Standardwert -NULL-bezeichnet das aktuelle Marktinstrument.
  • tf- Zeitrahmen. Der Standardwert0 bedeutet den aktuellen Zeitrahmen.
  • op- Handelsoperation, Positionsart. Gültige Werte:OP_BUY,OP_SELL oder-1. Der Standardwert-1 bedeutet eine beliebige Position.
  • mn- Positionsbezeichner, MagicNumber. Der Standardwert-1 bedeutet einen beliebigen Bezeichner.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает номер бара закрытия последней позиции или -1.       |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   ("" или NULL - текущий символ)          |
//|    tf - таймфрейм                  (    0       - текущий таймфрейм)       |
//|    op - операция                   (   -1       - любая позиция)           |
//|    mn - MagicNumber                (   -1       - любой магик)             |
//+----------------------------------------------------------------------------+
int NumberOfBarCloseLastPos(string sy="0", int tf=0, int op=-1, int mn=-1) {
  datetime t=0;
  int      i, k=OrdersHistoryTotal();

  if (sy=="" || sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
      if (OrderSymbol()==sy) {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (t<OrderCloseTime()) t=OrderCloseTime();
            }
          }
        }
      }
    }
  }
  return(iBarShift(sy, tf, t, True));
}
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает номер бара открытия последней позиции или -1.       |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   ("" или NULL - текущий символ)          |
//|    tf - таймфрейм                  (    0       - текущий таймфрейм)       |
//|    op - операция                   (   -1       - любая позиция)           |
//|    mn - MagicNumber                (   -1       - любой магик)             |
//+----------------------------------------------------------------------------+
int NumberOfBarOpenLastPos(string sy="0", int tf=0, int op=-1, int mn=-1) {
  datetime t=0;
  int      i, k=OrdersTotal();

  if (sy=="" || sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sy) {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (t<OrderOpenTime()) t=OrderOpenTime();
            }
          }
        }
      }
    }
  }
  return(iBarShift(sy, tf, t, True));
}

Die Funktion NumberOfBarOpenLastPos().

Diese Funktion gibt die Taktnummer der zuletzt geöffneten Position oder-1 zurück. Die Auswahl der zu berücksichtigenden Positionen wird durch externe Parameter bestimmt:

  • sy- Bezeichnung des Marktinstruments. Wenn dieser Parameter gesetzt ist, berücksichtigt die Funktion nur Positionen des angegebenen Instruments. Der Standardwert -NULL-bezeichnet das aktuelle Marktinstrument.
  • tf- Zeitrahmen. Der Standardwert0 bedeutet den aktuellen Zeitrahmen.
  • op- Handelsoperation, Positionsart. Gültige Werte:OP_BUY,OP_SELL oder-1. Der Standardwert-1 bedeutet eine beliebige Position.
  • mn- Positionsbezeichner, MagicNumber. Der Standardwert-1 bedeutet einen beliebigen Bezeichner.

Überprüfen Sie dann mit diesen Funktionen die gewünschte Bedingung.

 

Bitte um Hilfe.

Ich muss die folgende Funktion zu meinem Roboter hinzufügen:

Nach der Eröffnung eines Geschäfts wird das Geschäft innerhalb von 40 Sekunden geschlossen, wenn der Gewinn mehr als 15 Pips beträgt, wenn er darunter liegt, wird der Take-Profit auf das Gewinnniveau von 15 Pips verschoben.

Ich danke Ihnen im Voraus.

 
Vladimir Zubov:

Die Funktion NumberOfBarCloseLastPos().

Diese Funktion gibt die Taktschlussnummer der letzten Position oder-1 zurück. Die Auswahl der zu berücksichtigenden Positionen wird durch externe Parameter festgelegt:

  • sy- Bezeichnung des Marktinstruments. Wenn dieser Parameter gesetzt ist, berücksichtigt die Funktion nur Positionen dieses Instruments. Der Standardwert -NULL-bezeichnet das aktuelle Marktinstrument.
  • tf- Zeitrahmen. Der Standardwert -0- gibt den aktuellen Zeitrahmen an.
  • op- Handelsoperation, Positionsart. Gültige Werte:OP_BUY,OP_SELL oder-1. Der Standardwert-1 bedeutet eine beliebige Position.
  • mn- Positionsbezeichner, MagicNumber. Der Standardwert-1 bedeutet einen beliebigen Bezeichner.

Die Funktion NumberOfBarOpenLastPos().

Diese Funktion gibt die Taktnummer der zuletzt geöffneten Position oder-1 zurück. Die Auswahl der zu berücksichtigenden Positionen wird durch externe Parameter bestimmt:

  • sy- Bezeichnung des Marktinstruments. Wenn dieser Parameter gesetzt ist, berücksichtigt die Funktion nur Positionen des angegebenen Instruments. Der Standardwert -NULL-bezeichnet das aktuelle Marktinstrument.
  • tf- Zeitrahmen. Der Standardwert0 bedeutet den aktuellen Zeitrahmen.
  • op- Handelsoperation, Positionsart. Gültige Werte:OP_BUY,OP_SELL oder-1. Der Standardwert-1 bedeutet eine beliebige Position.
  • mn- Positionsbezeichner, MagicNumber. Der Standardwert-1 bedeutet einen beliebigen Bezeichner.

Verwenden Sie dann diese Funktionen, um die gewünschte Bedingung zu prüfen.


Herzlichen Dank!

Ich werde es mir ansehen!!!