Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 6. - page 9

 
gyfto:

Vous pourriez écrire if((b-a)*(c-a)*(d-a)>0), mais pas nécessairement plus rapidement. Le ET logique est une multiplication binaire, c'est juste une autre notation de la même expression, la seule différence est la taille des types de variables. a>b est une variable booléenne, 4 octets, et b-a, s'ils sont doubles, la différence sera double (8 octets), et cette multiplication est au moins 2 fois plus longue.


Un conseil inestimable.

Laissez-moi vous expliquer. Vous pouvez réécrire votre expression comme if(((a>b)*(a>c)*(a>d)==1), car les expressions entre parenthèses prennent les valeurs 0 ou 1 (et elles sont à leur tour définies dans define dans le précompilateur comme false et true).

Merci - Je pense que cela fonctionnera plus rapidement
 

Les gars, s'il vous plaît, conseillez-nous.

En mode test de stratégie, je ne peux pas modifier les chiffres dans les propriétés d'optimisation :

Solde minimum de 200

Bénéfice maximum 10000

etc.

Quel est le problème ?

 

Pouvez-vous me dire quelles valeurs peuvent renvoyer init, start et deinit et ce qu'elles signifient ?

J'ai essayé de chercher dans le forum mais je ne l'ai pas trouvé. Cette information ne figure pas dans le manuel. Il s'agit probablement d'informations confidentielles. : )))(Texte émotionnel supprimé... )

Comme je le devine - "0" - tout s'est bien passé... Mais, comme leur type est interger, apparemment il peut y avoir plus de 2 valeurs...

 
Chiripaha:

Pouvez-vous me dire quelles valeurs peuvent renvoyer init, start et deinit et ce qu'elles signifient ?

J'ai essayé de chercher dans le forum mais je ne l'ai pas trouvé. Cette information ne figure pas dans le manuel. Il s'agit probablement d'informations confidentielles. : )))(Texte émotionnel supprimé... )

Comme je le devine - "0" - tout s'est bien passé... Mais, puisque leur type est interger, apparemment il peut y avoir plus de 2 valeurs...

Ce point a été discuté assez récemment. Référence :

Il existe 3 fonctions avec des noms prédéfinis dans MQL4 :

init() - fonction appelée pendant l'initialisation du module. S'il est absent, aucune fonction n'est appelée pendant l'initialisation.

start() - la fonction principale. Il est appelé par les conseillers experts après la réception du prochain tick. Pour les indicateurs personnalisés, il est appelé pendant le recalcul après que l'indicateur soit attaché au graphique, lorsque le terminal client est ouvert (si l'indicateur est attaché au graphique), et aussi après l'arrivée du prochain tick. Dans les scripts, il est exécuté immédiatement après l'attachement au graphique et l'initialisation. S'il n'y a pas de fonction start() dans le module, ce module (Expert Advisor, script ou indicateur personnalisé) ne peut pas être lancé.

deinit() - la fonction qui est appelée pendant la désinitialisation du module. S'il est absent, aucune fonction n'est appelée pendant la désinitialisation.

Les fonctions prédéfinies peuvent avoir des paramètres. Cependant, lorsque ces fonctions sont appelées par le terminal client, aucun paramètre ne sera passé de l'extérieur, mais les valeurs par défaut seront utilisées.
Les fonctions start(), init() et deinit() peuvent être appelées de n'importe où dans le module selon les règles générales, ainsi que d'autres fonctions.

Il n'est pas souhaitable d'appeler start() ou trade à partir de la fonction init(), car au moment de l'initialisation du module, les données graphiques, les prix du marché, etc. peuvent ne pas être prêts. Les fonctions init() et deinit() doivent terminer leur travail le plus rapidement possible et ne doivent en aucun cas rester bloquées en essayant de lancer un fonctionnement complet avant l'appel de la fonction start().

Pour les appels système, le retour n'a pas d'importance.
 

Ok, alors je vais essayer de clarifier la question.

Par exemple, je veux vérifier certains paramètres à l'étape d'initialisation et, en fonction du résultat, passer à l'étape de démarrage ou non.

Si j'ai bien compris votre commentaire, Vadim, alors le résultat de l'initialisation n'aura pas d'importance (dans ce cas) et la fonction Start sera lancée ?

 

alors vous devez appeler l'init dès le début.

Pourquoi devez-vous vous donner tout ce mal ? Les variables globales n'ont pas encore été annulées...

 
Chiripaha:

Ok, alors je vais essayer de clarifier la question.

Par exemple, je veux vérifier certains paramètres à l'étape d'initialisation et, en fonction du résultat, passer à l'étape de démarrage ou non.

Si j'ai bien compris votre commentaire, Vadim, le résultat de l'initialisation n'aurait pas d'importance (dans ce cas) et la fonction Start serait lancée ?

Rustam a répondu :

FAQ:

alors vous devez appeler l'init depuis le début vous-même.

Pourquoi une telle complication ? Personne n'a encore annulé les variables globales...

Vous déclarez des variables globales et les initialisez si nécessaire. Toutes les fonctions d'un même module peuvent voir les variables globales.
 
Zhunko:

Rustam a répondu :

Vous déclarez les variables de manière globale et les initialisez si nécessaire. Toutes les fonctions d'un module peuvent voir les variables globales.

Oui, sauf s'il s'agit d'un contrôle pour restreindre l'accès au programme, par exemple.
 
FAQ:

alors vous devez appeler l'init dès le départ.

Pourquoi devez-vous vous donner tout ce mal ? Les variables globales n'ont pas encore été annulées...


Ne serait-il pas plus facile de vérifier avec un drapeau ? Bien sûr...
 
hoz:

Ne serait-il pas plus simple de le vérifier avec un drapeau ? Certainement mondial...

Non, ce n'est pas plus facile. Parce que s'il y avait un drapeau négatif (ou une variable globale), la vérification doit quand même être exécutée. L'indicateur et la variable globale ne fonctionnent que dans le cas positif. Et certaines fonctions sont toujours nécessaires au départ (bien que ce soit différent ici).

Quelle que soit la façon dont vous le voyez, commencez quand même : soit en refaisant "inite", ce qui est tout aussi ennuyeux, soit en refaisant les fonctions requises.

Raison: