//+------------------------------------------------------------------+ //| siLagrange.mq4 | //| Copyright © 2007 Сергеев Алексей | //| profy.mql@gmail.com | //+------------------------------------------------------------------+ #property copyright "Copyright © 2007-2011, Сергеев Алексей " #property link "mailto: profy.mql@gmail.com" //---- #property indicator_chart_window #property indicator_buffers 3 #property indicator_color1 SkyBlue #property indicator_color2 Crimson #property indicator_color3 Crimson //---- extern int Pow=3;//Степень полинома Лагранжа. Желательно 3..8 extern int Depth=12;//минимальное расстояние между опорными точками extern int Mode=MODE_HIGH;//MODE_HIGH, MODE_LOW, MODE_CLOSE extern int TimeFrame=0; extern int Shift=10;//На сколько баров продлеваем в будущее //---- double Lx[];//Полином Лагранжа double Lx0[];//Полином Лагранжа в будущее на shift баров double Pnt[];//Индикатор опорных точек построения int X[];//Номера баров по которым строится полином double Y[];//Значения цены в точках (O, H, L или C) double C[];//Коэффициенты полинома //----------------------------------------------------------- Lagrange int init() { //---- indicator line SetIndexBuffer(0,Lx); SetIndexStyle(0,DRAW_LINE); SetIndexBuffer(1,Lx0); SetIndexStyle(1,DRAW_LINE); SetIndexShift(1, Shift); SetIndexBuffer(2,Pnt); SetIndexStyle(2,DRAW_ARROW); SetIndexArrow(2, 159); ArrayResize(X, Pow); ArrayResize(Y, Pow); ArrayResize(C, Pow); return(0); } //----------------------------------------------------------- Lagrange int start() { if (Pow<=1) Pow = 2;//проверка корректности if (Pow>=21) Pow = 20;//проверка корректности //0. Определяем таблицу значений X и Y для построения полинома FindPoint(); // Lagrange(); //---- return(0); } //----------------------------------------------------------- FindPoint void FindPoint() { int pos, pos2, pos_prev = -1; if (Depth<=0) Depth=2; int i=Depth; int n=0;//счетчик точек (до Pow) while((i