Vous manquez des opportunités de trading :
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Inscription
Se connecter
Vous acceptez la politique du site Web et les conditions d'utilisation
Si vous n'avez pas de compte, veuillez vous inscrire
Le code ArrayInitialize ne fonctionne pas est joint, si on décommente la boucle, tout est normal.
Et lorsque l'on déclare des variables dans une classe et un indicateur au niveau global avec le même nom, un avertissement apparaît.
Pendant le week-end, alors qu'il n'y avait pas de ticks, j'ai débogué l'indicateur sur des comptes de démonstration, en l'exécutant sur la dernière version de deux instances du terminal MT5, mais de sociétés différentes : MetaQuotes et EGlobal. Les paramètres sont les mêmes partout. Pour être sûr, je l'ai vérifié hors ligne, donc le facteur tic est exclu.
Le problème est que le code le plus simple du "sous-indicateur" (sans parler de l'indicateur à part entière, plus complexe) affiche un nombre différent de résultats dans les différents terminaux des différentes entreprises :
1. EGlobal. 2. MetaQuotes.
J'ai complètement déchargé les deux terminaux (vérifié avec le gestionnaire de tâches par les processus de mémoire), je les ai rechargés et j'ai recompilé les deux codes, juste au cas où. En fin de compte - aucun changement.
MathRound() fonctionne différemment en 4 et 5, et devrait être le même.
Le code 4p's :
Code de 5 secondes :
MathRound() fonctionne différemment en 4 et 5, et devrait être le même.
Code de 4 secondes :
Code de 5 secondes :
Le problème est là :
Cette valeur est arrondie différemment en 4 et 5.
Pas de surprise, c'est comme ça que ça doit être.
Pourquoi MT5 ne sauvegarde-t-il pas l'historique des ordres, etc., si le test est interrompu ? Dans MT4, il a été sauvegardé.
De plus, il n'y a pas de positionnement dans l'historique des ordres à partir du graphique d'essai - il était pratique de visualiser les ordres dans la zone des grands rabattements en cliquant sur le graphique.
Bonsoir.
Pouvez-vous m'expliquer, s'il vous plaît, comment fonctionne la méthode SLeep() ?
Il devrait mettre le conseiller expert en pause pendant un certain temps, ou est-ce que je me trompe ?
{for (int sleep=0;sleep<10000;sleep++)
si(BarsCalculated(Handle)>=o_bars_reoptimizate)
{ Print(BarsCalculated(Handle)) ; break ; } sinon Sleep(100);}
Pour ce code, j'attends le résultat suivant : si le nombre de barres calculé pour un certain indicateur est supérieur à une certaine valeur, la boucle est interrompue ; sinon, l'exécution du code est retardée de 100 ms. Le délai total possible est de 100*10000ms....C'est un délai suffisant pour le calcul de l'indicateur. Alors pourquoi le code continue à s'exécuter (qui suit ce cycle) ? ou dans le testeur, cette fonction ne fonctionne pas comme je le suppose. Merci d'avance pour cette clarification.
Bonsoir.
Pouvez-vous m'expliquer, s'il vous plaît, comment fonctionne la méthode SLeep() ?
Il devrait mettre le conseiller expert en pause pendant un certain temps, ou est-ce que je me trompe ?
{for (int sleep=0;sleep<10000;sleep++)
si (BarsCalculated(Handle)>=o_bars_reoptimizate)
{ Print(BarsCalculated(Handle)) ; break ; } sinon Sleep(100);}
Pour ce code, j'attends le résultat suivant : si le nombre de barres calculé pour un certain indicateur est supérieur à une certaine valeur, la boucle est interrompue ; sinon, l'exécution du code est retardée de 100 ms. Le délai total possible est de 100*10000ms....C'est un délai suffisant pour le calcul de l'indicateur. Alors pourquoi le code continue à s'exécuter (qui suit ce cycle) ou dans le testeur, cette fonction ne fonctionne pas comme je le suppose. Merci d'avance pour cette clarification.
La documentation, par exemple, de CopyBuffer, provoque des secousses cérébrales : "Si vous souhaitez effectuer une copie partielle des valeurs de l'indicateur dans un autre tableau (pas le tampon de l'indicateur), vous devez utiliser le tableau intermédiaire à cette fin, dans lequel les valeurs requises sont copiées. Et déjà à partir de ce tableau intermédiaire, copier élément par élément le nombre requis de valeurs aux bons endroits du tableau récepteur. "
Si lenuméro de tampon est explicitement mentionné, la nécessité de lier au préalable le tableau récepteur au tampon indicateur avec l'un ou l'autre numéro de séquence par le biais de SetIndexBuffer est certainement implicite. Mais,"si nous voulons copier certaines valeurs de l'indicateur dans un autre tableau (pas le tampon de l'indicateur)", nous ne pouvons pas parler debuffer_num, parce que ce n'est pas un indicateur, et nous ne l'avons pas relié à quoi que ce soit par définition.
Une contradiction ?
Ambiguïté ?
Ou peut-être suis-je complètement programmé ?
J'ai essayé de trouver une définition claire d'un tampon indicateur et j'ai échoué. S'agit-il vraiment d'un tampon lié via SetIndexBuffer ou cela ne suffit pas et ce devrait être un tableau avec l'identifiant INDICATOR_DATA?