Erreurs, bugs, questions - page 1241

 
joo:

:O

Non, l'erreur n'apparaît plus.

Schrodinger arpentait la pièce à la recherche d'un chaton mal en point, mais celui-ci était assis dans une boîte, ni mort ni vivant. )))

 
tol64:

Schrodinger arpentait la pièce à la recherche d'un chaton mal en point, mais le chaton était assis dans une boîte, ni mort ni vivant. )))

Très étrange en effet. Qu'est-ce qui va cesser de fonctionner la prochaine fois ?
 
joo:
Très étrange en effet. Qu'est-ce qui ne fonctionnera plus la prochaine fois ?
Il n'y a rien à dire. Nous devrons mettre un chèque dessus. )
 
joo:

J'ai mis les empreintes en place - l'erreur a disparu...

L'effet observateur en mécanique quantique est quelque chose...

Nous n'avons reproduit votre situation que lorsque nous avons glissé NaN dans l'expression.
 
Renat:
Nous n'avons reproduit votre situation que lorsque nous avons glissé NaN dans l'expression.

Alors, est-ce que fabs fonctionne correctement ou pas ?

 
joo:

fabs fonctionne-t-il correctement ou non ?

Bien.
 

Bonjour, je demande de l'aide pour mettre en œuvre ce qui me semble être un dispositif simple.

J'ai un EA qui fonctionne bien sur un seul symbole. Je veux le "modifier" pour qu'il fonctionne pour plusieurs symboles à la fois. Pour cela, je dois créer correctement un tableau de données, dont les membres pourraient être accessibles par toutes les instances de l'EA attachées à plusieurs symboles différents. C'est-à-dire qu'il n'y a qu'un seul tableau de données, mais il y a plusieurs instances de l'EA. Chaque instance de l'EA peut lire et modifier les membres du tableau.

Si je comprends bien, vous devez créer un tableau avec des membres statiques (static).

Un exemple simple : comptez le nombre total de ticks sur tous les graphiques, où les EAs sont attachés. Attachons l'EA à 2 graphiques et sur l'événement OnTick() augmentons le compteur de 1. Pour plus de simplicité, j'ai essayé d'utiliser une variable statique compteur au lieu du tableau. Malheureusement, chaque EA ne fonctionne qu'avec son compteur, le compteur n'est pas "commun". Résultat :

symbole1, tick1 : compteur = 0 ;

symbole1, tick2 : compteur = 1 ;

symbol2, tick1 : counter = 0 ; - ici attendu counter = 2

Par exemple, j'ai créé une classe simple avec un compteur :

//+------------------------------------------------------------------+
//|                                                   TestStatic.mqh |
//|                        Copyright 2014, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2014, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"
#property strict
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
class TestStatic
  {
private:
static int counter;
public:
                     TestStatic();
                    ~TestStatic();

static void IncreaseCounter();
  };
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
TestStatic::TestStatic()
  {
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
TestStatic::~TestStatic()
  {
  }
//+------------------------------------------------------------------+
int TestStatic::counter=0;
TestStatic::IncreaseCounter()
  {
   Print("Symbol: "+_Symbol +", counter: "+ TestStatic::counter);
   TestStatic::counter++;
  };

Voici le code de l'EA :

//+------------------------------------------------------------------+
//|                                                Exp_testMulti.mq4 |
//|                        Copyright 2014, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2014, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"
#property strict
#include <TestStatic.mqh>

static string tickCounter[2][2];

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
  
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   TestStatic::IncreaseCounter();
    
  }
//+------------------------------------------------------------------+

S'il vous plaît, aidez-moi à le comprendre, merci beaucoup par avance !

 
VangoghFX:

Bonjour, je demande de l'aide pour mettre en œuvre ce qui me semble être un dispositif simple.

J'ai un EA qui fonctionne bien sur un seul symbole. Je veux le "modifier" pour qu'il fonctionne pour plusieurs symboles à la fois. Pour cela, je dois créer correctement un tableau de données, dont les membres pourraient être accessibles par toutes les instances de l'EA attachées à plusieurs symboles différents. C'est-à-dire qu'il n'y a qu'un seul tableau de données, mais il y a plusieurs instances de l'EA. Chaque instance de l'EA peut lire et modifier les membres du tableau.

Si je comprends bien, vous devez créer un tableau avec des membres statiques (static).

Un exemple simple : comptez le nombre total de ticks dans tous les graphiques, où les EAs sont attachés. Attachons l'EA à 2 graphiques et sur l'événement OnTick() augmentons le compteur de 1. Pour plus de simplicité, j'ai essayé d'utiliser une variable statique compteur au lieu du tableau. Malheureusement, chaque EA ne fonctionne qu'avec son compteur, le compteur n'est pas "commun". Résultat :

symbole1, tick1 : compteur = 0 ;

symbole1, tick2 : compteur = 1 ;

symbol2, tick1 : counter = 0 ; - ici attendu counter = 2

Par exemple, j'ai créé une classe simple avec un compteur :

Voici le code de l'EA :

S'il vous plaît, aidez-moi à le comprendre, merci beaucoup par avance !

Après-midi. Plus précisément, pour mettre en œuvre votre exemple avec les ticks, les variables globales du terminal (il y a eu récemment un article publié sur ce sujet). A propos d'un tel tableau... Pas sûr, je devrais essayer. Mais je peux suggérer une autre variante. Dans un Conseiller Expert, prescrire les symboles nécessaires au travail et faire, comme vous l'avez suggéré, un tableau statique/global des données nécessaires. Et laissez l'EA parcourir en boucle tous les symboles requis.
 
Tapochun:
Bon après-midi. Pour ce qui est de votre exemple avec les ticks, les variables globales du terminal fonctionnent (un article a été publié récemment à ce sujet). A propos d'un tel tableau... Je ne suis pas sûr, je dois essayer. Mais je peux suggérer une autre variante. Dans un Conseiller Expert, prescrire les symboles nécessaires au travail et faire, comme vous l'avez suggéré, un tableau statique/global des données nécessaires. Et laissez le conseiller expert passer en boucle tous les symboles nécessaires.

Merci beaucoup pour votre réponse.

J'ai utilisé l'exemple des tics comme le plus simple et le plus illustratif pour décrire l'idée générale. Le conseiller expert utilise des algorithmes plus complexes.

Je n'aime pas la variante où les N symboles sont écrits dans une EA car elle est trop lourde et difficile à utiliser. Il y a plusieurs articles sur ce sujet sur le portail, et je les ai vus : mais je n'aime pas les grandes boucles, les tableaux, la copie de données, beaucoup de paquets de variables pour chaque symbole, etc. Je veux utiliser une approche plus simple et plus efficace, à mon avis : un code d'EA pour chaque symbole (le symbole est déterminé par le graphique, auquel l'EA est lié) - et chaque copie de l'EA travaille en parallèle avec les autres. Mais dans ce cas, les informations analytiques, qui sont nécessaires pour prendre des décisions, sont partagées entre eux.

L'idée d'avoir des variables globales m'a plu, mais il s'agit plutôt d'une approche procédurale, et je veux utiliser tous les avantages de la POO. Je prévois d'écrire une classe distincte qui transmettrait les données analytiques nécessaires aux conseillers experts sous la forme d'un tableau et les laisserait prendre des décisions commerciales.

 
VangoghFX:

Merci beaucoup pour votre réponse.

J'ai utilisé l'exemple des tics comme étant le plus simple et le plus illustratif pour décrire l'idée générale. L'EA utilise des algorithmes plus complexes.

Je n'aime pas la variante où les N symboles sont écrits dans une EA car elle est trop lourde et n'est pas universelle. Il y a plusieurs articles sur ce sujet sur le portail, et je les ai vus : mais je n'aime pas les grandes boucles, les tableaux, la copie de données, beaucoup de paquets de variables pour chaque symbole, etc. Je veux utiliser une approche plus simple et plus efficace, à mon avis : un code d'EA pour chaque symbole (le symbole est déterminé par le graphique, auquel l'EA est lié) - et chaque copie de l'EA travaille en parallèle avec les autres. Mais dans ce cas, les informations analytiques, qui sont nécessaires pour prendre des décisions, sont partagées entre eux.

L'idée d'avoir des variables globales m'a plu, mais il s'agit plutôt d'une approche procédurale, et je veux utiliser tous les avantages de la POO. Je prévois d'écrire une classe distincte qui transmettrait les données analytiques nécessaires aux conseillers experts sous la forme d'un tableau et les laisserait prendre des décisions commerciales.

Je ne peux rien dire sur la vitesse, je dois effectuer des tests. Bien que je pense que tout est plus universel dans un conseiller expert, mais c'est à vous de voir. Le transfert d'informations analytiques générales par le biais de fichiers est encore possible, mais ... Je ne sais pas si cette approche vous donnera un avantage en termes de vitesse, et très probablement, elle ne fera que causer plus de problèmes.