Страница 1 из 1

Расчет скользящих средних в ФТ (вопросы)

Добавлено: Пн фев 05, 2007 10:55 pm
-=LP=-
Создаю новую тему, потомучто незнаю куда написать. :roll:
Хочу задать вопрос по поводу расчета СС. Вопрос следующий:
Мне нужно расчитать Exponential MA. Нашел формулы расчета.
Экспоненциальное скользящее среднее

Экспоненциальное, или экспоненциально сглаженное, скользящее среднее определяется путем добавления к вчерашнему значению скользящего среднего определенной доли сегодняшней цены закрытия. В случае экспоненциальных скользящих средних больший вес имеют последние цены закрытия.

Формула для расчёта экспоненциальной скользящей средней задается рекурсионно:

MAE = P1*K + MAE-1*(1-K),

где MAE - экспоненциальная скользящая средняя;
P1 - цена в рассчитываемый период;
MAE-1 - предыдущее значение экспоненциальной скользящей средней;

K = 2/(N + 1)

N - период усреднения.
"Взято с www.fibo-futures.ru/pages.php?page=52"

Так вот. Написал код, по примеру Simple MA, взятой из стратегии, входящей в ФТ.

Код: Выделить всё

{-----Reset strategy--------------------------------------------------------}
procedure ResetStrategy; stdcall;

begin
  OrderHandle := -1;
end;

// Расчет EMA
function GetEMA(period: integer): double;
var
  i: integer;
  sum: double;
begin
  sum := 0;
  for i:=0 to period - 1 do
    sum := (sum + Close(i));
  result := sum*(2/(period + 1)) + result*(1-(2/(period + 1)));
end;
Компилю, выдает:
Return value of function 'GetEMA' might be undefined.
Если запринтить потом значения ф-ции, вообще леваковые выдает.
Помогите пожалуйста разобраться в чем моя ошибка! :(
P.S. Ув. Terranin, если Вам несложно, подскажите, когда будет свободное время! Вы точно знаете что к чему!! :wink:

Re: Расчет скользящих средних в ФТ (вопросы)

Добавлено: Вт фев 06, 2007 3:07 am
Terranin
-=LP=- писал(а):

Код: Выделить всё

{-----Reset strategy--------------------------------------------------------}
procedure ResetStrategy; stdcall;

begin
  OrderHandle := -1;
end;

// Расчет EMA
function GetEMA(period: integer): double;
var
  i: integer;
  sum: double;
begin
  sum := 0;
  for i:=0 to period - 1 do
    sum := (sum + Close(i));
  result := sum*(2/(period + 1)) + result*(1-(2/(period + 1)));
end;
Компилю, выдает:
Return value of function 'GetEMA' might be undefined.
Если запринтить потом значения ф-ции, вообще леваковые выдает.
Помогите пожалуйста разобраться в чем моя ошибка! :(
P.S. Ув. Terranin, если Вам несложно, подскажите, когда будет свободное время! Вы точно знаете что к чему!! :wink:
result := sum*(2/(period + 1)) + result*(1-(2/(period + 1)));

здесь в правой части вместо result* подразумевалось я думаю sum*

Re: Расчет скользящих средних в ФТ (вопросы)

Добавлено: Вт фев 06, 2007 7:47 pm
-=LP=-
Terranin писал(а):result := sum*(2/(period + 1)) + result*(1-(2/(period + 1)));

здесь в правой части вместо result* подразумевалось я думаю sum*
Поставил. Потом делаю так:

Код: Выделить всё

EMA := GetEMA(period);
Print(format('EMA: %.4f', [EMA]));
Принтит значения в пределах 5-ти. Насколько я понимаю, расчитываеться цена СС на текущем баре. Так почему значение 5 с копейками, если должно быть, 1 с копейками (для Фунта), непонятно! :shock: А может есть какой-то другой способ узнать значение СС на текущем баре? Может через GetIndicatorValue или еще как? :roll:

Добавлено: Вс фев 22, 2009 7:10 pm
Козьма Прутков
Что-то неладное с расчетом ЕМА. В приведенных выше формулах нет рекурсивности.

По идее, должно быть так:

Код: Выделить всё

  K := 2/(period + 1);
  EMA[index] := K*Close(index) + (1-K)*EMA[index+1];
График получается тот же, что в MovingAverage в режиме ЕМА, но не сразу: очень долго длится начальный переходной процесс. Как можно задать начальное условие - самое первое значение = Close?

Уважаемый Терранин! Может быть, выложите текст MovingAverage (для Дельфи)?

Добавлено: Вс фев 22, 2009 7:32 pm
Terranin
Козьма Прутков писал(а):Что-то неладное с расчетом ЕМА. В приведенных выше формулах нет рекурсивности.

По идее, должно быть так:

Код: Выделить всё

  K := 2/(period + 1);
  EMA[index] := K*Close(index) + (1-K)*EMA[index+1];
График получается тот же, что в MovingAverage в режиме ЕМА, но не сразу: очень долго длится начальный переходной процесс. Как можно задать начальное условие - самое первое значение = Close?

Уважаемый Терранин! Может быть, выложите текст MovingAverage (для Дельфи)?
Исходники всех индикаторов лежат на сайте http://www.forextester.ru/download.html

Добавлено: Вс фев 22, 2009 9:18 pm
Козьма Прутков
Спасибо, исходники я уже нашел сам, разбираюсь.