Fragen von Anfängern MQL5 MT5 MetaTrader 5 - Seite 404
Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Ich habe begonnen, einen Wrapper für Funktionen zum Öffnen und Ändern von Aufträgen zu schreiben (ich dachte, das würde meine Probleme mit der Rückgabe von Werten durch diese Operatoren beheben), aber es gibt das gleiche Problem.
Erklären Sie, was das Problem ist (egal was ich schreibe, es gibt immer ein Problem mit der Rückgabe von Werten aus OrderSend, OrderSelex und ModifyOrder)
Wrapper-Code .
int start()
{
wenn (Signal == 1)
{
OrderSendX(Symbol(),OP_BUY,0.1,Ask,0,500,500,"123",123,0,Red);
}
zurück(0);
}
//-----------------------------------------------
int OrderSendX (string symbol,int cmd, double volume,double price,int slippage,double stoploss,double takeprofit,string comment,
int magic,datetime expiration,color arrow_color)
{
int err=GetLastError();
err = 0;
bool exit_loop = false;
int ticket = -1;
int Wiederholungsversuch = 10;
int cnt = 0;
if(cmd == OP_BUY || cmd == OP_SELL) //Überprüfung der Art der zu eröffnenden Bestellung
{
while(!exit_loop)
{
ticket = OrderSend(symbol,cmd,volume,price,slippage,stoploss,takeprofit,comment,magic,expiration,arrow_color);
err = GetLastError();
switch(err)
{
case ERR_NO_ERROR:
exit_loop = true;
Pause;
{ case ERR_SERVER_BUSY:
case ERR_NO_CONNECTION:
case ERR_INVALID_PRICE:
Fall ERR_BROKER_BUSY:
Fall ERR_TRADE_CONTEXT_BUSY:
cnt++;
Pause;
case ERR_PRICE_CHANGED:
case ERR_OFF_QUOTES:
Fall ERR_REQUOTE:
RefreshRates();
weiter;
Standard:
exit_loop = true;
Pause;
}
if(cnt>Retry)
exit_loop = true;
if(!exit_loop)
{
Sleep(1000);
RefreshRates();
}
sonst
{
if(err !=ERR_NO_ERROR)
{
Print("Fehler: " + err);
}
}
if(err ==ERR_NO_ERROR)
{
OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES);
zurück(ticket);
}
Print("Fehler beim Öffnen der Bestellung nach" + cnt + "Versuchen");
zurück(-1);
}
}
}
Ich habe begonnen, einen Wrapper für Funktionen zum Öffnen und Ändern von Aufträgen zu schreiben (ich dachte, das würde meine Probleme mit der Rückgabe von Werten durch diese Operatoren beheben), aber es gibt das gleiche Problem.
Erklären Sie mir, was das Problem ist (egal, was ich schrieb, ich habe immer Probleme mit der Rückgabe von Werten aus OrderSend, OrderSelex und ModifyOrder)
https://docs.mql4.com/ru/trading/ordermodify
OrderModify() gibt ja zurück, nein
Keiner kann das erklären.
Versuchen wir es mit einem anderen Beispiel, anstatt die Hilfe 100 Mal zu kopieren.
Ich werde ein Beispiel verwenden, um die Korrekturen zu verstehen.
{
SL=NormalizeDouble(Bid-TrailingStop*Point,Digits);
if(OrderStopLoss()!=SL)
OrderModify(OrderTicket(),OrderOpenPrice(),SL,0,0);
}
nicht einfügen
"""Ticket """= OrderModify(OrderTicket(),OrderOpenPrice(),SL,0,0); ist jedes Mal korrekt?
Und vielen Dank an alle, die versucht haben, es zu erklären.
Leider verstehe ich nicht, wie man eine Variable einer Variablen zuordnet, die als Funktion vordefiniert ist.
Und vielen Dank an alle, die versucht haben, es zu erklären.
Leider verstehe ich nicht, wie man eine Variable einer Variablen zuordnet, die als Funktion vordefiniert ist.
LieberLeanid. Lernen Sie, die Hilfe zu lesen und mit Fehlern und Warnungen umzugehen. Wenn man das nicht lernt, kann man nicht einmal richtig programmieren. Dies sind die Grundlagen. Haben Sie versucht zu übersetzen, was in den Warnhinweisen steht? Verstehen Sie die Bedeutung von Funktionen, die "geprüft werden müssen"? Die Hilfe beschreibt ein korrektes Beispiel für die Handhabung dieser Funktionen. Zum Beispiel: OrderModify(). Sehen Sie sich die Hilfe an:
Rückgabewert
Sie gibt true zurück, wenn die Funktion erfolgreich abgeschlossen wurde, oder false im Falle eines Fehlers. Um Informationen über denFehlerzu erhalten, müssen Sie die FunktionGetLastError() aufrufen.
und dann folgt ein Beispiel:
Wie Sie sehen können, wird der Rückgabewert der Funktion im if-else-Operator behandelt. Die Variable res wird nicht ohne Grund "für die Schönheit" benötigt. Es ist das Ergebnis der Ausführung einer Handelsfunktion! Die Funktion, von der Ihr Geld abhängt! Um alle möglichen Varianten korrekt zu verarbeiten (die Verarbeitung in diesem Beispiel ist nicht vorgesehen), benötigen wir also die Variable res und den von der Funktion GetLastError() zurückgegebenen Fehlercode. Die Entwickler haben absichtlich Warnungen eingefügt, um daran zu erinnern, dass es "wichtige" Funktionen gibt, die bei der Verarbeitung von Werten zu beachten sind! Beachten Sie auch, dass kein Fehler auftritt, wenn der Wert nicht geprüft wird! D.h. in diesem Fall funktioniert die Funktion wie sie ist, aber wenn eine abnormale Situation eintritt, wird sie nicht verarbeitet. Die Liste der Nicht-Standardsituationen sind Rückgabewerte der Funktion GetLastError().
Ich hoffe, dass es auf diese Weise klarer ist.
Ich habe begonnen, einen Wrapper für die Funktionen zum Öffnen und Ändern von Aufträgen zu schreiben (ich dachte, das würde mein Problem mit der Rückgabe von Werten von diesen Operatoren beheben), aber es gibt das gleiche Problem.
Und in diesem Fall brauchen wir keinen Wrapper zu schreiben. Das Problem mit der Warnung über die Überprüfung des Rückgabewerts wird dadurch nicht gelöst! Schauen Sie sich die Beispiele für diese Funktionen an und tun Sie dasselbe!
Wie in der Referenz angegeben, gibt es einen Fehler.
Ich habe es so geschrieben und es ist in Ordnung
if(OrderModify(OrderTicket(),OrderOpenPrice(),SL,0,0))
{
Print("Die Änderung war erfolgreich.");
}
else Print("Fehler beim Ändern der Bestellung.");
Code korrekt in Beiträge einfügen:Code korrekt in das Forum einfügen
Warum funktioniert Trawling nicht beim Verkauf, sondern beim Kauf?
Keine Fehler oder Warnungen, bei der genetischen Kompilierung.
Hier ist der Code: