Fragen von Anfängern MQL5 MT5 MetaTrader 5 - Seite 33

 

Guten Abend! Ich bin mir ziemlich sicher, dass diese Funktion genau das bewirkt, was ich wollte, jedenfalls fast. Aber die Maschine lässt sich nicht kompilieren, sie flucht wie folgt

'}' - nicht alle Kontrollpfade geben einen Wert zurück htghtgfhthf.mq5 61 10 Es sagt ihr, dass ich etwas mit der Logik falsch mache, nicht alle Rückgaben sind dort angegeben. Ja, das sind sie! Im Gegenteil, wenn wir sie nach jedem if-Operator einfügen, ist es unsinnig, das Programm wird sofort das falsche Ergebnis liefern. Er ist kurz und bündig. Wenn ja, wie können Sie ihn dazu bringen, sie zu akzeptieren?

string OrderType() { 
 string Si="";

 long lo;
 bool Bull=false; 
 Bull =PositionGetInteger(POSITION_TYPE,lo);
 if ( Bull ) {
 if ( lo==POSITION_TYPE_BUY) Si="OP_BUY";
 if ( lo==POSITION_TYPE_SELL) Si="OP_SELL";
 return (Si); }


 // ENUM_ORDER_TYPE ORType;

 Bull =OrderGetInteger(ORDER_TYPE,lo);
 if ( Bull ) {
 if ( lo==ORDER_TYPE_BUY_LIMIT) Si="OP_BUY_LIMIT";
 if ( lo==ORDER_TYPE_SELL_LIMIT) Si="OP_SELL_LIMIT";
 if ( lo==ORDER_TYPE_BUY_STOP) Si="OP_BUY_STOP";
 if ( lo==ORDER_TYPE_SELL_STOP) Si="OP_SELL_STOP";
 return (Si); }

 }
 
Dimka-novitsek:

Guten Abend! Ich bin mir ziemlich sicher, dass diese Funktion genau das bewirkt, was ich wollte, jedenfalls fast. Aber der Rechner lässt sich nicht kompilieren, er flucht wie folgt

'}' - nicht alle Kontrollpfade geben einen Wert zurück htghtgfhthf.mq5 61 10 Es sagt mir, dass ich etwas mit der Logik falsch mache, nicht alle Rückgaben sind dort angegeben. Ja, das sind sie! Im Gegenteil, wenn wir sie nach jedem if-Operator einfügen, ist es unsinnig, das Programm wird sofort das falsche Ergebnis liefern. Er ist kurz und bündig. Wenn Sie das können, wie können Sie es dann akzeptieren?

Ein Ratschlag: Lernen Sie etwas technisches Englisch. Lassen Sie mich einen Blick auf den Code werfen.

Was den Betreff betrifft: Die Funktion muss einen Wert vom Typ String zurückgeben. Innerhalb der Funktion verwenden wir die if-Anweisung, die die Rückgabeanweisungen enthält. Frage: Wenn die if-Anweisung feststellt, dass Bull == false ist, was soll die Funktion zurückgeben?

 
Natürlich, Si="" ! Leerer Wert.
 

Aha!!! Ich danke Ihnen!!!

Danke!!!!

 
Dimka-novitsek:

Guten Abend! Ich bin mir ziemlich sicher, dass diese Funktion genau das bewirkt, was ich wollte, jedenfalls fast. Aber die Maschine lässt sich nicht kompilieren, sie flucht wie folgt

'}' - nicht alle Kontrollpfade geben einen Wert zurück htghtgfhthf.mq5 61 10 Es sagt mir, dass ich etwas mit der Logik falsch mache, nicht alle Rückgaben sind dort angegeben. Ja, das sind sie! Im Gegenteil, wenn wir sie nach jedem if-Operator einfügen, ist es unsinnig, das Programm wird sofort das falsche Ergebnis liefern. Er ist kurz und bündig. Wenn ja, wie kann man sie dazu bringen, es zu akzeptieren?

nicht alle Kontrollpfade geben einen Wert zurück - es gibt keine vollständige Kontrolle über die Wertrückgabe.

Das bedeutet, dass in der Zeichenkette OrderType(), die einen Rückgabewert haben muss, da der Typ sich von void unterscheidet, keine garantierte Ausgabe mit einem Rückgabewert vorhanden ist.

Obwohl Sie bis zu 2 Operatoren zurückgegeben haben, sind beide durch die if-Bedingung geschützt. Was passiert, wenn beide Bedingungen falsch sind?

Dann kann die Maschine nach Belieben aus dem Fenster springen.

Übrigens ist es in dieser Funktion sinnvoller, den Zähler switch zu verwenden, anstatt eine Reihe von if's, die im Wesentlichen die gleiche Aufgabe wie switch erfüllen.

ZZZY Plus, wir sollten nicht vergessen, dass die Position vorgewählt werden muss, ebenso wie die Reihenfolge. Und es gibt eine Standardfunktion EnumToString für die Konvertierung von Aufzählungen in Strings, so dass man das Rad nicht neu erfinden muss.

 
DANKESCHÖN!!!
 
//+------------------------------------------------------------------+
//|                                                  Sample_Tick.mq5 |
//|                        Copyright 2012, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2012, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"

int Tick_All;

MqlTick           last_tick;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   Tick_All=0;

//---
   return(0);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   if(!SymbolInfoTick(_Symbol,last_tick))
     {
      Print("Failed to get Symbol info!");
     }

   Tick_All++;
   Print(Tick_All,"   ",last_tick.bid,"   ",last_tick.ask,"  ",last_tick.last," ",last_tick.volume);
  }
//+------------------------------------------------------------------+


Ich verstehe nicht, warum OnTick aufgerufen wird, obwohl sich der Preis nicht ändert?????

2012.09.10 11:52:11 Beispiel_Tick (EURUSD,M5) 493 1.2787 1.2789 1.2788 300000
2012.09.10 11:52:10 Beispiel_Tick (EURUSD,M5) 492 1.2787 1.2789 1.2788 300000
2012.09.10 11:52:09 Sample_Tick (EURUSD,M5) 491 1.2787 1.2789 1.2788 300000
2012.09.10 11:52:07 Sample_Tick (EURUSD,M5) 490 1.2787 1.2789 1.2788 300000

 
dentraf:

Ich verstehe nicht, warum OnTick ausgelöst wird, obwohl sich der Preis nicht ändert?????

2012.09.10 11:52:11 Beispiel_Tick (EURUSD,M5) 493 1.2787 1.2789 1.2788 300000
2012.09.10 11:52:10 Beispiel_Tick (EURUSD,M5) 492 1.2787 1.2789 1.2788 300000
2012.09.10 11:52:09 Sample_Tick (EURUSD,M5) 491 1.2787 1.2789 1.2788 300000
2012.09.10 11:52:07 Sample_Tick (EURUSD,M5) 490 1.2787 1.2789 1.2788 300000

Ist der Zeitpunkt der letzten Preisaktualisierung ebenfalls unverändert?
 
Yedelkin:
der Zeitpunkt der letzten Preisaktualisierung sich ebenfalls nicht ändert?

2012.09.10 15:37:20 Sample_Tick (EURUSD.m,M5) 20 1.27841 1.27852 1.27841 2000000 2012.09.10 14:37:19
2012.09.10 15:37:20 Sample_Tick (EURUSD.m,M5) 19 1.27841 1.27852 1.27841 2000000 2012.09.10 14:37:19
2012.09.10 15:37:20 Sample_Tick (EURUSD.m,M5) 18 1.27841 1.27852 1.27841 2000000 2012.09.10 14:37:18

oder

2012.09.10 15:37:12 Sample_Tick (EURUSD.m,M5) 6 1.27835 1.27845 1.27835 1000000 2012.09.10 14:37:11
2012.09.10 15:37:12 Sample_Tick (EURUSD.m,M5) 5 1.27835 1.27845 1.27835 1000000 2012.09.10 14:37:11
2012.09.10 15:37:12 Sample_Tick (EURUSD.m,M5) 4 1.27835 1.27845 1.27835 1000000 2012.09.10 14:37:10

 
dentraf:

2012.09.10 15:37:20 Sample_Tick (EURUSD.m,M5) 20 1.27841 1.27852 1.27841 2000000 2012.09.10 14:37:19

Die Zeit der Preisänderung ist GMT+3, glaube ich. Wessen Server ist es?