[АРХИВ]Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 5. - страница 321

 
hoz:

https://www.mql5.com/ru/forum/144705 вот, я ветку открыл отдельную. Там всё расписано, что нужно.


Да, с полным исходником веселее. Сразу видно, что откуда и куда передаётся, какого чёрта и сколько раз. Ну вот, что сразу бросилось в глаза:

hoz:
int GetStateOfMA()
{
   if (GetMA(1) > GetMA(2))
   {
       pr ("GetStateOfMA() = CROSS_UP");
       return (CROSS_UP);
   }
       
   if (GetMA(1) < GetMA(2))
   {
       pr ("GetStateOfMA() = CROSS_DN");
       return (CROSS_DN);
   }
       
    pr ("GetStateOfMA() = CROSS_NO");
    return (CROSS_NO);
}

можно упростить практически до одной строчки:

int GetStateOfMA(){
   if(GetMa(2)==GetMa(1)) return(0); else return(MathAbs(GetMA(2)-GetMA(1))/(GetMA(2)-GetMA(1)));
}

 Здесь мы возвращаем ноль либо знак разности значений (плюс или минус). Смотрите: модуль числа делить на само это число практически то же самое, что число делить на число, то есть единица, только если число было отрицательным, возвращается естественно минус один.

Разбираюсь дальше. 

 
gyfto:


Да, с полным исходником веселее. Сразу видно, что откуда и куда передаётся, какого чёрта и сколько раз. Ну вот, что сразу бросилось в глаза:

можно упростить практически до одной строчки:

 Здесь мы возвращаем ноль либо знак разности значений (плюс или минус). Смотрите: модуль числа делить на само это число практически то же самое, что число делить на число, то есть единица, только если число было отрицательным, возвращается естественно минус один.

Разбираюсь дальше. 


Как легко вы сравниваете два действительных числа
 
gyfto:


Да, с полным исходником веселее. Сразу видно, что откуда и куда передаётся, какого чёрта и сколько раз. Ну вот, что сразу бросилось в глаза:

можно упростить практически до одной строчки:

 Здесь мы возвращаем ноль либо знак разности значений (плюс или минус). Смотрите: модуль числа делить на само это число практически то же самое, что число делить на число, то есть единица, только если число было отрицательным, возвращается естественно минус один.

Разбираюсь дальше. 

 Да, логично. Но зачем так извращатся? :) gyfto, я смотрю у Вас, кстати, как и у меня склонность всему придать универсальность. Я б сказал большее. Тут можно позже добавить переменную размера отклонения, и, тем самым, фильтровать, мелкие пересечения средних. Оно как-бы всё понятно, но читабильность не особо будет удобно. Ведь при получение значения функции нужно будет сравнивать с 0. Типа <0 или >0.

 

Vinin:

Как легко вы сравниваете два действительных числа

Ну если нас не интересует сайз отклонения, то что мешает? Где это оговорено?
 
Vinin:

Как легко вы сравниваете два действительных числа

В смысле что double делить на double будет всё равно double, а return может возвращать только int? Ну можно определить на локальном уровне int temp; и ему присваивать, а возвращать return(temp);
 
gyfto:

В смысле что double делить на double будет всё равно double, а return может возвращать только int? Ну можно определить на локальном уровне int temp; и ему присваивать, а возвращать return(temp);
Два числа с плавающей точкой, полученных после вычисления, почти никогда не будут равны. Вернее, чаще не будут равны, когда Вы думаете, что они должны быть равны.
 
gyfto:

а return может возвращать только int? 

Нет. Возвращать можешь что хочешь. Не обязательно int. Ведь если функция типа double как ты вернёшь с неё int?
Разницы в принципе нет, главное возвращать с функции канкретного типа, такой же возврат. Я так понимаю.

 

Zhunko:
Два числа с плавающей точкой, полученных после вычисления, почти никогда не будут равны. Вернее, чаще не будут равны, когда Вы думаете, что они должны быть равны.

Ну так что необходимо постоянно задавать некую переменную dist для сравнения разницы между сравниваемых машками? Имею ввиду типа:

extern dist = 0.1 // Расстояние между сравниваемыми машками.
//---------------------------
GetMA(2) - GetMA(1) >= dist;
 
hoz:

склонность всему придать универсальность.


Да нет, по своей психологии, как я себя самоанализирую, это скорее желание сделать программу для людей, а не просто для себя.

hoz:

зачем так извращатся?


 Вы наверное мне не поверите, но это вылазит отсутствие школьного образования. Извините. Дело в том, что когда я ушёл со школы (в 6 классе), у детей в таком возрасте ещё остаётся живое детское любопытство, жажда познания. Потом, в старших классах, всё это убивается школьной системой. Сейчас мне за тридцать, но я до сих пор сохраняю это живое любопытство и до сих пор не осознаю этих условных ограничений, не осознаю что такое "жесть" и что такое "извращаться", т.к. для меня это всё "жесть". Извините...

hoz:
Zhunko:
Два числа с плавающей точкой, полученных после вычисления, почти никогда не будут равны. Вернее, чаще не будут равны, когда Вы думаете, что они должны быть равны.


Ну так что необходимо постоянно задавать некую переменную dist для сравнения разницы между сравниваемых машками? Имею ввиду типа:

extern dist = 0.1 // Расстояние между сравниваемыми машками.
//---------------------------
GetMA(2) - GetMA(1) >= dist;
Да, всё правильно, логично.

   

 
gyfto:

 Вы наверное мне не поверите, но это вылазит отсутствие школьного образования. Извините. Дело в том, что когда я ушёл со школы (в 6 классе), у детей в таком возрасте ещё остаётся живое детское любопытство, жажда познания. Потом, в старших классах, всё это убивается школьной системой. Сейчас мне за тридцать, но я до сих пор сохраняю это живое любопытство и до сих пор не осознаю этих условных ограничений, не осознаю что такое "жесть" и что такое "извращаться", т.к. для меня это всё "жесть". Извините...   


 На самом деле, у меня как бы образование и есть, но я учил тока что мне было нужно, остальное игнорировал чисто. Там вот получилось, что многое мне было просто не интересно и от тех банальных вещей воротило (история, география и тд). Я и сам думаю, не так как другие. Но у Вас, на самом деле, подход своеобразен. Я сразу думал, то у Вас образование не то что отсуствует, а, наоборот, есть какое-то. Т.к. не сразу всё понимал, из анализируемого выше.
 
hoz:
подход своеобразен


Объясню другими словами: это самообразование, я самоучка всю свою жизнь, поэтому я НЕ знаю, какой подход у вас принят. Я НЕ знаю, что у вас принято, что нет.

Ладно, вернёмся к свечам.  Предположим у нас i_AnyBarsToHistory = 30,   i_sequentBarsСount = 3. Если в окне из 30 свечей было срабатывание cntUp == i_sequentBarsСount и cntDn == i_sequentBarsСount по одному разу, то что тогда должно произойти? Или считается всегда только по одному счётчику на проход?

Да, и зачем мы досрочно выходим из цикла, не дойдя до Close[1]. 

 

Помогите, не могу сообразить, как сделать так, чтобы в индикаторе сравнивалось заданное количество последних баров и подсчитывалось сколько из них было вверх, сколько вниз и сколько пинбаров и у кого какие цены закр/откр, хай/лоу и объёмы?

Нужно сделать это именно в индикаторе.