Vielen Dank, Sergey, für deine Antwort! Ihre Antwort hat mich noch mehr verblüfft. Wie kann das sein? Wenn ich das Skript ausführe, werden alle eingestellten schwebenden Aufträge abgefragt. Wie in der Abbildung zu sehen ist, gibt es zwei von ihnen auf dem Diagramm, und zur gleichen Zeit ist ein Ticket ausgewählt und das andere nicht? Das ist nicht ganz klar.
Können Sie das näher erläutern?
Ich stelle diese Frage nicht aus reiner Neugierde, sondern um das Selbststudium fortzusetzen.
Mit freundlichen Grüßen, Vladimir.
Hier haben Sie eine Schleife, in der Sie den Iterator i vom maximalen Index auf 0 ändern. Was passiert darin? Nun, folgendes passiert: Der erste Befehl, den Sie versuchen, den Parameter ORDER_SYMBOL zu erhalten. Aber aus welchem Auftrag wollen Sie es holen, denn der Auftrag wird drei Zeilen weiter unten ausgewählt!
Sergey Gridnev #: Sie haben also eine Schleife, in der Sie den Iterator i vom Maximalindex auf 0 ändern. Was geht darin vor? Nun, es passiert folgendes: Der erste Befehl, den Sie versuchen, den Parameter ORDER_SYMBOL zu erhalten. Aber aus welcher Reihenfolge versuchen Sie es zu holen, denn die Reihenfolge wird drei Zeilen weiter unten ausgewählt!
Vielen Dank, Sergey, für die sehr ausführliche und verständliche Erklärung! Ich habe die Zeile mit dem Ticket für ausstehende Aufträge direkt nach dem Start des Zyklus eingefügt und alles hat gut funktioniert.
Ja ... Passen Sie auf und passen Sie noch einmal auf. Das ist es, was ich wirklich vermisse. Nochmals vielen Dank!
Heute bin ich auf zwei weitere Probleme gestoßen, die ich nicht verstehe, aber in einem Code, der vollständig aus der MQL5-Referenz stammt. Diesmal habe ich nichts selbst geschrieben, sondern einfach ein fertiges Beispiel genommen.
Ich öffne MQL5 Referenz / Konstanten, Aufzählungen und Strukturen / Datenstrukturen / Struktur einer Handelsanfrage. Ich finde sie dort:
Struktur des Handelsantrags
Modify Pending Order
Торговый приказ на модификацию уровней цен отложенного ордера. Требуется указание 7 полей:
action
order
price
sl
tp
type_time
expiration
Пример торговой операции TRADE_ACTION_MODIFY для модификации уровней цен отложенного ордера:
Das ist klar. Es folgt ein Beispiel mit folgendem Code:
#define EXPERT_MAGIC 123456// MagicNumber эксперта//+------------------------------------------------------------------+//| Модификация отложенных ордеров |//+------------------------------------------------------------------+voidOnStart()
{
//-- объявление и инициализация запроса и результатаMqlTradeRequest request={};
MqlTradeResult result={};
int total=OrdersTotal(); // количество установленных отложенных ордеров//--- перебор всех установленных отложенных ордеровfor(int i=0; i<total; i++)
{
//--- параметры ордераulong order_ticket=OrderGetTicket(i); // тикет ордераstring order_symbol=Symbol(); // символint digits=(int)SymbolInfoInteger(order_symbol,SYMBOL_DIGITS); // количество знаков после запятойulong magic=OrderGetInteger(ORDER_MAGIC); // MagicNumber ордераdouble volume=OrderGetDouble(ORDER_VOLUME_CURRENT); // текущий объем ордераdouble sl=OrderGetDouble(ORDER_SL); // текущий Stop Loss ордераdouble tp=OrderGetDouble(ORDER_TP); // текущий Take Profit ордераENUM_ORDER_TYPE type=(ENUM_ORDER_TYPE)OrderGetInteger(ORDER_TYPE); // тип ордераint offset = 50; // отступ от текущей цены для установки ордера, в пунктахdouble price; // цена срабатывания ордераdouble point=SymbolInfoDouble(order_symbol,SYMBOL_POINT); // размер пункта//--- вывод информации об ордереPrintFormat("#%I64u %s %s %.2f %s sl: %s tp: %s [%I64d]",
order_ticket,
order_symbol,
EnumToString(type),
volume,
DoubleToString(PositionGetDouble(POSITION_PRICE_OPEN),digits),DoubleToString(sl,digits),
DoubleToString(tp,digits),
magic);
//--- если MagicNumber совпадает, Stop Loss и Take Profit не заданыif(magic==EXPERT_MAGIC && sl==0 && tp==0)
{
request.action=TRADE_ACTION_MODIFY; // тип торговой операции
request.order = OrderGetTicket(i); // тикет ордера
request.symbol =Symbol(); // символ
request.deviation=5; // допустимое отклонение от цены//--- установка уровня цены, тейк-профит и стоп-лосс ордера в зависимости от его типаif(type==ORDER_TYPE_BUY_LIMIT)
{
price = SymbolInfoDouble(Symbol(),SYMBOL_ASK)-offset*point;
request.tp = NormalizeDouble(price+offset*point,digits);
request.sl = NormalizeDouble(price-offset*point,digits);
request.price =NormalizeDouble(price,digits); // нормализованная цена открытия
}
elseif(type==ORDER_TYPE_SELL_LIMIT)
{
price = SymbolInfoDouble(Symbol(),SYMBOL_BID)+offset*point;
request.tp = NormalizeDouble(price-offset*point,digits);
request.sl = NormalizeDouble(price+offset*point,digits);
request.price =NormalizeDouble(price,digits); // нормализованная цена открытия
}
elseif(type==ORDER_TYPE_BUY_STOP)
{
price = SymbolInfoDouble(Symbol(),SYMBOL_ASK)+offset*point;
request.tp = NormalizeDouble(price+offset*point,digits);
request.sl = NormalizeDouble(price-offset*point,digits);
request.price =NormalizeDouble(price,digits); // нормализованная цена открытия
}
elseif(type==ORDER_TYPE_SELL_STOP)
{
price = SymbolInfoDouble(Symbol(),SYMBOL_BID)-offset*point;
request.tp = NormalizeDouble(price-offset*point,digits);
request.sl = NormalizeDouble(price+offset*point,digits);
request.price =NormalizeDouble(price,digits); // нормализованная цена открытия
}
//--- отправка запросаif(!OrderSend(request,result))
PrintFormat("OrderSend error %d",GetLastError()); // если отправить запрос не удалось, вывести код ошибки//--- информация об операции PrintFormat("retcode=%u deal=%I64u order=%I64u",result.retcode,result.deal,result.order);
//--- обнуление значений запроса и результатаZeroMemory(request);
ZeroMemory(result);
}
}
}
//+------------------------------------------------------------------+
Ich versuche, die gelb markierte Zeile zu verstehen. Eine Frage stellt sich sofort: Was hatPositionGetDouble(POSITION_PRICE_OPEN) damit zu tun, wenn sich dieses Beispiel auf schwebende Aufträge bezieht? Vielleicht sollte es eine Zeile wie diese geben:
Dies ist der erste Punkt. Das zweite Problem tritt auf, wenn ich versuche, dieses Skript auf einem Diagramm mit einer BUY_STOP Pending Order, die ich eingestellt habe, auszuführen (obwohl bei anderen Arten von Pending Orders Ähnliches passiert). Was passiert also? Nichts passiert! Ich sehe keine Änderung eines ausstehenden Auftrags. Vielleicht verstehe ich etwas nicht?
Ich finde dies nur auf der Registerkarte Experten:
Sascha, du kannst dir nichtsSchlimmeres vorstellen, als Beispiele aus der Dokumentation oder Tumblr-Beispiele zu verwenden. Und Sie haben auch das Flag für die erzwungene Beendigung der while-Schleife irgendwo verloren. Alles in allem ... ohne Worte.
Ich bezweifle, dass die in der Dokumentation und sogar in der Standardbibliothek enthaltenen Beispiele gründlich überprüft werden. Solche Fehler gibt es zuhauf. Beispiele können meiner Meinung nach nur als Muster verwendet werden...
Darüber habe ich bereits vor einigen Seiten geschrieben
Ich bezweifle, dass die in der Dokumentation und sogar in der Standardbibliothek enthaltenen Beispiele gründlich überprüft werden. Es gibt eine Menge solcher Fehler. Beispiele können meines Erachtens nur als Beispiele verwendet werden...
Hallo Alexey!
Es ist sehr traurig, dass ein so seriöses Unternehmen eine so schlechte Einstellung zu Handbüchern hat.
Es ist sehr traurig, dass ein so seriöses Unternehmen eine so unernste Einstellung zum Handbuch hat.
Mit freundlichen Grüßen, Vladimir.
In diesem Beispiel gibt es noch einen weiteren Fehler. Oder völlig blind.
Unter den aufgelisteten Pflichtfeldern ist ein Ablaufdatum angegeben, aber im Code des Beispiels sehe ich nicht, wo das Ablaufdatum zugewiesen ist. Stattdessen wird die zulässige Abweichung vom Preis zugewiesen.
In diesem Beispiel gibt es noch einen Fehler. Oder vielleicht bin ich völlig blind...
Unter den aufgelisteten obligatorischen Feldern befindet sich ein Ablaufdatum, aber im Beispielcode sehe ich nicht, wo das Ablaufdatum zugewiesen ist. Stattdessen wird die zulässige Abweichung vom Preis angegeben.
Nicht nur die Verfallszeit, sondern auch der Zeitpunkt des Verfalls sollte berücksichtigt werden:
Типы торговых операций - Торговые константы - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
Danke für den Tipp, Alexey! Ich werde zunächst auf eine Antwort in diesem Thread warten, aber wenn nichts passiert, werde ich es im Thema Fehler, Bugs, Fragen melden.
Vielen Dank, Sergey, für deine Antwort! Ihre Antwort hat mich noch mehr verblüfft. Wie kann das sein? Wenn ich das Skript ausführe, werden alle eingestellten schwebenden Aufträge abgefragt. Wie in der Abbildung zu sehen ist, gibt es zwei von ihnen auf dem Diagramm, und zur gleichen Zeit ist ein Ticket ausgewählt und das andere nicht? Das ist nicht ganz klar.
Können Sie das näher erläutern?
Ich stelle diese Frage nicht aus reiner Neugierde, sondern um das Selbststudium fortzusetzen.
Mit freundlichen Grüßen, Vladimir.
Sie haben also eine Schleife, in der Sie den Iterator i vom Maximalindex auf 0 ändern. Was geht darin vor? Nun, es passiert folgendes: Der erste Befehl, den Sie versuchen, den Parameter ORDER_SYMBOL zu erhalten. Aber aus welcher Reihenfolge versuchen Sie es zu holen, denn die Reihenfolge wird drei Zeilen weiter unten ausgewählt!
Vielen Dank, Sergey, für die sehr ausführliche und verständliche Erklärung! Ich habe die Zeile mit dem Ticket für ausstehende Aufträge direkt nach dem Start des Zyklus eingefügt und alles hat gut funktioniert.
Ja ... Passen Sie auf und passen Sie noch einmal auf. Das ist es, was ich wirklich vermisse. Nochmals vielen Dank!
Mit freundlichen Grüßen, Vladimir.
Guten Morgen, geschätzte Experten!
Heute bin ich auf zwei weitere Probleme gestoßen, die ich nicht verstehe, aber in einem Code, der vollständig aus der MQL5-Referenz stammt. Diesmal habe ich nichts selbst geschrieben, sondern einfach ein fertiges Beispiel genommen.
Ich öffne MQL5 Referenz / Konstanten, Aufzählungen und Strukturen / Datenstrukturen / Struktur einer Handelsanfrage. Ich finde sie dort:
Struktur des HandelsantragsDas ist klar. Es folgt ein Beispiel mit folgendem Code:
Ich versuche, die gelb markierte Zeile zu verstehen. Eine Frage stellt sich sofort: Was hat PositionGetDouble(POSITION_PRICE_OPEN) damit zu tun, wenn sich dieses Beispiel auf schwebende Aufträge bezieht? Vielleicht sollte es eine Zeile wie diese geben:
Ich finde dies nur auf der Registerkarte Experten: Liebe Experten, bitte helfen Sie mir, dieses Beispiel zu verstehen, warum es im Verzeichnis ist, aber sein Code nicht funktioniert?
Mit freundlichen Grüßen, Vladimir.
Liebe Experten, bitte helfen Sie mir, dieses Beispiel zu verstehen, warum steht es im Referenzbuch, aber der Code funktioniert nicht?
Mit freundlichen Grüßen, Vladimir.
Ich habe vor ein paar Seiten darüber geschrieben.
Dies ist das Forum für Handel, automatisierte Handelssysteme und Strategietests.
Alle Fragen von Neulingen zu MQL4 und MQL5, Hilfe und Diskussion von Algorithmen und Codes
Alexey Viktorov, 2022.02.20 10:24
Sascha, du kannst dir nichts Schlimmeres vorstellen, als Beispiele aus der Dokumentation oder Tumblr-Beispiele zu verwenden. Und Sie haben auch das Flag für die erzwungene Beendigung der while-Schleife irgendwo verloren. Alles in allem ... ohne Worte.Darüber habe ich bereits vor einigen Seiten geschrieben
Hallo Alexey!
Es ist sehr traurig, dass ein so seriöses Unternehmen eine so schlechte Einstellung zu Handbüchern hat.
Mit freundlichen Grüßen, Vladimir.
Hallo Alexey!
Es ist sehr traurig, dass ein so seriöses Unternehmen eine so unernste Einstellung zum Handbuch hat.
Mit freundlichen Grüßen, Vladimir.
In diesem Beispiel gibt es noch einen weiteren Fehler. Oder völlig blind.
Unter den aufgelisteten Pflichtfeldern ist ein Ablaufdatum angegeben, aber im Code des Beispiels sehe ich nicht, wo das Ablaufdatum zugewiesen ist. Stattdessen wird die zulässige Abweichung vom Preis zugewiesen.
In diesem Beispiel gibt es noch einen Fehler. Oder vielleicht bin ich völlig blind...
Unter den aufgelisteten obligatorischen Feldern befindet sich ein Ablaufdatum, aber im Beispielcode sehe ich nicht, wo das Ablaufdatum zugewiesen ist. Stattdessen wird die zulässige Abweichung vom Preis angegeben.
Nicht nur die Verfallszeit, sondern auch der Zeitpunkt des Verfalls sollte berücksichtigt werden:
Mit freundlichen Grüßen, Vladimir.
Und nicht nur das, es sollte auch eine Verfallszeit geben:
Mit freundlichen Grüßen, Vladimir.
Ich wende mich an Artem Trishkin, den Moderator und Organisator dieses Zweigs!
Haben Sie die Möglichkeit, alle Fragen im Zusammenhang mit dem MQL5 Guide to MQL zu bestehen?
Wenn es nicht zu viel Mühe macht, können Sie zumindest diese Seite aktualisieren?
Mit freundlichen Grüßen, Vladimir.Ich wende mich an Artem Trishkin, den Moderator und Organisator dieses Threads!
Haben Sie Ihrerseits die Möglichkeit, alle Fragen im Zusammenhang mit dem MQL5-Leitfaden an MQL5 weiterzuleiten?
Wenn es Ihnen nichts ausmacht, kann zumindest diese Seite aktualisiert werden?
Hochachtungsvoll, Vladimir.Sie können es auch in diesem Thread melden.
Sie können es auch in diesem Thread melden.
Danke für den Tipp, Alexey! Ich werde zunächst auf eine Antwort in diesem Thread warten, aber wenn nichts passiert, werde ich es im Thema Fehler, Bugs, Fragen melden.
Mit freundlichen Grüßen, Vladimir.