[¡AVISO CERRADO!] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen. No puedo ir a ningún sitio sin ti. - página 556

 
Sólo que necesito una condición no(Ask<tmp || Ask>tmp) sino una trivial (Ask<=tmp). Es decir, en cuanto aparezca un solo tick en la otra dirección... y exactamente con un bucle)... Ya sé, la verdad está en algún lugar cercano)).
 
maryan.dirtyn >>:
в вашем варианте работает, и ЕТО уже большой прорыв ). только мне нужно условие не (Ask<tmp || Ask>tmp), а просто банально (Ask<=tmp). тоесть как только появиться хоть один тик в другую сторону... и именно с циклом).. я знаю, истина где то рядом))). хотя б на реале работало, бог с ним, с тестером то.

Pues lo mismo, la misma lógica. Antes del bucle, llevamos la variable a un estado tal, en el que la condición del bucle será verdadera. Entonces en cada iteración del bucle refrescamos los datos usando RefreshRates() y comprobamos si la cotización es fresca, entonces realizamos alguna acción y rompemos forzosamente el bucle. Si queremos que se ejecute el código que se encuentra debajo del bucle, entonces lo rompemos con el comando break. Si no queremos que se ejecute, interrumpimos la función int start() del EA con la orden return(0)
 

Entiendo la lógica de cómo hacerlo... No entiendo por qué ninguno de los diseños funciona, algunos más han caído en el abismo de los intentos.

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 >>:

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


Hay que cerrar los ojos e imaginar lo que ocurre en cada iteración del ciclo.

Su primera opción:

El tempo es igual a asc. La condición de igualdad se cumple, por lo que el bucle entra en un número casi infinito de iteraciones. Porque aunque llegue una nueva cotización, no es seguro que rompa la condición de verdad del ciclo. Un par o tres seguidos de ascensos descendentes y podemos esperar hasta que el ciclo sea casi infinito...

 

Cuando salió el libro de texto MQL4, lo hojeé y no volví atrás - no me gustó que el autor de este libro pusiera el bucle while() en todas partes. Dejó huella en muchas personas que intentaron aprender MQL con este libro.

¿Dime que tu Asesor Experto tiene una tarea tan terrible que no puedes prescindir de este bucle? Bien, ya ves lo fácil que es ejecutar este bucle durante un número infinito de iteraciones, sólo perdiendo el control. ¿No puedes prescindir del bucle for() en tu caso? ¿O escribiendo una función sencilla por separado?

 

Lo principal es que funcione... Estoy harto de comprar un cuchillo que se caiga. Necesito cualquier solución, incluso la más elegante, para el problema:

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

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

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

no soy nuevo en mql. lo domino desde hace dos años. sí, lo necesito mientras. vuelvo al tutorial de vez en cuando para ver si he bostezado)... no ves un conejo... pero yo sí. no es tan sencillo.
 
Siento interferir, pero de esta manera el bucle será infinito. tmp debe hacerse estático con un valor inicial conscientemente mayor que Ask. O =0 si utilizamos la construcción propuesta con OR. En caso contrario, Ask será siempre = tmp.
 
Svinozavr >>:
Извините, что вмешиваюсь, но в таком виде цикл и будет бесконечным. tmp нужно сделать static с присвоением ей началного значения заведомо большего Ask. Или =0, если использовать предложенную конструкцию с ИЛИ. А так Ask всегда будет = tmp.
El problema es simple... mientras el precio está bajando, no comprar hasta que el tick esté al otro lado... y el código debe estar en bucle en un lugar, mientras está bajando, no tocar nada...
 

No está claro por qué hay un ciclo aquí. Compruebe cada vez que se produzca un cambio de precio y actúe en función de la realidad.