double ObjectGetValueByShift( | string name, int shift) |
Так ну вроде с этим я примерно разобрался...
Но снова забуксовал (((( ( хоть тему переименовывай: Вопль о помощи ) :))))))
вот индюк i-Regr
ТАМ ОН СТРОИТСЯ - по заданному числу баров
а его надо построить не по заданному числу баров
а по ценам открытия - закрытия предыд дня ( желательно с авто переносом этого канала, т.е. что бы строился по пред. дню)
Пож., подскажите как это сваякать ...
//---- #property indicator_chart_window #property indicator_buffers 3 #property indicator_color1 LimeGreen #property indicator_color2 Gold #property indicator_color3 Gold extern int degree = 3; extern double kstd = 2.0; extern int bars = 250; 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); } } */ //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { SetIndexBuffer(0, fx); // Буферы массивов индикатора SetIndexBuffer(1, sqh); SetIndexBuffer(2, sql); SetIndexStyle(0, DRAW_LINE); SetIndexStyle(1, DRAW_LINE); SetIndexStyle(2, DRAW_LINE); SetIndexEmptyValue(0, 0.0); SetIndexEmptyValue(1, 0.0); SetIndexEmptyValue(2, 0.0); SetIndexShift(0, shift); SetIndexShift(1, shift); SetIndexShift(2, shift); return(0); } //+------------------------------------------------------------------+ //| Custom indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { //clear(); return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { if (Bars < bars) return; //---- int mi; // переменная использующаяся только в start ip = bars; p=ip; // типа присваивание sx[1]=p+1; // примечание - [] - означает массив nn = degree+1; SetIndexDrawBegin(0, Bars-p-1); SetIndexDrawBegin(1, Bars-p-1); SetIndexDrawBegin(2, Bars-p-1); //----------------------sx------------------------------------------------------------------- for(mi=1;mi<=nn*2-2;mi++) // математическое выражение - для всех mi от 1 до nn*2-2 { sum=0; for(n=i0;n<=i0+p;n++) { sum+=MathPow(n,mi); } sx[mi+1]=sum; } //----------------------syx----------- for(mi=1;mi<=nn;mi++) { sum=0.00000; for(n=i0;n<=i0+p;n++) { if(mi==1) sum+=Close[n]; else sum+=Close[n]*MathPow(n,mi-1); } b[mi]=sum; } //===============Matrix======================================================================================================= for(jj=1;jj<=nn;jj++) { for(ii=1; ii<=nn; ii++) { kk=ii+jj-1; ai[ii,jj]=sx[kk]; } } //===============Gauss======================================================================================================== for(kk=1; kk<=nn-1; kk++) { ll=0; mm=0; for(ii=kk; ii<=nn; ii++) { if(MathAbs(ai[ii,kk])>mm) { mm=MathAbs(ai[ii,kk]); ll=ii; } } if(ll==0) return(0); if (ll!=kk) { for(jj=1; jj<=nn; jj++) { tt=ai[kk,jj]; ai[kk,jj]=ai[ll,jj]; ai[ll,jj]=tt; } tt=b[kk]; b[kk]=b[ll]; b[ll]=tt; } for(ii=kk+1;ii<=nn;ii++) { qq=ai[ii,kk]/ai[kk,kk]; for(jj=1;jj<=nn;jj++) { if(jj==kk) ai[ii,jj]=0; else ai[ii,jj]=ai[ii,jj]-qq*ai[kk,jj]; } b[ii]=b[ii]-qq*b[kk]; } } x[nn]=b[nn]/ai[nn,nn]; for(ii=nn-1;ii>=1;ii--) { tt=0; for(jj=1;jj<=nn-ii;jj++) { tt=tt+ai[ii,ii+jj]*x[ii+jj]; x[ii]=(1/ai[ii,ii])*(b[ii]-tt); } } //=========================================================================================================================== for(n=i0;n<=i0+p;n++) { sum=0; for(kk=1;kk<=degree;kk++) { sum+=x[kk+1]*MathPow(n,kk); } fx[n]=x[1]+sum; } //-----------------------------------Std----------------------------------------------------------------------------------- sq=0.0; for(n=i0;n<=i0+p;n++) { sq+=MathPow(Close[n]-fx[n],2); } sq=MathSqrt(sq/(p+1))*kstd; for(n=i0;n<=i0+p;n++) { sqh[n]=fx[n]+sq; sql[n]=fx[n]-sq; } return(0); } //+------------------------------------------------------------------+
//---- #property indicator_chart_window #property indicator_buffers 3 #property indicator_color1 LimeGreen #property indicator_color2 Gold #property indicator_color3 Gold extern int degree = 3; extern double kstd = 2.0; extern int bars = 250; 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); } } */ //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { SetIndexBuffer(0, fx); // Буферы массивов индикатора SetIndexBuffer(1, sqh); SetIndexBuffer(2, sql); SetIndexStyle(0, DRAW_LINE); SetIndexStyle(1, DRAW_LINE); SetIndexStyle(2, DRAW_LINE); SetIndexEmptyValue(0, 0.0); SetIndexEmptyValue(1, 0.0); SetIndexEmptyValue(2, 0.0); SetIndexShift(0, shift); SetIndexShift(1, shift); SetIndexShift(2, shift); return(0); } //+------------------------------------------------------------------+ //| Custom indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { //clear(); return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { if (Bars < bars) return; //---- int mi; // переменная использующаяся только в start ip = bars; p=ip; // типа присваивание sx[1]=p+1; // примечание - [] - означает массив nn = degree+1; SetIndexDrawBegin(0, Bars-p-1); SetIndexDrawBegin(1, Bars-p-1); SetIndexDrawBegin(2, Bars-p-1); //----------------------sx------------------------------------------------------------------- for(mi=1;mi<=nn*2-2;mi++) // математическое выражение - для всех mi от 1 до nn*2-2 { sum=0; for(n=i0;n<=i0+p;n++) { sum+=MathPow(n,mi); } sx[mi+1]=sum; } //----------------------syx----------- for(mi=1;mi<=nn;mi++) { sum=0.00000; for(n=i0;n<=i0+p;n++) { if(mi==1) sum+=Open[n-1]; else sum+=Open[n-1]*MathPow(n-1,mi-1); } b[mi]=sum; } //===============Matrix======================================================================================================= for(jj=1;jj<=nn;jj++) { for(ii=1; ii<=nn; ii++) { kk=ii+jj-1; ai[ii,jj]=sx[kk]; } } //===============Gauss======================================================================================================== for(kk=1; kk<=nn-1; kk++) { ll=0; mm=0; for(ii=kk; ii<=nn; ii++) { if(MathAbs(ai[ii,kk])>mm) { mm=MathAbs(ai[ii,kk]); ll=ii; } } if(ll==0) return(0); if (ll!=kk) { for(jj=1; jj<=nn; jj++) { tt=ai[kk,jj]; ai[kk,jj]=ai[ll,jj]; ai[ll,jj]=tt; } tt=b[kk]; b[kk]=b[ll]; b[ll]=tt; } for(ii=kk+1;ii<=nn;ii++) { qq=ai[ii,kk]/ai[kk,kk]; for(jj=1;jj<=nn;jj++) { if(jj==kk) ai[ii,jj]=0; else ai[ii,jj]=ai[ii,jj]-qq*ai[kk,jj]; } b[ii]=b[ii]-qq*b[kk]; } } x[nn]=b[nn]/ai[nn,nn]; for(ii=nn-1;ii>=1;ii--) { tt=0; for(jj=1;jj<=nn-ii;jj++) { tt=tt+ai[ii,ii+jj]*x[ii+jj]; x[ii]=(1/ai[ii,ii])*(b[ii]-tt); } } //=========================================================================================================================== for(n=i0;n<=i0+p;n++) { sum=0; for(kk=1;kk<=degree;kk++) { sum+=x[kk+1]*MathPow(n,kk); } fx[n]=x[1]+sum; } //-----------------------------------Std----------------------------------------------------------------------------------- sq=0.0; for(n=i0;n<=i0+p;n++) { sq+=MathPow(Open[n-1]-fx[n-1],2); } sq=MathSqrt(sq/(p+1))*kstd; for(n=i0;n<=i0+p;n++) { sqh[n]=fx[n]+sq; sql[n]=fx[n]-sq; } return(0); } //+------------------------------------------------------------------+
Вы меня не так поняли, meta-trader2007 !
мне нужно построить канал. По двум точкам.
На тф=м30.
Первая точка, - это от цены открытия первого бара вчерашнего дня.
Вторая точка, - от цены закрытия последнего бара вчерашнего дня.
И чтобы, с наступлением каждого дня - эта линия строилась по новой!
Пож. помогите...
Понятно. сделать трудн так как я неспец по индикам, я больше по советникам.
Сейчас всё равн почти 5 утра и я ничего не соображаю. Если получится то завтра попробую сделать индик.
потом заходим на ветку к Киму и смотрим подходящую Функцию, и вот что мы видим :
//+----------------------------------------------------------------------------+ //| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru | //+----------------------------------------------------------------------------+ //| Версия : 12.10.2007 | //| Описание : Установка объекта OBJ_REGRESSION канал линейной регрессии. | //+----------------------------------------------------------------------------+ //| Параметры: | //| cl - цвет линии | //| nm - наименование ( "" - время открытия текущего бара) | //| t1 - время открытия бара ( 0 - Time[10]) | //| t2 - время открытия бара ( 0 - Time[0]) | //| ry - луч (False - по умолчанию) | //| st - стиль линии ( 0 - простая линия) | //| wd - ширина линии ( 1 - по умолчанию) | //+----------------------------------------------------------------------------+ void SetRegression(color cl, string nm="", datetime t1=0, datetime t2=0, bool ry=False, int st=STYLE_SOLID, int wd=1) { if (nm=="") nm=DoubleToStr(Time[0], 0); if (t1<=0) t1=Time[10]; if (t2<=0) t2=Time[0]; if (ObjectFind(nm)<0) ObjectCreate(nm, OBJ_REGRESSION, 0, 0,0, 0,0); ObjectSet(nm, OBJPROP_TIME1, t1); ObjectSet(nm, OBJPROP_TIME2, t2); ObjectSet(nm, OBJPROP_COLOR, cl); ObjectSet(nm, OBJPROP_RAY , ry); ObjectSet(nm, OBJPROP_STYLE, st); ObjectSet(nm, OBJPROP_WIDTH, wd); }
Теперь совмещаем:
int PrewDayOpen=iTime(NULL,1440,1); int PrewDayClose=iTime(NULL,1440,0); SetRegression(Red,"Regression",PrewDayOpen,PrewDayClose, True);теперь имеем красный канал лин регрессии по открытию - закрытию вчера, с линиями лучами
таак. что то я сам запутался, ладно пойдем другим путем
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Всем привет !
Суть проблемы:
Есть линия на графике ( линейная регрессия), строится по предыдушему дню.
Необходимо снять значение цены этой линии на текущем (или пред.) баре уже сегодняшнего дня !
Всё это на тф.= например, = м30
И в дальнейшем, это значение предполагается задействовать в эксперте.
Плохо предствляю, с чего надо хотя бы начать. Пож., подскажите,
как это сделать ?