Индикаторы: Bollinger Bandwidth 1.0 for MT5

 

Bollinger Bandwidth 1.0 for MT5:

Измеряет расстояние между полосами Боллинджера (Bollinger Bands), выполнен на основе встроенного индикатора iBands.

Эта новая версия, реализованная на MetaTrader 5, использует для расчетов данные встроенного индикатора iBands, необходимые для расчета разности между верхней и нижней полосами.

В этой версии реализована попытка учета точности котировок инструмента, к которому прикреплен индикатор: котировки с 2, 3, 4 и 5 знаками должны показывать правильные значения. Возможно, обработку количества знаков в точности нужно улучшить, все возможные варианты не рассматривались.

Автор: Larry

Bollinger Bandwidth 1.0 for MetaTrader 5

 
Automated-Trading писал(а)  :

Bollinger Bandwidth 1.0 for MT5:

Автор: Larry

расстояние между ББ = 2 * СКО...
 

Наконец-то, после нескольких лет торговли с BollingerBand... Теперь я нашел этот простой и полезный индикатор для расчета верхнего-нижнего BB Range......

Работает отлично на основных парах, но все еще имеет ошибку, когда прикрепляется к JPY (EURJPY & USDJPY) в 4-х значном брокере,,,,, значение ширины неверно.

Я надеюсь, что будет v2.0, чтобы исправить эту проблему.

Файлы:
JPY_Value.jpg  38 kb
 

Привет, Ларри, спасибо за индикатор. Я бы рекомендовал не копировать все данные постоянно, так как это приводит к огромному снижению производительности.

Вот переделанная копия вашего метода OnCalculate():


  {
//--- переменные
   double upper_band[];
   double lower_band[];

// --- Превратите массивы в массивы динамических серий 
// ArraySetAsSeries(lower_band,true);
// ArraySetAsSeries(upper_band,true);
// ArraySetAsSeries(BBandwidthBuffer,true);

//--- проверьте, все ли данные рассчитаны
   if(BarsCalculated(BBHandle)<rates_total) return(0);
//--- мы можем скопировать все данные
   
   int barstocopy = 0;
   if(prev_calculated>rates_total||prev_calculated<=0) {
      barstocopy = rates_total;
   } else {
      barstocopy = rates_total-prev_calculated;
      if(prev_calculated>0) barstocopy++;
   }

   if(IsStopped()) return(0);
   
   if(CopyBuffer(BBHandle,1,0,barstocopy,upper_band) <=0) return(0);
   if(CopyBuffer(BBHandle,2,0,barstocopy,lower_band) <=0) return(0);

   for(int i=0;i<barstocopy-1;i++)
     {
         BBandwidthBuffer[i]=upper_band[i]-lower_band[i];
     }

//--- возвращаем значение prev_calculated для следующего вызова
   return(rates_total);
  }
 
Привет, я сделал версию с такой формулой: полоса пропускания = (( верхняя полоса - нижняя полоса ) / средняя полоса ) * 100
Файлы: