Erreurs, bugs, questions - page 2729

 
Erreur de compilation
class A {  
public:
        static int i;
} a; //Error: unresolved static variable 'A::i'
int A::i = 0;
 
Igor Zakharov:

l'ordre, c'est lorsque le compilateur donne un avertissement (ou une erreur). la conversion d'entiers en fractions renvoie 0 - c'est un non-sens, pas un ordre. c'est ainsi que 90% des anciens codes se cassent.

et remarquez que la variante qui fonctionne est toujours avec int ! c'est-à-dire que le problème n'est pas la conversion de type à l'étape de substitution, mais à l'étape de calcul.

AJOUTÉ : passage à MQ-demo, mise à jour du terminal de travail. Il n'a pas ce problème.

L'absence de mise en évidence des options possibles dans ce cas n'est-elle pas suspecte ?

   ObjectSetDouble (0,name,OBJPROP_ANGLE,dir// тут должен появиться список вариантов переменных double
 
Erreur pendant l'exécution
class A {  
public:
         A() { i = ++ii; printf( "%d", i ); }
        ~A() {           printf( "%d", i ); }
        int i;
        static int ii;
};
int A::ii = 0;
A a[ 2 ];
void OnStart() {}

  • Le résultat en MQL : 1212
  • et en C++ : 1221
 
Alexey Viktorov:

L'absence de mise en évidence des options possibles dans ce cas n'est-elle pas suspecte ?

:)

 
Igor Zakharov:

:)

Oui... C'est étrange, les variables du mauvais type n'étaient pas mises en évidence depuis un moment. Peut-être qu'ils l'ont corrigé exprès ou qu'ils prêteront attention à ce dialogue et le corrigeront à nouveau. Quoi qu'il en soit, si la fonction nécessite une variable de type double, il faut utiliser double.

 
Ça a toujours été une erreur.
#define  MACRO( X, Y )
MACRO( 1, 2, 3) //Warning: too many arguments for function-like macro 'MACRO'
Pourquoi un avertissement ? D'autant plus qu'ils sont toujours en nombre excessif et que vous n'y faites pas attention parfois.
 
Alexey Viktorov:

Oui... Étrange, pendant un certain temps, les variables d'un type inapproprié n'étaient pas mises en évidence. Peut-être qu'ils l'ont corrigé exprès ou qu'ils prêteront attention à ce dialogue et le corrigeront à nouveau. De toute façon, si la fonction requiert le type double de la variable, il faut utiliser double.

Alexei, j'ai remarqué que tu aimes les liens vers la documentation, j'en ai un pour toi :)

https://www.mql5.com/ru/docs/basis/types/casting

int vers double est une conversion implicite valide sans perte de données. légitime.

Документация по MQL5: Основы языка / Типы данных / Приведение типов
Документация по MQL5: Основы языка / Типы данных / Приведение типов
  • www.mql5.com
Часто возникает необходимость преобразовать один числовой тип в другой. Не каждый числовой тип допустимо преобразовать в другой, допустимые преобразования в MQL5 показаны на схеме: Сплошные линии со стрелками обозначают преобразования, которые выполняются без потери информации. Вместо типа char может выступать тип bool (оба занимают в памяти 1...
 

question sur le fonctionnement du testeur de stratégie.

J'exécute le test. Le conseiller expert ouvre une position avec SL et TP. Puis il roule et la position est fermée sans être rouverte.

Qu'est-ce que c'est ? Un bug ? Je n'ai pas utilisé le testeur depuis un certain temps et il ne présentait pas de tels problèmes. Voici le journal du testeur. Nous voyons que la position a été ouverte puis fermée après le roulement et qu'elle est en quelque sorte écrite BUY, mais en fait elle ne montre aucune transaction ouverte. J'ai collé dans le testeur la commande

PositionSelect(_Symbol) pour vérifier s'il existe des positions ouvertes après le retournement, le résultat est toujours le même - aucune position ouverte.


2020.04.28 18:14:14.609 2014.01.09 05:00:00 achat instantané 1,00 AUDUSD à 0,88800 sl : 0,88450 tp : 0,89200 (0,88750 / 0,88800 / 0,88750)

2020.04.28 18:14:14.609 2014.01.09 05:00:00 deal #8 buy 1.00 AUDUSD at 0.88800 done (based on order #8)

2020.04.28 18:14:14.610 2014.01.09 05:00:00 affaire conclue [#8 acheter 1.00 AUDUSD à 0.88800

2020.04.28 18:14:14.610 2014.01.09 05:00:00 ordre exécuté acheter 1.00 à 0.88800 [#8 acheter 1.00 AUDUSD à 0.88800


2020.04.28 18:14:24.169 2014.01.09 23:59:59 deal #9 vendre 1.00 AUDUSD à 0.88980 fait (basé sur l'ordre #9)

2020.04.28 18:14:24.169 2014.01.09 23:59:59 rollover deal done [#9 sell 1.00 AUDUSD at 0.88980

2020.04.28 18:14:24.170 2014.01.09 23:59:59 deal #10 buy 0.00 AUDUSD at 0.8899950 done (based on order #10)

2020.04.28 18:14:24.170 2014.01.09 23:59:59 opération de transfert effectuée [#10 achat 0.00 AUDUSD à 0.8899950]


 
Igor Zakharov:

Alexei, j'ai remarqué que tu aimes les liens vers la documentation, j'en ai un pour toi :)

https://www.mql5.com/ru/docs/basis/types/casting

int vers double est une conversion implicite valide sans perte de données. légitime.

Je crée un lien vers la documentation afin de ne pas avoir à réécrire la documentation dans le billet et pour que les gens s'habituent à lire la documentation. Imaginez qu'il y a des gens ici sur le forum qui ne savaient pas du tout que cette documentation existait. En ce qui me concerne, j'ai vu une telle image dans la documentation, mais je n'ai pas essayé de la comprendre en profondeur. L'habitude d'utiliser des variables du type requis par la fonction me suffit. En dernier recours, je forcerai la conversion vers le bon type.

 
mox_dimass:

Exécution du test. L'EA ouvre une position avec SL et TP. Ensuite, le renversement se produit et la position est fermée NON par réouverture.

C'est la première fois que j'entends parler de rollover dans le Tester sur le symbole forex. Quel genre de serveur est-ce ?

Raison: