[ВНИМАНИЕ, ТЕМА ЗАКРЫТА!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда. - страница 556

 
в вашем варианте работает, и ЕТО уже большой прорыв ). только мне нужно условие не (Ask<tmp || Ask>tmp), а просто банально (Ask<=tmp). тоесть как только появиться хоть один тик в другую сторону... и именно с циклом).. я знаю, истина где то рядом))). хотя б на реале работало, бог с ним, с тестером то.
 
maryan.dirtyn >>:
в вашем варианте работает, и ЕТО уже большой прорыв ). только мне нужно условие не (Ask<tmp || Ask>tmp), а просто банально (Ask<=tmp). тоесть как только появиться хоть один тик в другую сторону... и именно с циклом).. я знаю, истина где то рядом))). хотя б на реале работало, бог с ним, с тестером то.

Ну то же самое - та же самая логика. Перед циклом приводим переменную в такое состояние, в котором условие цикла будет истинным. Далее в цикле на каждой его итерации обновляем данные с помощью RefreshRates(), после чего проверяем, если котировка свежая пришла, то выполняем какие-то действия и насильственно прерываем цикл. Если нужно чтоб код, который лежит ниже цикла, выполнялся, то прерываем командой break. Если нужно чтоб не выполнялся, то прерываем работу функции int start() советника командой return(0)
 

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

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

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


Нужно закрывать глаза и представлять себе что происходит в каждой итерации цикла.

Ваш первый вариант:

Темп равен аску. Условие равенства выполняется, поэтому цикл входит в почти-бесконечнное число итераций. Ибо даже если придёт новая котировка, то не факт, что она нарушит условие истинности цикла. Пара-тройка идущих впордряд падающих асков, и можно выхода из цикла ждать почти до бесконца...

 

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

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

 

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

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

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

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

ну я давно не новичок уже в mql. за два года уже освоился.. да, мне нужно именно while. кстати к учебнику периодически возращаюсь, а не зевнул ли я чего).. ти не видишь кролика? а он есть.. не все так просто.
 
Извините, что вмешиваюсь, но в таком виде цикл и будет бесконечным. tmp нужно сделать static с присвоением ей начального значения заведомо большего Ask. Или =0, если использовать предложенную конструкцию с ИЛИ. А так Ask всегда будет = tmp.
 
Svinozavr >>:
Извините, что вмешиваюсь, но в таком виде цикл и будет бесконечным. tmp нужно сделать static с присвоением ей началного значения заведомо большего Ask. Или =0, если использовать предложенную конструкцию с ИЛИ. А так Ask всегда будет = tmp.
вмешивайтесь плз.. задача проста.. пока цена летит вниз не покупать, пока не будет тика в другую сторону. причем нужно зациклить код в одном месте, пока летит, ничего не трогаем..
 

Непонятно только зачем здесь цикл. Проверяй на каждом тике цены и действуй, исходя из реалий.