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

 
Alexey Kozitsyn:
Sagen wir es mal so. Zeigen Sie uns den Code, der die Aufträge durchläuft, und erklären Sie uns, wie das geschehen soll. Erst dann können wir sagen, was richtig und was falsch ist. Allein die Namen der Funktionen helfen Ihnen nicht, dem Ergebnis näher zu kommen.

Hallo ... danke, dass Sie sich bereit erklärt haben, mir zu helfen ... Es schien ein kleines Unterfangen zu sein, um Aufträge abzuschließen, die einfach durch Hinzufügen des gewünschten Ereignisses zu dem entsprechenden Ordner erledigt werden konnten - es stellte sich heraus, dass es nicht so einfach war ... Hier ist ein Beispielcode, den ich ausMQL4 ReferenceTrading Functions entnommen habe:

intOrdersHistoryTotal();

// Abrufen von Informationen aus der Handelsgeschichte
int i,accTotal=OrdersHistoryTotal();
for(i=0;i<accTotal;i++)
{
//---- Auswahlergebnis prüfen
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false)
{
Print("Fehler beim Zugriff auf die Verlaufsdatenbank (",GetLastError(),"));
Pause;
}
// Arbeiten mit einem Auftrag ...

}

... Die Funktion gibtdie Anzahl der geschlossenen und gelöschten Aufträge in der Historie des aktuellen Kontos zurück,das im Kundenterminal geladen ist. Die Größe der Verlaufsliste hängt von den aktuellen Einstellungen auf der Registerkarte "Kontoverlauf" des Terminals ab.

Wie diese durchsucht werden sollen und warum das nötig ist, ist mir nicht klar... Vielleicht ist es notwendig, sie auswendig zu lernen und sie zu verwerfen, damit sie nicht im Weg sind?

Wir sollen neu geschlossene Aufträge in dem Moment, in dem sie geschlossen werden, mit einem kurzen Piepton signalisieren. Alle Aufträge, die in meinem Client-Terminal geschlossen werden sollen, sind nur von zwei Typen: durchTrailStopLoss undTakeProfit-Mittelung. Beim Schließen einer Order (einer Gruppe von Orders), egal in welche Richtung (Verkauf oder Kauf), sollten sie nur durchStopLossoderTakeProfitgetrennt undan die entsprechendePlaySound-Funktiongesendet werden.

Справочник MQL4
Справочник MQL4
  • docs.mql4.com
Справочник MQL4
 
bablusut:

Hallo ... danke, dass Sie sich bereit erklärt haben, mir zu helfen ... Es schien ein kleines Unterfangen zu sein, um Aufträge abzuschließen, die einfach durch Hinzufügen des gewünschten Ereignisses zu dem entsprechenden Ordner erledigt werden konnten - es stellte sich heraus, dass es nicht so einfach war ... Hier ist ein Beispielcode, den ich ausMQL4 ReferenceTrading Functions entnommen habe:

intOrdersHistoryTotal();

// Abrufen von Informationen aus der Handelsgeschichte
int i,accTotal=OrdersHistoryTotal();
for(i=0;i<accTotal;i++)
{
//---- Auswahlergebnis prüfen
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false)
{
Print("Fehler beim Zugriff auf die Verlaufsdatenbank (",GetLastError(),"));
Pause;
}
// Arbeiten mit einem Auftrag ...

}

... Die Funktion gibtdie Anzahl der geschlossenen und gelöschten Aufträge in der Historie des aktuellen Kontos zurück,das im Kundenterminal geladen ist. Die Größe der Verlaufsliste hängt von den aktuellen Einstellungen auf der Registerkarte "Kontoverlauf" des Terminals ab.

Wie diese durchsucht werden sollen und warum das nötig ist, ist mir nicht klar... Vielleicht ist es notwendig, sie auswendig zu lernen und sie zu verwerfen, damit sie nicht im Weg sind?

Wir sollen neu geschlossene Aufträge in dem Moment, in dem sie geschlossen werden, mit einem kurzen Piepton signalisieren. Alle Aufträge, die in meinem Client-Terminal geschlossen werden sollen, sind nur von zwei Typen: durchTrailStopLoss undTakeProfit-Mittelung. Beim Schließen einer Order (einer Gruppe von Orders), egal in welche Richtung (Verkauf oder Kauf), sollten sie nur durch denStopLoss- oderTakeProfit-Schließbefehlgetrenntund an die entsprechendePlaySound-Funktiongesendet werden.

Die Reihenfolge sollte in umgekehrter Reihenfolge durchsucht werden, da 0 die allererste ist. accTotal-1 ist die letzte. Merken Sie sich in diesem Code nach "// work with order" den Kommentar und prüfen Sie, ob es einen abschließenden Kommentar zum SL oder TP gibt.
 
Alexey Kozitsyn:
Die Aufträge sind in umgekehrter Reihenfolge zu suchen, da 0 der allererste und accTotal-1 der letzte ist. In diesem Code ist nach "// work with order" der Kommentar zu beachten und zu prüfen, ob es einen abschließenden Kommentar für den SL oder TP gibt.

intOrdersHistoryTotal();

// Abrufen von Informationen aus der Handelsgeschichte
int i,accTotal=OrdersHistoryTotal();
for(i=0;i<accTotal;i++)
{
//---- Auswahlergebnis prüfen
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false)
{
Print("Fehler beim Zugriff auf die Verlaufsdatenbank (",GetLastError(),"));
Pause;
}
// Arbeiten mit einem Auftrag ...

}

stringBestellkommentar();

Kommentar zur Zeichenkette;
if(OrderSelect(10,SELECT_BY_TICKET)==false)
{
Print("OrderSelect() hat einen Fehler zurückgegeben",GetLastError());
zurück(0);
}
comment=OrderComment();

// ...

Danke für die Antwort ... Nach Hinzufügen des Codes der FunktionOrderComment(MQL4Trading FunctionsReference), die den Kommentar einer mit der Funktion OrdersHistoryTotal ausgewählten Order zurückgibt, sieht der Code wie folgt aus ... Und haben wir nicht eine Funktion, die neue abgeschlossene Aufträge in der Terminal-Historie verfolgt? "0 - allererste. accTotal-1 - letzte" - wir meinen "erste geschlossene" und "letzte geschlossene" in der Terminal-Historie, ist es nach Zeit ...? habe ich es richtig verstanden?


Справочник MQL4
Справочник MQL4
  • docs.mql4.com
Справочник MQL4
 
bablusut:

aber haben wir keine Funktion, um neue abgeschlossene Aufträge in der Terminal-Historie zu verfolgen?

Es gibt keine Standardlösungen.

  int i,accTotal=OrdersHistoryTotal();
  string comment;
  for(i=accTotal-1;i>=0;i++)
    {
     //---- check selection result
     if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false)
       {
        Print("Ошибка при доступе к исторической базе (",GetLastError(),")");
        break;
       }
     // работа с ордером ...
     comment = OrderComment();
     // Проверяем, есть ли в комментарии признак закрытия ордера по ТП или СЛ
    }
Um das Vorhandensein einer Linie in einer anderen zu bestimmen, verwenden Sie die Funktionen der Arbeit mit Linien.
 
Alexey Kozitsyn:

Es gibt keine Standardlösungen.

  int i,accTotal=OrdersHistoryTotal();
  string comment;
  for(i=accTotal-1;i>=0;i++)
    {
     //---- check selection result
     if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false)
       {
        Print("Ошибка при доступе к исторической базе (",GetLastError(),")");
        break;
       }
     // работа с ордером ...
     comment = OrderComment();
     // Проверяем, есть ли в комментарии признак закрытия ордера по ТП или СЛ
    }
Um festzustellen, ob eine Zeichenkette in der anderen vorkommt, verwenden Sie Zeichenkettenfunktionen.

Ich danke Ihnen ... Sie meinen die Funktion StringFind = Suche nach einem Teilstring in einer Zeichenkette.

int StringFind(
string string_value, //die Zeichenfolge, nach der gesucht wird
string match_substring, //wonach wir suchen
int start_pos=0 //wo die Suche beginnen soll

);

Parameter
string_value
[in] Zeichenfolge, in der gesucht werden soll.
match_substring
[in] Zu durchsuchende Teilzeichenkette Match_substring.
start_pos=0
[in] Position in der Zeichenkette, an der die Suche beginnen soll.
Zurückgegebener Wert

Gibt die Positionsnummer in der Zeichenkette zurück, an der die zu suchende Teilzeichenkette beginnt, oder -1, wenn keine Teilzeichenkette gefunden wird.

... oderStringCompare Funktion -Vergleicht zwei Strings?...


StringCompare - Строковые функции - Справочник MQL4
StringCompare - Строковые функции - Справочник MQL4
  • docs.mql4.com
StringCompare - Строковые функции - Справочник MQL4
 
bablusut:

Ich danke Ihnen ... Sie meinen die Funktion StringFind = Suche nach einem Teilstring in einer Zeichenkette.

int StringFind(
string string_value, // die gesuchte Zeichenkette
string match_substring, //wonach wir suchen
int start_pos=0 //wo die Suche beginnen soll

);

Parameter
string_value
[in] Zeichenfolge, in der gesucht werden soll.
match_substring
[in] Zu durchsuchende Teilzeichenkette Match_substring.
start_pos=0
[in] Position in der Zeichenkette, an der die Suche beginnen soll.
Zurückgegebener Wert

Gibt die Positionsnummer in der Zeichenkette zurück, an der die zu suchende Teilzeichenkette beginnt, oder -1, wenn keine Teilzeichenkette gefunden wird.

...


Das stimmt.
 
Alexey Kozitsyn:
Richtig.

Ich danke Ihnen ... sieht der Code dann wie folgt aus:

 int i,accTotal=OrdersHistoryTotal();
  string comment;
  for(i=accTotal-1;i>=0;i++)
    {
     //---- check selection result
     if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false)
       {
        Print("Ошибка при доступе к исторической базе (",GetLastError(),")");
        break;
       }
     // работа с ордером ...
     comment = OrderComment();
     // Проверяем, есть ли в комментарии признак закрытия ордера по ТП или СЛ
    }

int  StringFind(
   string  string_value,        // строка, в которой ищем
   string  match_substring,     // что ищем
   int     start_pos=0          // с какой позиции начинать поиск

   ); 



 

 
bablusut:

Ich danke Ihnen ... der Code hat dann die Form von:

 int i,accTotal=OrdersHistoryTotal();
  string comment;
  for(i=accTotal-1;i>=0;i++)
    {
     //---- check selection result
     if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false)
       {
        Print("Ошибка при доступе к исторической базе (",GetLastError(),")");
        break;
       }
     // работа с ордером ...
     comment = OrderComment();
     // Проверяем, есть ли в комментарии признак закрытия ордера по ТП или СЛ
    }

int  StringFind(
   string  string_value,        // строка, в которой ищем
   string  match_substring,     // что ищем
   int     start_pos=0          // с какой позиции начинать поиск

   ); 



 

Nein. Versuchen Sie zu verstehen, was Sie da tun. Was Sie geschrieben haben, ist nur eine Prototyp-Funktion (d.h. nur eine Beschreibung dessen, was sie tut). Sie haben also gerade einen Teil der Dokumentation herausgerissen. Sie müssen es benutzen. Sie müssen also Ihre eigenen Werte an die Stelle der Argumente setzen. Und die Funktion gibt das Ergebnis zurück. Dann muss dieses Ergebnis verarbeitet werden.
 

Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien

Fragen von Anfängern

A1exPit, 2016.11.30 22:14

Können Sie mir sagen, OrderSelect von SELECT_BY_POS welche 0 Bestellung ist die letzte oder die erste? Ich versuche es in beide Richtungen und umgekehrt, aber die Fehlermodifikation #0 fliegt raus.

 
Vladimir Karputov:

Schauen wir uns den Code an.
Grund der Beschwerde: