[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 1085
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
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.
La bonne méthode est la suivante :
Encore une fois, c'est faux ! L'EA émettra un nouveau signal sonore à chaque tic, car Fun_New_Bar() retournera toujours vrai. La question est de savoir pourquoi nous avons besoin de Fun_New_Bar() s'il retourne toujours vrai.
Et cela ne fonctionne pas - vous avez dû écrire le programme de manière incorrecte. Et c'est parce que vous n'avez aucune idée de la façon dont votre propre code va fonctionner. Faisons le point. Le corps du conseiller expert :
Un nouveau tick arrive et la fonction Fun_New_Bar() est appelée. S'il retourne vrai au programme principal, une alerte apparaîtra. Sinon, l'EA termine son travail par retour et attend un nouveau tick. 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.
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. Comme la fonction est booléenne, elle doit renvoyer 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 ?
Essayez ce code. Cela semble fonctionner, mais voyez si c'est bien ou mal. Si quelque chose ne va pas, corrigez-le :
//--------------------------------------------------------------------
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("Сформировался новый бар"); // Вывод на экран
}
}
//--------------------------------------------------------------------
Essayez ce code. Ça semble fonctionner, il faut voir si c'est bien ou mal :
kolyango : Je vais vous montrer le bon code. Regardez.
Non, ce n'est pas ça - j'ai le code tout expliqué pour vous. Tu ne comprends rien ?
Mais regardez, cela semble fonctionner correctement ! Je l'ai vérifié sur l'échelle de temps M1 :
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);
}
Mais regardez, cela semble fonctionner correctement ! Je l'ai vérifié sur l'échelle de temps M1 :
Encore une fois, c'est faux ! L'EA émettra un nouveau signal sonore à chaque tic-tac, puisque Fun_New_Bar() retournera toujours vrai. La question est de savoir pourquoi nous avons besoin de Fun_New_Bar() s'il retourne toujours vrai.
New_Time=Time[0] функция Fun_New_Bar() не будет возвращать истину
kolyango : Je vais vous montrer le bon code. Regardez.
drknn:
... Программирование - это не игра в угадайки - тут думать надо...
... Eh bien, au moins parfois... :-)))
Et la variante utilisant les barres est moins préférable, car la valeur des barres peut changer non seulement en raison de l'apparition d'une nouvelle barre.
Éclairez-moi : le nombre de bougies sur le graphique peut-il changer en relation avec autre chose que l'apparition d'une nouvelle barre ? :)))))
Oh, oui, c'est vrai - chargement de l'histoire. :) Quoi qu'il en soit, sa fonction sera de sonner à chaque tic-tac - il ne se souvient pas correctement de l'heure.