Создание пользовательского индикатора в WLD


тема форума: Софт |

Доброго времени суток.

У меня возникли проблемы с написанием собственного индикатора ER (Efficiency Ratio).
Попытался сам запрограммировать этот индикатор, вроде получилось, в скрипте ошибок не возникает, но при отображение этого индикатора на графике получается полная ерунда, сначала на одном участке графика он считается и отображается, но его значения не соответствуют предполагаемым, а впоследствие он вообще не отображается на графике. Ниже я привожу скрипт моего варианта расчета индикатора. Не подскажите ли мне, что и как мне нужно исправить в скрипте индикатора, чтобы он корректно считался и отображался на графике в диапазоне от 0 до 1.
Заранее благодарен.

function ERSeries( Series: Integer; nPeriod: Integer ): integer;
begin
var nBar, j: integer;
var sName: string;
var Value, fSignal, fDiff, fNoise, fEfRatio: float;

sName := 'ER(' + GetDescription( Series ) + ',' + IntToStr( nPeriod ) + ')';
Result := FindNamedSeries( sName );
if Result >= 0 then
Exit;
Result := CreateNamedSeries( sName );

for nBar := 0 to nPeriod do
@Result[nBar] := @Series[nBar];
for nBar := nPeriod + 1 to BarCount() - 1 do
begin
fSignal := Abs(@Series[nBar] - @Series[nBar - nPeriod]);
fNoise := 0;

for j := 0 to nPeriod - 1 do
begin
fDiff := Abs(@Series[nBar - j] - @Series[nBar - j - 1]);
fNoise := fNoise + fDiff;
end;

if fNoise <> 0 then
fEfRatio := fSignal / fNoise
else
fEfRatio := 0;
Value := 0;
SetSeriesValue( nBar, Result, Value );
end;
end;

function ER( nBar: integer; Series: Integer; nPeriod: Integer ): float;
begin
Result := GetSeriesValue( nBar, ERSeries( Series, nPeriod ) );
end;