Я охотно верю, что можно сделать очень многие функции с ускоренным расчетом. Типа отнять от конца периода значение и прибавить к началу новое значение, без цикла.
В частности вот пример как можно без цикла посчитать несколько видов фильтра от простой машки до линейной регрессии, без цикла.
Здесь при N=0 - обычная SMA, N=1 - линейно-взвешанная, N=3 - линейная регрессия. А также можно получить промежуточные значения, поскольку N - дробная. СКО я тоже считал подобным способом. Думаю и полиномиальную регрессию можно сделать так же. Была бы практическая необходимость. По крайней мере мне пока не удалось использовать полиномиальную регрессию в прибыльных советниках. Каналы на ЕМА-шке как то проще и практически хорошо работают.
Вот тут немного навороченный вариант линейной регрессии на mq4 с СКО без циклов. Цикл есть один раз при инициации или точнее расчете первого заначения и все, - потом только суммы и разности. Считает конечно во много раз быстрее, чем с циклами. Одна тонкость, что период задан в часах и пересчитывается при переключении таймфрейма.
#property strict#property indicator_chart_window#property indicator_buffers6#property indicator_color1clrDodgerBlue#property indicator_color2clrOrangeRed#property indicator_color3clrLavender#property indicator_color4clrLavender#property indicator_color5clrMediumAquamarine#property indicator_color6clrMagenta#property indicator_width12#property indicator_width22#property indicator_style52#property indicator_type1DRAW_LINE#property indicator_type2DRAW_LINE#property indicator_type3DRAW_LINE#property indicator_type4DRAW_LINE#property indicator_type5DRAW_LINE#property indicator_type6DRAW_LINE//===========================externdouble hrLR = 12;
externdouble ksq = 1;
externint i0 = 1;
externint SPR = 1;
//===========================double ss[],ssL[],sH[],sL[],ma[],sU[];
double lri,sq,mai,ui,spr2;
int p,fs;
//******************************************************************int init()
{
SetIndexBuffer(0,ss);
SetIndexBuffer(1,ssL); SetIndexEmptyValue(1,0);
SetIndexBuffer(2,sH);
SetIndexBuffer(3,sL);
SetIndexBuffer(4,ma);
SetIndexBuffer(5,sU);
//--------------------
p=int(hrLR*60/Period()); if (p<3) p=3;
if (SPR<0) spr2=-SPR*Point/2;
return(0);
}
//******************************************************************int start()
{
int cbi=Bars-IndicatorCounted()-1; if (cbi<0) return(-1);
if (i0==1 && cbi==0) return(0); if (cbi==1) cbi=0;
if (SPR>0) spr2=NormalizeDouble(Ask-Bid,Digits)/2;
if (cbi>1)
{
cbi=Bars-p-1;
af_LR0(0,cbi); ui=mai;
}
//------------------------------for(int i=cbi; i>=0; i--)
{
lri=af_LR0(1,i);
ss[i]=lri;
sH[i]=lri+sq;
sL[i]=lri-sq;
ma[i]=mai;
if (sL[i]>ui) ui=sL[i]; elseif (sH[i]<ui) ui=sH[i];
sU[i]=ui;
if (ss[i]>ss[i+1]) fs=1;
if (ss[i]<ss[i+1]) {if (fs==1) ssL[i+1]=ss[i+1]; fs=2;}
if (fs==2) ssL[i]=ss[i]; elseif (fs==1) ssL[i]=0.0;
}
return(0);
}
//********************************************************************double af_LR0(int index, int i)
{
staticdouble sx,syp,sxy,syyp,S;
double ci=0,c1=0,cp=0,sy,syy,aa,bb;
staticint ti;
if (index==1)
{
if (ti!=Time[i])
{
if (i0==0) {c1=Close[i+1]+spr2; cp=Close[i+p]+spr2;} elseif (i0==1) {c1=Open[i+1]+spr2; cp=Open[i+p]+spr2;} elseif (i0==2) {c1=(High[i+1]+Low[i+1])/2+spr2; cp=(High[i+p]+Low[i+p])/2+spr2;}
sxy+=syp+c1-p*cp;
syp+=c1-cp;
syyp+=c1*c1-cp*cp;
ti=int(Time[i]);
}
}
else
{
int j;
double sxx;
sx=0.0; sxx=0.0;
for (j=0; j<p; j++) {sx+=j; sxx+=j*j;}
S=sx*sx-p*sxx;
syp=0.0; sxy=0.0; syyp=0.0;
for (j=1; j<p; j++)
{
if (i0==0) ci=Close[i+j]+spr2; elseif (i0==1) ci=Open[i+j]+spr2; elseif (i0==2) ci=(High[i+j]+Low[i+j])/2+spr2;
syp+=ci;
sxy+=j*ci;
syyp+=ci*ci;
}
ti=int(Time[i]);
}
if (i0==0) ci=Close[i]+spr2; elseif (i0==1) ci=Open[i]+spr2; elseif (i0==2) ci=(High[i]+Low[i])/2+spr2;
sy=syp+ci;
syy=syyp+ci*ci;
aa=(sx*sy-p*sxy)/S;
bb=(sy-aa*sx)/p;
sq = (syy - aa*sxy - bb*sy)/(p-2);
if (sq>=0) sq = MathSqrt(sq)*ksq;
mai=sy/p;
return(bb);
}
//********************************************************************
Вообще-то намного. Я раньше измерял при помощи GetTickCount(). Но это хорошо заметно когда нужно делать большое количество оптимизаций. Одно дело когда считаешь несколько часов кучу вариантов, другое дело за несколько десятков или единиц минут. Но это обычно редко нужно. Поэтому можно с этим особо не заморачиваться.
Я охотно верю, что можно сделать очень многие функции с ускоренным расчетом. Типа отнять от конца периода значение и прибавить к началу новое значение, без цикла.
В частности вот пример как можно без цикла посчитать несколько видов фильтра от простой машки до линейной регрессии, без цикла.
Здесь при N=0 - обычная SMA, N=1 - линейно-взвешанная, N=3 - линейная регрессия. А также можно получить промежуточные значения, поскольку N - дробная. СКО я тоже считал подобным способом. Думаю и полиномиальную регрессию можно сделать так же. Была бы практическая необходимость. По крайней мере мне пока не удалось использовать полиномиальную регрессию в прибыльных советниках. Каналы на ЕМА-шке как то проще и практически хорошо работают.
Вот тут немного навороченный вариант линейной регрессии на mq4 с СКО без циклов. Цикл есть один раз при инициации или точнее расчете первого заначения и все, - потом только суммы и разности. Считает конечно во много раз быстрее, чем с циклами.
Да. Все верно. Это реальный пример безциклового расчета СКО в линейной регрессии. Правда в алгоритме где-то маленькая ошибка, ведущая к сдвижке всех трех линий (центральная, верхняя и нижняя границы канала) вверх.
Да. Все верно. Это реальный пример безциклового расчета СКО в линейной регрессии. Правда в алгоритме где-то маленькая ошибка, ведущая к сдвижке всех трех линий (центральная, верхняя и нижняя границы канала) вверх.
А там просто пол спреда прибавлено. Это я когда-то делал, для проверки торгового советника, чтобы была центровка относительно - Ask-Bid. Там если поставить SPR=0, то смещения не будет. Будет считать чисто по бидовым ценам.
ANG3110: А там просто пол спреда прибавлено. Это я когда-то делал, для проверки торгового советника, чтобы была центровка относительно - Ask-Bid. Там если поставить SPR=0, то смещения не будет. Будет считать чисто по бидовым ценам.
Vladimir Baskakov: Как там индикатор Султонова поживает,? Сломал хребет форексу уже или в процессе?
Индикатр работает на одном центовом реальном счете на ВПС по принципу "запустил и забыл" с депозитом в 48 у.е.. Второй месяц болтается вокруг 50-ти, видимо, ждет своего часа. На Форексе невозможно стабильно и без риска получать свыше 10-ти %-тов годовых при условии реинвестирования прибыли за долгие годы - вот мои выводы на счет хребта Форекса. Скоропалительные выводы 8-ми летней давности разбиты реальностью рынка. Мощнейшая универсальная регрессионная модель не справилась с задачей, выдавая банковский профит. УРМ отлично справляется со всеми процессами технического, социального, горного (извлечение золота из бедных руд) и прочих процессо, кроме рыночной стихии. Вывод - регрессионные модели имеют ограниченный потенциал в вопросах извлечения прибыли с рынка.
Я охотно верю, что можно сделать очень многие функции с ускоренным расчетом. Типа отнять от конца периода значение и прибавить к началу новое значение, без цикла.
В частности вот пример как можно без цикла посчитать несколько видов фильтра от простой машки до линейной регрессии, без цикла.
Здесь при N=0 - обычная SMA, N=1 - линейно-взвешанная, N=3 - линейная регрессия. А также можно получить промежуточные значения, поскольку N - дробная. СКО я тоже считал подобным способом. Думаю и полиномиальную регрессию можно сделать так же. Была бы практическая необходимость. По крайней мере мне пока не удалось использовать полиномиальную регрессию в прибыльных советниках. Каналы на ЕМА-шке как то проще и практически хорошо работают.
Вот тут немного навороченный вариант линейной регрессии на mq4 с СКО без циклов. Цикл есть один раз при инициации или точнее расчете первого заначения и все, - потом только суммы и разности. Считает конечно во много раз быстрее, чем с циклами. Одна тонкость, что период задан в часах и пересчитывается при переключении таймфрейма.
Почему Федосеев самоудалился, рассуждая правильно?
Потому что рассуждал неправильно.
Читайте ветку.
На много это ускоряет выполнение кода?
А что это "без цикла" вам дает?
На много это ускоряет выполнение кода?
Я охотно верю, что можно сделать очень многие функции с ускоренным расчетом. Типа отнять от конца периода значение и прибавить к началу новое значение, без цикла.
В частности вот пример как можно без цикла посчитать несколько видов фильтра от простой машки до линейной регрессии, без цикла.
Здесь при N=0 - обычная SMA, N=1 - линейно-взвешанная, N=3 - линейная регрессия. А также можно получить промежуточные значения, поскольку N - дробная. СКО я тоже считал подобным способом. Думаю и полиномиальную регрессию можно сделать так же. Была бы практическая необходимость. По крайней мере мне пока не удалось использовать полиномиальную регрессию в прибыльных советниках. Каналы на ЕМА-шке как то проще и практически хорошо работают.
Вот тут немного навороченный вариант линейной регрессии на mq4 с СКО без циклов. Цикл есть один раз при инициации или точнее расчете первого заначения и все, - потом только суммы и разности. Считает конечно во много раз быстрее, чем с циклами.
Да. Все верно. Это реальный пример безциклового расчета СКО в линейной регрессии.
Правда в алгоритме где-то маленькая ошибка, ведущая к сдвижке всех трех линий (центральная, верхняя и нижняя границы канала) вверх.
Да. Все верно. Это реальный пример безциклового расчета СКО в линейной регрессии.
Правда в алгоритме где-то маленькая ошибка, ведущая к сдвижке всех трех линий (центральная, верхняя и нижняя границы канала) вверх.
А что это "без цикла" вам дает?
На много это ускоряет выполнение кода?
только за счет расчета СКО выйгрыш примерно в 10-1000 раз в зависимости от периода.
А там просто пол спреда прибавлено. Это я когда-то делал, для проверки торгового советника, чтобы была центровка относительно - Ask-Bid. Там если поставить SPR=0, то смещения не будет. Будет считать чисто по бидовым ценам.
да, точно. Полное совпадение с моей реализацией по линейной регрессии.
Как там индикатор Султонова поживает,? Сломал хребет форексу уже или в процессе?
Индикатр работает на одном центовом реальном счете на ВПС по принципу "запустил и забыл" с депозитом в 48 у.е.. Второй месяц болтается вокруг 50-ти, видимо, ждет своего часа. На Форексе невозможно стабильно и без риска получать свыше 10-ти %-тов годовых при условии реинвестирования прибыли за долгие годы - вот мои выводы на счет хребта Форекса. Скоропалительные выводы 8-ми летней давности разбиты реальностью рынка. Мощнейшая универсальная регрессионная модель не справилась с задачей, выдавая банковский профит. УРМ отлично справляется со всеми процессами технического, социального, горного (извлечение золота из бедных руд) и прочих процессо, кроме рыночной стихии. Вывод - регрессионные модели имеют ограниченный потенциал в вопросах извлечения прибыли с рынка.