скользящая средняя - страница 2

 
Oleg Tsarkov:

Я же написал, если пересекает ноль, сверху вниз или снизу вверх, а самого нуля естественно никогда не будет...

т.е. если предыдущее значение выше нуля, а следующее ниже, значит случилось выравнивание) 

Почему никогда? Мы же работает не с чистым double, а ограниченным по точности Digits() 

У меня знакомый делал сову типа Радуга, только мувинги сделал на 10-сек барах, сам их формировал. Говорил, результаты были гораздо лучше, чем на М1. 

 
traderEvgen:
Как программно узнать что скользящая средняя выровнялась на графике ?

Если по Вашему рисунку смотреть, то нужно из предыдущего значения вычитать текущее и смотреть - разница находится ли в пределах допуска выравнивания. К примеру допуск - отклонение максимум в 1 пункт.

Если же необходимо оценить выравнивание не на соседних барах, а на отрезке, то необходимо сложить все значения скользящей средней на этом отрезке и поделить на их количество, затем сравнить полученное значение с арифметическим средним между первым и последним значением - это к примеру. Также можно применить метод наименьших квадратов. И снова применяем ту же самую историю с допуском.

Не останавливайтесь, программно можно воплотить любые фантазии.

 
new-rena:

Если по Вашему рисунку смотреть, то нужно из предыдущего значения вычитать текущее и смотреть - разница находится ли в пределах допуска выравнивания. К примеру допуск - отклонение максимум в 1 пункт.

Если же необходимо оценить выравнивание не на соседних барах, а на отрезке, то необходимо сложить все значения скользящей средней на этом отрезке и поделить на их количество, затем сравнить полученное значение с арифметическим средним между первым и последним значением - это к примеру. Также можно применить метод наименьших квадратов. И снова применяем ту же самую историю с допуском.

Не останавливайтесь, программно можно воплотить любые фантазии.

Если не сложно можно пример по методам наименьших квадратов. С математикой у меня не очень, но могу научиться.

И кстати спасибо за давнюю подсказку, как находить угол. Правда вопрос возник: обязательно ли дельту  делить на Point(), так у меня углы все время в районе 150 градусов получаются.

И как-то можно сделать, чтобы если линия вертикальна, то угол равняется нулю, горизонтальна то 90 градусов? 

 
forexman77:

Если не сложно можно пример по методам наименьших квадратов. С математикой у меня не очень, но могу научиться.

И кстати спасибо за давнюю подсказку, как находить угол. Правда вопрос возник: обязательно ли дельту  делить на Point(), так у меня углы все время в районе 150 градусов получаются.

И как-то можно сделать, чтобы если линия вертикальна, то угол равняется нулю, горизонтальна то 90 градусов? 

МНК гуглим. Есть хорошие примеры.

Вертикальную линию Вам наверное вряд-ли получиться на МА-шке получить.

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

https://www.mql5.com/ru/forum/70602

Помогите выяснить формулу этого индикатора разворотов цены!
Помогите выяснить формулу этого индикатора разворотов цены!
  • www.mql5.com
Помогите выяснить формулу этого индикатора разворотов цены! - - Категория: эксперты форекс, торговые роботы и советники
 

Чем забавен форум нынче, как задача детская, так мусолят ее мусолят, как прям ракету не а марс строят. А как чуть-что боле-менее сложное, так нехотя ссылочкой откидываются, типа что тут такого, а реализация типа не царское дело. Даже типа не обсуждаемо. Типа раз два и готово. Или что-то погуглить предлагают.

new-rena, а изобразика в коде  по своей ссылочке с хорошим примером.

 
Dmitry Fedoseev:

Чем забавен форум нынче, как задача детская, так мусолят ее мусолят, как прям ракету не а марс строят. А как чуть-что боле-менее сложное, так нехотя ссылочкой откидываются, типа что тут такого, а реализация типа не царское дело. Даже типа не обсуждаемо. Типа раз два и готово. Или что-то погуглить предлагают.

new-rena, а изобразика в коде  по своей ссылочке с хорошим примером.

Думаю что заделать под себя Вам не составит труда. Тут я делал МНК на тиках и для МТ4 под евро-бакс. На МТ5 - я слабак, честно. Чо там считает индюк ещё не помню, но итог торговли на нём меня не сильно впечатлил. Также был где то последний вариант этого индюка, который в окне индикатора рисовал трендовую, как итог расчета по МНК, но я его видимо потерял...

//+------------------------------------------------------------------+
//|                                                           xx.mq4 |
//|                                                                  |
//|                                                                  |
//+------------------------------------------------------------------+
//#property indicator_chart_window
#property indicator_separate_window
#property indicator_buffers 3
//----
//datetime time;
int Tick_Max=5000,MNK_Max=9;
int i,Tick_Num,PriceTick,PrevClose,CLOSE;//;
double PRICE_Buf[],PRICE[],TICK[],X,Y,XY,X2,A,B,price0,price,MNK[],iMNK,Delta,PrevDelta,PrevClose2;//PRICE[],
//datetime time0,time,timeTICK[];//
//color Color_0 = OrangeRed, Color_1 = OrangeRed, Color_2 = Red, Color_3 = LightSalmon, Color_4 = PaleGreen, Color_5 = LawnGreen, Color_6 = PaleGreen, Color_7 = Green, Color_8 = DeepSkyBlue, Color_9 = DeepSkyBlue, Color_10 = DeepSkyBlue, Color_11 = DeepSkyBlue;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
      IndicatorShortName("Tiks");
      IndicatorDigits(10);
      SetIndexStyle(0, DRAW_LINE, DRAW_LINE, 1, Red);
      SetIndexBuffer(0, TICK);
      SetIndexLabel(0, "TICK");

      SetIndexStyle(1, DRAW_LINE, DRAW_LINE, 2, Blue);
      SetIndexBuffer(1, MNK);
      SetIndexLabel(1, "MNK");

      SetIndexStyle(2, DRAW_LINE, DRAW_LINE, 2, Green);
      SetIndexBuffer(2, PRICE);
      SetIndexLabel(2, "PRICE");

      ArrayResize(TICK,Tick_Max);
      ArrayResize(PRICE,Tick_Max);
      //ArrayResize(PRICE_Buf,Tick_Max);      
      ArrayResize(MNK,MNK_Max);
      ArrayInitialize(MNK,0);
      ArrayInitialize(TICK,0);
      ArrayInitialize(PRICE,0);
      //ArrayInitialize(PRICE_Buf,0);      
      Tick_Num=0;
      PrevClose=iClose(Symbol(),PERIOD_M1,0)*10000;
      ObjectsDeleteAll();
      GlobalVariableSet("Delta",0);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   ObjectsDeleteAll();
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
      CLOSE=iClose(Symbol(),PERIOD_M1,0)*10000;
      if(iClose(Symbol(),PERIOD_M1,0)>0 && iClose(Symbol(),PERIOD_M1,0)<3 && PrevClose!=CLOSE)
         {
            if(Tick_Num<MNK_Max+1)Tick_Num=Tick_Num+1;
            for (i=Tick_Max; i>0; i--)
               {
                  if(TICK[i-1]>0 && TICK[i-1]<3) TICK[i]=TICK[i-1];
               }
            TICK[0]=NormalizeDouble(iClose(Symbol(),PERIOD_M1,0),Digits);
            PriceTick=-1;
            for (i=Tick_Max-1; i>=0; i--)
               {
                  if(TICK[i+1]>0 && TICK[i+1]<3 && TICK[i]>0 && TICK[i]<3)
                     {
                        PriceTick=PriceTick+1;
                        ArrayResize(PRICE_Buf,PriceTick+1);
                        PRICE_Buf[PriceTick]=(TICK[i]+TICK[i+1])/2;
                     }
               }
            for (i=PriceTick; i>=0; i--)
               {
                  PRICE[i]=PRICE_Buf[PriceTick-i];
               }                           
            if(Tick_Num>MNK_Max)
               {
                  //метод нименьших квадратов y=A*X+B
                  X=0;Y=0;XY=0;X2=0;iMNK=-1;//
                  //for (i=0; i<=MNK_Max-1; i++)
                  for (i=0; i<=PriceTick; i++)
                     {
                        if(PRICE[i]>0 && PRICE[i]<3)
                           {
                              iMNK=iMNK+1;
                              X=X+iMNK;
                              Y=Y+PRICE[i];
                              XY=XY+iMNK*PRICE[i];
                              X2=X2+iMNK*iMNK;
                           }
                     }
                  if((iMNK*X2-X*X)==0 || iMNK==0)
                     {
                        Delta=0;
                        ArrayResize(TICK,Tick_Max);
                        ArrayResize(PRICE,Tick_Max);                        
                        ArrayResize(MNK,MNK_Max);
                        ArrayInitialize(MNK,0);
                        ArrayInitialize(TICK,0);
                        ArrayInitialize(PRICE,0);                        
                        Tick_Num=0;
                        return(0);
                     }
                  if((iMNK*X2-X*X)!=0 && iMNK!=0)
                     {
                        A=((iMNK+1)*XY-X*Y)/((iMNK+1)*X2-X*X);
                        B=(Y-A*X)/(iMNK+1);
                        iMNK=-1;
                        ArrayResize(MNK,MNK_Max);
                        ArrayInitialize(MNK,TICK[0]);
                        for (i=0; i<=MNK_Max-1; i++)
                           {
                              iMNK=iMNK+1;
                              MNK[i]=A*iMNK+B;
                           }
                        price0=B;
                        price=A*iMNK+B;
                        Delta=(price0-price)/Point();
                        //
                     }
               }
         }
      int win_idx=WindowFind("Tiks");
      Prn_txt(win_idx,"Delta", 10, 20, 0, "Tahoma", 10, DeepPink, "Delta = "+DoubleToStr(Delta,0));
      if(PrevDelta!=Delta)GlobalVariableSet("Delta",Delta);
      PrevDelta=Delta;
      Prn_txt(win_idx,"PrevClose", 10, 40, 0, "Tahoma", 10, DeepPink, "PrevCloseDelta = "+DoubleToStr(PrevClose-CLOSE,0));
      PrevClose=iClose(Symbol(),PERIOD_M1,0)*10000;
      //PrevClose2=NormalizeDouble(TICK[2],Digits);      
      return(0);
  }
  
   
  
  //+------------------------------------------------------------------+
//| Функция выводит на экран текстовую строку  в подокне Win                      |
//+------------------------------------------------------------------+
int Prn_txt(int Win, string Name, int XX, int YY, int Corner, string Font, int Font_Size, color CLR, string TXT)
   {
      //--- входные данные
      // TXT      -  выводимый текс
      // CLR      -  цвет текста
      // Name     -  имя текстовой метки
      // Х,Y      -  координаты 
      // Corner   - угол привязки
      // Font_Size-  высота шрифта
      // Font     -  шрифт
      //--- создание объекта
      ObjectCreate(0,Name,OBJ_LABEL,Win,0,0,0,0);
      ObjectSetInteger(0,Name,OBJPROP_XDISTANCE,XX);
      ObjectSetInteger(0,Name,OBJPROP_YDISTANCE,YY);
      ObjectSetInteger(0,Name,OBJPROP_CORNER,Corner);
      ObjectSetString(0,Name,OBJPROP_TEXT,TXT);
      ObjectSetString(0,Name,OBJPROP_FONT,Font);
      ObjectSetInteger(0,Name,OBJPROP_FONTSIZE,Font_Size);
      ObjectSetInteger(0,Name,OBJPROP_COLOR,CLR);
      //---
      return(0);
   }
 
new-rena:

Думаю что заделать под себя Вам не составит труда. Тут я делал МНК на тиках и для МТ4 под евро-бакс. На МТ5 - я слабак, честно. Чо там считает индюк ещё не помню, но итог торговли на нём меня не сильно впечатлил. Также был где то последний вариант этого индюка, который в окне индикатора рисовал трендовую, как итог расчета по МНК, но я его видимо потерял...

С чего вы взяли что мне надо? Коду этого МНК в обед сто лет, он еще при царе горохе кочевал по форумам. Выдавать ссылку на какие-то многоэтажные формулы, а не на код - это странно.

Значит коэффициенты вы рассчитали методом МНК, а как получить из них линию не знаете? Удивительно! 

 
Dmitry Fedoseev:

С чего вы взяли что мне надо? Коду этого МНК в обед сто лет, он еще при царе горохе кочевал по форумам. Выдавать ссылку на какие-то многоэтажные формулы, а не на код - это странно.

Значит коэффициенты вы рассчитали методом МНК, а как получить из них линию не знаете? Удивительно! 

Да знаю я всё. Три строчки добавить...  Во фрилиансе пусчай доводят до ума кому надо. Если мне не нравится, так я и не даю законченный продукт, а платно я не пишу.

Да и по понятию - нет такого продукта, который может нравиться, не зря же взялись за перо, уж тут то Вы согласитесь?

Ну кому охота чего то тама писать, если больше неохота))) ?

 
forexman77:

Если не сложно можно пример по методам наименьших квадратов. С математикой у меня не очень, но могу научиться.

И кстати спасибо за давнюю подсказку, как находить угол. Правда вопрос возник: обязательно ли дельту  делить на Point(), так у меня углы все время в районе 150 градусов получаются.

И как-то можно сделать, чтобы если линия вертикальна, то угол равняется нулю, горизонтальна то 90 градусов? 

Формулу по МНК, в частности, можете посмотреть здесь https://www.mql5.com/ru/articles/1825 , формулы (4) и (5).
Теория рынка
Теория рынка
  • 2015.08.19
  • Yousufkhodja Sultonov
  • www.mql5.com
До сих пор не существует логически завершенной теории рынка, охватывающей все типы и разновидности рынков товаров и услуг, микро- и макро-рынков, наподобие Форекс. Статья повествует о сущности новой теории рынка, основанной на анализе прибыли, вскрывает закономерности изменения текущей цены, а также выявляет принцип работы механизма, позволяющего цене находить наиболее оптимальное свое значение путем образования цепи виртуальных цен, способных вырабатывать управляющие воздействия на саму цену. Выявлены механизмы образования и смены трендов на рынке.
 
new-rena:

Думаю что заделать под себя Вам не составит труда. Тут я делал МНК на тиках и для МТ4 под евро-бакс. На МТ5 - я слабак, честно. Чо там считает индюк ещё не помню, но итог торговли на нём меня не сильно впечатлил. Также был где то последний вариант этого индюка, который в окне индикатора рисовал трендовую, как итог расчета по МНК, но я его видимо потерял...

Yousufkhodja Sultonov:
Формулу по МНК, в частности, можете посмотреть здесь https://www.mql5.com/ru/articles/1825 , формулы (4) и (5).
Спасибо, буду изучать.
Причина обращения: