Bibliotheken: MT4Orders - Seite 10

 
Aliaksandr Kryvanos:

Auswahl nach Symbol und Majic funktioniert nicht

if (OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES))
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
{
}

OrderSelect funktioniert nicht, es wählt nicht eine Bestellung (Ticket durch Index), um mit ihm zu arbeiten, einfaches Beispiel im Anhang und es funktioniert nicht auf mt5 aus irgendeinem Grund.

Ihr Code wird nicht auf MT4 funktionieren, wie wir es gerne hätten. Denn es gibt einen Fehler in ihm - Sie setzen Ihre Positionen auf Null majic, aber vergleichen Sie es mit einem anderen Wert.
OrderSend(Symbol(),OP_BUY, 0.01,Ask, 0, 0,0,"",0,0,clrNONE);
Korrigieren Sie Ihren Code wie folgt
OrderSend(Symbol(),OP_BUY, 0.01,Ask, 0, 0,0,"",MagicNumber,0,clrNONE);
Der Alarm ist falsch.
[Gelöscht]  
Danke, ich entschuldige mich, es ist einfach so passiert, dass ich versucht habe, einen EA in die mt5-Version zu übersetzen, und es hat mich viel Zeit gekostet, und die Handelslogik stimmte nicht überein, ich habe Magic und alles, was es beeinflussen könnte, überprüft, also habe ich ein einfaches Beispiel geschrieben und es hat nicht funktioniert. Aber dann habe ich meinen Fehler gefunden, und dieses Beispiel oben hat nichts damit zu tun. Ich wollte meinen Beitrag löschen, aber ich hatte keine Zeit.
 
Aliaksandr Kryvanos:

Auswahl nach Symbol und Majic funktioniert nicht

if (OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES))
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
{
}

OrderSelect funktioniert nicht wählt nicht eine Bestellung (Ticket von Index), um mit ihm zu arbeiten, einfaches Beispiel im Anhang und es funktioniert nicht auf mt5 aus irgendeinem Grund

Sie setzen den Magick nicht in OrderSend
[Gelöscht]  

Hallo, hier ist eine Frage, die ich habe, wie kann ich Daten über Fehler beim Senden von Aufträgen für MT5 erhalten, in MT4 Version sieht es so aus

bool CloseError = OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 100);
if (CloseError == false)
{
  ResetLastError();
  error = GetLastError();
  Print(" CloseOpenedTrades OrderClose failed" + " - ticket=", OrderTicket() + string(error) + ") " + ErrorDescription(error) + " - ticket= ", OrderTicket());
}

Der Fehlercode ist in der MqlTradeResult-Struktur enthalten, ich kann den obigen Code im MT5 nicht verwenden, ohne auf das Ergebnis zugreifen zu können. Wie kann ich mt4orders.mqh modifizieren, um Trade-Server-Fehler zurückzugeben? danke

 
Aliaksandr Kryvanos:

Hallo, hier ist eine Frage, die ich habe, wie kann ich Daten über Fehler beim Senden von Aufträgen für MT5 erhalten, in MT4 Version sieht es so aus

bool CloseError = OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 100);
if (CloseError == false)
{
  ResetLastError();
  error = GetLastError();
  Print(" CloseOpenedTrades OrderClose failed" + " - ticket=", OrderTicket() + string(error) + ") " + ErrorDescription(error) + " - ticket= ", OrderTicket());
}

Der Fehlercode ist in der MqlTradeResult-Struktur enthalten, ohne Zugriff auf das Ergebnis kann ich den obigen Code im MT5 nicht verwenden. Wie kann ich mt4orders.mqh so modifizieren, dass es Trade-Server-Fehler zurückgibt? danke

Sie können GetLastError mehr Werte zurückgeben lassen - ergänzen Sie es mit Codes aus MqlTradeResult.
[Gelöscht]  
D.h. wenn beim Schließen einer Bestellung ein Fehler auftritt, gibt GetLastError() den Fehlercode (des Handelsservers) zurück, auch wenn wir MqlTradeResult Result nicht überprüfen; Result.retcode in OrderSend(Request, Result)?
 
Aliaksandr Kryvanos:
D.h. wenn beim Schließen einer Order ein Fehler auftritt, gibt GetLastError() den Fehlercode (des Trade Servers) zurück, auch wenn wir MqlTradeResult Result nicht prüfen; Result.retcode in OrderSend(Request, Result)?

Ja, das ist nicht schwer zu implementieren.

Aliaksandr Kryvanos:
bool CloseError = OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 100);
if (CloseError == false)
{
  ResetLastError();
  error = GetLastError();
  Print(" CloseOpenedTrades OrderClose failed" + " - ticket=", OrderTicket() + string(error) + ") " + ErrorDescription(error) + " - ticket= ", OrderTicket());
}

Ich verstehe nicht, was das Hervorgehobene bedeutet.

[Gelöscht]  
fxsaber:

Ja, es ist nicht schwer zu implementieren.

Ich verstehe nicht, was der hervorgehobene Teil bedeutet.

es war in der EA für mt4

Sie sagen, es sei nicht schwer zu implementieren, aber in der Tat kann GetLastError() einen Trade-Server-Fehler zurückgeben, wenn die Order nicht gesendet wurde, ohne die MqlTradeResult-Struktur zu analysieren.

Sie können einfach eine Prüfung hinzufügen:

static bool NewOrderSend( const MqlTradeRequest &Request )
  {
    MqlTradeResult Result;
    if (::OrderSend(Request, Result) || Result.retcode != TRADE_RETCODE_DONE)
    {
      Print("OrderSend() error: ", ResultRetcodeDescription(Result.retcode));
      return(false);
    }
    else
    {
      return(true);
    }

    //return(MT4ORDERS::OrderSend(Request, Result) ? Result.retcode < TRADE_RETCODE_ERROR : false);
  }

Aber ist das notwendig, wenn GetLastError() so funktionieren kann, wie es ist?

 
Aliaksandr Kryvanos:

dies war beim mt4-Berater der Fall

Dann liegt ein Fehler in der Logik vor.

Sie sagen, es sei nicht schwer zu implementieren, aber in der Tat kann GetLastError() einen Trade-Server-Fehler zurückgeben, wenn die Order nicht gesendet wird, ohne die MqlTradeResult-Struktur zu analysieren.

Sie können einfach eine Prüfung hinzufügen:

static bool NewOrderSend( const MqlTradeRequest &Request )
  {
    MqlTradeResult Result;
    if (::OrderSend(Request, Result) || Result.retcode != TRADE_RETCODE_DONE)
    {
      Print("OrderSend() error: ", ResultRetcodeDescription(Result.retcode));
      return(false);
    }
    else
    {
      return(true);
    }

    //return(MT4ORDERS::OrderSend(Request, Result) ? Result.retcode < TRADE_RETCODE_ERROR : false);
  }

Aber ist das notwendig, wenn GetLastError() so funktionieren kann, wie es ist?

Ich verstehe Sie nicht. Ihre Implementierung in if enthält einen Fehler. Außerdem gibt es so etwas wie TRADE_RETCODE_DONE_PARTIAL - es ist eine erfolgreiche Ausführung von OrderSend.

Und selbst wenn Sie Ihren Code korrigieren, wird er nur eine Fehlermeldung protokollieren (und jemand anderes möchte sie vielleicht nicht jedes Mal sehen). Aber es wird NICHT in MQL verfügbar sein.

Daher scheint die Variante, bei der GetLastError sowohl Standard-Laufzeitfehler als auch zusätzliche Trade-Server-Rückgabecodes zurückgibt, die optimalste zu sein.

[Gelöscht]  
Ich sehe, können Sie mir eine Idee geben, wie GetLastError() zubekommen, um Handel Server-Fehler als auch ausgeben, ich würde es selbst schreiben, wenn Sie nicht Zeit noch haben. Danke