Помощь в манипулировании ценовым рядом (индикатором) колебания вокруг значения центра - PullRequest
5 голосов
/ 28 марта 2011

Я не опытный программист, но я пытаюсь изменить способ отображения некоторых технических индикаторов в пакете финансовых графиков под названием TradeStation (но не в том, что конкретный поставщик графиков уместен).

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

В прошлом я пробовал много способов, одним способом было использование логарифмической шкалы типов, но это не было успешным, поскольку любое колебание, имеющее очень высокое значение, было почти несущественным, что не является целью. Цель состоит в том, чтобы попытаться сохранить любое колебание индикатора практически одинаковым, но изменить его расположение так, чтобы оно было ближе к нулю (в центре). Или поставить другой путь; цель состоит в том, чтобы заставить индикаторы совершать аналогичные колебания в форме, но центр этих колебаний должен быть ближе к нулю (центр шкалы индикаторов).

Кто-нибудь знает или может придумать, как это можно сделать? Существуют ли какие-либо алгоритмы, которые могли бы помочь колебанию любого ценового ряда вокруг центральной точки, не слишком сильно искажая оригинал?

Любая помощь по этому вопросу будет принята с благодарностью, спасибо.

== UPDATE == enter image description here Розовая линия - это оригинальный осциллятор, черная линия, которую я нарисовал. Она грубо отражает мою цель. Обведенные кружочком области показывают, где нарисованная линия пересекает ноль, так что ее нулевое значение находится примерно в центре колебаний ... Но общая форма колебаний остается узнаваемой по сравнению с исходной, также меньше расхождений в максимумах и минимумы каждого колебания; то есть они более похожи по стоимости. Я попытался добавить несколько различных функций Detrend к различным индикаторам, но обнаружил, что это слишком сильно искажает форму.

ОБНОВЛЕНИЕ 2

Я попытался разделить линейное уменьшение оси Y на 50% и 80%. К сожалению, похоже, что это действует так же, как и масштабный коэффициент? Это правильно? Кажется, это не меняет отношения между различными колебаниями. Если вы видите мой примерный график, нарисованная черная линия имеет более стабильные высокие и низкие колебания, т.е. они больше похожи по соотношению цена / размер, и это является ключевой целью.

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

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

Chris

ОБНОВЛЕНИЕ 3

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

У кого-нибудь есть другие идеи или вещи, которые я должен попробовать? Ура !!!

Ответы [ 3 ]

4 голосов
/ 28 марта 2011

Если вы хотите сделать что-то индивидуальное, вы можете, например, отфильтровать низкочастотные компоненты преобразования Фурье.

Предположим, у нас есть следующий сигнал:

enter image description here

Затем мы вычисляем БПФ и сохраняем только компоненты более высокой частоты.Допустим, мы игнорируем первые 1,5% компонентов.Результирующий график исходного сигнала и результирующего колебательного сигнала:

enter image description here

HTH!

Редактировать 2

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

Программа в Mathematica (на всякий случай):

centerOsc[x_] := 
  Module[{list, n, fp, coef, s}, 
   list = (Transpose@FinancialData[#, "Jan. 1, 2005"])[[2]] &@x;
   n = Length@list;
   fp = Transpose[{N[Range[n]]/n, list}];
   coef = FourierDST[list, 1]/Sqrt[n/2];
   coef = Table[N[coef[[i]] (1 - E^(-i/6))], {i, 1, Length@coef}];
   s = IntegerPart[Length@coef/100]; s = 1;
   {fp, {#, 
       Sum[coef[[r]]*Sin[Pi r #], {r, s, n - 1}]} & /@ (N[Range[n]]/
       n)}];
l = {"GE", "GOOG", "IBM", "MSFT"} ;(*Real prices from*)
GraphicsGrid@
 Partition[ListLinePlot[centerOsc[#],
     Axes -> False, Frame -> True, PlotLabel -> #,
     PlotRange -> {{0.1, .9}, Full}, 
     Epilog -> Line[{{0, 0}, {1, 0}}]] & /@ l, 2]

enter image description here

Редактировать 2

На основе вашегоПоследнее обновление, кажется, что то, что вы хотите, может быть достигнуто проще.Просто посмотрите, что вы получите, разделив линейное уменьшение оси Y на 50% и 80% (используя ваши данные, извлеченные из вашего графика):

enter image description here

и сравните с вашим участком:

enter image description here

1 голос
/ 28 марта 2011

Первое, что я предлагаю вам сделать, - это слишком стандартизировать все индикаторы до среднего значения 0 и стандартного отклонения 1. Это, по крайней мере, приведет к центрированию всех ваших индикаторов в районе 0.

http://en.wikipedia.org/wiki/Standard_score

- Ральф Винтерс

0 голосов
/ 28 марта 2011

В вашем примере я отметил низкочастотную составляющую входных / выходных сигналов: enter image description here Похоже, что @belisarius говорит о том, что вы хотите - просто выполните БПФ для сигнала и удалите низкочастотные части.То есть - вам нужен алгоритм верхних частот алгоритм.Кстати, фильтр высоких частот также может быть реализован с помощью 1D свертки и ядра высоких частот.Например, - для 3-компонентного вектора ядра, ядро ​​высоких частот может быть [-1; 3; -1].На мой взгляд, реализация фильтра верхних частот с использованием свертки является самой простой.Но обычно реализация через FFT самая быстрая в отношении использования процессора.

hth

...