[Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas votre chemin. Je ne peux aller nulle part sans toi. - page 1084

 
khorosh:

Il serait plus exact de le dire de cette façon :



C'est encore plus vrai et maintenant ça marche :

//--------------------------------------------------------------------
int start() // Спец. функция start
{
if(Fun_New_Bar())//проверка наличия нового бара
return; // Выход из start()
}
//--------------------------------------------------------------------
bool Fun_New_Bar() // Ф-ия обнаружения ..
{ // .. нового бара
static datetime New_Time=0; // Время текущего бара
bool New_Bar=false; // Нового бара нет
if(New_Time!=Time[0]) // Сравниваем время
{
New_Time=Time[0]; // Теперь время такое
New_Bar=true; // Поймался новый бар
Alert("Сформировался новый бар"); // Вывод на экран
}
}
//--------------------------------------------------------------------

 
Et au fait, pourquoi est-ce que je surligne du code en tant que code lorsque j'écris un commentaire et que c'est la même couleur ? Ou dois-je le mettre en évidence pour qu'il ressemble à un véritable code en couleur ?
 
kolyango:

Je l'ai essayé sur M1 et le message n'apparaît pas après la formation de la prochaine barre. Cela signifie-t-il qu'il ne fonctionne pas ?


Et cela ne fonctionnera pas - vous n'avez pas écrit le programme correctement. C'est parce que vous n'avez aucune idée de la façon dont votre propre code va fonctionner. Faisons le point. Corps du conseiller expert :

int start(){ // Спец. функция start
  if(Fun_New_Bar()){ //проверка наличия нового бара
    Alert("Сформировался новый бар"); // Вывод на экран
  }
  return(0); // Выход из start()
}

Un nouveau tick arrive et la fonction Fun_New_Bar() est appelée. S'il renvoie un résultat positif au programme principal, une alerte s'affiche. Dans le cas contraire, l'EA met fin à son travail avec un rapatrié et attend un nouveau tic-tac. Tout se répète sur un nouveau tic-tac.

Vous dites que le code ne fonctionne pas ? Maintenant, regardez ce que vous avez dans votre sous-programme.

bool Fun_New_Bar(){ // Ф-ия обнаружения нового бара
  static datetime New_Time=0; // Время текущего бара
  bool New_Bar=false; // Нового бара нет
  if(New_Time!=Time[0]){ // Сравниваем время
    New_Time=Time[0]; // Теперь время такое
    New_Bar=true; // Поймался новый бар
  }
}

Une fonction booléenne est déclarée. Comme il s'agit d'une fonction et non d'une procédure, elle doit renvoyer quelque chose au programme principal à partir duquel elle est appelée. Puisque la fonction est booléenne, elle doit retourner une valeur booléenne. Où avez-vous une chaîne qui renvoie quelque chose au programme principal ? Cela signifie qu'au début du programme, puisque la fonction ne renvoie rien, les parenthèses de l'expression if(Fun_New_Bar()) seront toujours fausses et l'alerte n'apparaîtra jamais.

Allons plus loin. Pourquoi avez-vous déclaré la datetime New_Time=0 ; comme statique ? Quel est votre raisonnement ? Vous avez déclaré une variable et l'avez immédiatement initialisée avec zéro. Au tick suivant, la même chose se produira - la variable sera déclarée et initialisée par zéro à nouveau. If(New_Time!=Time[0]){ Cette ligne vérifie si la valeur de la variable n'est pas égale à l'heure actuelle. Eh bien, oui, la variable a zéro, mais le temps actuel n'est pas zéro. La condition est remplie, la valeur du temps actuel est écrite dans la variable, le paramètre New_Bar devient vrai. Au prochain tick , New_Time ne sera pas à nouveau égal à Time[0], il vérifiera à nouveau avec succès l'inégalité et les deux opérations suivantes seront exécutées. En d'autres termes, lors de la vérification de la condition if(New_Time!=Time[0]), l'expression entre parenthèses sera vraie à chaque tick. TOUJOURS. Ce qui amène à la question suivante : si c'est toujours vrai, pourquoi diable ce chèque devrait-il être là ? Peut-être qu'on devrait juste le supprimer ? Pourquoi devrions-nous affecter New_Time=Time[0] et New_Bar=true, si ces deux variables ne sont utilisées nulle part ? Pourquoi diable avons-nous besoin de ces deux affectations ? Tu veux jouer ? Ou êtes-vous trop paresseux pour réfléchir ?

 

Comment mettre une variable globale à la disposition d'un EA fonctionnant sur un second terminal MT4 en cours d'exécution ?

 
DhP:

Comment mettre une variable globale à la disposition d'un EA fonctionnant sur un second terminal MT4 en cours d'exécution ?


Par une api, ou par un document texte.
 
drknn:

Par une api, ou par un document texte.

Comment ?
 
DhP:

Comment ?

Par l'api, je ne sais pas comment, mais j'ai lu que c'était possible. Par le biais d'un document texte - vous devez écrire une dll dans un langage autre que MQL4. Par exemple dans Delphi ou C++. La dll doit être capable d'accéder au fichier situé en dehors du terminal. C'est tout à fait réalisable. Plus loin, tout est clair - le conseiller expert entre une nouvelle valeur de la variable globale dans un document texte, et l'autre conseiller expert la lit à partir de là. La DLL donne accès au document texte aux deux Expert Advisors. De telles questions ont déjà été posées ici. Les gens ont demandé quelque chose comme comment faire fonctionner les EA ensemble dans deux canaux différents...
 
kolyango:

C'est encore plus vrai et ça marche maintenant :

Non, il ne le fait pas - votre Alert vous avertira à chaque tic-tac, et non pas une fois au premier tic-tac d'une nouvelle bougie.
 
kolyango:



C'est encore plus correct et maintenant ça marche :

//--------------------------------------------------------------------
int start() // Спец. функция start
{
if(Fun_New_Bar())//проверка наличия нового бара
return; // Выход из start()
}
//--------------------------------------------------------------------
bool Fun_New_Bar() // Ф-ия обнаружения ..
{ // .. нового бара
static datetime New_Time=0; // Время текущего бара
bool New_Bar=false; // Нового бара нет
if(New_Time!=Time[0]) // Сравниваем время
{
New_Time=Time[0]; // Теперь время такое
New_Bar=true; // Поймался новый бар
Alert("Сформировался новый бар"); // Вывод на экран
}
}
//--------------------------------------------------------------------


La fonction n'est pas la mienne - je l'ai récupérée en ligne mais je ne l'ai pas utilisée. Je l'ai regardé attentivement maintenant - il y a un opérateur manquant.

C'est la bonne façon de faire :

int start() // Спец. функция start
{
 if(Fun_New_Bar())//проверка наличия нового бара
   {
    Alert("Сформировался новый бар"); // Вывод на экран
   }
return(0); // Выход из start()
}
//--------------------------------------------------------------------
bool Fun_New_Bar() // Ф-ия обнаружения ..
{                  // .. нового бара
static datetime New_Time=0; // Время текущего бара
bool New_Bar=false; // Нового бара нет
if(New_Time!=Time[0]) // Сравниваем время
{
New_Time=Time[0]; // Теперь время такое
New_Bar=true; // Поймался новый бар
}
return(New_Bar);
}
 
drknn:

Par une api, je ne sais pas comment, mais j'ai lu que c'était possible. Par le biais d'un document texte - vous devez écrire une dll dans un langage autre que MQL4. Par exemple dans Delphi ou C++. La dll doit être capable d'accéder au fichier situé en dehors du terminal. C'est tout à fait réalisable. Plus loin, tout est clair - le conseiller expert entre une nouvelle valeur de la variable globale dans un document texte, et l'autre conseiller expert la lit à partir de là. La DLL donne accès au document texte aux deux Expert Advisors. De telles questions ont déjà été posées ici. Les gens demandaient quelque chose comme comment faire fonctionner les EA ensemble dans deux canaux différents...

Merci, je vais le chercher...