[ARCHIV!] Alle Fragen von Anfängern, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Ohne dich kann ich nirgendwo hingehen - 4. - Seite 242

 
MaxZ:

Hallo.

Frage: Kann OrderSend() nach der Ausführung einen Wert von "0" oder weniger als "-1" zurückgeben? Ist jemandem so etwas schon einmal passiert? Oder sind die Angaben in der "Dokumentation" korrekt?

P.S.: Ich arbeite als Telepath und suche nach einem Fehler im Code eines anderen...

Hai!

Warum nicht? Wenn ein Auftrag z.B. aufgrund einer Rückfrage nicht eröffnet wird.

Hierfür gibt es eine Schleife für die tatsächliche Öffnung von Aufträgen, z.B. so - die Anzahl der Öffnungsversuche mit Fehlerbehandlung:

int NumberOfTry = 25;
//+------------------------------------------------------------------+
//| Установка ордера                                                 |
//+------------------------------------------------------------------+

void WmOrderSend(string symbol, int cmd, double volume, double price, double stoploss, double takeprofit, string comment, int magic, datetime expiration = 0)
{
   color clr;
   datetime opentime;
   int ticket;
   int error;
  
   comment = WindowExpertName() + " " + GetNameTF(Period()) + " " + comment;
   int msl = MarketInfo(symbol, MODE_STOPLEVEL);
   clr = CLR_NONE;
   if (cmd == OP_BUY)  clr = ColorBuy;
   else if (cmd == OP_SELL)  clr = ColorSell;   
   if ((expiration > 0) && (expiration < TimeCurrent()))   expiration = 0;
  
   for (int try = 1; try <= NumberOfTry; try++)
   {
      if (!IsTesting() && (!IsExpertEnabled() || IsStopped()))      break;   
      while (!IsTradeAllowed())      Sleep(5000);
    
      RefreshRates();
      opentime = TimeCurrent();
      ticket = OrderSend(symbol, cmd, volume, price, SlipPips, stoploss, takeprofit, comment, magic, expiration, clr);
      if (ticket > 0)
         if (UseSound)      {PlaySound("ok.wav"); break;}      
      else
      {
         error = GetLastError();
         if (error == ERR_TRADE_TIMEOUT)
         {
            Sleep(1000*66);
            if (ExistOrders(symbol, cmd, magic, opentime))
            {
               if (UseSound) {PlaySound("ok.wav"); break;}
            }
         }
        
         Print("Error(", error, ") set order: ", ErrorDescription(error), ", try ", try);
         continue;
      }
      
      Print("Error(", error, ") set order: ", ErrorDescription(error), ", try ", try);
      Print("Ask=", Ask, "  Bid=", Bid, "  symbol=", symbol, "  volume=", volume, "  cmd=", GetNameOP(cmd), "  price=", price, "  stoploss=", stoploss, "  takeprofit=", stoploss, "  magic=", magic);
      if ((error == ERR_COMMON_ERROR) || (error == ERR_ACCOUNT_DISABLED) || (error == ERR_INVALID_ACCOUNT) || (error == ERR_TRADE_DISABLED))
        {
         IsExpertFailed = true;
         break;
        }      
      if ((error == ERR_SERVER_BUSY) || (ERR_INVALID_TRADE_VOLUME) || (error == ERR_MARKET_CLOSED))
        {
         Sleep(1000*300); 
         break;
        }      
      if ((error == ERR_TOO_FREQUENT_REQUESTS) || (error == ERR_TOO_MANY_REQUESTS))    Sleep(1000*100);      
      if ((error == ERR_ORDER_LOCKED) || (error == ERR_LONG_POSITIONS_ONLY_ALLOWED) || (error == ERR_TRADE_TOO_MANY_ORDERS))      break;      
      if (error == ERR_TRADE_CONTEXT_BUSY) while (IsTradeContextBusy()) Sleep(1000*11);
      
      if (error == ERR_TRADE_EXPIRATION_DENIED )  {expiration = 0; continue;}      
      if ((error != ERR_PRICE_CHANGED) && (error != ERR_REQUOTE))  Sleep(1000*7.7);
   }      
}
 
Roman.:

Hai!

Und warum nicht? Wenn z.B. ein Auftrag bei einer Rückfrage nicht offen ist...

Hallo Roman.

Denn normalerweise gibt die Funktion OrderSend() bei einem Fehler "-1" zurück... Nicht "0" und schon gar nicht weniger als "-1". Aber vielleicht gab es ja doch Präzedenzfälle?

 
MaxZ:

Hallo Roman.

Denn normalerweise gibt OrderSend() bei einem Fehler "-1" zurück... Nicht "0" und schon gar nicht weniger als "-1". Aber vielleicht gab es ja doch Präzedenzfälle?

Es ist übrigens ein interessantes Thema über Fehler. Ich habe gelernt, dass, wenn 0 (Null) zurückgegeben wird, kein Fehler vorliegt und der Auftrag vom Makler akzeptiert wird. Wird er nicht akzeptiert, so wird ein Fehler zurückgegeben, der jedoch größer als Null ist. In der Beschreibung des Operators OrderSend() gibt es einen Eintrag "...oder -1 im Falle eines Fehlschlags". Aber welche Art von Fehler sollte vorliegen, damit der Broker -1 zurückgibt? Weiß das jemand?
 
MaxZ:

Hallo Roman.

Denn normalerweise gibt OrderSend() bei einem Fehler "-1" zurück... Nicht "0" und schon gar nicht weniger als "-1". Aber vielleicht gab es ja doch Präzedenzfälle?


Man sollte wohl in einer KONKRETEN Küche handeln, wenn der Optionsschein() "0" zurückgibt, und erst recht < -1. :-)
 
paladin80:
Übrigens, ein interessantes Thema über Fehler. Ich habe gelernt, dass , wenn 0 (Null) zurückgegeben wird, kein Fehler vorliegt und der Auftrag vom Makler akzeptiert wird. Wird er nicht akzeptiert, so wird ein Fehler zurückgegeben, der jedoch größer als Null ist.
Gibt die Funktion GetLastError() 0 zurück? Oder schreiben Sie über die Funktion OrderSend()?


Ich habe gelernt, dassin der Beschreibung des OrderSend-Operators ein Fehler auftritt, der größer als Null ist:
In der Beschreibung des Operators OrderSend() findet sich der Hinweis "...oder -1 im Falle eines Fehlschlags". Aber welche Art von Fehler sollte vorliegen, damit der Broker -1 zurückgibt? Weiß das jemand?

OrderSend() gibt "-1" zurück. Und der Fehlertyp sollte mit der Funktion GetLastError() überprüft werden! Verwechseln Sie die beiden nicht... Es gibt einen Fehlercode "1", der bedeutet "Kein Fehler, aber Ergebnis unbekannt"... Ich bin nicht auf einen Fehler mit dem Code "-1" gestoßen und ich glaube nicht, dass es einen gibt! :D

 
MaxZ:
Gibt die Funktion GetLastError() 0 zurück? Oder schreiben Sie über die Funktion OrderSend()?


OrderSend() gibt "-1" zurück. Und die Fehlerart sollte mit GetLastError() überprüft werden!!! Verwechseln Sie die beiden nicht... Es gibt einen Fehlercode "1", der bedeutet "Kein Fehler, aber Ergebnis unbekannt"... Ich bin nicht auf einen Fehler mit dem Code "-1" gestoßen und ich glaube nicht, dass es einen gibt! :D


Vielleicht habe ich es wirklich falsch verstanden. Wieder einmal habe ich sorgfältig über OrderSend und Fehler gelesen. Wahrscheinlich geht es darum, dass, wenn der Makler den Auftrag akzeptiert hat, die Ticketnummer zurückgegeben wird und GetLastError dieser Operation 0 anzeigt. Wenn nicht, wird -1 angezeigt und GetLasError zeigt die Fehlernummer größer als Null an.
 

Guten Tag. Können Sie mir bitte sagen, wo ich period_converter mit einer Funktion bekommen kann, die es mir erlaubt, den Referenzpunkt zu setzen. Zum Beispiel muss ich ein Diagramm D2 von D1 machen, wenn ich YYY.MMM.DDD HH.MM beginne und ab diesem Datum beginnt die Umwandlung von Candlesticks.

Ich habe etwas Ähnliches gefunden (auch auf diesem Forum), aber aus irgendeinem Grund nicht wollen, um die Umwandlung von geraden Zahlen beginnen (beginnt mit ungeraden und alle) kann mir sagen, was in Code zu ändern oder ändern Sie es selbst. Dafür wäre ich sehr dankbar. Das habe ich gefunden.

Dateien:
 
Guten Tag, kann ich den Zeitrahmen des Indikators ändern? Kann der Zeitrahmen auf der Plattform im Fenster umgeschaltet werden?
 

Liebe Alle

Ich bin neu auf Forex und bin neu auf Forex, würde ich gerne einige Ratschläge von den lokalen Gurus fragen.

Ich arbeite mit dem MT4-Terminal.

Bei der Arbeit mit einem Chart für ein Währungspaar ist es praktisch, die Skala zu wechseln: "М1", "М5", .....

So wird bei M1 die Historie der letzten 38 Stunden mit etwa 2000 Candlesticks angezeigt, bei M5 sind es 270 Stunden, aber auch etwa 2000 Candlesticks.

Im ersten Fall beträgt der Zeitrahmen für eine Kerze 60 Sekunden, im zweiten Fall 470 Sekunden. Können wir die Historie für 270 Stunden (oder mehr) mit 60-Sekunden-Candlesticks abrufen?

Vielen Dank im Voraus

 
paladin80:
Vielleicht habe ich das falsch verstanden. Wieder einmal habe ich sorgfältig über OrderSend und Fehler gelesen. Wenn der Makler den Auftrag angenommen hat, gibt er die Ticketnummer zurück und GetLastError zeigt 0 an. Wenn er den Auftrag nicht angenommen hat, zeigt er -1 an und GetLasError zeigt die Fehlernummer größer als Null an.

Jetzt hast du es richtig verstanden... Denn Ihre Antwort verwirrt mich ein wenig! :)))


Aber meine Frage bleibt bestehen. Kann OrderSend() "0" oder einen Wert kleiner als "-1" zurückgeben?


Ich bat darum, eine Log-Datei zu senden... Aber sie wollen es mir nicht schicken. Ich hätte schon längst herausgefunden, wo das Problem liegt. In der Zwischenzeit habe ich weiter telepathiert! ;))) Was aber, wenn die Funktion OrderSend() seltsam ist? :DD