Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 456

 
E_Ghazaryan:
Дааа, точно =D ))) Уже прикрепил.)))

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

iCustom(Symbol(), Period(), "_MTF_ADX3", 0, 500, 6, 8, 14, 6, 6, 2, true, false, номер_буфера, номер_бара).

Все перечисленные значения можно задать внешними переменными советника и вписывать имена этих переменных в iCustom() вместо жестко заданных величин.

 

Не подскажите почему:

double d = 0.07;

   d = NormalizeDouble(d,2);

в обоих случаях d== 0.07000000000000001

как оставить 2 знака после запятой?

 
pusheax:

Не подскажите почему:

double d = 0.07;

   d = NormalizeDouble(d,2);

в обоих случаях d== 0.07000000000000001

как оставить 2 знака после запятой?


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

   double a=76.671;             // нормализованное число с 3 знаками после запятой
   Print("Print(76.671)=",a);   // выведем его как есть
   Print("DoubleToString(a,8)=",DoubleToString(a,8)); // выведем с заданной точностью

выдаст в терминале:

  DoubleToString(a,8)=76.67100000

  Print(76.671)=76.67100000000001


То есть для печати вывод лишних значений не есть проблема.

Документация по MQL5: Преобразование данных / NormalizeDouble
Документация по MQL5: Преобразование данных / NormalizeDouble
  • www.mql5.com
Преобразование данных / NormalizeDouble - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Karputov Vladimir:


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

выдаст в терминале:


То есть для печати вывод лишних значений не есть проблема.

Спасибо, просто при попытке открыть позицию лотом 0.07 выдает ошибку (думал что дело в этом), видимо дело в чем то другом, буду дальше разбираться.
 
pusheax:
Спасибо, просто при попытке открыть позицию лотом 0.07 выдает ошибку (думал что дело в этом), видимо дело в чем то другом, буду дальше разбираться.
Первым делом нужно смотреть описание по номеру ошибки. Это сократит путь поисков.
 

добрый вечер

 

объявил динамический массив

double  all_order[][10]; 

 

в OnInit переопределил

 ArrayResize(all_order, 20); 

 

в функции заношу данные

void OR_spisok(double a0, double a1, double a2, double a3, double a4, double a5)

{

int a10=int(a0);

all_order[a10][0]=a0;

all_order[a10][1]=a1;

all_order[a10][2]=a2;

all_order[a10][3]=a3;

all_order[a10][4]=a4;

all_order[a10][5]=a5; 

}

 

три строки работает нормально, на 4 клинит

 

2015.10.09 20:13:47.908 3102 EURUSD,H1: array out of range in '3102.mq4' (393,10)

393, 10 это как раз: 

 all_order[a10][0]=a0;

 

в чем ошибка? 

 

 

Убрал строку #property strict

скрипт работает, без этой строки могу продолжить работу? 

 
pr0gre5:

добрый вечер

 

объявил динамический массив


Убрал строку #property strict

скрипт работает, без этой строки могу продолжить работу? 

Да
 
Artyom Trishkin:

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

iCustom(Symbol(), Period(), "_MTF_ADX3", 0, 500, 6, 8, 14, 6, 6, 2, true, false, номер_буфера, номер_бара).

Все перечисленные значения можно задать внешними переменными советника и вписывать имена этих переменных в iCustom() вместо жестко заданных величин.

Спасибо за ответ. Но дело в том, что я так и делал сперва, но когда получал неверные значения, решил удалить параметры из iCustom, чтобы советник использовал стандартные параметры индикатора. Но в обоих случаях, советник получает неверные значения. То есть на пример Алерт выдает значения Синий линии 30,32362 а когда я смотрю на графике индикатора он в том же месте имеет значение 22,3320. И так же с другими линиями.
 
E_Ghazaryan:
Спасибо за ответ. Но дело в том, что я так и делал сперва, но когда получал неверные значения, решил удалить параметры из iCustom, чтобы советник использовал стандартные параметры индикатора. Но в обоих случаях, советник получает неверные значения. То есть на пример Алерт выдает значения Синий линии 30,32362 а когда я смотрю на графике индикатора он в том же месте имеет значение 22,3320. И так же с другими линиями.
Покажите код, в котором вы берёте данные с индикатора.
 
Artyom Trishkin:
Покажите код, в котором вы берёте данные с индикатора.

Код был большой. Но я чтобы узнать в чем проблема что советник не работает по правилам срезал эту часть в отдельную и стал тестировать.

double Ind_Blue=iCustom(NULL, 0, "_MTF_ADX3",1,0);

double Ind_Red=iCustom(NULL, 0, "_MTF_ADX3",2,0);

Alert(" Ind_Blue= " ,Ind_Blue , " Ind_Red= " ,Ind_Red);

 Прикрепляю также файл советника. Не хочу тратить ваше время, но ни как не могу найти в чем проблема.

 И еще похожий индикатор с такой же проблемой (Adx mtf). К нему есть mq4 файл. Но в коде нету проблем кажется.

Файлы:
_MTF_ADX3.ex4  5 kb
Adx_mtf.ex4  21 kb
Adx_mtf.mq4  6 kb
Причина обращения: