Bollinger Bands при вызове даёт значение равное 4-м знакам

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Павел Козлов
25
Павел Козлов  
Всем привет. Я настолько редко обращаюсь с просьбами на форум, проще самому поискать в инете, но тут случай отдельный. Проблема в следующем. При вызове в моём индикаторе 
iBands(NULL,0,20,2,0,PRICE_HIGH,MODE_UPPER,1);
Он даёт значение с 4-мя знаками после точки. А мне, например, что бы определить вышла ли свеча за верхнюю границу нужно сравнивать значения соответственно свечей и бб. Но он их сравнивает по 4-м знакам(собственно именно 4 знака и выдаёт код выше). Пробовал уже всё менять местами, что ток можно пробовал. Кстати как понял про 4 знака - пропринтовал. В инете искал инфу, так что не пинайте, сам не ахти в программировании, но свои индикаторы с горем пополам пишу, методом тыка и крови xD. В общем побуду наглым и попрошу у вас кусок кода исправить или подсказать, что не так делаю.  Кстати залазил в сам индикатор BB и принтовал непосредственно напрямую, он после запятой фиг знает сколько вообще знаков выдает. 
double bb=iBands(NULL,0,20,2,0,PRICE_HIGH,MODE_UPPER,1);
if (bb <Low[1]){
        чертова туча невероятных гралей
}
Vladimir Karputov
Модератор
194492
Vladimir Karputov  

Если посмотреть в код индикатора \MQL5\Indicators\Examples\BB.mq5, то видно, что он выдаёт значения

   PlotIndexSetInteger(2,PLOT_SHIFT,ExtBandsShift);
//--- number of digits of indicator value
   IndicatorSetInteger(INDICATOR_DIGITS,_Digits+1);
//---- OnInit done
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,

на один разряд точнее.


Для Ваших расчётов нужно сравнивать два вещественных числа

Павел Козлов
25
Павел Козлов  
Vladimir Karputov:

Если посмотреть в код индикатора \MQL5\Indicators\Examples\BB.mq5, то видно, что он выдаёт значения

на один разряд точнее.


Для Ваших расчётов нужно сравнивать два вещественных числа

Прошу прощения за неуточнение, я работаю с mql4. Посмотрел код BB и там 
   IndicatorDigits(Digits);
Но если честно я не понял что вы мне хотели сказать, повторюсь, я плуг в програмировании и если можно, то приведите пример. Т.е. я понимаю про вещественные числа, но как добиться точности в 5 знаков после запятой от BB я так и не понял.
Павел Козлов
25
Павел Козлов  
Кстати вдогонку , так сказать в помощь в поиске проблемы. при вызове и принте(собственно именно тот способ по которому я и определил что 4 знака дает, а не 5) он еще и округляет число.
double bb=iBands(NULL,0,20,2,0,PRICE_HIGH,MODE_UPPER,1);
Print(bb);

2018.04.20 16:44:57.550GBPUSD,M1: 1.4037

Хотя при наведении на полосу ВВ на графике значение показывает  1.40368


Alexey Viktorov
28116
Alexey Viktorov  
Павел Козлов:
Кстати вдогонку , так сказать в помощь в поиске проблемы. при вызове и принте(собственно именно тот способ по которому я и определил что 4 знака дает, а не 5) он еще и округляет число.

2018.04.20 16:44:57.550GBPUSD,M1: 1.4037

Хотя при наведении на полосу ВВ на графике значение показывает  1.40368


Вероятно, что в момент распечатки значение индикатора было 1.40370 и этот незначащий 0 был отброшен. При распечатке значений цены и в данном случае индикатора пользуйтесь функцией Print(DoubleToString(value, _Digits));

DoubleToString - Преобразование данных - Справочник MQL4
DoubleToString - Преобразование данных - Справочник MQL4
  • docs.mql4.com
[in]  Формат точности. Если значение digits лежит в диапазоне от 0 до 16, то будет получено строковое представление числа с указанным количество знаков после запятой. Если значение digits лежит в диапазоне от -1 до -16, то...
Павел Козлов
25
Павел Козлов  
Alexey Viktorov:

Вероятно, что в момент распечатки значение индикатора было 1.40370 и этот незначащий 0 был отброшен. При распечатке значений цены и в данном случае индикатора пользуйтесь функцией Print(DoubleToString(value, _Digits));

Самое забавное, что он начал показывать действительно 5 знаков. Только вот попробуйте вставить этот код и сравнить значения на графике(возьмем сформировавшуюся и закрытую свечу для точности) и посмотрите что он выдаёт разные значения да и вообще он чушку пишет если чесн. Просто вопрос уже стоит в том, что либо я тупой и чего-то не понимаю, либо тут есть проблема на которую мне не хватает знаний.
double bb=iBands(NULL,0,20,2,0,PRICE_HIGH,MODE_UPPER,1);
Print(DoubleToString(bb,Digits)); 
Кстати дело было не в нуле, это просто пример такой попался, он на всех значениях окруляет до 4-х знаков.
Artyom Trishkin
Модератор
56824
Artyom Trishkin  
Павел Козлов:
Самое забавное, что он начал показывать действительно 5 знаков. Только вот попробуйте вставить этот код и сравнить значения на графике(возьмем сформировавшуюся и закрытую свечу для точности) и посмотрите что он выдаёт разные значения да и вообще он чушку пишет если чесн. Просто вопрос уже стоит в том, что либо я тупой и чего-то не понимаю, либо тут есть проблема на которую мне не хватает знаний.
Кстати дело было не в нуле, это просто пример такой попался, он на всех значениях окруляет до 4-х знаков.
Вы смотрите код кастомного ВВ, а используете стандартный.
Aleksey Lebedev
7475
Aleksey Lebedev  
Павел Козлов:
  Он даёт значение с 4-мя знаками после точки.

Это не так, значения индикатора имеют тип double - 8 байт, даёт полностью)
т.е. внутри всегда максимально возможная точность, вывод на экран/принт - округляется.

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий