[ARCHIVE] Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 3. - page 180

 

Lorsque vous travaillez avec des nombres de type double, lorsque vous devez attribuer une valeur à une variable (par exemple, zéro), les différents auteurs ont des orthographes différentes. Par exemple, a=0 ; ou a=0.0 ; ou a=0.0000 ; Y a-t-il une différence en termes de fonctionnement correct du programme ?

 

si ((OrderSymbol()==Symbol()) && ((OrderMagicNumber()==44) || (OrderMagicNumber()==55)) && (ticket==0)){

OrderDelete(OrderTicket()) ;

int err1=GetLastError() ;

Print(err1);}

Ce morceau de code fonctionnait bien depuis peu... maintenant une erreur ERR_OFF_QUOTES est renvoyée. Veuillez noter que l'erreur est renvoyée par OrderDelete, même si le numéro de ticket est saisi manuellement. Quelqu'un peut-il clarifier la situation ? Merci.

 
Elenn:

Lorsque vous travaillez avec des nombres de type double, lorsque vous devez attribuer une certaine valeur à une variable (par exemple zéro), les différents auteurs ont des orthographes différentes. Par exemple, a=0 ; ou a=0.0 ; ou a=0.0000 ; Y a-t-il une différence en termes de fonctionnement correct du programme ?


Non, il n'y a pas de règle. Mais personnellement, je préfère écrire les valeurs doubles constantes en utilisant un point.

Par exemple :

if ( a == 1.0 )
{}

// ...

b = 3.0;

Tout d'abord, un rapide coup d'œil au texte montre que le type de valeur est double.

Deuxièmement, elle permet d'éviter certaines erreurs. Comparez :

double a=2/3;
double b=2.0/3.0;

Print("a=",a," b=",b);
 

Aidez-moi, s'il vous plaît. Il ne veut pas exécuter le code :

int start()
{
int pre12 ;
{
si(PRICE_CLOSE>PRICE_OPEN)
pre12=OrderSend(Symbol(),OP_BUY,0.1,Ask,3,"",Bid-100*Point,Ask+100*Point,CLR_NONE) ;
}
retour ;

}

C'est-à-dire, comme prévu, si la bougie est ascendante - ouvrir.

Tout se compile. Mais rien ne se passe pendant le test. C'est-à-dire qu'il ne passe pas de commande. Faites un trou dans l'erreur, s'il vous plaît...

 
NaVolne:

Aidez-moi, s'il vous plaît. Le code ne veut pas s'exécuter :

int start()
{
int pre12 ;
{
if(PRICE_CLOSE>PRICE_OPEN)
pre12=OrderSend(Symbol(),OP_BUY,0.1,Ask,3,"",Bid-100*Point,Ask+100*Point,CLR_NONE) ;
}
retour ;

}

C'est-à-dire que si la bougie monte, elle s'ouvre.

Tout se compile. Mais rien ne se passe pendant le test. C'est-à-dire qu'il ne passe pas d'ordres. S'il vous plaît, pointez juste du doigt l'erreur.

Quel est le chandelier actuel sur le graphique ? Le chandelier de la veille ? Le chandelier de la semaine précédente ? Si c'est le chandelier de la veille, par exemple... cela ressemblerait à ceci

if(iOpen(NULL,1440,1)<iClose(NULL,1440,1)) l'helplet iOpen/iClose décrit tout clairement

 
NaVolne:

Aidez-moi, s'il vous plaît. Il ne veut pas exécuter le code :

int start()
{
int pre12 ;
{
si(PRICE_CLOSE>PRICE_OPEN)
pre12=OrderSend(Symbol(),OP_BUY,0.1,Ask,3,"",Bid-100*Point,Ask+100*Point,CLR_NONE) ;
}
retour ;

}

C'est-à-dire que, comme prévu, si la bougie est ascendante, elle s'ouvre.

Tout se compile. Mais rien ne se passe pendant le test. C'est-à-dire qu'il ne passe pas de commande. Faites un trou dans l'erreur, s'il vous plaît...

Le fait est que PRICE_CLOSE et PRICE_OPEN sont des constantes, pas des fonctions et pas des tableaux de séries chronologiques. Pour obtenir les valeurs des prix d'ouverture et de fermeture des chandeliers, nous devons nous référer à des fonctions(iOpen et iClose) ou à des tableaux de séries chronologiques(Open et Close).

Pour en savoir plus, lisez le tutoriel, par exemple cette section explique les variables prédéfinies (qui incluent les tableaux de séries temporelles que vous voulez, Open et Close).

 
Elenn:

Lorsque vous travaillez avec des nombres de type double, lorsque vous devez attribuer une valeur à une variable (par exemple, zéro), les différents auteurs ont des orthographes différentes. Par exemple, a=0 ; ou a=0.0 ; ou a=0.0000 ; Y a-t-il une différence en termes de fonctionnement correct du programme ?

Je comprends qu'en cas de

double a = 1;

Le compilateur prend "1" comme une valeur de type int et la conversion de type est effectuée (int vers le type double cible).

Et en cas de :

double a = 1.0

ou (il n'y a pas de différence)

double a = 1.0000

le compilateur voit "1.(xxxx)" comme une valeur de type double et la conversion de type n'est pas effectuée.


P.S. : Merci à PapaYozh pour l'exemple. Les pensées ci-dessus sont venues après.

Je suppose que c'est plus facile pour le compilateur quand il ne cite pas les types trop souvent. Ou peut-être y a-t-il des lignes avec des types "non convertis" dans l'ex4 aussi ? Cela signifie-t-il que les performances ralentissent ? Bien que le compilateur soit censé optimiser le code.

Que les programmeurs MQL4 plus expérimentés me corrigent.

 
Merci pour les méga réponses. Lire, creuser.
 
NaVolne:
Merci pour les méga réponses. Lire, creuser.
Vous devriez lire le manuel, pas nos réponses ! :)) De croûte en croûte, naturellement.
 
LexAlex:

Ce morceau de code fonctionnait bien jusqu'à récemment... maintenant l'erreur ERR_OFF_QUOTES est renvoyée. Veuillez noter que l'erreur est renvoyée par OrderDelete, même si le numéro de ticket est écrit à la main. Quelqu'un peut-il clarifier la situation ? Merci.

Peut-être que c'est au niveau du gel. Peut-être que quelque chose ne va pas sur le compte et que le courtier a arrêté le flux en raison de transactions fréquentes sur le compte.
Raison: