Erreurs, bugs, questions - page 1234

 
Renat:

Oui.

Une autre question. La fonction BarsCalculated() se comporte-t-elle de la même manière lorsqu'elle est appelée depuis un EA et un indicateur ?
 
Tapochun:
Une autre question. La fonction BarsCalculated() se comporte-t-elle de la même manière lorsqu'elle est appelée à partir d'un EA et d'un indicateur ?
Quel est le problème ?
 
Renat:
Qu'est-ce qui ne va pas ?

C'est juste que j'ai expérimenté avec différentes informations. Si je comprends bien, ils devraient fonctionner de la même manière. Mais ils ne le font pas. Comme c'est dimanche, il n'y a pas moyen de vérifier l'heure actuelle. Mais ils fonctionnent aussi différemment dans le testeur. Voici deux exemples de code. L'essentiel est le suivant. Nous essayons d'obtenir des données de sept TF. Nous ne commençons pas (tant le conseiller que l'indicateur) par le TF le plus significatif. Par exemple, de М15. Si le tick actuel a synchronisé la formation d'une nouvelle bougie et l'obtention de données sur cette bougie via BarsCalculated() - alors nous enregistrons le nombre de barres calculées en utilisant BarsCalculated() et l'heure de la bougie actuelle. Voir les détails dans le code.

L'indicateur.

Première coche.

Pour chaque TF, une nouvelle bougie est formée. Mais sur TF M1, M5, M15, BarsCalculated() renvoie 0. Mais sur TF M30, H1, H4, D1 il renvoie -1. Nous avons ici une question : pourquoi la fonction fonctionne-t-elle différemment ? Par conséquent, si nous l'exécutons sur le TF M30, pour les TF M1, M5, M15, M30,BarsCalculated() renvoie 0. Et, respectivement, pour les TF H1, H4, D1, il renvoie -1. Nous pouvons en conclure que pour le TF le plus élevé, les données sont initialement indisponibles.

Le deuxième tic-tac.

Selon la logique du code, la synchronisation, c'est-à-dire l'écriture des paramètres (le tout selon les journaux d'échantillons) ;

Le troisième et le prochain tic-tac.

Nous obtenons une nouvelle barre par indicateur pour TF M30, H1, H4, D1. Bien que les données semblent avoir déjà été obtenues. Et il s'avère que le nombre sur TF, supérieur au nombre actuel, est plus grand de 1. Comportement très étrange. Dans le futur (en utilisant l'exemple actuel), nous ne pourrons pas obtenir la synchronisation.

Conseiller expert.

Le premier tic.

La synchronisation est mise en œuvre immédiatement. La nouvelle valeur de BarsCalculated() est reçue de manière synchrone avec la formation d'une nouvelle bougie.

Deuxième tic et suivants.

Comportement logique de la fonction. Tout est synchronisé.

Exécutez les deux exemples par ticks dans le testeur, vous verrez par vous-même. Le comportement actuel de la fonction est différent pour les conseillers experts et les indicateurs. De plus, les données provenant des indicateurs sont retardées pour les périodes plus longues. Ainsi, je pense qu'en demandant des données pour M15 et M30, elles ne seront pas disponibles en même temps.Les données réelles ne le sont certainement pas !

Si je me trompe, veuillez m'indiquer comment obtenir correctement les données de l'indicateur de l'ancien TF ? Merci.

 
//+------------------------------------------------------------------+
//| Search position of an element in a sorted list                   |
//+------------------------------------------------------------------+
CObject *CList::QuickSearch(CObject *element)
  {
   int      i,j,m;
   CObject *t_node=NULL;
//--- check
   if(m_data_total==0)
      return(NULL);
//--- check the pointer is not needed
   i=0;
   j=m_data_total;
   while(j>=i)
     {
      //--- ">>1" is quick division by 2
      m=(j+i)>>1;
      if(m<0 || m>=m_data_total)
         break;
      t_node=GetNodeAtIndex(m);
      if(t_node.Compare(element,m_sort_mode)==0)
         break;
      if(t_node.Compare(element,m_sort_mode)>0)
         j=m-1;
      else
         i=m+1;
      t_node=NULL;
     }
//--- result
   return(t_node);
  }
Bibliothèque standard CList
Pourquoi appelerCompare deux fois ? Cela peut être une opération coûteuse (si nous devons vérifier l'égalité de grands objets, et non l'équivalence de quelques champs).
On peut simplement enregistrer le résultat après le premier appel deCompare.
 
Renat:
Dois-je attendre ici votre réponse ? Ou dois-je l'apporter au bureau de service ?
 

D'où viennent ces icônes en bas du graphique ?

Il n'y a pas d'indicateur sur le graphique, mais les icônes apparaissent à chaque fois. J'en ai marre de les supprimer. Comment puis-je désactiver ce truc ? Je ne trouve rien à ce sujet dans les paramètres du terminal.

 
meat:

D'où viennent ces icônes en bas du graphique ?

Il n'y a pas d'indicateur sur le graphique, mais des icônes apparaissent à chaque fois. J'en ai marre de les supprimer. Comment puis-je désactiver cette merde ? Je ne trouve rien à ce sujet dans les paramètres du terminal.

Il s'agit des événements de l'onglet "Calendrier". Pour supprimer : cliquez avec le bouton droit de la souris dans l'onglet "Calendrier" -> "Afficher sur les graphiques" -> "Supprimer tous les événements".

P. S. Et décochez l'option "Mise à jour automatique". Désormais, les nouveaux événements du calendrier ne seront pas affichés sur le graphique.

 
crOss:
Prenez n'importe quel conseiller expert (parmi les exemples de MetaQuotes), exécutez-le sous le build 975 sur une certaine période et avec les mêmes paramètres,
Obtenez les résultats, c'est-à-dire le graphique de la courbe de rendement et le tableau des transactions.


Maintenant, exécutez la même EA sous la build 1010 sur la même période et avec les mêmes paramètres, vous obtenez des résultats complètement différents...

P.S. Metatester est en 32 bits

Lequel de ces résultats est correct ? Dans la version 975 ou dans la version 1010 ?
 

Bonjour à tous) S'il vous plaît, aidez-moi à démarrer la minuterie :

int OnInit()

{

bool setTimer=EventSetTimer(60) ;

Print("setTimer") ;

}

void OnTimer()

{

Print("Temps qui passe") ;

}

Question : pourquoi cela ne fonctionne-t-il pas ? J'ai perdu la tête...(((.

 

Dans quel programme l'exécutez-vous ? L'essayez-vous dans un script ? Changez-le en indicateur ou en expert.
Et ajoutez

Print("Set timer") ;
Retourner INIT_SUCCEED ;