Fehler, Irrtümer, Fragen - Seite 73

 
Swan:

oder Override ist nicht notwendig, oder Ask, Bid nach Positionssymbol anzufordern

Die Funktion PositionGetSymbol wählt automatisch eine Position für die weitere Arbeit aus.

Tatsächlich bietet PositionGetSymbol eine sequenzielle Auswahl und PositionSelect eine direkte Auswahl

Документация по MQL5: Торговые функции / PositionGetSymbol
Документация по MQL5: Торговые функции / PositionGetSymbol
  • www.mql5.com
Торговые функции / PositionGetSymbol - Документация по MQL5
 
Swan:

oder Sie brauchen nicht nach einer Position zu suchen, oder fragen, bieten nach einem Positionssymbol

Wie sich herausstellte, wird PositionGetInteger(POSITION_TYPE) ohne Auswahl durch PositionSelect verwendet. Was in der Tat nicht gut ist (wie Slava mich daran erinnert hat)... :)

stringo:

Die Funktion PositionGetSymbol wählt automatisch eine Position für die weitere Arbeit aus.

Tatsächlich bietet PositionGetSymbol eine sequenzielle Auswahl und PositionSelect eine direkte Auswahl

Auf dieser Grundlage war es notwendig, genau PositionGetSymbol in der Schleife anzuwenden, und sich dann für alles andere zu interessieren...
 

Nun, wenn Sie Telepathie verwenden, dann müssen Sie if(PositionSelect(Symbol())) anstelle der Schleife setzen :)

Es ist besser zu prüfen, ob LevelProfit-LevelWLoss nicht kleiner ist als SymbolInfoInteger(Symbol,SYMBOL_TRADE_STOPS_LEVEL).

Und diese Doppelgänger werden falsch verglichen...

Ansonsten sollte es funktionieren)


ps: Ich bin mir nicht sicher, aber bei der sl/tp-Änderung bringt eine Abweichung >0 nichts Gutes.

 

ObjectGetInteger() mit Bezeichner OBJPROP_TIME funktioniert nicht korrekt

Um den Fehler zu reproduzieren, erstellen Sie ein "Rectangle"-Objekt mit dem Namen "1".

Führen Sie das folgende Skript aus, um die vier Ankerkoordinaten unseres neu erstellten Rechtecks mit dem Namen "1" anzuzeigen

void OnStart()
{ 
  Comment(ObjectGetDouble(0,"1",OBJPROP_PRICE,0),"   ",
          StringToTime   (IntegerToString(ObjectGetInteger(0,"1",OBJPROP_TIME, 0))),"\n",
          
          ObjectGetDouble(0,"1",OBJPROP_PRICE,1),"   ",
          StringToTime   (IntegerToString(ObjectGetInteger(0,"1",OBJPROP_TIME, 1))));

}

Wir sehen, dass die Preiskoordinaten korrekt definiert sind, die Zeitkoordinaten jedoch nicht:


Документация по MQL5: Графические объекты / ObjectGetInteger
Документация по MQL5: Графические объекты / ObjectGetInteger
  • www.mql5.com
Графические объекты / ObjectGetInteger - Документация по MQL5
 
joo:

ObjectGetInteger() mit Bezeichner OBJPROP_TIME funktioniert nicht korrekt

Um den Fehler zu reproduzieren, erstellen Sie ein "Rectangle"-Objekt mit dem Namen "1".

Führen Sie das folgende Skript aus, um die vier Ankerkoordinaten unseres neu erstellten Rechtecks mit dem Namen "1" anzuzeigen

Wir sehen, dass die Preiskoordinaten korrekt definiert sind, die Zeitkoordinaten jedoch nicht:



Spüren Sie den Unterschied

  Comment(ObjectGetDouble(0,"1",OBJPROP_PRICE,0),"   ",
          datetime(ObjectGetInteger(0,"1",OBJPROP_TIME, 0)),"\n",
          
          ObjectGetDouble(0,"1",OBJPROP_PRICE,1),"   ",
          datetime(ObjectGetInteger(0,"1",OBJPROP_TIME, 1)));
 
joo:

ObjectGetInteger() mit Bezeichner OBJPROP_TIME funktioniert nicht korrekt

Um den Fehler zu reproduzieren, erstellen Sie ein "Rectangle"-Objekt mit dem Namen "1".

Führen Sie das folgende Skript aus, um die vier Ankerkoordinaten unseres neu erstellten Rechtecks mit dem Namen "1" anzuzeigen

Wir sehen, dass die Preiskoordinaten korrekt definiert sind, die Zeitkoordinaten jedoch nicht:



Hier ist das Drehbuch.

//+------------------------------------------------------------------+
//|                                                       123123.mq5 |
//|                                  2009, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "2009, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   string msg="";
//---
   msg+=DoubleToString(ObjectGetDouble(ChartID(),"123456",OBJPROP_PRICE,0),_Digits)+" "+
        TimeToString(ObjectGetInteger(ChartID(),"123456",OBJPROP_TIME,0),TIME_DATE|TIME_MINUTES)+"\n";
   msg+=DoubleToString(ObjectGetDouble(ChartID(),"123456",OBJPROP_PRICE,1),_Digits)+" "+
        TimeToString(ObjectGetInteger(ChartID(),"123456",OBJPROP_TIME,1),TIME_DATE|TIME_MINUTES)+"\n";
   Comment(msg);
  }
//+------------------------------------------------------------------+

Und hier ist das Ergebnis.

 
stringo:

Spüren Sie den Unterschied

Danke, ich spüre den Unterschied.

Sie setzen den Wertetyp explizit auf datetime

und ich habe die Datenkonvertierung genutzt.

Bedeutet das aber nicht, dass das Konstrukt

StringToTime   (IntegerToString(

nicht richtig funktioniert?

 
joo:

Danke, ich spüre den Unterschied.

Sie setzen den Wertetyp explizit auf datetime

und ich habe die Datenkonvertierung genutzt.

Bedeutet das aber nicht, dass das Konstrukt

Funktioniert es nicht richtig?

Nicht, dass das falsch wäre. Diese Maßnahmen sind einfach unnötig.

Schauen Sie sich die Hilfe zur Funktion StringToTime() an und Sie werden verstehen, warum das Ergebnis falsch ist.

Документация по MQL5: Преобразование данных / StringToTime
Документация по MQL5: Преобразование данных / StringToTime
  • www.mql5.com
Преобразование данных / StringToTime - Документация по MQL5
 
joo:

Danke, ich spüre den Unterschied.

Sie setzen den Wertetyp explizit auf datetime

und ich habe die Datenkonvertierung genutzt.

Bedeutet das aber nicht, dass das Konstrukt

nicht richtig funktioniert?

Nicht ganz. Durch die Konvertierung von IntegerToString erhalten Sie eine Zeichenkette des Typs "12345612345", während StringToTime eine Zeichenkette im Format "2010.07.29 08:10" liefern sollte.

Sie haben uns jedoch auf unseren Fehler hingewiesen. In Ihrem Fall hätten wir das Datum 1970.01.01 00:00 zurückgeben und last_error setzen müssen

 
stringo:

Nicht ganz. Durch die Konvertierung von IntegerToString erhalten Sie eine Zeichenkette vom Typ "12345612345", während StringToTime eine Zeichenkette im Format "2010.07.29 08:10" erhalten sollte.

Sie haben uns jedoch auf unseren Fehler hingewiesen. In Ihrem Fall hätten wir das Datum 1970.01.01 00:00 zurückgeben und last_error setzen müssen

Meine Botschaft ist also nicht umsonst, wie ich schon dachte?