Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 1473

 
Alexey Viktorov:

Я фрактал привёл как пример. А как вы определяете минимум(в вашем случае) это видать военная тайна… или абсолютное непонимание о чём спрашивают.

Мой код состоит из нескольких строк и в нем видно невооруженным взглядом как определяется минимум

Минимум определяется в желтых строках

void OnTick()//484
{
if (Bid<LoU)
LoU=Bid;
//**************************************************************||TimeCurrent()==1262568096
if (Bid-LoU>=0.0030&&Pr!=LoU)
{
OrderSend(Symbol(),OP_SELL,0.1,Bid, 3,0,0,"300",0);
Print("---------------------КАЖДЫЙ ТИК ------Tick---------=     "    ,   Tick);
Pr=LoU;
LoU=Bid;
}
}
 
MakarFX:

тебе не надо считать бары

после открытия ордера присваиваешь переменной значение Low[0](минимум текущего бара), потом после закрытия бара если значение Low[1] меньше переменной, присваиваешь новое значение,

если нет, остается старое т.е. минимум.

Этот алгоритм я давно уже понял и использовал.... то  есть проверять минимумы не на тике, а на свече. Но я считаю что есть алгоритм намного экономнее, а именно тот который я последний раз описал, когда проверять нужно не ДО появления минимума, а ПОСЛЕ его появления. Но я не знаю как быстро и экономно посчитать количество свечей от БИДА до пятидесятой свечи. Да пятидесятой свечи я умею считать количество свечей. Как посчитать количество свечей до свечи с самым низким ЛОУ . То есть , от БИДА до этой свечи

 
ANDREY:

Мой код состоит из нескольких строк и в нем видно невооруженным взглядом как определяется минимум

Минимум определяется в желтых строках

И в чём проблема? Тут главное как объявлена переменная LoU. Если на глобальном уровне, то нормально. Если это локальная переменная, то должна быть статическая. И проверяя на каждом тике разницу текущей цены с ценой в этой переменной затраты микросекунд будут на столько незначительными, что говорить об этом нет никакого смысла.

 
ANDREY:

Этот алгоритм я давно уже понял и использовал.... то  есть проверять минимумы не на тике, а на свече. Но я считаю что есть алгоритм намного экономнее, а именно тот который я последний раз описал, когда проверять нужно не ДО появления минимума, а ПОСЛЕ его появления. Но я не знаю как быстро и экономно посчитать количество свечей от БИДА до пятидесятой свечи. Да пятидесятой свечи я умею считать количество свечей. Как посчитать количество свечей до свечи с самым низким ЛОУ . То есть , от БИДА до этой свечи

В этом логика какая-то ненормальная… Зачем считать какие-то 50 баров? А если будет не 50?

 
ANDREY:

Этот алгоритм я давно уже понял и использовал.... то  есть проверять минимумы не на тике, а на свече. Но я считаю что есть алгоритм намного экономнее, а именно тот который я последний раз описал, когда проверять нужно не ДО появления минимума, а ПОСЛЕ его появления. Но я не знаю как быстро и экономно посчитать количество свечей от БИДА до пятидесятой свечи.

Какую бы проверку ты не придумал, она все равно будет проводиться на каждом тике - это особенность функции OnTick().

 
MakarFX:

Какую бы проверку ты не придумал, она все равно будет проводиться на каждом тике - это особенность функции OnTick().

Одно дело проверка, а другое поиск минимума…

 
Alexey Viktorov:

И в чём проблема? Тут главное как объявлена переменная LoU. Если на глобальном уровне, то нормально. Если это локальная переменная, то должна быть статическая. И проверяя на каждом тике разницу текущей цены с ценой в этой переменной затраты микросекунд будут на столько незначительными, что говорить об этом нет никакого смысла.

Спасибо за новую и ценную для меня информацию.....я этого не знал.

 
Alexey Viktorov:

В этом логика какая-то ненормальная… Зачем считать какие-то 50 баров? А если будет не 50?

50 - это для абстрактного случая. Может быть и 20 и 150 и 3 и 1 Имеется в виду как узнать на текущем БИДЕ  сколько баров между ним и локальным лоу ....в случае если между этим бидом и локальным лоу есть необходимые для открытия ордера 30 пп. Что бы открыть ордер   if ( Вid -  Low[ 50 ] >= 30 п  ) - открыть ордер.

 
MakarFX:

Какую бы проверку ты не придумал, она все равно будет проводиться на каждом тике - это особенность функции OnTick().

Спасибо. Если бы я это знал .... может быть и не заморачивался так по этому вопросу.

То есть если я буду проверять ЛОУ не на каждом тике а на каждой свече программа все равно будет тратить время на обработку каждого тика и по времени выйдет то же самое как если бы проверял на каждом тике?

А что при помощи кода эту особенность обойти никак нельзя. Что бы проводилась не на каждом тике, а допустим на каждом ЛОУ минутной свечи. 

 
ANDREY:

Спасибо. Если бы я это знал .... может быть и не заморачивался так по этому вопросу.

То есть если я буду проверять ЛОУ не на каждом тике а на каждой свече программа все равно будет тратить время на обработку каждого тика и по времени выйдет то же самое как если бы проверял на каждом тике?

А что при помощи кода эту особенность обойти никак нельзя. Что бы проводилась не на каждом тике, а допустим на каждом ЛОУ минутной свечи. 

void()

Причина обращения: