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.
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?
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.
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?...
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.
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( stringstring_value, // строка, в которой ищем stringmatch_substring, // что ищем intstart_pos=0// с какой позиции начинать поиск
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( stringstring_value, // строка, в которой ищем stringmatch_substring, // что ищем intstart_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.
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.
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 Handelsgeschichteint 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.
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 Handelsgeschichteint 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 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 Handelsgeschichteint 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?
aber haben wir keine Funktion, um neue abgeschlossene Aufträge in der Terminal-Historie zu verfolgen?
Es gibt keine Standardlösungen.
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();
// Проверяем, есть ли в комментарии признак закрытия ордера по ТП или СЛ
}
Es gibt keine Standardlösungen.
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();
// Проверяем, есть ли в комментарии признак закрытия ордера по ТП или СЛ
}
Ich danke Ihnen ... Sie meinen die Funktion StringFind = Suche nach einem Teilstring in einer Zeichenkette.
);
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?...
Ich danke Ihnen ... Sie meinen die Funktion StringFind = Suche nach einem Teilstring in einer Zeichenkette.
);
Gibt die Positionsnummer in der Zeichenkette zurück, an der die zu suchende Teilzeichenkette beginnt, oder -1, wenn keine Teilzeichenkette gefunden wird.
...
Richtig.
Ich danke Ihnen ... sieht der Code dann wie folgt aus:
int i,accTotal=OrdersHistoryTotal();
int StringFind(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();
// Проверяем, есть ли в комментарии признак закрытия ордера по ТП или СЛ
}
string string_value, // строка, в которой ищем
string match_substring, // что ищем
int start_pos=0 // с какой позиции начинать поиск
);
Ich danke Ihnen ... der Code hat dann die Form von:
int i,accTotal=OrdersHistoryTotal();
int StringFind(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();
// Проверяем, есть ли в комментарии признак закрытия ордера по ТП или СЛ
}
string string_value, // строка, в которой ищем
string match_substring, // что ищем
int start_pos=0 // с какой позиции начинать поиск
);
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.