Fragen von Anfängern MQL5 MT5 MetaTrader 5 - Seite 363

 
Tapochun:
Ich glaube, Sie stellen hier nicht die richtige Frage. Erstellen Sie einen separaten Thread, fügen Sie den Code des Indikators dort an und hoffen Sie, dass jemand helfen wird. Ohne den Code... ist es unwahrscheinlich, dass Ihnen jemand helfen wird.
Indikator kauft oder verkauft nicht).
 
Beim Schreiben der ToR bin ich auf eine Situation gestoßen, in der ich nicht weiß, wie ich den Algorithmus richtig beschreiben soll. Können Sie mir sagen, ob es möglich ist, eine Position in der Arbeit des EAs teilweise zu schließen?
 
Nikolay Lampickiy:
Beim Schreiben der ToR bin ich auf eine Situation gestoßen, in der ich nicht weiß, wie ich den Algorithmus richtig beschreiben soll. Können Sie über die Möglichkeit der teilweisen Schließung einer Position in der Arbeit des EA beraten?
Um das zu tun, geben Sie im Auftrag zum Schließen einer Position ein Lot an, das kleiner ist als das Lot der Position (dies gilt für MT4, in MT5 können Sie eine entgegengesetzte Position mit einem kleineren Lot eröffnen, und sie werden sich am Ende überschneiden). Die Position mit dem verbleibenden Los wird auf dem Markt bleiben.
 
Nikolay Lampickiy:
Beim Schreiben der ToR bin ich auf eine Situation gestoßen, in der ich nicht weiß, wie ich den Algorithmus richtig beschreiben soll. Können Sie mir sagen, ob eine teilweise Schließung einer Position in der Arbeit eines EA möglich ist?
Was ist daran so kompliziert? Wenn die Position nicht gleichmäßig aufgeteilt ist (z. B. 0,09), schließen Sie den größten Teil der Position (0,05) und verschieben Sie den Stopp auf den Break-Even, dann die andere Hälfte der geschlossenen Position (0,02) und setzen Sie den Stopp auf den Gewinn und umgekehrt, bis die gesamte Position geschlossen oder ausgeglichen ist. Der Schritt kann fest sein oder aus einem beliebigen Bereich berechnet werden, je nach Handelssystem.
 
Vladimir Zubov:
Was ist daran so kompliziert? Wenn die Position nicht gleichmäßig aufgeteilt ist (z. B. 0,09), schließen Sie den größten Teil der Position (0,05) und verschieben Sie den Stopp bis zum Breakeven, dann eine weitere Schließung und wieder die Hälfte der verbleibenden (0,02) und verschieben Sie den Stopp bis zur nächsten Schließungsstufe im positiven Bereich und so weiter, bis die gesamte Position geschlossen ist oder den Stopp erreicht. Der Schritt kann fest sein oder aus einem beliebigen Bereich berechnet werden, je nach Handelssystem.

Habe ich es richtig verstanden? Die Programmiersprache MQL4 ermöglicht es, nur die Hälfte des Marktauftragsvolumens zu schließen... z. B. 10 Lose und 5 Lose schließen, wenn der Preis ein bestimmtes Niveau erreicht.

Oder ist es möglich, 1/3 zu schließen?

Oder es wäre einfacher, diese Idee in einem EA umzusetzen, indem man verschiedene Aufträge erteilt. Wenn der Preis ein bestimmtes Niveau erreicht, wird ein Auftrag geschlossen und der andere bleibt anstelle der teilweisen Schließung des Marktauftragsvolumens bestehen. Was meinen Sie dazu?

 
Vitalie Postolache:
Dazu müssen Sie im Schließungsauftrag ein Lot angeben, das kleiner ist als das Lot der Position (dies gilt für MT4, in MT5 können Sie die gegenüberliegende Position mit einem kleineren Lot eröffnen, und sie werden sich am Ende überschneiden). Die Position mit dem verbleibenden Los wird auf dem Markt bleiben.
Ich bin mit der Gegenposition nicht zufrieden... Ich danke Ihnen für Ihre Antwort.
 
Nikolay Lampickiy:

Habe ich es richtig verstanden? Die Programmiersprache MQL4 ermöglicht es, nur die Hälfte des Marktauftragsvolumens zu schließen... z. B. 10 Lose und 5 Lose schließen, wenn der Preis ein bestimmtes Niveau erreicht.

Oder ist es möglich, 1/3 zu schließen?

Oder es wäre einfacher, diese Idee in einem EA umzusetzen, indem man verschiedene Aufträge erteilt. Wenn der Preis ein bestimmtes Niveau erreicht, wird ein Auftrag geschlossen und der andere bleibt anstelle der teilweisen Schließung des Marktauftragsvolumens bestehen. Was meinen Sie dazu?

