Параметры
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); }
}
Скачать исходный текст