Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Много подписчиков на сигнале? Задумайся о платной подписке!
forexman77
2071
forexman77 2015.04.22 13:05 

Вопрос задавал на пятом форуме.

Попробую здесь, так как на этом форуме встречал много математиков.

Собственно вопрос в том, правильно ли вычисляю Хи квадрат тест? 

Получается слишком большое число или это нормально?

Сделал по формуле(из книги Колби):

(|a1-e1|-0,5)²/e1+(|a2-e2|-0,5)²/e2

 

|....|абсолютное значение(модуль)выражения;

a1 -реально наблюдаемая частота результата1;(количество положительных значений цены к предыдущему бару, синхронных с индикатором)

e1-предполагаемая или теоретически полученная частота результата1; (количество отрицательных значений цены к предыдущему бару, синхронных с индикатором)

a2 -реально наблюдаемая частота результата2;(общее количество положительных значений синхронных с индикатором умноженных на количество всех положительных значений)

e2-предполагаемая или теоретически полученная частота результата2; (общее количество отрицательных значений синхронных с индикатором умноженных на количество всех отрицательных значений)

extern int period=15; 
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
int plus=0,minus=0, y=Bars-2;
double hikvadrat=0,UP=0, DN=0, a1=0, a2=0, e1=0, e2=0 , kol=0;
for (int i=y;i>0;i--)
{
if (Close[i] > Close[i+1]){plus=plus+1;}//кол-во растущих баров всего
if (Close[i+1] > Close[i]){minus=minus+1;}//кол-во падающих баров всего
}
double procentBar=y/100.0;
double prUP=plus/procentBar;
double prDN=minus/procentBar;
for (int k=y;k>0;k--)
{
double ma0=iMA(NULL,PERIOD_CURRENT,period,0,MODE_EMA,PRICE_CLOSE,k);
double ma1=iMA(NULL,PERIOD_CURRENT,period,0,MODE_EMA,PRICE_CLOSE,k+1);
if (ma0 > ma1)
{
if (Close[k] > Close[k+1]){a1=a1+1;}//кол-во растущих баров после индикатора всего
}
if (ma1 > ma0)
{
if (Close[k+1] > Close[k]){a2=a2+1;}//кол-во падающих баров после индикатора всего
}
}
kol=(a1+a2)/100.0;
e1=kol*prUP;
e2=kol*prDN;
UP=(MathAbs(a1-e1)-0.5);   
DN=(MathAbs(a2-e2)-0.5);
hikvadrat=((UP*UP)/e1)+((DN*DN)/e2);
Alert("hikvadrat=",hikvadrat);
  }
//+------------------------------------------------------------------+
/
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий