Ошибки, баги, вопросы - страница 2728

 
Askr:

Спасибо.

Я нашёл вот еще что, что возможно 1)это блокировка брокера.

https://www.mql5.com/ru/forum/38456/page127

https://www.mql5.com/ru/forum/304679

2) как то да скачут проценты сильно бывало и 110% и 70% скачет постоянно и сильно, пока еще не считал сам. Может быть что то связано с загрузкой но вряд ли. Я так по мелочи открывал и плечи в спецификациях марже  одинаковые и балансы одинаковые почти.

Обычно ветка про сигналы - эта
https://www.mql5.com/ru/forum/10603/page394
Для информации.

FAQ по сервису Сигналы
FAQ по сервису Сигналы
  • 2020.04.18
  • www.mql5.com
Узнать за 15 минут: смотри обучающие видео по торговым сигналам в MetaTrader 4 и MetaTrader 5 Здесь будут собраны и обработаны наиболее частые вопр...
 
Sergey Dzyublik:

Баг МТ5 (build 2390) некорректный подсчет фигурных скобок в описании структуры класса

Спасибо за сообщение, исправлено

 

так работает:

   ObjectSetDouble (0,name,OBJPROP_ANGLE,direction==0?0:direction>0?30:-30);

так нет (всегда 0)

   ObjectSetDouble (0,name,OBJPROP_ANGLE,direction*30);

direction -1; +1; 0

 
Igor Zakharov:

так работает:

так нет (всегда 0)

direction -1; +1; 0

А так

ObjectSetDouble (0,name,OBJPROP_ANGLE,(direction==0?0:direction>0?30:-30));
 
Alexey Viktorov:

А так

тоже работает, нерабочий второй вариант

 
   ObjectSetDouble (0,name,OBJPROP_ANGLE,direction*30.0);
direction у вас объявлена как int. Вот и получаете то что получаете. Последнее время довольно привередливо многие функции стали относиться к значениям. Лучше подстраховаться с приведением.
Сам недавно напоролся на таком. Вроде раньше проблем не было. А тут попросили подправить код и пока не привел к double не хотело работать как положено.
 
Konstantin Nikitin:
direction у вас объявлена как int. Вот и получаете то что получаете. Последнее время довольно привередливо многие функции стали относиться к значениям. Лучше подстраховаться с приведением.
Сам недавно напоролся на таком. Вроде раньше проблем не было. А тут попросили подправить код и пока не привел к double ни хотело работать как положено.

да, int. но это же умножение - в целых числах тоже 30*1=30. На 100% уверен, что несколько билдов тому назад работало отлично и во втором варианте, т.к. эти 30 подбором определял...

похоже ещё одна "особенность" MT5... Хорошо хоть блок декоративный, а если где-нибудь типа автолота или стоплоса - печалька может случиться - я частенько переворачиваю умножением на -1...

спасибо, возьму ещё один костыль на вооружение...

 
Igor Zakharov:

тоже работает, нерабочий второй вариант

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

А Константин прав, зачем-же туда где ожидается double сувать int... И никакая это не особенность mql5, а просто некоторые попытки приучить к порядку.

 

Прошу помощи.

Индикатор вылетает по ошибке array out of the range.

в коде определил буферы

#property indicator_buffers 2

#property indicator_color1 Red

#property indicator_width1 1

#property indicator_plots  1 // количество графических построений

#property indicator_type1   DRAW_ARROW


Объявил глобальные переменные

double Buf1[];

double Buf2[];

В Init() задал свойства

    PlotIndexSetInteger(0,PLOT_ARROW,code); 

//--- установим пустое значение 

   PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0);

   SetIndexBuffer(0,Buf1,INDICATOR_DATA);

   PlotIndexSetString(0, PLOT_LABEL, "Break");



//----

   PlotIndexSetInteger(1,PLOT_ARROW,code);  

//--- установим пустое значение 

   PlotIndexSetDouble(1,PLOT_EMPTY_VALUE,0);

   SetIndexBuffer(1,Buf2,INDICATOR_CALCULATIONS);

   PlotIndexSetString(1, PLOT_LABEL, "Break");


В OnCalculate() в коде определяется условие - переменная up.

Если истина, то выполняется такой код

   

  i=nPoint1; BreakUp=false; BreakDn=false;
  
while(i>=0 && BreakUp==false && BreakDn==false)
  {              Print("i  ",i);                 tmp=iHigh(NULL,0,nPoint1)-Speed*(nPoint1-i);        tmp1=iHigh(NULL,0,nPoint1)-Speed*(nPoint1-i)-resultL;        if(NormalizeDouble(iLow(NULL,0,i),Digits())<NormalizeDouble(tmp1,Digits()) && NormalizeDouble(iHigh(NULL,0,i),Digits())>NormalizeDouble(tmp,Digits()))         {          size=ArraySize(Buf1);          Print("size ",size);                   BreakUp=true;          if(channelbreak) Buf1[i]=tmp;          Comm="\nПробой вверх на уровне " + DoubleToString(tmp,Digits());         }        else        if(NormalizeDouble(iLow(NULL,0,i),Digits())<NormalizeDouble(tmp1,Digits()))         {          size=ArraySize(Buf1);          Print("size ",size);                          BreakDn=true;          if(channelbreak) Buf1[i]=tmp1;          Comm="\nПробой вниз на уровне "+DoubleToString(tmp1,Digits());         }        else        if(NormalizeDouble(iHigh(NULL,0,i),Digits())>NormalizeDouble(tmp,Digits()))         {          size=ArraySize(Buf1);          Print("size ",size);                   BreakUp=true;          if(channelbreak) Buf1[i]=tmp;          Comm="\nПробой вверх на уровне "+DoubleToString(tmp,Digits());         }        else Comm="\nПробоя канала нет";        //i--;       }     } Ошибка происходит при входе в цикл while при присвоении значения переменной значению буфера. Проверка на размер массива буфера выдает ноль. Т.е. буфер не инициализируется. Всю голову сломал, не могу понять почему. В чем затык?
nPoint1 - это индекс бара (сдвиг от нулевого).
 
Ilyas:

Уточните, пожалуйста, нормально ли, что во время откладки индикатора на открывшемся графике не видно значений этого индикатора? Т.е., например, открываем в отладчике MACD. Ставим точку останова в цикл записи значений в буферы. После записи значения ChartRedraw(). Ожидаю после записи значения увидеть это значение сразу на графике, но вижу только пустое окно.

Билд 2380 x64.

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