Показатель Херста - страница 20

 
понял. Я брал среднее геометрическое из High и Low. Сейчас посмотрю что будет на разнице. Я пока не могу решить что целесообразнее - брать код для MT4 и переделывать под Си или искать ошибки у себя ;) У меня данные это дневные бары(5ти минутки), всего их 78. Я точки стоил по значениям для 3,4...78и.
Есть еще вроде вариант постоянного деления отрезка пополам.
Хм, а точки для которых разница Close[i+1]-Close[i] = 0 и среднеквадратичное отклонение 0, просто не рассматриваются при построении прямой?
Еще есть мнение что подсчета коэффициента Херста нужно использовать не обычный МНК, а т.н. RANSAC( http://en.wikipedia.org/wiki/RANSAC ), т.к. при обычном МНК на коэффициент наклона прямой могут влиять точки, "выбивающиеся из общего числа", т.е. наиболее удаленные от общей массы.
 
Disa >>:
понял. Я брал среднее геометрическое из High и Low. Сейчас посмотрю что будет на разнице. Я пока не могу решить что целесообразнее - брать код для MT4 и переделывать под Си или искать ошибки у себя ;) У меня данные это дневные бары(5ти минутки), всего их 78. Я точки стоил по значениям для 3,4...78и. - МТ4 моментально обсчитает 78 баров, даже до десятка тысяч считает быстро. А вот для каждого бара расчитывать Херста на многотысячной выборке - это уже долго, если баров тоже тыщи.
Есть еще вроде вариант постоянного деления отрезка пополам. - не совсем представляю о чем вы, но если длина выборки - степень двойки, то да, работает. В любом случае предпочтительнее иметь выборку с длиной имеющей как можно больше делителей.
Хм, а точки для которых разница Close[i+1]-Close[i] = 0 и среднеквадратичное отклонение 0, просто не рассматриваются при построении прямой? - (Close[i+1]-Close[i]) - это входные данные, прямая строится не по ним, а по коэффициентам, которые получаются из этих данных при R/S анализе.
Еще есть мнение что подсчета коэффициента Херста нужно использовать не обычный МНК, а т.н. RANSAC( http://en.wikipedia.org/wiki/RANSAC ), т.к. при обычном МНК на коэффициент наклона прямой могут влиять точки, "выбивающиеся из общего числа", т.е. наиболее удаленные от общей массы. - Не представляю на основании какой модели, можно решить, что некоторые возвраты подлежат выбросу из выборки?
 

(Close[i+1]-Close[i]) = 0 => log(d[i]/d[i-1]) = INF - не пойму что делать с этим. RS = R/S - и как считать при S = 0, полагать что R = 0 тоже? тогда опять же log(R) = INF и опять не пойму что делать. Хорошо. Вот простой пример - чему равен коэффициент H
а если (Close[i+1]-Close[i]) = const для всех i на данном интервале?
Не представляю на основании какой модели, можно решить, что некоторые возвраты подлежат выбросу из выборки? - Если,например, в потоке данных об акциях была ошибка в значении нескольких величин( вместо 14.4 пришло 54.5)
 
В общем давайте я расскажу свой алгоритм обсчета словами, а вы мне скажете пж где ошибка, а то мы так долго друг друга чуствую не поймем.

функция RS на вход принимает массив из Close[i]-Close[i-1] и число элементов массива

1. S[i-1] = Close[i]-Close[i-1] Для всех i от 0 до N

2. h[i] = log(S[i]/S[i-1])

3. Hn = Сумма h[i] h_cp = ср.ариф. Hn

4. R = max(h[i] - h_cp) - min( h[i] - h_cp ) S = 1/n * (h[i] - h_cp) RS = R / S

5
. Далее стою м-во точек со значением log RS(i) и log i для i от n_min до некоторого N и МНК стоют прямую
 
Disa >>:
В общем давайте я расскажу свой алгоритм обсчета словами, а вы мне скажете пж где ошибка, а то мы так долго друг друга чуствую не поймем.

функция RS на вход принимает массив из Close[i]-Close[i-1] и число элементов массива

1. S[i-1] = Close[i]-Close[i-1] Для всех i от 0 до N

2. h[i] = log(S[i]/S[i-1]) - не стоит так делать, т.к. п.1 и п.2 в принципе одно и тоже в смысле подготовки данных для алгоритма. Действительно, вместо возвратов на вход можно подавать log(Close[i]/Close[i-1]), но подавать на вход логарифм отношения возвратов - это перебор, по-моему. Достаточно подавать что-нибудь одно - либо разницу цен, либо логарифм их отношений.

3. Hn = Сумма h[i] h_cp = ср.ариф. Hn

4. R = max(h[i] - h_cp) - min( h[i] - h_cp ) S = 1/n * (h[i] - h_cp) RS = R / S

5
. Далее стою м-во точек со значением log RS(i) и log i для i от n_min до некоторого N и МНК стоют прямую

в п.3-5 для начала не вижу оператора или описания, что вся выборка делится на N кусков размером M, что для каждого этого куска считается rs = (максимум наращиваемой суммы отклонений от среднего - минимум наращиваемой суммы отклонений от среднего) / сумму квадратов отклонений от среднего, и все они, эти rs, складываются, а потом делятся на N. Теперь Log(RS) и log(N) - это одна точка для МНК, которых надо насобирать побольше, подбирая разные N и М так, чтобы N*M=длина выборки всегда. На мой взгляд, запись п.4 полностью неверна.
 
Подниму ка тему) Спасибо Vita - написал win32api под c++ и все пашет как надо. Вопрос к людям которые часто применяли этот метод - есть какие-нибудь оценки погрешностей от числа входящих данных, дисперсии, корреляции и мб других стат.величин.
Как я понял вообще смысла особого нет считать коэффициент для 78 величин - т.е для однодневного бара? Так же по прежнему не понимаю что делать если какие-то величины равны нулю. Ну например если на вход подаю разность цен - понятное дело что разность за 5ть минут мб меньше или равны 0, но log тогда не берется. У меня есть идея брать модуль величины в случае если она отрицательна(т.е абсолютную разницу) а в случае 0 не заносить это значение в ряд h.
 
Vita писал(а) >>

Собственно тестовый файл. H~0.72


Ваш индикатор zHursttExponent.mq4 на вашем же тестовом файле brown72.txt выдает 0.1647. К чему бы это ?
Насколько я понял, этот индикатор считает показатель Херста на каждом тике для последних 2520 баров и выдает значение на печать. Так ?
А что тогда означают 4 буфера этого индикатора и зачем они нужны в отдельном окне ?
И еще один вопрос.

//---- main loop
for(int i=0; i<limit; i++)
{
}

//---- done

Какой смысл имеет этот кусок в коде индикатора ?
 
Yurixx >>:


Ваш индикатор zHursttExponent.mq4 на вашем же тестовом файле brown72.txt выдает 0.1647. К чему бы это ?
Насколько я понял, этот индикатор считает показатель Херста на каждом тике для последних 2520 баров и выдает значение на печать. Так ?
А что тогда означают 4 буфера этого индикатора и зачем они нужны в отдельном окне ?
И еще один вопрос.

//---- main loop
for(int i=0; i<limit; i++)
{
}

//---- done

Какой смысл имеет этот кусок в коде индикатора ?

1. Не могу повторить ваш результат = 0.1647. У меня вот так (=0,7241):



2. Ага, этот индикатор считает показатель Херста на каждом тике для последних 2520 баров и выдает значение на печать и рисует r/s точки (белая линия), по которым строится аппроксимационная прямая (красная линия), наклон которой и есть искомый показатель - типа для наглядности, а по мне - для качественной визуальной оценки правильности работы алгоритма. Все это верно при cRSGraphic = true, иначе индикатор считает показатель Херста для последних 250 баров.

3. 4 буфера - это явное излишество, реликт, оставшийся с поры отладки и тестирования.
4. Пустой цикл - таже беда, что п.3. Можно удалить.

 
Disa >>:
Подниму ка тему) Спасибо Vita - написал win32api под c++ и все пашет как надо. Вопрос к людям которые часто применяли этот метод - есть какие-нибудь оценки погрешностей от числа входящих данных, дисперсии, корреляции и мб других стат.величин.
Как я понял вообще смысла особого нет считать коэффициент для 78 величин - т.е для однодневного бара? Так же по прежнему не понимаю что делать если какие-то величины равны нулю. Ну например если на вход подаю разность цен - понятное дело что разность за 5ть минут мб меньше или равны 0, но log тогда не берется. У меня есть идея брать модуль величины в случае если она отрицательна(т.е абсолютную разницу) а в случае 0 не заносить это значение в ряд h.

Вот вариант, в котором считается погрешность. К сожалению, не могу найти, откуда я спер исходник на Си этого чуда, но оно утверждает, что считает по Feder E. Fractals. Для него Тест Н=0,6807 для того же файла. Вроде, как не_плохо.

Для 78 величин - это самое тяжелое. Много работ посвящено тому, как на полсотне наблюдений оценить Херста. Даже не разбираясь в выкладках, получаешь очень разные результаты у разных авторов. Удивительного ничего в этом нет. Сколько алгоритмов - столько и показателей :). Да ещё беда - в приложенном варианте на 1000 набледениях с учетом ошибки ничего нельзя сказать о цене - персистентна она или нет в данный момент, т.к. 0,5 лежит как раз промеж канала погрешности (красные линии при cRSGraphic=false).

На вход надо подавать либо разность цен, либо логарифм отношений цен.

Файлы:
 
Vita писал(а) >>

1. Не могу повторить ваш результат = 0.1647. У меня вот так (=0,7241):

Вы приложили файл brown72.txt. Однако, Ваш индикатор тестирует на файле brown72.csv. За неимением других инструкций я просто переименовал его и положил в папку \experts\files. Вот результат:
На Н1:


На тиках:


Ваш файл содержит 1024 значения. Вот первые 4 из них:
45.47422
42.55601
46.5188
41.61502

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