Для удобства дальнейшего применения, организуем реализацию поставленной задачи в виде кода функции f_GetVola(), которая будет иметь два параметра:
na - имя актива;
pe - кол-во периодов (элементов массива).
Оба эти параметра нужно задавать во внешних параметрах скрипта (советника и т.п.).
- Код: выделить все
double f_GetVola(string na, int pe)
{
// na - имя актива
// pe - кол-во периодов (элементов массива)
double dblVol[], dblHig, dblLow, dblSMA;
ArrayResize(dblVol, pe);
for(int i = 0; i < pe; i++)
{
dblHig = iHigh(na, 0, i);
dblLow = iLow(na, 0, i);
if(dblHig > 0 && dblLow > 0) { dblVol[i] = (dblHig / dblLow - 1) * 100; }
}
dblSMA = f_GetAve(dblVol);
return(dblSMA);
}
Для работы данной функции требуются две функции, написанные ранее:
- Код: выделить все
double f_GetSum(double &Y[])
{
// Функция возвращает сумму элементов массива
int size = ArraySize(Y);
double Sum = 0.0;
for(int i = 0; i < size; i++) { Sum += Y[i]; }
return(Sum);
}
double f_GetAve(double &Y[])
{
// Функция возвращает среднее арифметическое элементов массива
// Используется функция f_GetSum()
int size = ArraySize(Y);
double Sum = f_GetSum(Y);
return(Sum / size);
}
Позже я выложу скрипт для расчета волатильности в соответствующем разделе форума.