Wir können beides tun. OrderClose ermöglicht es Ihnen, das angegebene Volumen zu schließen. https://docs.mql4.com/ru/trading/orderclose

Natürlich können Sie mehrere Orders mit unterschiedlichen Gewinnniveaus eröffnen, was im Falle eines Verbindungsausfalls noch zuverlässiger ist, da die TP-Niveaus auf dem Server gespeichert sind und ausgeführt werden, wenn der Kurs sie schneidet.

OrderClose - Документация на MQL4
  • docs.mql4.com
OrderClose - Документация на MQL4
 
Vladimir Zubov:

Sie können beides tun. OrderClose erlaubt es, das Volumen, das ihm angezeigt wird, zu schließen. https://docs.mql4.com/ru/trading/orderclose

Natürlich können Sie auch mehrere Orders mit unterschiedlichen Gewinnniveaus eröffnen, was im Falle eines Verbindungsausfalls noch zuverlässiger ist, da die TP-Niveaus auf dem Server gespeichert sind und ausgeführt werden, wenn der Kurs sie überschreitet.

Danke für die Antwort)))
 

Hallo zusammen, ich stehe vor einem Problem und würde gerne die Meinung von Profis oder erfahreneren MT5-Benutzern hören. Ich habe einen Indikator und die Klasse CEventBase geschrieben, mit der der Indikator Ereignisse erzeugen kann. Wenn ich Expert Advisors ausführe, die diese Ereignisse früher oder später verarbeiten, erhalte ich bei der Ausführung in Echtzeit Fehler: 4001, 4102, 4104. Wenn sie anfangen, sich zu "stapeln", werden sie nicht mehr aufhören) Ich füge den Code der Funktion Generate bei, die eigentlich die Quelle all dieser Probleme ist. Ich würde mich sehr freuen, Ihre Meinung zu hören...)

Guten Tag an alle!


bool CEventBase::Generate(long _chart_id, int _id_ind, SEventData &_data,
                          const bool _is_custom=true)
  {
   bool is_generated = true;
   // если индекс id события в массиве не верен
   if (_id_ind < 0 || _id_ind >= aEvents.Total())
    {
     Print("Не верно задан индекс ID события");
     return (false);
    }
   // заполняем поля 
   CEvent *event = aEvents.At(_id_ind);
   this._id = (ushort)(CHARTEVENT_CUSTOM+event.id);
   this._data = _data;
   this._data.sparam = event.name; // сохраняем имя события
   
   if(_is_custom)
     {
      ResetLastError();
      is_generated = EventChartCustom(_chart_id, event.id, this._data.lparam,
                                      this._data.dparam, this._data.sparam);
      if(!is_generated && _LastError != 4104)
         {
          Print("is_generated = ", is_generated);
          PrintFormat("%s Error while generating a custom event: %d", __FUNCTION__,_LastError);
          Print( ChartSymbol(_chart_id)," ",PeriodToString(ChartPeriod(_chart_id)), "Ошибка! _chart_id =", _chart_id, " event.id = ", event.id, " data.dparam = " ,this._data.dparam, " data.sparam = ", this._data.sparam);
          
         }
     }
   return is_generated;
  }


 
dariamap:

Hallo zusammen, ich stehe vor einem Problem und würde gerne die Meinung von Profis oder erfahreneren MT5-Benutzern hören. Ich habe einen Indikator und die Klasse CEventBase geschrieben, mit der der Indikator Ereignisse erzeugen kann. Wenn ich Expert Advisors ausführe, die diese Ereignisse früher oder später verarbeiten, erhalte ich bei der Ausführung in Echtzeit Fehler: 4001, 4102, 4104. Wenn sie anfangen, sich zu "stapeln", werden sie nicht mehr aufhören) Ich füge den Code der Generate-Funktion bei, die tatsächlich die Quelle all dieser Probleme ist. Ich würde mich sehr freuen, Ihre Meinung dazu zu hören ...)

Guten Tag zusammen!

Bei der von Ihnen vorgestellten Methode handelt es sich offensichtlich um eine Transitmethode. Der Fehler liegt höchstwahrscheinlich nicht darin. Aus den von Ihnen vorgelegten Daten geht nicht klar hervor, was vor sich geht. Es kann mehrere Varianten geben:

  • Falscher Kartenbezeichner (so lautet die Fehlermeldung 4101).
  • Zu häufige Abfragen;
  • Falsche andere Parameter (z. B. Ereignis-IDs).

Nach dem Niveau des von Ihnen geschriebenen Codes zu urteilen, können wir sagen, dass der Fehler überall und zu jeder Zeit auftreten kann.