Синтетическая средняя

 
Есть код на EL синтетической средней, может кто сможет переделать для МТ?

пишут что на основании подобного алгоритма реализованы индикаторы жрурика.

input: m(4) m_(2);
{ввод:m - величина временного окна усреднения, должна быть кратна 4; m_-m'=m/n, n - число проходов (в нашем случае m'=2)}
array: q1[60](0) q2[60](0);
var: alf(0),j(0),n(0),s(0);
if mod(m,4)=0 then begin {проверка на кратность четырем}
alf=2/(m_+1);{коэфициент альфа}
q1[0]=close;{фиксирование крайнего элемента}
n=m-1;{количество баров без первого}
for j=1 to n begin {первое усреднение назад}
q1[j]=q1[j-1]+alf*(Close[j]-q1[j-1]);
end;
for s=1 to m/2-1 begin {формирование многократного усреднения вперед-назад}
for j=0 to n begin
q2[j]=q1[n-j]; {формирование дополнительного массива}
end;
q1[0]=q2[0];
for j=1 to n begin
q1[j]=q1[j-1]+alf*(q2[j]-q1[j-1]);
end;
end;
plot1(q1[n]); {вывод значения q1[n](последний элемент массива q1)- результат работы алгоритма}
end;
 
liveexpert:
Есть код на EL синтетической средней, может кто сможет переделать для МТ?

пишут что на основании подобного алгоритма реализованы индикаторы жрурика.

input: m(4) m_(2);
{ввод:m - величина временного окна усреднения, должна быть кратна 4; m_-m'=m/n, n - число проходов (в нашем случае m'=2)}
array: q1[60](0) q2[60](0);
var: alf(0),j(0),n(0),s(0);
if mod(m,4)=0 then begin {проверка на кратность четырем}
alf=2/(m_+1);{коэфициент альфа}
q1[0]=close;{фиксирование крайнего элемента}
n=m-1;{количество баров без первого}
for j=1 to n begin {первое усреднение назад}
q1[j]=q1[j-1]+alf*(Close[j]-q1[j-1]);
end;
for s=1 to m/2-1 begin {формирование многократного усреднения вперед-назад}
for j=0 to n begin
q2[j]=q1[n-j]; {формирование дополнительного массива}
end;
q1[0]=q2[0];
for j=1 to n begin
q1[j]=q1[j-1]+alf*(q2[j]-q1[j-1]);
end;
end;
plot1(q1[n]); {вывод значения q1[n](последний элемент массива q1)- результат работы алгоритма}
end;

Можно, но как говориться «time is money…»

 
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1 Lime
extern int m=4;
extern int m_=2;
double q1[];
double q2[];
int init()
{
    SetIndexStyle(0,DRAW_LINE);
    SetIndexBuffer(0,q1);
    SetIndexEmptyValue(0,0);
    SetIndexStyle(1,DRAW_NONE);
    SetIndexBuffer(1,q2);
    SetIndexEmptyValue(1,0);
    return(0);
}
int start(){
int j=0,n=0,s=0;
dobule alf=0;
if(m%4==0)
{
    alf=2/(m_+1);
    n=m-1;
    for(j=1;j<n;j++)
       q1[j]=q1[j-1]+alf*(Close[j]-q1[j-1]);
    for(s=1;s<(m/2-1);s++)
    {
       for(j=0;j<n;j++)
             q2[j]=q1[n-j];
       q1[0]=q2[0];
       for(j=1;j<n;j++)
             q1[j]=q1[j-1]+alf*(q2[j]-q1[j-1]);
    }
}
return(0);
}
 
liveexpert:
Есть код на EL синтетической средней, может кто сможет переделать для МТ?

пишут что на основании подобного алгоритма реализованы индикаторы жрурика.

input: m(4) m_(2);
{ввод:m - величина временного окна усреднения, должна быть кратна 4; m_-m'=m/n, n - число проходов (в нашем случае m'=2)}
array: q1[60](0) q2[60](0);
var: alf(0),j(0),n(0),s(0);
if mod(m,4)=0 then begin {проверка на кратность четырем}
alf=2/(m_+1);{коэфициент альфа}
q1[0]=close;{фиксирование крайнего элемента}
n=m-1;{количество баров без первого}
for j=1 to n begin {первое усреднение назад}
q1[j]=q1[j-1]+alf*(Close[j]-q1[j-1]);
end;
for s=1 to m/2-1 begin {формирование многократного усреднения вперед-назад}
for j=0 to n begin
q2[j]=q1[n-j]; {формирование дополнительного массива}
end;
q1[0]=q2[0];
for j=1 to n begin
q1[j]=q1[j-1]+alf*(q2[j]-q1[j-1]);
end;
end;
plot1(q1[n]); {вывод значения q1[n](последний элемент массива q1)- результат работы алгоритма}
end;

Посмотри кто больше других, написал индикаторов и выложил их, тут на форуме, для всех. Того и проси :)
 
.................................

Можно, но как говориться «time is money…»


Можно и без маней ...

1. Это просто двойная экспоненциальная скользящая средняя.
Т.е. экспоненциальная средняя от экспоненциальной средней от цены.

2. Приведенный код на Изи написан безобразно плохо.
Тоже самое делает код написанный ниже

X1 = Xaverage(Close,m_);
X2 = Xaverage(X1,m_);
Plot1(X2);

Могут быть мелкие отличия в результате из-за того, что экспоненциальные средние
в коде первого поста считаются с маленькой погрешностью.
 
Mak:
.................................

Можно, но как говориться «time is money…»



Можно и без маней ...

1. Это просто двойная экспоненциальная скользящая средняя.
Т.е. экспоненциальная средняя от экспоненциальной средней от цены.

2. Приведенный код на Изи написан безобразно плохо.
Тоже самое делает код написанный ниже

X1 = Xaverage(Close,m_);
X2 = Xaverage(X1,m_);
Plot1(X2);

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



Это точно не двойная экспоненциальная.
Вот текст:

Последнюю проблему запаздывания средних мы решим при помощи применения иновационого метода сглаживания средней. Многие из популярных индикаторов технического анализа рынков в своих алгоритмах используют скользящее усреднение. Применение скользящего усреднения позволяет выделить в исследуемых ценовых графиках тренды и другие характеристики и существенно подавить случайную компоненту. Однако эти используемые инструменты обладают следующими недостатками, снижающими результативность биржевой торговли трейдеров:
• Временная задержка продуктов усреднения относительно элементов ценового графика на величину m/2, где m – величина временного окна усреднения;
• Относительно высокая колеблемость продуктов усреднения, которая слабо зависит от величины m;
• Влияние линейных частотных искажений как следствие существенной нелинейности амплитудно-частотных характеристик алгоритмов скользяшщего устреднения;
• Линеаризация нелинейных ценовых трендов путем выделения этих трендов с определенным смещением.

До сих пор первые два недостатка считались в техническом анализе рынков неотьемлемыми атрибутами скользящего устреднения. Большенство трейдеров считали, что борьба с этими недостатками лишена смысла. Однако появились новые индикаторы исследовательской лабаратории Марка Джурика, которые смогли преодолеть перечисленные выше первые два недостатка. К сожалению в литературных источниках алгоритмы новых индикаторов М.Джурика до сих пор не приведены.

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

Эвристический синтез
Понятие амплитудно-частотная характеристика алгоритмов усреднения очень широко используется в теории практике фильтрации. Используя Ачх и оригинальные критерии, удалось по новому решить задачу выбора типа скользящего усреднения. Ачх частотная зависимость отношения амплитуды продукта усреднения к амплитуде гармонического воздействия в установившемся режиме. Вторая определяющая характеристика любого алгоритма усреднения в частотной области – это его фазачастотная характеристика ФЧХ. Она отображает частотную зависимость разности фаз реации на выходе цифрового фильтра и гармонического входного воздействия в установившемся режиме. Именно ФЧХ приводит к временной задержке продуктов усреднения относительно ценового графика. Разлицают две временные задержки:
Tф – Фазовая и Тгр – групповая. Не вдаваясь глубоко в обьяснения, отметим, что именно Тгр приведет к задержке выделяемого тренда на величину m/2. В этой ситуации целесообразно скомпенсировать Тгр, т.к свести ее к нулю. Тогда задержка величины m/2 будет ликвидирована. К сожалению, полная компенсация Тгр невозможно из за особенностей дискретной фильтрации. Частичная компенсация Тгр примерно =0 вполне реализуемая на практике путем многократного усреднения ценового графика «назад-вперед». Здесь следует пояснить читстелю смысл такого необычного усреднения. Усредняя цены закрытия в одном направлении, мы накапливаем величину Тгр. Если теперь усреднять в обратном направлении результаты первого устреднения, то мы частично компенсируем Тгр, т.к сведем ее к величине, близкой к нулю. Таким образом, усложняя алгоритм усреднения(вводя дополнительную алгоритмическую избыточность) можно компенсировать временную задержку.
Сразу возникает вопрос: почему сначала назад а потом вперед? Ответ прост: для получения управляющего сигнала торговой системой в настоящем времени , а не в начале исторических данных. Заметим сразу что традиционные алгоритмы скользящего усреднения МА и некоторые из WMA для данной цели не подходят: при многократном усреднении «назад-вперед» они принципиально не могут обеспечить сигналы в настоящем времени (чем больше итераций такого усреднения производится тем дальше конечный продукт многократного усреднения отстает от настоящего времени)
В этой связи для наших целей наиболее подходящим являет алгоритм традиционного экспоненциального скользящего усреднения –ЕМА. Использованеи многократного усреднения с помощью ЕМА по алгоритму назад-вперед компенсирует не только Тгр но линеаризует его AЧХ. В таблице 1(стр.33) приведен алгоритм получения новой скользящей средней для m=4.

Таблица 1
Qi \Ci C1 C2 C3 C4
I Q4=Q3+α(C1-Q3) Q3=Q2+ α(C2-Q2) Q2=Q1+ α(C3-Q1) Q1=C4
II Q5=Q4 Q6=Q5+ α(Q3-Q5) Q7=Q6+ α(Q2-Q6) Q8=Q7+ α(Q1-Q7)

В таблице 1 принято:


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

Таким образом с помощью рассматриваемого выше предложения удается частично скомпенсировать временной лаг м/2 (устранить первый недостаток традиционного скользящего усреднения).

Устранение второго негативного эффекта
Остановимся на причинах, которые способствуют снижению колеблемости трендов предложенным оригинальным методом. Любой алгорим скользящего усреднения представлят собой цифровой фильтр нижних частот. Поскольку полоса частот, которую занимает спектральная плотность мощности исследуемых, всегда намного шире, чем полоса пропускания такого фильтра, то он является формирующим. Этот фильтр формирует выходной продукт фильтрации(усреднение) с определенными автокорреляционными свойствами которые определяеются его амплитудно частотной характеристикой (АЧХ). Чем уже полоса пропускания такого фильтра (больше величина m), тем больше степени усиливаются статистические взаимосвязи между все более и более отдаленными друг от друга значениями Сj . Это негативно влияет на качество усреднения, снижая его эффективность. Для борьбы с этим явлением необходимо использовать алгоритм скользящего усреднения с минимальным значениям m=2 (при котором сохраняется эффект усреднения, а вносимые вредные автокорреляционные связи будут минимальными). Замена направлений усреднения способствует полной применной декорреляции продуктов навыходе фильтра при каждом проходе и одновременно увеличивает эффект усреднения ( общее значение м суммируется при каждом проходе). Отметим, что и раньше исследователи делали попытки увеличить эффективность скользящего усреднения путем многократного усреднения его продуктов. Однако это привело, во-первых, к увеличению запаздывания, во-вторых, к появленияю вредного эффекта Слуцкого-Юла(повление на графике скользящей средней после многократного усреднения вредного синусоидального сигнала, которого изначального небыло в исследуемом временном ряде). Временная декорреляция, используемая в предложенном алгоритме, оказалась вредным средтсвом для борьбы с вредным эффектом Слуцкого-Юла. В предложенном индикаторе этот эффект принципиально невозможен. Таким образом, данные предложения частично устраняют и второй негативный эффект традиционного скользящего усреднения.

Устранение третьего и четвертого негативного эффекта
Использование предложенного алгорима усреднения существенно уменьшает линейные частотные искажения, поскольку при m=2 аплимтудно частотная характеристика EMA в полосе прозрачности в меньшей степени искажает спектральную плотность мощности выделяемого тренда, чем при существенно большим значениям м. Линейные частотные искажения предложенные синтетических скользящих средних, минимизированы путем применения ЕМА с м=2, независимо от суммарного значения м. Таким образом предложенный алгоритм усреднения уменьшает и третий вредный эффект традиционного скользящего усреднения.

Рассмотрим последнее приемущество.
В случае выделения существенно нелинейных трендов на ценовых графиках наблюдается вредный эффект смещения. Он усиливается если длительность тренда соизмерима с величиной м. При малых значениях м (в нашем случае м=2) эффект смещения минимизируется и линеаризация выделяемого нелинейного тренда так же минимальна.

Предложенный эффект усреднения способствует существенному снижению всех четырех перечисленных выше недостатков алгоритмов усредения. Естественно, что при этом о полной ликвидации перечисленных выше недостатков говорить нельзя.
 
Luptator:
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1 Lime
extern int m=4;
extern int m_=2;
double q1[];
double q2[];
int init()
{
    SetIndexStyle(0,DRAW_LINE);
    SetIndexBuffer(0,q1);
    SetIndexEmptyValue(0,0);
    SetIndexStyle(1,DRAW_NONE);
    SetIndexBuffer(1,q2);
    SetIndexEmptyValue(1,0);
    return(0);
}
int start(){
int j=0,n=0,s=0;
dobule alf=0;
if(m%4==0)
{
    alf=2/(m_+1);
    n=m-1;
    for(j=1;j<n;j++)
       q1[j]=q1[j-1]+alf*(Close[j]-q1[j-1]);
    for(s=1;s<(m/2-1);s++)
    {
       for(j=0;j<n;j++)
             q2[j]=q1[n-j];
       q1[0]=q2[0];
       for(j=1;j<n;j++)
             q1[j]=q1[j-1]+alf*(q2[j]-q1[j-1]);
    }
}
return(0);
}
Не работает код..
 
<Это точно не двойная экспоненциальная.
Вот текст:>

ИМХО, полная фигня. Набор трескучих фраз, приправленных наукообразием. Явственно ощущается дремучее невежество автора.
 
Да, при беглом просмотре не все разглядел.
Это действительно не просто двойная.

Смысл в статье есть - действительно при усреднении вперед/назад групповая задержка компенсируется.
Правда это по моему справедливо только для середины интервала усреднения.
Правый край при этом все равно будет болтаться и запаздывать ...

Еще один момент.
Если присмотреться к коду, то увидим, что это обыкновенный КИХ фильтр,
т.е. фильтр с фиксированным числом постоянных коэффициентов.
Т.е. можно было бы один раз в начале вычислить весовые коэффициенты
(они не зависят от ценового ряда, а зависят только от параметров m и m_)
и потом считать как взвешенное среднее с вычисленными весами.
 
liveexpert, почитай 'Эффективные алгоритмы усреднения с минимальным лагом и их использование в индикаторах' , там много интересного и куча кода на MQL4 - если уж так волнуют индюкаторы Шурика.
 
нет индикаторы юрика не очень волнуют, я их когда только MT4 появилась переносил с приятелем из wld, в принципе люблю что то новое в этом направлении, спасибо за ссылку..
Причина обращения: