Определение наклона скользящей средней.

 

Друзья, добрый день.

//======================================================

Хотел бы посоветоваться с вами по такому вопросу:

есть стандартная взвешенная скользящая средняя.

торговая идея также совершенно стандартна: покупать, когда наклон МА "вверх", продавать, когда МА направлена "вниз".

Хотел бы уточнить, как определяется наклон кривой, скользящей средней?

(только так: Y(t-2)<Y(t-1)<Y(t) - это "растущая" МА)

//======================================================

Или есть еще другие варианты?

 
Morzh09:

Друзья, добрый день.

//======================================================

Хотел бы посоветоваться с вами по такому вопросу:

есть стандартная взвешенная скользящая средняя.

торговая идея также совершенно стандартна: покупать, когда наклон МА "вверх", продавать, когда МА направлена "вниз".

Хотел бы уточнить, как определяется наклон кривой, скользящей средней?

(только так: Y(t-2)<Y(t-1)<Y(t) - это "растущая" МА)

//======================================================

Или есть еще другие варианты?

Если взять EMA, то она меняет свое направление в момент пересечения с ценой.
 

Можно элементарно вычислять так: X=(МA[2]-MA[1])/2  или если брать больший интервал X=(МA[3]-MA[1])/3. Тогда Х будет показывать скорость изменения МА. Если X<0, то МА повыщается, если Х>0, то МА понижается.  

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

Х[i]=(MA[i+1]-MA[i])/2   и прочертить жирную линию X=0 для наглядности. Если наш индикатор ниже нулевой прямой, то покупать, если выше - продавать. Чем дальше наша линия от нулевой, тем интенсивнее движение.

 
leman:
Если взять EMA, то она меняет свое направление в момент пересечения с ценой.

Знаем, знаем, это говорил какой-то гуру (не могу вспомнить кто, но это точно было опубликовано в одном из журналов)...

Беда в том, что он не уточнил хотя бы эквивалентный период сглаживания.

 
Mathemat:

Знаем, знаем, это говорил какой-то гуру (не могу вспомнить кто, но это точно было опубликовано в одном из журналов)...

Беда в том, что он не уточнил хотя бы эквивалентный период сглаживания.

Любой период
 
FOReignEXchange:

Можно элементарно вычислять так: X=(МA[2]-MA[1])/2 или если брать больший интервал X=(МA[3]-MA[1])/3. Тогда Х будет показывать скорость изменения МА. Если X<0, то МА повыщается, если Х>0, то МА понижается.

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

Х[i]=(MA[i+1]-MA[i])/2 и прочертить жирную линию X=0 для наглядности. Если наш индикатор ниже нулевой прямой, то покупать, если выше - продавать. Чем дальше наша линия от нулевой, тем интенсивнее движение.

а зачем делители нужны, если учитывается знак ?
 
 
Mathemat:

Знаем, знаем, это говорил какой-то гуру (не могу вспомнить кто, но это точно было опубликовано в одном из журналов)...

Беда в том, что он не уточнил хотя бы эквивалентный период сглаживания.

Накидал пару индикаторов для проверки
Файлы:
ema.zip  3 kb
 

keekkenen:
а зачем делители нужны, если учитывается знак ?

 

Точно. Ошибочка вышла. Нудо было писать так

X=MA[i+1]-MA[i] или  X=(MA[i+2]-MA[i])/2

Я же тут не складывал, а вычитал.

 

Всё элементарное просто, казалось бы.

Работает только в режиме реального времени

Показывает градусы от 90 до 270, если поменять местами time,price,time2,price2 тогда от 90-0 и 270-360, вообщем от направления луча.

p - номер бара (начальная точка луча)

p+10 - смешение (конечная точка луча)

n - усреднение MA

Grad - градусы

void OnStart()
  {

   double Grad;
   for(int p=1; p<10001; p+=10)
     {
      for(int n=50; n<51; n+=50)
        {
         string name="Line"+n+p;
         datetime time=iTime(Symbol(),Period(),p);
         double price=iMA(Symbol(),Period(),n,0,MODE_SMMA,PRICE_CLOSE,p);
         datetime time2=iTime(Symbol(),Period(),p+10);
         double price2=iMA(Symbol(),Period(),n,0,MODE_SMMA,PRICE_CLOSE,p+10);
         if(price3==price2)
           {
            if(!ObjectCreate(0,name,OBJ_TRENDBYANGLE,0,time2,price2,time,price))
              {
               Print(__FUNCTION__,
                     ": не удалось создать линию тренда! Код ошибки = ",GetLastError());
              }
           }

        }
     }
   ChartRedraw();
   for(int p=1; p<10001; p+=10)
     {
      for(int n=50; n<51; n+=50)
        {
         string name="Line"+n+p;
         ObjectGetDouble(0,name,OBJPROP_ANGLE,0,Grad);
         //printf(name+"============ " + Grad);
        }
     }

  }

Как гласит справка 

OBJPROP_ANGLE

Угол. Для объектов с еще не заданным углом, созданных из программы, значение равно EMPTY_VALUE

То есть угол не устанавливается, но он пересчитывается после ChartRedraw();

Но в тестере на большой скорости не работает, работает только на медленной скорости и то данные пересчитываются только после нового тика.

На этом всё.

Если есть идеи в этом направлении пишите.