[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate. Non posso andare da nessuna parte senza di te. - pagina 556

 
Solo che ho bisogno di una condizione non(Ask<tmp || Ask>tmp) ma solo unabanale (Ask<=tmp). Cioè, non appena un solo tick appare nell'altra direzione... ed esattamente con un loop)... lo so, la verità è da qualche parte qui vicino)).
 
maryan.dirtyn >>:
в вашем варианте работает, и ЕТО уже большой прорыв ). только мне нужно условие не (Ask<tmp || Ask>tmp), а просто банально (Ask<=tmp). тоесть как только появиться хоть один тик в другую сторону... и именно с циклом).. я знаю, истина где то рядом))). хотя б на реале работало, бог с ним, с тестером то.

Beh lo stesso - stessa logica. Prima del ciclo, portiamo la variabile ad uno stato tale per cui la condizione del ciclo sarà vera. Poi ad ogni iterazione del ciclo aggiorniamo i dati usando RefreshRates() e controlliamo se la quotazione è fresca, quindi eseguiamo qualche azione e interrompiamo forzatamente il ciclo. Se vogliamo che il codice che si trova sotto il ciclo venga eseguito, allora lo interrompiamo con il comando break. Se non vogliamo che venga eseguito, interrompiamo la funzione int start() dell'EA con il comando return(0)
 

Capisco la logica di come farlo... Non capisco perché nessuno dei disegni funziona, alcuni altri sono caduti nell'abisso del tentativo.

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

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


Bisogna chiudere gli occhi e immaginare cosa succede in ogni iterazione del ciclo.

La tua prima opzione:

Il tempo è uguale a asc. La condizione di uguaglianza è soddisfatta, quindi il ciclo entra in un numero quasi infinito di iterazioni. Perché anche se arriva una nuova citazione, non è certo che rompa la condizione di verità del ciclo. Un paio o tre di fila di ascoli calanti e potremmo aspettare che il ciclo sia quasi infinito...

 

Quando è uscito il tutorial MQL4, l'ho sfogliato e non ci sono tornato - non mi è piaciuto il fatto che l'autore di questo libro di testo ha messo il ciclo while() ovunque. Ha lasciato un segno su molte persone che hanno cercato di imparare MQL da questo libro.

Dimmi che il tuo Expert Advisor ha un compito così terribile che non puoi fare a meno di questo ciclo? Bene, vedete come è facile eseguire questo ciclo per un numero infinito di iterazioni, perdendo solo il controllo. Non puoi fare a meno del ciclo for() nel tuo caso? O scrivendo una funzione semplice separata...?

 

L'importante è che funzioni... Sono stufo di comprare un coltello che cade. Ho bisogno di qualsiasi soluzione, anche la più elegante, al problema:

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

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

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

Non sono nuovo di mql. lo padroneggio da due anni ormai. sì, ne ho bisogno mentre. di tanto in tanto torno al tutorial per vedere se ho sbadigliato)... non vedi un coniglio? ma io sì. non è così semplice.
 
Mi dispiace interferire, ma in questo modo il ciclo sarà infinito. tmp dovrebbe essere reso statico con un valore iniziale consapevolmente più alto di Ask. Oppure =0 se usiamo la costruzione proposta con OR. Altrimenti, Ask sarà sempre = tmp.
 
Svinozavr >>:
Извините, что вмешиваюсь, но в таком виде цикл и будет бесконечным. tmp нужно сделать static с присвоением ей началного значения заведомо большего Ask. Или =0, если использовать предложенную конструкцию с ИЛИ. А так Ask всегда будет = tmp.
Il problema è semplice... mentre il prezzo sta scendendo, non comprare finché il tick non è dall'altra parte... e il codice deve essere messo in loop in un posto, mentre sta scendendo, non toccare nulla...
 

Non è chiaro perché ci sia un ciclo qui. Controlla ad ogni tick di prezzo e agisci sulle realtà.

Motivazione: