Fehler, Irrtümer, Fragen - Seite 444

 
Interesting:
Handels- und Börsensitzungen helfen nicht, das Problem zu lösen?

Leider nein. Laut Vertragsspezifikation beginnt die Angebotssitzung am Montag um 00:00:00 Uhr.
Hier gibt Rosh die Antwort, dass der Beginn einer Angebotssitzung keine Garantie für die Verfügbarkeit von Angeboten in dieser Sitzung ist. Das ist im Prinzip auch verständlich.

Bislang benutze ich eine "Krücke" in Form der folgenden Prüfung:

input int TTL = 10; // Время "жизни" котировки
...
void Trade() {
  ...
  if (TimeCurrent() - SymbolInfoInteger(Instrumet, SYMBOL_TIME) > TTL) return;
  ...
  // Далее отправка торгового приказа на сервер.
}

Ich wäre dankbar, wenn jemand eine elegantere Lösung vorschlagen könnte (alle Benutzer von Mehrfachwährungen müssen auf dieses Problem gestoßen sein).

P.S.
Konstantin Gruzdev schlägt in seinem Artikel Implementing the multicurrency mode in MetaTrader 5 eine elegante Variante vor.
Aber diese Variante wird die Anforderungen für die Meisterschaft nicht erfüllen.

 
voix_kas:

Igitt... die einen Nerv getroffen haben. :)) Die letzte Zeile wurde in einem Forumsbeitrag von Hand korrigiert, ich bitte um Verzeihung. =)
Übrigens, Ihr Code hat sich auch nicht kompilieren lassen (ich habe vergessen, eine schließende Klammer in die letzte Zeile zu setzen). :-Р
Außerdem ist es 2-3 Mal langsamer (jetzt habe ich es mit einem Skript überprüft), aber die Qualität der Prüfung ist die gleiche. :-Р

Wie auch immer, solange es keinen geeigneten Code gibt, um die signifikante ganze Zahl zu bestimmen, werde ich den Rat von Composter befolgen: normalisiere das Volumen auf 8 Dezimalstellen.
Hoffentlich gibt es keine Fallstricke.

:)
 
voix_kas:
OrderCheck hilft nicht?


 

Referenz:

Функцию Sleep() нельзя вызывать из пользовательских индикаторов, так как индикаторы выполняются в интерфейсном потоке и не должны его тормозить.

Ist es wirklich, wirklich unmöglich, oder kann man es, wenn man es wirklich will, aber vorsichtig? :)


Problem beim Zugriff auf die Daten eines anderen Symbols über den Indikator.

wenn es keine Zecken gibt)

 
Swan:
OrderCheck hilft nicht?

Nein. Ich schreibe eine Zeile vor dem Handel:

if (!OrderCheck(TradeRequest, TradeCheckResult) || (TradeCheckResult.retcode != TRADE_RETCODE_DONE)) return;

Es gibt immer noch einen Fehler im Protokoll. :(

 

Und was ist mit der Losnormalisierung?

Leute, warum theoretisieren?

Es ist absurd, wenn die Vergrößerung der Parzelle größer ist als die Mindestparzelle. Nun, stellen Sie sich vor: min = 0,1, step = 1,0. Es sind also nur die Lose 1.1, 2.1, 3.1, ... zulässig? Das ist Unsinn.

Wenn Sie Rechnen und Programmieren üben, dann werden Ihre Optionen gewinnen. Wenn es sich aber um angewandte (im Sinne des Handels) Programmierung handelt, dann müssen wir bei lot_step > lot_min das Programm mit einem kritischen Fehler beenden und dringend den Broker wechseln, weil er nicht einmal genug Geld für das Gehalt einer Person hat, die normalerweise den Server konfigurieren würde).

Alles muss in Maßen sein. Meine Variante arbeitet seit mehr als 5 Jahren mit Reals, mit verschiedenen Brokern, Kontotypen, Instrumenten - ich hatte nie einen Fehler.
Документация по MQL5: Программы MQL5 / Ошибки выполнения
Документация по MQL5: Программы MQL5 / Ошибки выполнения
  • www.mql5.com
Программы MQL5 / Ошибки выполнения - Документация по MQL5
 

Komposter
Warum ist das absurd? Nehmen wir ein einfaches Beispiel: min_lot = 1.0, min_step = 0.3. Die Anforderungen entsprechen dem Grundsatz "no nonsense" (min_lot >= lot_step). :)
Sie übergeben 1,3 Lose Volumen an die Normalisierungsfunktion. Davon erhalten Sie 1,2 Lose zurück.
Die aktualisierte Version wird 1.3 zurückgeben. Die Schritte sind "richtig": Sie beginnen mit der Mindestmenge, nicht mit Null.

Ein weiteres Problem ist das Vorhandensein von anderen Schritten als "1,0, 0,1, 0,01 usw." im Leben.
Hier scheinen mir die Kosten des Problems (Leistungseinbußen) im Vergleich zur Lösung eines möglichen hypothetischen Fehlers vernachlässigbar zu sein. IMHO.
Schließlich ist es einfach korrekter, so zu zählen: Schritte ab dem Mindestlos, nicht ab Null.

 
Gibt es irgendwo einen fertigen Code, der die maximal mögliche Anzahl von Lots zum aktuellen Symbol und Preis für einen bestimmten Geldbetrag (z.B. $1234.56 ist der einzige Eingabeparameter) kaufen würde. Darin sollten alle Arten von Kontrollen in Bezug auf Höchst- und Mindestvolumen, Normalisierung, Verschuldungsrechnung, ausreichende Mittel usw. usw. enthalten sein. Die Hauptsache ist, dass der Code einen Kauf zu machen und nicht stören mich mit der Tatsache, dass es kein Geld (kaufen, so viel wie es ist), dass einige Prüfung fehlgeschlagen (erhalten Sie es), dass eine Bestellung aufgegeben wird, aber es war kein Kauf (sterben, aber nicht zurückkehren, ohne es), usw. Ich verstehe, dass irgendwo in Klassen wie CTrade dies ist. Aber es ist nicht so einfach, etwas von dort zu kopieren. Ich möchte mit meinem eigenen Algorithmus arbeiten, nicht mit der Sprache von MQL5.
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
  • www.mql5.com
Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте - Документация по MQL5
 
voix_kas:

Nein. Ich schreibe eine Zeile, bevor ich handle:

In den Protokollen wird immer noch ein Fehler angezeigt. :(

Betrachtet man die Meisterschaftskonten, so werden alle Instrumente gleichzeitig gehandelt. Register)


TradeCheckResult.retcode != TRADE_RETCODE_DONE

Ich bin mir bei diesem Zustand nicht so sicher...


Ich weiß nicht, ob diese Bedingung korrekt ist oder nicht:

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

Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров - Документация по MQL5
 
voix_kas:

Komposter
Warum ist das absurd? Nehmen wir ein einfaches Beispiel: Mindestlos = 1,0, Mindestschritt = 0,3. Die Anforderungen entsprechen dem Prinzip des "No Nonsense" (min_lot >= lot_step). :)
Sie übergeben 1,3 Lose Volumen an die Normalisierungsfunktion. Davon werden 1,2 Lose an Sie zurückgegeben.
Die aktualisierte Version wird 1.3 zurückgeben. Die Schritte sind "richtig": Sie beginnen mit der Mindestmenge und nicht mit Null.

Ein weiteres Problem ist das Vorhandensein von anderen Schritten als "1,0, 0,1, 0,01 usw." im Leben.
Hier scheinen mir die Kosten des Problems (Leistungseinbußen) im Vergleich zur Lösung eines möglichen hypothetischen Fehlers vernachlässigbar zu sein. IMHO.
Schließlich ist es einfach korrekter, so zu zählen: Schritte ab dem Mindestlos, nicht ab Null.

"Mindestmenge = 1,0, Mindeststufe = 0,3" ist ebenfalls absurd. Die Stufen sollten ein Vielfaches der Mindestmenge betragen.

Ich habe meine Meinung bereits geäußert - in einem Mathe- und Programmierwettbewerb würde die min_lot-Subtraktionsvariante gewinnen, für den realen Handel wird sie nicht benötigt.

Ich sehe kein Thema für weitere Diskussionen, jeder hat seinen eigenen Weg gemacht ;)