Erreurs, bugs, questions - page 106

 
Rosh:

C'est probablement pour les symboles qui ne sont pas dans MarketWatch, comme il est dit pour SymbolName:

Sortez le nom du symbole pour lequel vous obtenez un résultat inattendu et comparez avec la liste dans MarketWatch.
Tous les symboles sont présents dans MarketWatch, en particulier, il retourne zéro pour les instruments de type #AA, j'ai spécifiquement mis false dans le script
string symbol=SymbolName(i,false);
S'il n'y a pas de symbole dans la fenêtre MarketWatch, la fonction
if(SymbolInfoTick(symbol,last_tick))
renvoie l'erreur 4302, l'aide ne précise pas que pour le bon fonctionnement de cette fonction, le symbole doit être présent dans la fenêtre MarketWatch.
 
sergey1294:
...il n'est pas mentionné dans l'aide, que pour le bon fonctionnement de cette fonction, il est nécessaire que l'outil soit présent dans la fenêtre MarketWatch.

L'aide doit vraiment être dotée d'exemples normaux et de goulots d'étranglement.

PS

En outre, il arrive souvent qu'après avoir apporté des modifications au langage, certaines EA de la base cessent de fonctionner (ou génèrent des erreurs de compilation).

 

Remarqué aujourd'hui...MT5(access.metatrader5.com:443)

EURJPY, Quotidien :

Par exemple GBPJPY, Daily : Tout va bien ici.

Et voici une capture d'écran de l'EURJPY, quotidienne d'un MT4 DC :

La différence est visible à l'œil nu....

Comment peut-on y remédier ?

 
Rosh:

Ceci est probablement pour les symboles qui ne sont pas présents dans MarketWatch, car pour SymbolName il est dit :

Sortez le nom du symbole pour lequel vous obtenez un résultat inattendu et comparez-le à la liste de MarketWatch.

Pour les symboles qui ne sont pas présents dans MarketWatch, SymbolInfoTick() renvoie une erreur ERR_MARKET_SELECT_ERROR "Symbol not selected in MarketWatch" (code 4302). Seuls l'EURUSD et le GBPUSD sont sélectionnés dans MarketWatch. Une exécution élémentaire montre que SymbolInfoTick() renvoie une erreur ERR_MARKET_SELECT_ERRORpour les symboles non sélectionnés :

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        ************************************************

...

À propos, le dernier bloc de données dans le journal de sergey1294 est différent des autres : premièrement, SymbolInfoTick() renvoie le même code d'erreur cette fois-ci, et deuxièmement, - ne pensez-vous pas que l'instrument, la devise de base et la devise de marge ont des noms étranges dans ce bloc de données ?

Est-ce un bug ? Avez-vous remarqué cette bizarrerie ?

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
 
Quant au dernier bloc de données, il s'agit juste d'un petit problème dans la boucle, et dans la dernière requête de données, il a accédé à un instrument inexistant, de sorte que tous les champs, à l'exception de la devise de dépôt, sont vides.
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация о счете
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация о счете
  • www.mql5.com
Стандартные константы, перечисления и структуры / Состояние окружения / Информация о счете - Документация по MQL5
 
sergey1294:
Quant au dernier bloc de données, c'est juste que la boucle de force brute a un peu dérapé et que dans la dernière requête de données, elle a accédé à un symbole inexistant, de sorte que tous les champs, à l'exception de la monnaie de dépôt, sont vides.

Comment ça se fait ? Je veux dire que le journal ne provient pas de la version du code qui a été donnée ?

A en juger par le code, tout va bien ici.

Ou bien SymbolsTotal() renvoie une valeur, mais pendant l'exécution du script, quelque part au milieu du cycle, par un terrible accident, le courtier, définissant la partie serveur, a retiré un symbole de la liste des symboles disponibles, et SymbolsTotal() - si le script le demandait - renverrait une nouvelle valeur, un de moins, mais, puisque la condition de fin de boucle était basée sur l'ancienne valeur stockée dans la variable Total, alors les fonctions correspondantes à la dernière itération, lorsqu'elles accèdent au symbole maintenant inexistant, renvoient des lignes vides ? :)

Jusqu'à présent, seul ce scénario s'est présenté pour que cela se produise. :)

 
Je ne sais pas comment c'est arrivé, mais ce n'est pas encore arrivé.
 
simpleton:

... Puis la valeur calculée est explicitement convertie en ulong. Exactement à ulong, car il y a une garantie que la valeur à caster est non-négative.

Lors du passage à un type entier, la partie fractionnaire du type réel est rejetée. Ce n'est pas l'arrondi à l'unité la plus proche, mais précisément la mise au rebut de la partie fractionnaire qui garantit la non-augmentation de la valeur maximale du lot, ce que permet la marge libre. C'est exactement ce dont nous avons besoin.

Simplet, j'ai aussi suivi un chemin similaire, mais j'ai utilisé une conversion explicite en type int. J'ai supposé que la taille maximale possible du lot sera limitée soit par le courtier ou le négociant, soit par la taille de mes propres fonds. Utiliser int devrait donc suffire. Pensez-vous que cette approche (arrondir "par le bas" en utilisant des int) comporte des pièges ?
 

Les développeurs.

Comment faire pour que les paramètres apparaissent dans les scripts (je suis trop paresseux pour modifier constamment le code pour de nouvelles conditions)... ?

 
Interesting:

Les développeurs.

Comment faire pour que les paramètres apparaissent dans les scripts (je suis trop paresseux pour modifier constamment le code pour de nouvelles conditions)... ?


#property script_show_inputs