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

 
artmedia70:
 

Пока не работает... и именно АС

отлавливай в журнале, может пересчет не правильный и никогда условие не выполнится, ну типа AC1 = 0 и AC2 = 0 и никогда не будет 0 > 0

print(AC1,AC2) ;
if (BB>0 && OsMA>0 && AC1>AC2) return(1);

 
IgorM:

отлавливай в журнале, может пересчет не правильный и никогда условие не выполнится, ну типа AC1 = 0 и AC2 = 0 и никогда не будет 0 > 0

print(AC1,AC2) ;
if (BB>0 && OsMA>0 && AC1>AC2) return(1);

ниже:

else return(0);

 

Спасибо, Игорь. Кажется там-то собачка и порылась... :)

Мне Comment() выводит одинаковые значения АС1 и АС2 = 0.01, хотя в окне данных они имеют значения AC1=0.001008, АС2=0.001020.
Как увеличить разрядность? Ну, кроме банального умножения на 1000, или только так?

 
IgorM:

угу значит надо через while попробовать - это до первого пика, а потом ........ - опять не соображу


Сделал. Вот результат его работы.

 

 

Код получился не сложный, так что Вам не составит труда переделать его под себя.

Скрипт к посту приложен. 

Файлы:
0.mq4  4 kb
 

Корректна ли такая запись:

double AC1=NormalizeDouble(iAC(sy,tf,1),8);
 
artmedia70:
 

Пока не работает... и именно АС

Выход один - узать какие конкретно значения лежат в переменных - это покажет нам почему не работает запрограммированное условие.

Если округление идёт автоматом до 0.01, то скорее всего тест проходит на инструменте типа UsdJpy. Тогда остаётся вариант работать через строковые переменные (если уж так сильно нужна столь далёкая разрядность после запятой)

 
drknn:
Выход один - узать какие конкретно значения лежат в переменных - это покажет нам почему не работает запрограммированное условие.
Спасибо, Владимир, нашел причину. Вопрос выше двумя постами...
 
drknn:


Сделал. Вот результат его работы.

  


спс, все ОК - работает, просто я никак не мог догадаться флаг тенденции ввести -  думал надо как сортировку массива делать
 
artmedia70:

Корректна ли такая запись:


Корректна, так как в первый параметр возвращает число, а второй - целочисленная величина в допустимых пределах. Вопрос весь в том, что именно ляжет в переменную. Попробуйте принтануть как есть и попробуйте вот такую конструкцию:

double AC1=NormalizeDouble(iAC(sy,tf,1),8);
string str=AC1;
Print("str = ",str);
 
IgorM:

спс, все ОК - работает, просто я никак не мог догадаться флаг тенденции ввести -  думал надо как сортировку массива делать


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

Сложность же Вашей задачи в том, что пришлось искать пики/впадины. Чтоб это обнаружить, нужно проскочить мимо экстремума и только потом код сможет понять, что он его реально проскочил. Вот поэтому-то и приходится возвращаться на шаг назад, чтоб запомнить точку экстремума и ячейку, в которой она лежит. 

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