[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 556

 
Seulement j'ai besoin d'une condition non pas(Ask<tmp || Ask>tmp) mais juste une condition triviale (Ask<=tmp). C'est-à-dire que dès qu'un seul tick apparaît dans l'autre sens... et exactement avec une boucle)... Je sais, la vérité est quelque part à proximité)).
 
maryan.dirtyn >>:
в вашем варианте работает, и ЕТО уже большой прорыв ). только мне нужно условие не (Ask<tmp || Ask>tmp), а просто банально (Ask<=tmp). тоесть как только появиться хоть один тик в другую сторону... и именно с циклом).. я знаю, истина где то рядом))). хотя б на реале работало, бог с ним, с тестером то.

C'est la même chose, la même logique. Avant la boucle, nous amenons la variable à un état tel que la condition de la boucle sera vraie. Ensuite, à chaque itération de la boucle, nous rafraîchissons les données à l'aide de RefreshRates() et vérifions si la cotation est fraîche, puis nous effectuons une action et interrompons la boucle de manière forcée. Si nous voulons que le code, qui se trouve en dessous de la boucle, soit exécuté, alors nous le cassons avec la commande break. Si nous ne voulons pas qu'il soit exécuté, nous interrompons la fonction int start() de l'EA avec la commande return(0)
 

Je comprends la logique de la façon de faire... Je ne comprends pas pourquoi aucune des conceptions ne fonctionne, quelques autres ont sombré dans l'abîme des essais.

double tmp=Ask; while(Ask<=tmp) tmp=Ask; Print("Заработало");
 double tmp=0;  while(Ask<=tmp || tmp==0) { RefreshRates(); if(Ask>tmp) break;} Print("Заработало");
 
maryan.dirtyn >>:

я логику понимаю, как ето сделать.. я не понимаю почему не работает ни одна конструкция, еще несколько канули в бездну перебора вариантов


Vous devez fermer les yeux et imaginer ce qui se passe à chaque itération du cycle.

Votre première option :

Le tempo est égal à ascendant. La condition d'égalité étant satisfaite, la boucle entre dans un nombre presque infini d'itérations. Car même si une nouvelle citation arrive, il n'est pas certain qu'elle rompe la condition de vérité du cycle. Deux ou trois ascendances descendantes consécutives et nous pourrions attendre que le cycle soit presque infini...

 

Lorsque le tutoriel MQL4 est sorti, je l'ai feuilleté et je n'y suis pas retourné - je n'ai pas aimé le fait que l'auteur de ce manuel mette des boucles while() partout. Il a marqué de nombreuses personnes qui ont essayé d'apprendre MQL à partir de ce livre.

Dites-moi que votre conseiller expert a une tâche si terrible que vous ne pouvez pas vous passer de cette boucle ? Vous voyez comme il est facile de faire tourner cette boucle pour un nombre infini d'itérations, en perdant tout simplement le contrôle. Ne pouvez-vous pas vous passer de la boucle for() dans votre cas ? Ou en écrivant une fonction simple séparée... ?

 

L'essentiel est que ça marche... J'en ai marre d'acheter un couteau qui tombe. J'ai besoin de n'importe quelle solution, même la plus élégante, pour résoudre le problème :

double tmp=Ask; 
                 while(Ask<=tmp) tmp=Ask; 
                                              Print("Заработало");
 
drknn >>:

Честно-говоря, когда вышел учебник по MQL4, я его пролистал и больше к нему не возвращался - мне не понравилось, что автор этого сочинения суёт там цикл while() везде где ни попадя. Это наложило отпечаток на многих, кто пытался освоить MQL по данной книге.

Вот скажите, что у Ваего советника, такая жуткая задача, что нельзя обойтись без этого цикла? Ну ведь сами видите, насколько легко запустить этот цикл в бескоенчное число итераций, просто потеряв контроль. Циклом for() в Вашем случае обойтись нельзя? Ну или написанием каой-то отдельной простенькой функции?...

je ne suis pas novice en mql. je le maîtrise depuis deux ans maintenant. oui, j'en ai besoin alors que je retourne de temps en temps au tutoriel pour voir si j'ai bâillé)... vous ne voyez pas de lapin ? mais moi oui. ce n'est pas si simple.
 
Désolé de vous déranger, mais de cette façon la boucle sera infinie. tmp devrait être rendu statique avec une valeur initiale sciemment plus élevée que Ask. Ou =0 si on utilise la construction proposée avec OR. Sinon, Ask sera toujours = tmp.
 
Svinozavr >>:
Извините, что вмешиваюсь, но в таком виде цикл и будет бесконечным. tmp нужно сделать static с присвоением ей началного значения заведомо большего Ask. Или =0, если использовать предложенную конструкцию с ИЛИ. А так Ask всегда будет = tmp.
Le problème est simple... pendant que le prix descend, n'achetez pas jusqu'à ce que le tick soit de l'autre côté... et le code doit être bouclé à un endroit, pendant qu'il descend, ne touchez à rien...
 

La raison pour laquelle il y a un cycle ici n'est pas claire. Vérifiez à chaque tic-tac de prix et agissez en fonction des réalités.