Параметры
Period - период для WMA, ATR
nATR - количество значений ATR для расчета отклонения
Примеры работы
Исходный текст индикатора
Код: Выделить всё
function Initialize()
{
  IndicatorName = "BAWMA";   
  PriceStudy = true;   
  AddInput("Input", Inputs.Candle);   
  AddSeries("WMA", DrawAs.Line, Color.Black, false);   
  AddSeries("BWMA", DrawAs.Custom, Color.DarkSeaGreen);
  AddSeries("AWMA", DrawAs.Custom, Color.LightSalmon);
  AddParameter("Period", 30, 1);   
  AddParameter("nATR", 4);   
}
function Evaluate()
{
// evge 04.04.2016, http://alfadirect4.ru
var A = ATR(Input, Period);
double O = 0.0; //баланс
double AP = 0.0; //% Ask
double BP = 0.0; //% Bid
  if ( CurrentIndex >= Period ) 
  {
    double cWMA = 0.0, cAWMA = 0.0, cBWMA = 0.0;
    var cZn = 0.0;
    for (var i=0; i<Period; i++ )
    {     
      O = (Input.VolumeAsk[-i] + Input.VolumeBid[-i]) / 2; //баланс
      AP = Input.VolumeAsk[-i] / O - 1; //% Ask
      BP = Input.VolumeBid[-i] / O - 1; //% Bid
      cWMA = cWMA + Input.Close[-i]*(Period-i);
      cAWMA = cAWMA + Input.Close[-i]*(Period-i) + A[-i]*nATR*(Period-i)*AP;
      cBWMA = cBWMA + Input.Close[-i]*(Period-i) + A[-i]*nATR*(Period-i)*BP;
      cZn = cZn + (i+1);
    } 
   WMA[0] = cWMA/cZn;
   AWMA[0] = cAWMA/cZn;
   BWMA[0] = cBWMA/cZn;
  }
  else {
   WMA[0] = Input.Close[0];
   AWMA[0] = Input.Close[0];
   BWMA[0] = Input.Close[0];
   }
if (AWMA[0] < BWMA[0]) { AWMA.DrawChannel(BWMA); }  else { BWMA.DrawChannel(AWMA); }
}
Скачать исходный текст

