Fehler, Irrtümer, Fragen - Seite 106

 
Rosh:

Dies ist wahrscheinlich für die Symbole, die nicht in MarketWatch sind, wie es für SymbolName sagt:

Geben Sie den Namen des Symbols aus, für das Sie ein unerwartetes Ergebnis erhalten, und vergleichen Sie ihn mit der Liste in MarketWatch.
Alle Symbole sind in MarketWatch vorhanden, insbesondere gibt es Null für Instrumente des Typs #AA, ich habe ausdrücklich false in das Skript eingegeben
string symbol=SymbolName(i,false);
Wenn kein Symbol im MarketWatch-Fenster vorhanden ist, wird die Funktion
if(SymbolInfoTick(symbol,last_tick))
den Fehler 4302 zurückgibt, wird in der Hilfe nicht angegeben, dass das Symbol im MarketWatch-Fenster vorhanden sein muss, damit diese Funktion erfolgreich ausgeführt werden kann
 
sergey1294:
...es wird in der Hilfe nicht erwähnt, dass es für die erfolgreiche Arbeit dieser Funktion notwendig ist, dass das Tool im MarketWatch-Fenster vorhanden ist

Die Hilfe muss wirklich mit normalen Beispielen und Engpässen besetzt werden.

PS

Außerdem gibt es oft Situationen, in denen nach Änderungen in der Sprache einige EAs aus der Basis nicht mehr funktionieren (oder Kompilierungsfehler erzeugen).

 

Heute bemerkt...MT5(access.metatrader5.com:443)

EURJPY, Täglich:

Zum Beispiel GBPJPY, Daily: Hier ist alles in Ordnung.

Und hier ist ein Screenshot von EURJPY, täglich von einem MT4 DC:

Der Unterschied ist mit dem bloßen Auge sichtbar....

Wie kann dies behoben werden?

 
Rosh:

Dies ist wahrscheinlich für die Symbole, die nicht in MarketWatch vorhanden sind, da für SymbolName es sagt:

Geben Sie den Namen des Symbols aus, für das Sie ein unerwartetes Ergebnis erhalten, und vergleichen Sie ihn mit der Liste in MarketWatch.

Für Symbole, die nicht in MarketWatch vorhanden sind, gibt SymbolInfoTick() den Fehler ERR_MARKET_SELECT_ERROR "Symbol nicht in MarketWatch ausgewählt" (Code 4302) zurück.In MarketWatch sind nur EURUSD und GBPUSD ausgewählt. Ein elementarer Lauf zeigt, dass SymbolInfoTick() einen Fehler ERR_MARKET_SELECT_ERRORfür nicht ausgewählte Symbole zurückgibt :

IS      0       1 (EURUSD,M15)  01:53:21        ************************************************
MF      0       1 (EURUSD,M15)  01:53:21        Инструмент - EURUSD
RR      0       1 (EURUSD,M15)  01:53:21        Валюта депозита = USD
RG      0       1 (EURUSD,M15)  01:53:21        Базовая валюта = EUR
QM      0       1 (EURUSD,M15)  01:53:21        Валюта маржи = EUR
CH      0       1 (EURUSD,M15)  01:53:21        Маржа для покупки = 1271.23
QG      0       1 (EURUSD,M15)  01:53:21        Маржа для продажи = 1271.05
CQ      0       1 (EURUSD,M15)  01:53:21        ************************************************
JQ      0       1 (EURUSD,M15)  01:53:21        Инструмент - GBPUSD
HQ      0       1 (EURUSD,M15)  01:53:21        Валюта депозита = USD
EH      0       1 (EURUSD,M15)  01:53:21        Базовая валюта = GBP
RN      0       1 (EURUSD,M15)  01:53:21        Валюта маржи = GBP
MI      0       1 (EURUSD,M15)  01:53:21        Маржа для покупки = 1553.53
DP      0       1 (EURUSD,M15)  01:53:21        Маржа для продажи = 1553.25
MG      0       1 (EURUSD,M15)  01:53:21        ************************************************
LR      0       1 (EURUSD,M15)  01:53:21        Инструмент - USDCHF
NG      0       1 (EURUSD,M15)  01:53:21        Валюта депозита = USD
NJ      0       1 (EURUSD,M15)  01:53:21        Базовая валюта = USD
EQ      0       1 (EURUSD,M15)  01:53:21        Валюта маржи = USD
RI      0       1 (EURUSD,M15)  01:53:21        SymbolInfoTick() failed, error = 4302
GL      0       1 (EURUSD,M15)  01:53:21        ************************************************
PE      0       1 (EURUSD,M15)  01:53:21        Инструмент - USDJPY
DL      0       1 (EURUSD,M15)  01:53:21        Валюта депозита = USD
DF      0       1 (EURUSD,M15)  01:53:21        Базовая валюта = USD
OL      0       1 (EURUSD,M15)  01:53:21        Валюта маржи = USD
HL      0       1 (EURUSD,M15)  01:53:21        SymbolInfoTick() failed, error = 4302
QH      0       1 (EURUSD,M15)  01:53:21        ************************************************

...

Übrigens unterscheidet sich der letzte Datenblock im Protokollvon sergey1294 von den anderen: Erstens gibt SymbolInfoTick() dieses Mal denselben Fehlercode zurück, und zweitens - finden Sie nicht, dass das Instrument, die Basiswährung und die Margin-Währung in diesem Datenblock seltsame Namen haben?

Ist dies ein Fehler? Ist Ihnen diese Merkwürdigkeit überhaupt aufgefallen?

CE      0       OrderCalcMargin (EURUSD,M1)     20:44:27        ************************************************
IG      0       OrderCalcMargin (EURUSD,M1)     20:44:27        Инструмент - 
LS      0       OrderCalcMargin (EURUSD,M1)     20:44:27        Валюта депозита = USD
DD      0       OrderCalcMargin (EURUSD,M1)     20:44:27        Базовая валюта = 
CL      0       OrderCalcMargin (EURUSD,M1)     20:44:27        Валюта маржи = 
RG      0       OrderCalcMargin (EURUSD,M1)     20:44:27        SymbolInfoTick() failed, error = 4302
 
Was den letzten Datenblock betrifft, so handelt es sich um eine kleine Panne in der Schleife, und bei der letzten Datenabfrage wurde auf ein nicht vorhandenes Instrument zugegriffen, so dass alle Felder außer der Einzahlungswährung leer sind
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация о счете
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация о счете
  • www.mql5.com
Стандартные константы, перечисления и структуры / Состояние окружения / Информация о счете - Документация по MQL5
 
sergey1294:
Was den letzten Datenblock betrifft, so hat die Brute-Force-Schleife einen Fehler gemacht und bei der letzten Datenabfrage auf ein nicht vorhandenes Symbol zugegriffen, so dass alle Felder außer der Einzahlungswährung leer sind.

Wie kann das sein? Ich meine, das Protokoll ist nicht von der Version des Codes, die gegeben wurde?

Nach dem Code zu urteilen, ist dort alles in Ordnung.

Oder SymbolsTotal() gab einen Wert zurück, aber während des Skriptlaufs, irgendwo in der Mitte des Zyklus, durch einen schrecklichen Unfall, entfernte der Makler, der den Serverteil einstellte, ein Symbol aus dem Bestand, und SymbolsTotal() - wenn das Skript es anforderte - würde einen neuen Wert zurückgeben, einen weniger, aber da die Schleifenendbedingung auf dem alten Wert basierte, der in der Variablen Total gespeichert war, gaben die entsprechenden Funktionen bei der letzten Iteration beim Zugriff auf das nun nicht mehr existierende Symbol leere Zeilen zurück? :)

Bislang gab es nur dieses Szenario, um dies zu erreichen. :)

 
Ich weiß nicht, wie es passiert ist, aber es ist noch nicht passiert.
 
simpleton:

... Dann wird der berechnete Wert explizit in ulong umgewandelt. Genau zu ulong, denn es gibt eine Garantie, dass der zu werfende Wert nicht negativ ist.

Bei der Umwandlung in einen Integer-Typ wird der gebrochene Teil des Real-Typs verworfen. Es ist nicht das Runden auf die nächste Eins, sondern gerade das Wegwerfen des Bruchteils, das garantiert, dass der Wert der maximalen Lose nicht ansteigt, was die freie Marge ermöglicht. Das ist genau das, was wir brauchen.

Simpleton, ich habe auch einen ähnlichen Weg verfolgt, aber eine explizite Umwandlung in den Typ int verwendet. Ich bin davon ausgegangen, dass die maximal mögliche Losgröße entweder durch den Broker/Händler oder durch die Höhe meines Eigenkapitals begrenzt wird. Die Verwendung von int sollte also ausreichen. Gibt es Ihrer Meinung nach bei diesem Ansatz (Rundung "von unten" mit int) irgendwelche Fallstricke?
 

Die Entwickler.

Wie sorge ich dafür, dass Parameter in den Skripten erscheinen (ich bin zu faul, den Code ständig für neue Bedingungen zu ändern)?

 
Interesting:

Die Entwickler.

Wie sorge ich dafür, dass Parameter in den Skripten erscheinen (ich bin zu faul, den Code ständig für neue Bedingungen zu ändern)?


#property script_show_inputs