[Archiv!] Jede Anfängerfrage, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht daran vorbei. Könnte nirgendwo ohne dich hingehen - 2. - Seite 155

 
todem:
in der Definition eines Trends?

Bei einem Trendwechsel über einen bestimmten Zeitraum... Siehe https://www.mql5.com/ru/forum/131277/page148 und https://www.mql5.com/ru/forum/131277/page149
 

Können Sie mir sagen, warum OrderSelect TRUE zurückgibt, auch wenn die Bestellung mit diesem Ticket nicht mehr existiert (sie wurde gelöscht)?


   if(OrderSelect(tickethigh1, SELECT_BY_TICKET, MODE_TRADES)==false)
 
100yan:

bei einer Trendwende auf einem Zeitabschnitt...


Bitte sagen Sie mir, ob die Tp- und Slossa-Funktion hier funktioniert

if (gesamt > 0) Durchschnittspreis = NormalizeDouble(Durchschnittspreis / Anzahl, Ziffern);
if (NewOrdersPlaced) {
for (cnt = OrdersTotal() - 1; cnt >= 0; cnt--) {
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber) continue;
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) {
if (OrderType() == OP_BUY) {
PriceTarget = AveragePrice + TakeProfit * Point;
BuyTarget = PriceTarget;
Stopper = AveragePrice - Stoploss * Point;
flag = TRUE;
}
}
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) {
if (OrderType() == OP_SELL) {
PriceTarget = AveragePrice - TakeProfit * Point;
SellTarget = PriceTarget;
Stopper = AveragePrice + Stoploss * Point;
flag = TRUE;

 
todem:
Die Kompilierung funktionierte bei mir einwandfrei.

Entschuldigung, der Indikator funktioniert - so war es ursprünglich, und der Fehler liegt in der tcht-Datei - sie lässt sich nicht kompilieren.

Dateien:
 

Kann ich init verwenden, um Berechnungen für den Indikatorpuffer durchzuführen?

Ich wollte in init alle Balken außer dem Null-Balken neu berechnen und im Start-Null-Balken - es zählt nicht...

 
Pyro:

Können Sie mir sagen, warum OrderSelect TRUE zurückgibt, auch wenn es keine Bestellung mit einem solchen Ticket gibt (es wurde gelöscht)?

Haben Sie die Funktionsreferenz gut gelesen?

Lesen wir es noch einmal:

---------------------------------------------------------------------------------------------------------------------------------------------------------------

bool OrderSelect( int index, int select, int pool=MODE_TRADES)
Die Funktion wählt einen Auftrag zur weiteren Bearbeitung aus. Gibt TRUE zurück, wenn die Funktion erfolgreich abgeschlossen wurde. Gibt FALSE zurück, wenn die Funktion fehlschlägt. Um Informationen über den Fehler zu erhalten, rufen Sie die Funktion GetLastError() auf.
Der Parameter pool wird ignoriert, wenn die Bestellung über die Ticketnummer ausgewählt wird. Die Ticketnummer ist eine eindeutige Kennung für die Bestellung. Um herauszufinden, aus welcher Liste ein Auftrag ausgewählt wurde, muss man seine Schlusszeit analysieren. Wenn der Zeitpunkt der Schließung des Auftrags 0 ist, ist der Auftrag offen oder schwebend und wird aus der Liste der offenen Positionen des Terminals übernommen. Eine offene Position unterscheidet sich von einem schwebenden Auftrag durch ihren Typ. Wenn der Zeitpunkt des Abschlusses ungleich 0 ist, dann ist der Auftrag abgeschlossen oder in der Schwebe und wurde aus der Historie des Terminals ausgewählt. Die Unterscheidung zwischen einem abgeschlossenen Auftrag und einem gelöschten schwebenden Auftrag kann auch nach Auftragsart erfolgen.
Parameter:
Index - Auftragsposition oder Auftragsnummer je nach zweitem Parameter.
Wählen Sie - Das Kennzeichen der Selektionsmethode. Kann einer der folgenden Werte sein:
SELECT_BY_POS - der Parameter index enthält die Indexnummer der Position in der Liste,
SELECT_BY_TICKET - der Indexparameter enthält die Ticketnummer.
Pool - Datenquelle für die Auswahl. Er wird verwendet, wenn derSelect-Parameter gleich SELECT_BY_POS ist. Es kann einer der folgenden Werte sein:
MODE_TRADES (Standard) - der Auftrag wird unter den offenen und schwebenden Aufträgen ausgewählt,
MODE_HISTORY - der Auftrag wird unter den geschlossenen und gelöschten Aufträgen ausgewählt.


---------------------------------------------------------------------------------------------------------------------------------------------------------------

Diese hier:

Der Parameter pool wird ignoriert , wenn die Bestellung über die Ticketnummer ausgewählt wird. Die Ticketnummer ist die eindeutige Kennung der Bestellung. Um herauszufinden, aus welcher Liste ein Auftrag ausgewählt wird, muss seine Schlusszeit analysiert werden. Wenn der Zeitpunkt der Schließung des Auftrags 0 ist , ist der Auftrag offen oder schwebend und wird aus derListe der offenen Positionen des Terminals übernommen.

Was tun Sie?

if(OrderSelect(tickethigh1, SELECT_BY_TICKET, MODE_TRADES)==false)

Ich habe den Parameter Pool rot dargestellt, der bei der Auswahl per Ticket ignoriert wird und eine Order aus einer beliebigen Liste (offen oder geschlossen) von Positionen des Terminals genommen wird. Deshalb liefert sie die Wahrheit. Immerhin existiert ein solches Ticket und ein Auftrag wird ausgewählt, aber aus der Liste der geschlossenen Aufträge...

Wir sollten es so machen:

   if (OrderSelect(tickethigh1,SELECT_BY_TICKET))
   if (OrderOpenTime()==0) {
      // ... код при успешном выборе ордера по тикету в списке рыночных ордеров
   }

... oder:

if (OrderSelect(tickethigh1,SELECT_BY_TICKET))
   if (OrderOpenTime()>0) {
      // ... код при успешном выборе ордера по тикету в списке закрытых ордеров
   }

... ...oder:

   if (OrderSelect(tickethigh1,SELECT_BY_TICKET)) {
      if (OrderOpenTime()>0) {
         // ... код при успешном выборе ордера по тикету в списке закрытых ордеров
      }
      if (OrderOpenTime()==0) {
         // ... код при успешном выборе ордера по тикету в списке рыночных ордеров
      }
   }

Ich denke, ich habe es sehr gut erklärt... :)

 

artmedia70


Vielen Dank für diese ausführliche und umfassende Antwort. Wirklich so klar wie möglich :) THX!!!

 
Pyro:

artmedia70


Vielen Dank für diese ausführliche Antwort. So klar wie möglich :) THX!!!

:) Ich danke Ihnen. Bitte sehr.

Ich möchte vor einer gewissen "Heimtücke" bei der Auswahl offener Stellen nach ihrem Ticket warnen. Die Sache ist die, dass am Ende eines Handelstages, wenn eine Position auf den nächsten Tag verschoben wird, die Maklerfirma den Auftrag wieder eröffnet. Das heißt, die aktuelle Position wird geschlossen und eine neue Position mit demselben Volumen, aber mit einem neuen Ticket, das den Swap enthält, eröffnet. Daher muss Ihr Expert Advisor die wiedereröffneten Aufträge verfolgen und ihre neuen Ticker berücksichtigen, da sonst alles "fließt" - der Auftrag mit dem alten Ticker erscheint in der Liste der geschlossenen Aufträge, und Sie können eine bestehende Position, die auf den neuen Handelstag verschoben wurde, nicht mit dem alten Ticker eröffnen. Für teilweise geschlossene Positionen gilt dasselbe - auch ihnen wird ein neues Ticket zugewiesen.

Führen Sie daher strikt Buch über alle EA-Aufträge und verfolgen Sie alle derartigen "heimtückischen" Änderungen im Laufe der Zeit.

 
artmedia70:


Ich möchte vor einer gewissen "Heimtücke" bei der Auswahl offener Stellen nach ihrem Ticket warnen. Der Punkt ist, dass am Ende des Handelstages, wenn eine Position auf den nächsten Tag übertragen wird, das DC den Auftrag wieder eröffnet.

In einigen Maklerunternehmen wird dies getan, aber die große Mehrheit leidet nicht darunter.
 
sergeev:
Ich weiß nicht, ob das auf einige Maklerfirmen zutrifft, aber die meisten machen so einen Mist nicht.

Gehört es nicht zu den "guten Sitten", auch dieses Verhalten des DC zu berücksichtigen? Immerhin ... Ja, schon gut... Ich versuche einfach, alles zu berücksichtigen, naja... oder das, was mir bekannt ist.

Vorsicht ist besser als Nachsicht, oder? ;)