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).
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 01 (EURUSD,M15) 01:53:21 ************************************************
MF 01 (EURUSD,M15) 01:53:21 Инструмент - EURUSD
RR 01 (EURUSD,M15) 01:53:21 Валюта депозита = USD
RG 01 (EURUSD,M15) 01:53:21 Базовая валюта = EUR
QM 01 (EURUSD,M15) 01:53:21 Валюта маржи = EUR
CH 01 (EURUSD,M15) 01:53:21 Маржа для покупки = 1271.23
QG 01 (EURUSD,M15) 01:53:21 Маржа для продажи = 1271.05
CQ 01 (EURUSD,M15) 01:53:21 ************************************************
JQ 01 (EURUSD,M15) 01:53:21 Инструмент - GBPUSD
HQ 01 (EURUSD,M15) 01:53:21 Валюта депозита = USD
EH 01 (EURUSD,M15) 01:53:21 Базовая валюта = GBP
RN 01 (EURUSD,M15) 01:53:21 Валюта маржи = GBP
MI 01 (EURUSD,M15) 01:53:21 Маржа для покупки = 1553.53
DP 01 (EURUSD,M15) 01:53:21 Маржа для продажи = 1553.25
MG 01 (EURUSD,M15) 01:53:21 ************************************************
LR 01 (EURUSD,M15) 01:53:21 Инструмент - USDCHF
NG 01 (EURUSD,M15) 01:53:21 Валюта депозита = USD
NJ 01 (EURUSD,M15) 01:53:21 Базовая валюта = USD
EQ 01 (EURUSD,M15) 01:53:21 Валюта маржи = USD
RI 01 (EURUSD,M15) 01:53:21SymbolInfoTick() failed, error = 4302
GL 01 (EURUSD,M15) 01:53:21 ************************************************
PE 01 (EURUSD,M15) 01:53:21 Инструмент - USDJPY
DL 01 (EURUSD,M15) 01:53:21 Валюта депозита = USD
DF 01 (EURUSD,M15) 01:53:21 Базовая валюта = USD
OL 01 (EURUSD,M15) 01:53:21 Валюта маржи = USD
HL 01 (EURUSD,M15) 01:53:21SymbolInfoTick() failed, error = 4302
QH 01 (EURUSD,M15) 01:53:21 ************************************************
...
Übrigens unterscheidet sich der letzte Datenblock im Protokollvonsergey1294 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 0OrderCalcMargin (EURUSD,M1) 20:44:27 ************************************************
IG 0OrderCalcMargin (EURUSD,M1) 20:44:27 Инструмент -
LS 0OrderCalcMargin (EURUSD,M1) 20:44:27 Валюта депозита = USD
DD 0OrderCalcMargin (EURUSD,M1) 20:44:27 Базовая валюта =
CL 0OrderCalcMargin (EURUSD,M1) 20:44:27 Валюта маржи =
RG 0OrderCalcMargin (EURUSD,M1) 20:44:27SymbolInfoTick() 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
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. :)
... 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?
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....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?
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 :
Ü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?
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. :)
... 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.
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)?
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