Fehler, Irrtümer, Fragen - Seite 1886

 
Vladimir Karputov:


Was ist also die Frage?

Wo können Sie sehen, dass es unter der Zahl "i" eine Position mit einem solchen und einem anderen Ticket für ein solches und ein anderes Symbol gibt? In der Regel geben Sie neben der einfachen Ausgabe der Sequenznummer auch das Ticket und das Symbol aus.


Ist es normal, dass eine Funktion für verschiedene Situationen den gleichen Wert ergibt?

ZS: Übrigens, es gab eine Frage in dem Beitrag.

Der Punkt ist, wenn ich "Kaufen" auswähle, gibt die Funktion (PositionGetInteger(POSITION_TYPE)) 0 zurück.

Und wenn Sie eine nicht existierende Position auswählen, gibt die Funktion ebenfalls 0 zurück

 
Alexandr Bryzgalov:
Ist es normal, dass eine Funktion für verschiedene Situationen den gleichen Wert ergibt?


Was sind "unterschiedliche Situationen"? Und tun Sie, was ich oben empfohlen habe:

Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien

Wanzen, Wanzen, Fragen

Wladimir Karputow, 2017.05.12 11:15

...

Im Allgemeinen geben Sie neben der einfachen Ausgabe der Sequenznummer auch das Ticket und das Symbol aus.


 
Alexandr Bryzgalov:

Ich weiß, dass ich das überprüfen muss, aber es können Dinge passieren...

PositionGetInteger

Die Funktion gibt die gewünschte Eigenschaft einer offenen Position zurück, die zuvor mit der FunktionPositionGetSymbol oderPositionSelect ausgewählt wurde. Die Eigenschaft Position sollte vom Typ datetime, int sein. Es gibt 2 Varianten der Funktion.

1. Gibt direkt den Wert der Eigenschaft zurück.

longGetInteger(
ENUM_POSITION_PROPERTY_INTEGERproperty_id// Kennung der Eigenschaft
);

2. Gibt je nach Erfolg der Funktion true oder false zurück. Bei Erfolg wird der Eigenschaftswert in der Zielvariablen abgelegt, die als Referenz an den letzten Parameter übergeben wird.

boolPositionGetInteger(
ENUM_POSITION_PROPERTY_INTEGERproperty_id,// Kennung der Eigenschaft
lange&long_var//Übernahme des Wertes der Eigenschaft
);

Parameter

Eigenschaft_id

Der [in]-Bezeichner der Positionseigenschaft. Der Wert kann einer der Werte von enumENUM_POSITION_PROPERTY_INTEGER sein.

lang_var

[out] Variable vom Typ long, die den Wert der angeforderten Eigenschaft enthält.

Zurückgegebener Wert

Wert von typelong. Im Falle einer erfolglosen Ausführung wird 0 zurückgegeben.

Bei der Majic ist die Lage dünner. Daher ist es logisch, eine Prüfung durchzuführen (PositionGetInteger(POSITION_TICKET) > 0).
Документация по MQL5: Торговые функции / PositionGetInteger
Документация по MQL5: Торговые функции / PositionGetInteger
  • www.mql5.com
Торговые функции / PositionGetInteger - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
fxsaber:
Bei der Magie ist die Situation etwas subtiler. Daher ist es logisch, eine Prüfung durchzuführen (PositionGetInteger(POSITION_TICKET) > 0).

Ja, es ist gut, einen Check zu machen.

Aber wenn man eine Funktion schreibt, versucht man immer, sicherzustellen, dass sie in verschiedenen Situationen einen anderen Wert zurückgibt.

Ich denke, es ist nicht richtig, dass in verschiedenen Situationen derselbe Wert aus der Funktion herauskommt.
 
Alexandr Bryzgalov:

aber wenn man eine Funktion schreibt, versucht man immer, einen anderen Wert für verschiedene Situationen zu erhalten.

Das ist der Grund, warum Magie erwähnt wird. Was soll im Falle des Fehlers PositionGetInteger(POSITION_MAGIC) zurückgegeben werden?
 
fxsaber:
Das ist der Grund, warum Magic es erwähnt hat. Was soll im Falle des Fehlers PositionGetInteger(POSITION_MAGIC) zurückgegeben werden?
0 - Position manuell geöffnet. korrekt?
 
Alexandr Bryzgalov:

Ist es in Ordnung, wenn eine Funktion in verschiedenen Situationen denselben Wert ergibt?

ZS: Es gab übrigens eine Frage in dem Beitrag.

Der Punkt ist, dass die Funktion (PositionGetInteger(POSITION_TYPE)) 0 zurückgibt, wenn ich Kaufen wähle.

und wenn Sie eine nicht existierende Position auswählen, gibt die Funktion ebenfalls 0 zurück


Der erste Aufruf wird also verwendet, wenn Sie eine Position GARANTIERT haben (wie Sie es in der Schleife getan haben). Und hier ist die zweite Form des Aufrufs

bool  PositionGetInteger( 
   ENUM_POSITION_PROPERTY_INTEGER  property_id,     // идентификатор свойства 
   long&                           long_var         // сюда примем значение свойства 
   );

für Fälle, in denen die Position aus heiterem Himmel ausgewählt wird.


Tun Sie das und glauben Sie, was Sie in der Variable "Ergebnis" erhalten - alles fügt sich zusammen:

//+------------------------------------------------------------------+
//|                                                         posi.mq5 |
//|                                                      sanyooooook |
//|                                                 http://sn-bot.ru |
//+------------------------------------------------------------------+
#property copyright "sanyooooook"
#property link      "http://sn-bot.ru"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   int tot=PositionsTotal();
   for(int i=0;i<tot;i++)
     {
      ulong OrderTicket_=PositionGetTicket(i);
      long cmd=PositionGetInteger(POSITION_TYPE);
      if(OrderTicket_>0 && cmd<=POSITION_TYPE_SELL)
         Print("N",i,"cmd=",cmd);

     }
   ulong OrderTicket_=PositionGetTicket(100);
   long cmd=-3;
   bool result=PositionGetInteger(POSITION_TYPE,cmd);
   if(result)
      Print("N100 cmd=",cmd);
  }
//+------------------------------------------------------------------+
 
Alexandr Bryzgalov:
0 - die Position wird manuell geöffnet. richtig?
Ja, aber auch jeder andere Wert ist irreführend.
 
Vladimir Karputov:


Der erste Aufruf wird also verwendet, wenn Sie eine Position GARANTIERT haben (wie Sie es in der Schleife getan haben). Und hier ist die zweite Form des Aufrufs

für Fälle, in denen die Position aus heiterem Himmel ausgewählt wird.


Tun Sie dies, und glauben Sie, was Sie in der Variable "Ergebnis" erhalten - alles passt zusammen:

Das ist nicht die Frage, sondern dass die Funktion in verschiedenen Situationen denselben Wert liefert.

Ich weiß, wie man das überprüft.

die ursprüngliche Frage war, ob das überhaupt normal ist?

SZY: Ein Fehler kann unabsichtlich gemacht werden, und dann wird man bei 100000 Codes müde, ihn zu suchen.

Was? Sie müssen keine Fehler machen? )

 
Alexandr Bryzgalov:

Das ist nicht die Frage, aber die Funktion gibt in verschiedenen Situationen denselben Wert zurück.

Ich weiß, wie man es überprüft

Die Frage war ursprünglich, ob das überhaupt normal ist?


Meines Erachtens haben Sie den Code, den ich Ihnen gezeigt habe, nicht überprüft. Wie wäre es damit: Sie überprüfen es zuerst und stellen dann die Frage erneut.