Fehler, Irrtümer, Fragen - Seite 445

 
komposter:

Weiterverfolgung der Normalisierung des Loses

Leute, warum theoretisieren?

Zum Lachen und nicht um im Kopf einzurosten.

Alles muss in Maßen sein. Ich arbeite seit mehr als 5 Jahren mit echtem Geld, mit verschiedenen Brokern, Kontotypen und Instrumenten, und ich habe noch nie einen Fehler gemacht.
Ich habe nie einen Fehler gemacht und werde auch nie einen machen. Macht nichts, wir meinen das nicht ernst.
 
komposter:

Der Schritt sollte ein Vielfaches der Mindestmenge sein.

Was macht Sie so sicher? Praxis - das verstehe ich, aber nicht die Begrenzung des Motors.
Die Argumente der Parteien sind eindeutig. Auf jeden Fall weiß ich die Anteilnahme aufrichtig zu schätzen. :)

Schwan:

Bei den Meisterschaftskonten werden alle Instrumente gleichzeitig gehandelt. Register)

Ja, das scheint registriert worden zu sein. Das ist diejenige, bei der ich den Fehler feststelle.

Schwan:

Ich werde es vielleicht noch einmal versuchen:

if(aktueller Preis == 0,0) zurück;

Danke für die Idee! Ich werde diese Option ausprobieren müssen. :)

 

voix_kas:

Ja, ich glaube, ich bin registriert. Dort habe ich den Fehler entdeckt.

Es gibt einen Minutenbalken auf GBPCHF 2011.01.03 um 00:00. Haben Sie sich nicht an servicedesk gewandt?
 
Swan:
Am GBPCHF 2011.01.03 um 00:00 Uhr gibt es einen Minutenbalken. Haben Sie sich an servicedesk gewandt?

Ich war nicht bei der SD.

Die Situation ist wie folgt. Ich schreibe einen EA mit mehreren Währungen. Ich setze es auf Eurobucks Chart und versuche, alle gültigen Währungspaare zu verfolgen, die dem Expert Advisor als Parameter übergeben werden.

Mangel an Methodik/Dokumentation. Hier sind zum Beispiel einige Fragen:

1. Warum kann der Preis gleich Null sein? Schließlich gab es zu diesem Zeitpunkt (2011.01.03 00:00:00) den letzten bekannten Preis (sowohl Bid als auch Ask) noch? Auf welcher Grundlage gibt das Terminal dies an.

2. Es gibt eine Angebotssitzung. Worin besteht der prinzipielle Unterschied zu einer Handelssitzung? Es ist logisch anzunehmen, dass es möglich ist, während der zweiten Phase zu handeln. Und wenn wir während der ersten (Notierungs-)Sitzung nicht handeln können, warum ändern sich dann die Notierungen? Die Anführungszeichen ändern sich aufgrund des - entschuldigen Sie diese Interpretation - "Ungleichgewichts von Angebot und Nachfrage".

3. Angenommen, wir haben einen Tick für ein Währungspaar erhalten. In demselben Fall versuchen wir, den Zustand eines anderen Paares zu "sehen". Wo ist die Garantie, dass das letzte Angebot, das für das andere Paar abgegeben wurde, noch gültig ist? Wie lange ist die Lebensdauer eines Angebots? Die vernünftigste Erklärung ist die Überprüfung der letzten Notierung bei gleichzeitiger Überprüfung des Losvolumens auf dem Markt. D.h. wie ich es sehe: N Kurs von eurusd wird empfangen. Es gibt sie nicht umsonst, sondern zu diesem Kurs wird eine Option für ein bestimmtes Volumen platziert. Diejenigen, die kaufen/verkaufen wollen, schnappen sich den Kuchen. Irgendwann ist er (der Kuchen) zu Ende und dieses Zitat "hört auf zu leben". Dann gibt das Terminal das nächste (weniger attraktive) Angebot ab. Und wenn es überhaupt keine Notierung gibt (niemand will Devisen verkaufen/kaufen)? Dann ist der Preis gleich Null?

Jedenfalls bin ich kein Börsen- oder Devisenexperte.

Ich wäre dankbar, wenn mir jemand eine ausführliche Antwort auf die gestellten Fragen geben könnte. Wie ist es wirklich, und wie werden diese oder jene Situationen im MT5-Terminal dargestellt?

 
voix_kas:

Ich war nicht bei der SD.

Die Situation ist wie folgt. Ich schreibe einen EA mit mehreren Währungen. Ich setze es auf Eurobucks Chart und versuche, alle gültigen Währungspaare zu verfolgen, die dem Expert Advisor als Parameter übergeben werden.

Mangel an Methodik/Dokumentation. Hier sind zum Beispiel einige Fragen:

1. Warum kann der Preis gleich Null sein? Schließlich gab es zu diesem Zeitpunkt (2011.01.03 00:00:00) den letzten bekannten Preis (sowohl Bid als auch Ask) noch? Auf welcher Grundlage gibt das Terminal dies an.

2. Es gibt eine Angebotssitzung. Worin besteht der prinzipielle Unterschied zu einer Handelssitzung? Es ist logisch anzunehmen, dass es möglich ist, während der zweiten Phase zu handeln. Und wenn wir während der ersten (Notierungs-)Sitzung nicht handeln können, warum ändern sich dann die Notierungen? Die Anführungszeichen ändern sich aufgrund des - entschuldigen Sie diese Interpretation - "Ungleichgewichts von Angebot und Nachfrage".

3. Angenommen, wir haben einen Tick für ein Währungspaar erhalten. In demselben Fall versuchen wir, den Zustand eines anderen Paares zu "sehen". Wo ist die Garantie, dass das letzte Angebot, das für das andere Paar abgegeben wurde, noch gültig ist? Wie lange ist die Lebensdauer eines Angebots? Die vernünftigste Erklärung ist die Überprüfung der letzten Notierung bei gleichzeitiger Überprüfung des Losvolumens auf dem Markt. D.h. wie ich es sehe: N Kurs von eurusd wird empfangen. Es gibt sie nicht umsonst, sondern zu diesem Kurs wird eine Option für ein bestimmtes Volumen platziert. Diejenigen, die kaufen/verkaufen wollen, schnappen sich den Kuchen. Irgendwann ist er (der Kuchen) zu Ende und dieses Zitat "hört auf zu leben". Dann gibt das Terminal das nächste (weniger attraktive) Angebot ab. Und wenn es überhaupt keine Notierung gibt (niemand will Devisen verkaufen/kaufen)? Dann ist der Preis gleich Null?

Jedenfalls bin ich kein Börsen- oder Devisenexperte.

Ich wäre dankbar, wenn mir jemand eine ausführliche Antwort auf die gestellten Fragen geben könnte. Wie ist es in der Realität, und wie werden diese oder jene Situationen im MT5-Terminal dargestellt?

Lassen Sie uns Punkt für Punkt darauf eingehen. Ein Expert Advisor ist mehrwährungsfähig und sollte sich daher entsprechend verhalten.

1. Lassen wir das mögliche Hauptproblem, den 0-Kurs zu erhalten, außen vor - die Liste der Symbole, die gehandelt werden sollen, wird selektiv ausgewählt (d.h. Sie müssen sich nicht um die Verfügbarkeit der erforderlichen Symbole in MarketWatch kümmern)?

2. Zu den Handels- und Quotierungssitzungen haben sich die Entwickler bereits geäußert (insbesondere Rashid Umarov hat dies hier kommentiert). Über eine Situation, wenn es ein Angebot, aber Sie können nicht handeln - ist ganz normal (vor allem für den Aktienmarkt). Auch garantiert niemand, dass die Kurse während einer Handelssitzung aktualisiert werden. 3.

3. über das Glas - und wo man das Glas (und vor allem, was man hineingibt) auf dem Devisenmarkt bekommt? Bei Fragen lauten die Antworten wie folgt (wenn alles in Ordnung ist und eine Verbindung zum Server besteht):

(a) "Last Quote" (Informationen über den letzten Tick) gilt ab dem Zeitpunkt, zu dem ein Tick auftritt, bis ein neuer Tick erscheint. Im Terminal kann der Zeitpunkt der letzten Notierung in der "Marktübersicht" eingesehen werden.

b) Wenn Sie Informationen über Ticks nur im Handler OnTick() eines Multicurrency Expert Advisors sammeln, kann niemand garantieren, dass zwischen den Ticks des Hauptpaares nicht ein Dutzend Ticks anderer Paare liegen. Denn je nach Paar und Handelsaktivität kann der Zeitraum zwischen den Ticks von einem Bruchteil einer Sekunde bis zu mehreren Minuten betragen.

Für den Forex-Markt (insbesondere für EURUSD) ist dies natürlich nicht sehr wichtig, aber es muss in der Logik des Expert Advisors beachtet und berücksichtigt werden.

c) Sie können den Zeitpunkt des letzten Kurses programmatisch bestimmen, indem Sie die Struktur von MqlTick analysieren und den Zeitpunkt des letzten Kurses mit einem bestimmten Wert vergleichen.

struct MqlTick
  {
   datetime     time;          // Время последнего обновления цен
   double       bid;        // Текущая цена Bid
   double       ask;        // Текущая цена Ask
   double       last;       // Текущая цена последней сделки (Last)
   ulong        volume;     // Объем для текущей цены Last
  };

d) Wie ich bereits oben erwähnt habe, sollten Sie die Verbindung mit dem Server überwachen und, wenn möglich, Kurse nicht nur in OnTick(), sondern auch in OnTimer() prüfen/empfangen.

 

Lassen Sie uns den umgekehrten Weg gehen. Unter welchen Umständen kann der Kurs (Geld/Brief) im Terminal Nullwerte annehmen?

Dann kommt die zweite Frage. Nun, wir haben herausgefunden, dass das letzte Angebot für dieses Symbol vor 2 Sekunden/Minuten/Stunden eingegangen ist. Die Börsensitzung wurde nicht geschlossen. Wie können wir den Fehler "kein Preis" vermeiden?

Документация по MQL5: Получение рыночной информации / SymbolInfoSessionQuote
Документация по MQL5: Получение рыночной информации / SymbolInfoSessionQuote
  • www.mql5.com
Получение рыночной информации / SymbolInfoSessionQuote - Документация по MQL5
 
voix_kas:

Lassen Sie uns den umgekehrten Weg gehen. Unter welchen Umständen kann der Preis (Geld/Brief) im Terminal den Wert Null annehmen?

Dann kommt die zweite Frage. Nun, wir haben herausgefunden, dass das letzte Angebot für dieses Symbol vor 2 Sekunden/Minuten/Stunden eingegangen ist. Die Börsensitzung wurde nicht geschlossen. Wie können wir die Fehlermeldung "kein Preis" vermeiden?

Haben Sie, als Sie einen Nullpreis erhielten, GetLastError gefragt?
 
stringo:
Haben Sie GetLastError gefragt, als Sie den Nullpreis erhielten?

Fehlercode: 4756. Sie können es auf dem Screenshot sehen.

Außerdem. Hier ist der gleiche Fehler zu sehen. Gleichzeitig zeigt die Marketwatch das Vorhandensein des Preises an und das Tool wird in den Logs synchronisiert.

 
voix_kas:

Fehlercode: 4756. Sie können es auf dem Screenshot sehen.

Außerdem. Hier ist der gleiche Fehler zu sehen. Der Marketwatch zeigt die Preisverfügbarkeit an und das Tool wird in den Protokollen synchronisiert.

Sie benötigen einen Fehlercode nach "kein Preis...", nicht nach "fehlgeschlagen...".
 
uncleVic:
Sie benötigen den Fehlercode nach "kein Preis...", nicht nach "fehlgeschlagen...".
  ...
  // Формирование торгового приказа.
  MqlTradeResult TradeResult;
  MqlTradeRequest TradeRequest;

  TradeRequest.action = TRADE_ACTION_DEAL;
  TradeRequest.symbol = Instrumet;
  TradeRequest.volume = NormalizeDouble(Volume, 8);
  TradeRequest.price = SymbolInfoDouble(Instrumet, SYMBOL_ASK);
  TradeRequest.sl = 0;
  TradeRequest.tp = 0;
  TradeRequest.deviation = Deviation;
  TradeRequest.type = ORDER_TYPE_BUY;
  TradeRequest.type_filling = TypeFilling;

  // Отправка торгового приказа.
  ResetLastError();
  if (!IsTradeAllowed()) return;
  if (OrderSend(TradeRequest, TradeResult)) TradeResultAnalyse("Buy.OrderSend", TradeResult.retcode);
  else Print("Buy.OrderSend = false! Код ошибки: \'", _LastError, "\'.");

Und wie kann ich den Fehlercode an der von Ihnen genannten Stelle abfangen? Ich registriere den Fehler in der letzten Zeile des obigen Codes.

Dieser Fehler tritt nicht auf, wenn der folgende Begriff unmittelbar vor diesem Code hinzugefügt wird:

if(!NormalizeDouble(SymbolInfoDouble(Instrumet, SYMBOL_ASK), 8)) return;