Questions des débutants MQL5 MT5 MetaTrader 5 - page 623

 
-Aleks-:
Non, je n'en ai pas besoin dans le testeur, mais lorsque le terminal fonctionne réellement sur un graphique - il ne fonctionnera que si l'historique contient moins que le nombre maximum de barres, ou est-ce que je me trompe ?

Et en temps réel, rates_total et Bars() seront incrémentés lorsque l'indicateur fonctionnera. Vous ne pourrez pas obtenir rates_total dans OnInit(), car le paramètre n'est pas transmis à la fonction. Vous devez vérifier l'historique dans tous les cas dans OnCalculate().

 
Bonjour à tous, aidez-moi à trouver un conseiller expert. J'ai besoin d'une boîte (box) avec réglage de l'heure de la session, division en trois ordres dans chaque direction, fonctions de trailing et stop loss. Je me suis déjà noyé dans ma recherche sur les grands espaces. Je suis presque au bord d'un précipice, encore un peu de temps et je commencerai à apprendre la langue et l'éditeur pour écrire moi-même !!!!. AIDE ! !!
 
Alexey Kozitsyn:

Et en temps réel, rates_total et Bars() seront incrémentés lorsque l'indicateur fonctionnera. Vous ne pourrez pas obtenir rates_total dans OnInit(), car le paramètre n'est pas transmis à la fonction. L'historique doit être vérifié dans tous les cas dans OnCalculate().

En d'autres termes, nous devrions créer un indicateur, où nous vérifions le nombre de barres et si tout est ok, nous remplissons la mémoire tampon du graphique avec une barre, puis nous attendons dans l'EA jusqu'à ce que nous obtenions une barre de l'indicateur, et seulement ensuite nous continuons à travailler, n'est-ce pas ?
 
-Aleks-:
C'est-à-dire que nous devons créer un indicateur séparé, où nous vérifions le nombre de barres et si tout est OK, nous remplissons la mémoire tampon du graphique avec une barre, puis nous attendons dans l'EA jusqu'à ce que nous obtenions une barre de l'indicateur, et seulement ensuite nous continuons à travailler, n'est-ce pas ?
Bien sûr que non... Pourquoi ce serait si compliqué... Revoyons tout ça. Quel est l'objectif ? Pour obtenir l'historique complet disponible pour les calculs ?
 
Alexey Kozitsyn:
Bien sûr que non... Pourquoi le rendre si compliqué... On recommence. Quel est l'objectif ? Pour obtenir tout l'historique disponible pour le calcul ?

Le problème est que pour que l'EA fonctionne correctement, il doit calculer l'historique une fois. Ainsi, il arrive que lorsque vous allumez le terminal avec cet EA, il y a un historique et, en conséquence, l'initialisation et le calcul sont effectués, mais cet historique peut ne pas être complet et un nouveau sera chargé après la connexion au terminal.

Je pense que nous pouvons tracer la connexion avec le terminal et ensuite, si elle est disponible, vérifier les changements de la dernière barre dans HLCO et si elle est disponible, nous attendons, et si elle n'est pas disponible dans les x secondes, nous effectuons le calcul.

 
-Aleks-:

Le problème est que pour que l'EA fonctionne correctement, il doit calculer l'historique une fois. Ainsi, il arrive que lorsque vous allumez le terminal avec cet EA, il y a un historique et, en conséquence, l'initialisation et le calcul sont effectués, mais cet historique peut ne pas être complet, et un nouveau sera chargé après la connexion au terminal.

Je pense que nous pouvons tracer la connexion avec le terminal et ensuite, si elle est disponible, vérifier les changements de la dernière barre par HLCO et si elle est disponible, nous attendons, mais si elle n'est pas disponible dans les x secondes, nous effectuons le calcul.

Le conseiller expert utilise-t-il des indicateurs personnalisés ?

Par exemple, vous pouvez faire ce qui suit : vous vérifiez la taille de l'historique grâce à Bars(). Puis voyez si Bars() > prev_bars+1 (la taille de l'historique sur le tick précédent) - alors vous réinitialisez toutes les données sauvegardées et faites un recalcul complet du Conseiller Expert à partir de zéro. Cette construction doit être insérée en premier dans OnTick().

Il n'est pas nécessaire de s'occuper de la connexion au terminal, des pauses, etc. L'option la plus simple est souvent la meilleure.

 
Alexey Kozitsyn:

Le conseiller expert utilise-t-il des indicateurs personnalisés ?

Par exemple, vous pouvez faire ceci : vérifier la taille de l'historique via Bars(). Puis voyez si Bars() > prev_bars+1 (la taille de l'historique sur le tick précédent) - alors vous réinitialisez toutes les données sauvegardées et faites un recalcul complet du Conseiller Expert à partir de zéro. Cette construction doit être insérée en premier dans OnTick().

Il n'est pas nécessaire de s'occuper de la connexion au terminal, des pauses, etc. La variante la plus simple est le plus souvent la meilleure.

Le conseiller expert utilise beaucoup de choses, y compris des indicateurs.

Je comprends que la variante suggérée recalculera sur chaque barre, ou est-ce que je me trompe ?

 
-Aleks-:

Le conseiller expert utilise beaucoup de choses, y compris des indicateurs.

Je comprends que cette variante sera recalculée à chaque barre, ou est-ce que je me trompe ?

Non, pourquoi sur tous les bars ? L'Expert Advisor sera recalculé complètement seulement si plus d'une barre est ajoutée à l'historique ! Si une barre est ajoutée (une nouvelle barre se forme), le recalcul complet ne sera pas effectué.

Si vous utilisez des indicateurs et qu'ils ont des variables globales, elles doivent être remises à zéro lorsque vous les exécutez pour la première fois. Sinon, des artefacts peuvent apparaître sur le graphique / les indicateurs peuvent être affichés de manière incorrecte.

 
Alexey Kozitsyn:

Non, pourquoi sur chacun ? Un recalcul complet de l'EA ne se produira que si plus d'une barre a été ajoutée à l'histoire ! Si une barre est ajoutée (une nouvelle barre se forme), il n'y aura pas de recalcul complet.

Si vous utilisez des indicateurs et qu'ils ont des variables globales, elles doivent être remises à zéro lorsque vous les exécutez pour la première fois. Sinon, des artefacts peuvent apparaître sur le graphique / les indicateurs peuvent être affichés de manière incorrecte.

Je n'avais pas fait attention au +1, merci, je pense que ce n'est pas une mauvaise option.
 
Pouvez-vous me dire pourquoi cela peut arriver ?

double A ;
int x, y ;

x=100 ; y=3 ; A=x/y=33 000
Raison: