Стохастический резонанс - страница 26

 
Prival:

Так задача зацепила. Это хорошо. Сейчас попробую выразить свои мысли. Если что, то не так написал (или не понятно – скажите)

grasn

  1. Да действительно краевой эффект есть. Но в этом, то и смысл, часто его считают плохим (мешающим). А вдруг тут «стохастический резонанс» и проявляется. Допустим такой вариант - направление движение цены совпадает с направлением кривой (резонанс), не совпадает (нет резонанса). Кто нить проверял ? (а вдруг там Грааль и лежит J). Нельзя сбрасывать со счетов и различные окна Хеннинга, Хемминга, Блекмана и т.д. (уменьшающие этот эффект)
  2. По поводу шума, МЫ всегда имеем смесь сигнал+шум. И механизма отделить его от сигнала, механически у нас нет (как в моем примере, закрытие приемника и измерение его интенсивности). Поэтому предлагаю другой вариант. Исходить из понятия энергии. Энергия сигнала – двигает рынок. Энергия шума – мешает нам увидеть (выделить полезный сигнал).
  3. Как действовать
...

Что значит зацепило? Мы ее тут двадцать страниц обсуждаем, если конечно внимательно читал (таки найди время). Хороший экскурс в обработку сигнала, спасибо, но это все рекомендую выбросить на фиг, если хочешь плодотворно заниматься этой темой, и заменить нормальным цифровым фильтром нижних частот класса КИХ или БИХ. Если конечно ты уверен, что ФНЧ найдешь истинный сигнал.

По поводу шума лучше было бы выделить ВСЕГДА, а не МЫ, так логичнее, а вот то, что краевой эффект при таком подходе убирается плохо – это факт, а следовательно на краях никакого шума не выделяешь, у тебя сам сигнал будет шумом.

PS: В итоге изобретешь фильтр, значительно хуже FATL. Не морочь голову себе и мне, сделать адаптивный фильтр – целое искусство и принципы его проектирования совсем другие.

 
AAB:
Candid, в этой работе описано прогнозирование движение цены с точки зрения потенциальных уровней, возможно тебе будет интересно. Качество неважное, но читать моно, тем более там формул и графиков всего на четыре странички.


Хм, а разве не на неё я ссылку в начале давал? :) Как говорится пускайте хлеб по воде и он вернётся к вам :). Хорошая работа, имхо.

Prival:

- строим индикатор


Помнится когда я к библиотеке klot'а примерялся, некий индикатор сделал. Только его нужно запускать в визуализаторе и дождаться пока достаточно баров для FFT будет. Скачки там понятно от чего, число частот играет, если выборку увеличивать они будут сглаживаться. Само собой библиотека klot'а должна быть на месте (есть в CodeBase).

Файлы:
offtma_e.mq4  4 kb
 
lna01:

Хм, а разве не неё я ссылку в начале давал? :) Как говорится пускайте хлеб по воде и он вернётся к вам :). Хорошая работа, имхо.


мда, эт я попал, хоть подписывай где что откуда и с чьей подачи качнул, Вот т же запомнил, после прочтения, что тебе понравится статья, а кто дал ссылку и забыл, дааа, помните рыба у Стругацких говорила "Годы мои не те, дрова пилять...". Но нет худа без добра, народ может и качнет лишний раз эту доку.
 

Вниманию всех заинтересованных и просто зрителей.

Выкладываю решение той задачи, с которой я несколько дней назад обратился ко всем вам. В принципе ничего нового в нем нет. Я просто реализовал ту программу, которую описал в последнем посте по этому поводу. Смысл выкладывания простой: я вижу несколько возможностей применения этого метода, поэтому, возможно, кому-то это пригодится. Хочу также «продемонстрировать» полезность теоретического подхода.

Итак, задача простая. Есть ряд {Х} случайных чисел, подчиняющийся определенной статистике. Статистика негауссовская, поскольку возможные значения Х принадлежат интервалу [0,∞]. Точка Х=0, вообще говоря, может и не принадлежать генеральной совокупности. Число членов ряда {Х} – N, достаточно велико, чтобы можно было в известной мере доверять распределению, построенному на имеющихся данных, и прочим статистическим параметрам:

µ=M(X) – среднее значения ряда {Х}

D=M(X*X) – дисперсия ряда {Х}

σ =√D – ско ряда {Х}

Поскольку имеющийся ряд ограничен, то все его элементы принадлежат конечному промежутку [Xmin,Xmax], Xmin>=0.

Строим на имеющемся ряде {Х} скользящее среднее Y с периодом М. Способ усреднения может быть произвольным. В результате получаем новый ряд {Y} число членов которого равно, очевидно, N–M+1. Множество значений ряда {Y} также принадлежат конечному промежутку. Обозначим его [Ymin,Ymax].

Вопрос заключается в том, как на основе статистики и параметров ряда {Х} рассчитать Ymin и Ymax ? Для чего это может быть использовано, я напишу в конце.

Первый этап – построение аналитического вида распределения ряда {Х}. У Булашева я нашел только одну функцию распределения, которая областью определения имеет [0,∞] – логнормальное распределение. Ничего плохого говорить о нем не буду, но оно мне не подошло.

Поскольку статистика моего (и еще многих других) ряда такова, что плотность вероятности p(X) при X→0 и X→∞ стремится к 0, то я предположил для p(X) следующий общий вид:

p(X)=A*(X^a)*exp(–B*(X^b)), где a>0 и b>0

Соответственно интегральная функция распределения определяется так: F(X)= ∫ p(ξ) dξ. Здесь и далее подразумеваются пределы интегрирования от 0 до Х. К сожалению местный редактор не пропускает верхние и нижние индексы на сайт. Приходится извращаться. Выглядит, конечно, коряво, но ничего не поделаешь. ξ – это просто переменная интегрирования.

Для того, чтобы с этим можно было что-то делать нужно, чтобы этот интеграл брался в аналитическом виде. Интегрируя по частям и используя при этом предельное значение p(0)=0, можно убедиться, что

∫ (ξ^a)*exp(–B*(ξ^b)) dξ = –1/(B*b) * (X^(a–b+1))*exp(–B*(X^b)) + (a–b+1)/ (B*b) *∫ (ξ^(a–b))*exp(–B*(ξ^b)) dξ

то есть показатель a величины Х каждый раз уменьшается на b. Если, после k шагов этот показатель станет равным b–1, то интеграл сведется к табличному. Отсюда можно сформулировать условие интегрируемости в явном виде:

a – k*b = b – 1, или a = (k+1)*b – 1, где k>0 – целое.

Тем не менее, поскольку нам еще надо вычислять средние и дисперсию, этой интегрируемости недостаточно. Посмотрим, что требуется, чтобы вычислялись в явном виде все центральные моменты этого распределения. Очевидно, что µ = ∫X*p(X) dX (здесь интегрирование до ∞). Вычислим µ как функцию µ(Х), полагая в интеграле верхний предел переменным.

µ(Х) = ∫ ξ*A*(ξ^a)*exp(–B*(ξ^b)) dξ = ∫ A*(ξ^(a+1))*exp(–B*(ξ^b)) dξ

То есть, это интеграл того же вида с показателем степени a1=a+1. Для интегрируемости а1 должно удовлетворять тому же условию:

a1 = (k1+1)*b – 1, где k1>0 – целое.

Сравнивая это с условием для а, получим: b = 1/( k1 – k). Обозначая n = k1 – k получим в итоге допустимый вид параметра b: b = 1/n, где n>0 – целое. Отметим еще, что должно выполняться соотношение 0<n<=k.

Имея все это в виду, можно получить в явном виде не только интегральную функцию распределения F(X), но также и все центральные моменты этого распределения:

F(X) = 1 – exp(–Z)*∑ (Z^i)/i!

Ml(X) = (k+n*l)!/(k!*(B^(n*l))) *{ 1 – exp(–Z)*∑ (Z^i)/i! }, где Z = B*(X^(1/n)) .

Константа А, фигурировавшая в функции p(X), вычислена из условия нормировки и учтена в этих выражениях. Знак суммы ∑ в верхней строке подразумевает суммирование по индексу i от 0 до k, а в нижней – по i от 0 до k+n*l . Величина Ml – есть l-й центральный момент (не спутайте l и 1).

Отметим, что все полученные функции при Х=0 обращаются в 0, а при X→∞ имеют следующие пределы:

F(X→∞) = 1 (условие нормировки) и Ml(X→∞) = (k+n*l)!/(k!*(B^(n*l))).

Таким образом получаем:

µ = M(X) = M1(X) = (k+n)!/(k!*(B^n))

D = M(X*X) = M2(X) = (k+2*n)!/(k!*(B^(2*n)))

Теперь, когда все есть для полного счастья, можно вернуться к исходному ряду. В полученной в конечном виде функции распределения р(Х) присутствуют три параметра, которые можно использовать, чтобы р(Х) наилучшим образом воспроизводила статистику ряда {Х} – В, k, n.

Можно, конечно, найти их по МНК, но это скучно. Я для своего ряда сделал проще. Из приведенных формул видно, что

D/µ^2 = (k+2*n)!*k!/((k+n)!)^2

Таким образом, величина D/µ^2 не зависит от В. Поскольку D и µ известны для ряда {Х}, то нужно просто подобрать такую пару (n,k), которая давала бы наиболее близкое значение. Я просто построил на допустимых значениях пары (n,k) таблицу и нашел всего лишь 4 подходящих: (2, 3), (3,8), (4,16) и (5,26). Значение В теперь определяется элементарно из выражений для D или µ.

Интересно, что значения (n,k) первых двух пар (остальные я не проверял) дали отличную воспроизводимость экспериментальной кривой распределения р(Х). Во всяком случае для меня это качество отличное.

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

 

Третий этап марлезонского балета связан с вычислением неких пределов Х1 и Х2.

Построение ряда Y = ∑ X связано с неким усреднением М значений величины Х. Разумно предположить, что Ymin (теоретический минимум) может быть получен, если в это усреднение попадают М наименьших значений величины Х. Аналогично и Ymax.

На оси ОХ М наименьших значений величины Х занимают интервал [0, Х1], а М наибольших значений величины Х – интервал [Х2, ∞]. Это фактически определение величин Х1 и Х2 .

Поскольку всего в ряду {Х} N элементов, то F(Х1) = M/N и 1 – F(Х2) = M/N .

Функция F(Х) известна в аналитическом виде, поэтому и приведенные уравнения для определения Х1 и Х2 являются аналитическими, хотя и трансцендентными, уравнениями. Для их решения можно применить любой численный итерационный метод. Поскольку, как видно из приведенного ниже графика, функция F(X) монотонная, то начиная от точки перегиба с помощью метода градиентного спуска можно быстро прийти к значениям F(Х1) и F(Х2). При вычислениях с максимальной точностью, допустимой в MQL, достаточно было 13-14 шагов и менее секунды времени, чтобы получить значения Х1 и Х2 . При этом время практически не отличалось для пар (2,3) и (3,8). Все-таки MQL – хорошая вещь. (Какой там маткад …. J)

Где здесь р(Х), а где F(X) надеюсь понятно и так.

Рис.1.

Интересно было бы также посмотреть и на зависимость Х1 и Х2 от величины М, а точнее от соотношения M/N. Но мы отложим пока это, благо до конца недолго осталось. Отметим только, что в пределе, когда M→N, должно выполняться Х1→∞ и Х2→0. А мы займемся определением конечной цели всей этой истории, величин Ymin и Ymax.

На самом деле теперь это очень просто. Интервал [0, Х1] задает положение М наименьших Х, а [Х2, ∞] – М наибольших Х. Наша задача определить на них два усредненных значения. Если алгоритм усреднения не тривиален, то задача должна решаться отдельно для каждого частного случая. Если же он соответствует простой МА, то можно воспользоваться формулами:

Ymin = M(Х1)/F(Х1) и Ymax = (µ – M(Х2))/(1 – F(Х2)).

Эти формулы имеют простой «физический смысл», поэтому в объяснения не вдаюсь. Вместо этого привожу график зависимости Ymin и Ymax от значений Х1 и Х2 . На нем Ymin изображена красной линией, а Ymax – синей. Горизонтальная линия бирюзового цвета показывает значение µ.

Как и следовало ожидать, Ymin при Х1→∞, а Ymax при Х2→0 обе стремятся к µ, одна снизу, другая сверху.

Рис.2.

Оба эти случая соответствуют M→N, что отлично видно из графика зависимости Х1 и Х2 от величины М. Я разве его не приводил ? Да нет же, приводил. Это самый первый из графиков. И из двух кривых надо использовать кривую F(X). Только нужно не по Х определять F, а, наоборот, по F определять Х. При этом еще посматривать на уравнения для определения Х1 и Х2 и помнить, что если M→N, то M/N→1.

Таким образом и получается, что когда с увеличением М растет M/N, то Х1 увеличивается (а вместе с ним увеличивается и Ymin), а Х2 уменьшается (вместе с ним уменьшается и Ymax). Но при этом всегда Ymin< Х1 и Ymax>Х2 .

Я в своих расчетах получил, что 1 – 3 – 5 значений ряда {Х}, в зависимости от величины N, могут выйти за рамки верхней границы Х2 (нижняя граница в этом смысле не представляет интереса). В то же время значение Ymax не превосходится никогда. Что, в общем, понятно: случай, когда все М значений Х являются наибольшими – исключительный. Что же касается значений ряда {Y}, то вероятность выхода их за пределы Х2 еще меньше. Не говоря уже об Ymax.

То есть мы получили две оценки границ диапазона значений ряда {Y}, жесткую и мягкую. Можно использовать любую из них, в зависимости от требований задачи.

PS

Sorry. Не могу вставить картинки. Ни в каком формате. Сайт наверное глючит.

 

И в заключение, зачем все это нужно.

Пока я занимался этим, я увидел несколько возможностей использования всего этого.

1. Нормировка всем известных индикаторов ТА, в частности – осцилляторов. Кто-нибудь обращал внимание на то, что с осцилляторами возможно работать только в узком диапазоне их периодов сглаживания ? При уменьшении периода его начинает кидать туда-сюда, а при увеличении амплитуда уменьшается настолько, что он не достает до уровней. Пример любимого RSI ниже. Два варианта для двух периодов 14 и 30. Если опираться на второй, то можно вообще не торговать. Уровни 70/30 достигаются очень редко. Или же тогда для каждого периода нужно эти уровни оптимизировать заново.

Рис.3.

От т/ф индикаторы ТА практически не зависят, насколько я понимаю, это свойство их статистики. Но вот если бы решить проблему сглаживания, то, может быть, от них можно было бы получить нечто новое. С помощью такой процедуры стохастической нормировки, как я думаю, это вполне возможно.

2. Моя лично проблема была связана с тем, что размах ряда существенно зависит от N. А как же иначе, зря что ли Херст страдал ? :-))

Теперь я могу привести все к универсальному стандарту, при котором ни переход на другой т/ф, ни смена периода сглаживания не будет отражаться на диапазоне значений ряда. Это позволяет использовать одни и те же уровни для входа-выхода при любых значениях других параметров. В таких условиях оптимизация приобретает смысл. Оптимизируя на одном т/ф, я могу затем проверить доходность стратегии на другом. Если она сохраняется, значит стратегия действительно работает. Если нет – в мусор.

Возможно это будет полезно еще кому-то.

3. До сих пор никому не удавалось как-то нормировать график непосредственно цены. А ведь это было бы неплохо. Нас-то интересует не абсолютное значение, а ее колебания. Возможно этим путем и получится. Желающие могут попробовать.

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

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

На этом все. Критика принимается в любом виде.

PS

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

Я призываю сообщество последовать моему примеру.

Причины следующие.

Этот пирог не готов к употреблению. Это не окончательное решение, а метод. Любое использование этого метода в частных задачах так и оставит их частными задачами. Те же, кто, не потрудившись разобраться и осмысленно использовать его для себя, поспешит воспользоваться чужими решениями, будет введен в заблуждение, потеряет впустую время, а возможно и деньги.

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

1. Сформулировать, что же из себя представляет ваш ряд {Х}.

2. Корректно сформировать его с помощью соответствующей процедуры.

3. Исследовать его статистику, посчитать статистические параметры.

4. Исследовать соответствие статистик этого ряда на разных т/ф.

5. Подобрать подходящую статистике пару k,n.

6. Вычислить параметр В.

7. Построить модельную функцию распределения р(Х) и сравнить ее с экспериментальной. Дальнейшее использование этого метода будет корректным, только если соответствие модели и эксперимента удовлетворительное. А для этого надо еще иметь критерий оценки.

8. И, наконец, нужно еще уметь правильно воспользоваться полученными Ymin и Ymax. Это тоже не так просто, как кажется. :-)

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

Программист, это не тот, кто программирует все, что под руку попадется.

Так же как мужчина – не тот, кто пьет все, что горит и е… все, что шевелится.

 
Будем изучать,спасибо, а картинки зазипуй плиз и вставь через "Прикрепить файл" .
 

Я, конечно, делаю это, но это называется "через задний проход". Надеюсь, это временная мера. Как только заработает нормально, вставлю картинки куда положено.

PS

Увы, даже так ничего не цепляет.

Модераторы, АУУУУУУУУУУУУ !!! Чините сайт, pls. Ни картинку прицепить, ни файл ...

 

to Yurixx

Потрясающе, вместо того, что бы просто посмотреть размах полученного ряда скользящего среднего, мы тихо мирно дошли до теоретической оценки, да еще градиентным спуском, основываясь на недоказанном распределении. Это теоретически круто!

Ладно, пока не верю, после командировки в славный город Курган перечитаю еще раз. :о)))

PS: Вспомнился случай из моей околонаучной жизни. Пришел к своему шефу с длинным рулоном выведенных формул, посмотрев, он сказал, что ошибок нет, но можно сделать проще. На это замечание я гордо ответил «мы не ищем легких путей», на что он тут же ответил «поэтому и не находишь»

 
grasn:

to Yurixx

Потрясающе, вместо того, что бы просто посмотреть размах полученного ряда скользящего среднего, мы тихо мирно дошли до теоретической оценки, да еще градиентным спуском, основываясь на недоказанном распределении. Это теоретически круто!

По-моему, это и есть проще. В init() индикатора или советника встраиватся небольшой кусок кода, который в зависимости от т/ф и параметров усреднения вычисляет коэффициенты нормировки. Все, работает. А как вы это сделаете на Чемпионате, если советник не на вашем компе и историю туда подгружают неизвестно какого объема ?

Но это мелочи. Вопрос более серьезный. Вы что, каждый раз должны руками или в маткаде :-) пересчитывать эти коэффициенты при смене символа, т/ф, и пр. ? Не замучаетесь ? Или создадите базу данных по всем символам, т/ф, параметрам сглаживания и т.п. ? :-)

Есть и еще один, самый важный момент. Но если вы его не заметили, то и фиг с ним. :-)))

Кстати, "недоказанное распределение", при том, что на форексе ни одно распределение ни одной величины не известно (известно только то, что оно ненормальное) - это смешно. Хорошая шутка.