Дивергенция и двойная дивергенция

 

Подскажите народ, кто ковырял дивергенции, и пробовал состряпан на них советника

или хотя бы ф-ия показывающую ее

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

 
scorpionk писал (а) >>

...или хотя бы ф-ия показывающую ее...

Советника не делал по диверам, но использую в скрипте функцию линейной регрессии. На определенном периоде сначала загоняю цены, потом данные индикатора и сравниваю коэффициент, отвечающий за наклон линии регрессии, если с разным знаком, то дивергенция. Вот так.

 
Talex писал (а) >>

Советника не делал по диверам, но использую в скрипте функцию линейной регрессии. На определенном периоде сначала загоняю цены, потом данные индикатора и сравниваю коэффициент, отвечающий за наклон линии регрессии, если с разным знаком, то дивергенция. Вот так.

а не выложите скрипт если не жалко?

 
scorpionk писал (а) >>

а не выложите скрипт если не жалко?

Скрипт не выложу, а вот функцию пожалуйста. За основу взял функцию из кого-то индикатора.

//+------------------------------------------------------------------+
//| Линейная регрессия                                               |
//|    параметры:                                                    |
//|    Temp[]   - массив с данными индикатора                        |
//|    sym      - символ по которому считаем регрессию               |
//|    tf       - таймфрейм                                          |
//|    sb       - начальный бар                                      |
//|    eb       - количество баров для расчета регрессии             |
//|    flag     - переключает расчет цена/массив с данными индикатора|
//+------------------------------------------------------------------+
double LinearRegression(double Temp[],string sym, int tf, int sb, int eb, bool flag) {
   int i;
   double a,b,c,
          sumy=0.0,
          sumx=0.0,
          sumxy=0.0,
          sumx2=0.0;

   for(i=sb;i<eb+sb;i++) {
      if(flag) {
         sumy+=iClose(sym,tf,i);
         sumxy+=iClose(sym,tf,i)*(i-sb+1);
      }  else {
            sumy+=Temp[i-sb];
            sumxy+=Temp[i-sb]*(i-sb+1);
         }
      sumx+=(i-sb+1);
      sumx2+=(i-sb+1)*(i-sb+1);
   }
   
   c=sumx2*(eb-sb)-sumx*sumx;
   if(c==0.0) {
      Alert("LinearRegression error: can\'t resolve equation");
      return;
   }
      
   b=(sumxy*(eb-sb)-sumx*sumy)/c;
   //a=(sumy-sumx*b)/(eb-sb+1);
   return(b);
}
//+------------------------------------------------------------------+
P.S.

Если индикатор использовать стандартный, то функцию можно упростить, т.е. не передавать массив с данными индикатора, а расчитывать прямо в ней.

 
а на каком количестве баров расчитываешь ? на ценовом графике и индикаторе берешь одно и тоже количество?
 
scorpionk писал (а) >>
на ценовом графике и индикаторе берешь одно и тоже количество?

Конечно.

 

В продолжение темы:: А у кого есть финкция определения двойной дивергенции?

чтото никак не соображу как из просто в двойную преобразовать, вроде как этот метод по подойдет

 
scorpionk >>:

В продолжение темы:: А у кого есть финкция определения двойной дивергенции?

чтото никак не соображу как из просто в двойную преобразовать, вроде как этот метод по подойдет

как сказал один не глупый товарищ если есть дивергенция то не важно, двойная она или одинарная, силы ей это не прибавляет

 
Talex >>:

Советника не делал по диверам, но использую в скрипте функцию линейной регрессии. На определенном периоде сначала загоняю цены, потом данные индикатора и сравниваю коэффициент, отвечающий за наклон линии регрессии, если с разным знаком, то дивергенция. Вот так.

Вообще-то диверы определяются между осциллом и индюком, либо осциллом и ценой.


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


Спасибо за наколку!


---

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

 
Я кое что пытался реализовывать по дивергенции: 'Дивергенция', но советник из этого плохой получается. Топчется на месте. А что? Есть какие-то мысли?
 
Talex >>:

Скрипт не выложу, а вот функцию пожалуйста. За основу взял функцию из кого-то индикатора.

P.S.

Если индикатор использовать стандартный, то функцию можно упростить, т.е. не передавать массив с данными индикатора, а расчитывать прямо в ней.

я не догнал как переменные a,b,c работают чо сними делать та нужно и как переменная flag переключает

Причина обращения: