Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Юра, хочется считать СКО быстрее, чем стандартная функция. А вдруг получится? При одиночном вызове она должна быть быстрее любого кода, написанного на языке, но вот при массовом (обсчет всего чарта) вполне можно сэкономить на издержках.
Если речь идет об ско ошибки для линейной регрессии, то она считается аналитически в одно действие по формуле
СКО^2=D[Y] - D[X]*A^2,
где D[Y]=M[Y^2]-M[Y]^2, D[X]=M[X^2]-M[X]^2, и A - линейный коэффициент регрессии Y=A*X+B
Так что рекуррентность тут не нужна.
PS А перекрестные суммы обнуляются явно и чисто аналитически. Размер выборки тут не при чем.
Все равно ошибка 2008.02.15 17:07:22 2007.01.11 12:15 OTF_1 EURUSD,M1: negative argument for MathSqrt function
Поэтому, единственное что приходит в голову на всякий пожарный вначеле выполнить lambda=0.0;
и/или MathSqrt(MathAbs(lambda*lambda*lambda*lambda+16.0*lambda*lambda)) чтобы навсегда избавиться от этой ошибки.
//---- main loop
double alpha, lambda=0.0 ;
//********************************************************************************************
for (i = limit; i >= 0; i--)
{
Price[i]=(High[i]+Low[i])/2.0;
}
for (i = limit; i >= 0; i--)
{
Value1[i]=SC*(Price[i]-Price[i+1])+4*SC*Value1[i+1];
Value2[i]=SC*(High[i]-Low[i])+4*SC*Value2[i+1];
}
for (i = limit; i >= 0; i--)
{
if(Value2[i]< Point)Value2[i]= Point;else lambda=MathAbs(Value1[i]/Value2[i]);
alpha=(-lambda*lambda+ MathSqrt(lambda*lambda*lambda*lambda+16.0*lambda*lambda) )/8.0;
Value3[i]=alpha*Price[i]+(1.0-alpha)*Value3[i+1];
}
//********************************************************************************************
P.S. Вооообще бред. Эта ошибка у вас наверное в тестере выскакивает?
P.P.S. Скорее всего инициализация переменной double lambda; по умолчанию производилась очень маленьким отрицательным мусором. Тогда выражение double lambda=0.0; должно помочь.
Учит нас, Слава учит - не работать никогда по умолчанию, а мы не учимся!
Все равно ошибка 2008.02.15 17:07:22 2007.01.11 12:15 OTF_1 EURUSD,M1: negative argument for MathSqrt function
P.S. Вооообще бред. Эта ошибка у вас наверное в тестере выскакивает?
P.P.S. Скорее всего инициализация переменной double lambda; по умолчанию производилась очень маленьким отрицательным мусором. Тогда выражение double lambda=0.0; должно помочь.
Учит нас, Слава учит - не работать никогда по умолчанию, а мы не учимся!
Здешние ботники вечно хотят какой-то велосипед изобрести.
Не парьтесь понапрасну. Среди пользовательских индюков есть Bands.mq4 - там приведен алгоритм расчета СКО
СКО^2=D[Y] - D[X]*A^2,
где D[Y]=M[Y^2]-M[Y]^2, D[X]=M[X^2]-M[X]^2, и A - линейный коэффициент регрессии Y=A*X+B
Так что рекуррентность тут не нужна.
И что значит рекуррентность не нужна, суммы-то как предполагается рассчитывать? Или есть идея как обойтись без замены матожидания на среднее?
P.S. Кстати, перекрёстные суммы сами не уходят. По крайней мере у меня не уходили. Попробуйте поработать не с дисперсиями а с "реальным" выражением
Следовательно для линейной регрессии будет
Следовательно для линейной регрессии будет
СКО^2=D[Y] - D[X]*A^2,
где D[Y]=M[Y^2]-M[Y]^2, D[X]=M[X^2]-M[X]^2, и A - линейный коэффициент регрессии Y=A*X+B
Так что рекуррентность тут не нужна.
И что значит рекуррентность не нужна, суммы-то как предполагается рассчитывать? Или есть идея как обойтись без замены матожидания на среднее?
P.S. Кстати, перекрёстные суммы сами не уходят. По крайней мере у меня не уходили. Попробуйте поработать не с дисперсиями а с "реальным" выражением
Очень хочу узнать, что может быть лишнее в этих формулах ? :-)
МО, естественно, заменяется на среднее и суммы рассчитывать надо. Однако, для этого не нужна ни рекуррентность, ни даже цикл. Достаточно воспользоваться формулой
S(X)[i+1]=S(X)[i] - X[i-N+1] + X[i+1], где S(X)[i]=Сумма(X[k]; k=i-N+1, i-N+2, ...,i-1,i )
Впрочем, может вы именно это выражение и имеете в виду, когда говорите о рекуррентности ? Тогда, конечно, вы правы.
Что касается "реального выражения", то как вы думаете, откуда все эти формулы берутся ? Вот если подставить в это "реальное выражение" конечные формулы, полученные с помощью МНК для А и В, то как раз и получится приведенное выражение для СКО. Могу привести соответствующие аналитические рассчеты.
Могу привести соответствующие аналитические рассчеты.
вот отсюда если не затруднит подробнее. с приходом новых данных коэфициенты А и В могут поменяться, вродебы, хотя я могу и ошибаться :-). Для ЛР вроде решили, а вот для параболической регресии как ?
Это по определению. Если ЛР не совсем короткая, можно рассчитывать СКО быстрее, без дополнитнльного цикла. Код для расчёта СКО есть в исходном MovingLR.mq4, только он закомментирован и СКО называется rmsY.