← К каталогу
Исходный код · ID 2968

i-regr mtf.mq5

Вы автор или правообладатель?

Сообщите нам, если считаете, что материал размещён без разрешения.

Краткий обзор

О программе

Индикатор выполняет полиномиальную регрессию цены и отображает результат на графике MetaTrader 5. Рассчитывается линия регрессии заданной степени, а также верхняя и нижняя полосы отклонения, основанные на стандартном отклонении. Поддерживается работа на разных таймфреймах: при выборе интервала, отличного от текущего, данные запрашиваются через вызов iCustom с другого таймфрейма.

Расчёт строится на методе наименьших квадратов с решением системы линейных уравнений методом Гаусса. Полином задаётся пользователем через параметр степени. Линия регрессии и полосы отклонения отрисовываются в виде трёх индикаторных буферов.

Индикатор обновляет значения не чаще одного раза в 60 секунд. Обработка ограничивается заданным количеством баров. При недостаточном количестве баров на графике расчёт не выполняется.

Настройки программы

НастройкаОписание
TimeFrame Временной интервал для расчёта индикатора. Если задан интервал, отличный от текущего графика, индикатор получает данные с указанного таймфрейма через iCustom.
degree Степень полинома регрессии. Определяет порядок аппроксимирующей кривой. Значение 3 означает кубическую регрессию.
kstd Множитель стандартного отклонения. Определяет ширину верхней и нижней полос отклонения вокруг линии регрессии.
bars Количество баров, используемых для расчёта регрессии. Если на графике баров меньше этого значения, расчёт не выполняется.
shift Сдвиг индикаторной линии в барах относительно текущего бара. Положительное значение сдвигает линию влево.
Получить полный код

Поиск по коду файла

#property indicator_chart_window
#property indicator_buffers 3
#property indicator_color1 Aquamarine
#property indicator_color2 SteelBlue
#property indicator_color3 SteelBlue

extern string TimeFrame = "Current time frame";
extern int degree = 3;
extern double kstd = 1.5;
extern int bars = 240;
extern int shift = 0;

double fx[],sqh[],sql[];

double ai[10,10],b[10],x[10],sx[20];
double sum; 
int ip,p,n,f;
double qq,mm,tt;
int ii,jj,kk,ll,nn;
double sq;

int i0 = 0;

/* 
void clear()
{
 int total = ObjectsTotal(); 
 for (int i=total-1; i >= 0; i--) 
 {
string name = ObjectName(i);
 if (StringFind(name, prefix) == 0) ObjectDelete(name);
 }
}
*/

string indicatorFileName;
int timeFrame;

int init()
{
      // код доступен только после оплаты
   }

int deinit()
{

 return(0);
}

datetime LastUpdate;

int start()
{
      // код доступен только после оплаты
   }

 if (TimeCurrent() - LastUpdate < 60) return(0);   //Checks to see last update
   LastUpdate = TimeCurrent();

 if (timeFrame!=Period())
 {
 int limit = MathMin(Bars-1,bars*timeFrame/Period());
 for (int i=limit; i>=0; i--)
 {
int y = iBarShift(NULL,timeFrame,Time[i]);
 fx[i] = iCustom(NULL,timeFrame,indicatorFileName,"",degree,kstd,bars,0,0,y);
 sqh[i] = iCustom(NULL,timeFrame,indicatorFileName,"",degree,kstd,bars,0,1,y);
 sql[i] = iCustom(NULL,timeFrame,indicatorFileName,"",degree,kstd,bars,0,2,y);
 }
 SetIndexDrawBegin(0, MathMin(Bars-limit-1,0));
 SetIndexDrawBegin(1, MathMin(Bars-limit-1,0));
 SetIndexDrawBegin(2, MathMin(Bars-limit-1,0)); 
 return(0);
 }
 if (Bars < bars) return(0);

 int mi; // ?????????? ?????????????? ?????? ? start
 ip = bars;
 p=ip; // ???? ????????????
 sx[1]=p+1; // ?????????? - [] - ???????? ??????
 nn = degree+1;

 SetIndexDrawBegin(0, Bars-p-1);
 SetIndexDrawBegin(1, Bars-p-

Показано первые 50% кода (символов: 3582)

Открыть по тарифу

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

Разовая покупка файла

На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.

Чтобы оформить заказ, введите email и перейдите к оплате.

Стоимость полного кода
358,20₽ ≈ $4.38