У меня в правом верхнем углу вообще ничего не вывелось, зато в левом - "LinearRegValue 0.3248" , чарт - GBPUSD , M30
У меня в правом верхнем углу вообще ничего не вывелось, зато в левом - "LinearRegValue 0.3248" , чарт - GBPUSD , M30
Обшибся про правый! Вот и про это: Пишет одно, а рисует другое.
SumY+=Close[shift+i-1];
вроде намудрили , что будет когда shift=Bars да еще к нему плюс i , которое может быть от 0 до Length-1 (Length=21), здесь тоже не понятно
Slope=0; Intercept=(SumY-Slope*SumBars)/Length;
, экономичнее будет так
Slope=0; Intercept=SumY/Length;
все равно Slope*SumBars будет равно 0, далее по коду также
Slope=0; Intercept=(SumY-Slope*SumBars)/Length;
, экономичнее будет так
Slope=0; Intercept=SumY/Length;
все равно Slope*SumBars будет равно 0, далее по коду также
Перед Slope=0; стоит условие, это к нему относится.
if (Num2!=0) Slope=(Num1/Num2); else Slope=0;
У меня же Slope не всегда равен 0, здесь, я думаю, правильно.
Перед Slope=0; стоит условие, это к нему относится.
if (Num2!=0) Slope=(Num1/Num2); else Slope=0;
У меня же Slope не всегда равен 0, здесь, я думаю, правильно.
просмотрел, а как насчет обращения к несуществующим барам, хотя результат вроде высчитан и он должен быть отрисован, но с другой стороны если вставить алерт в твой цикл то индикатор убивает терминал зацикливанием (проц загружается на 100%) скорее всего внимательнее нужно посмотреть организацию цикла
Перед Slope=0; стоит условие, это к нему относится.
if (Num2!=0) Slope=(Num1/Num2); else Slope=0;
У меня же Slope не всегда равен 0, здесь, я думаю, правильно.
просмотрел, а как насчет обращения к несуществующим барам, хотя результат вроде высчитан и он должен быть отрисован, но с другой стороны если вставить алерт в твой цикл то индикатор убивает терминал зацикливанием (проц загружается на 100%) скорее всего внимательнее нужно посмотреть организацию цикла
Бары существуют, shift может быть равен (Bars-1), а это существующий бар. Немного подправил, вроде рисунок с цифрами совпадает, но в эксперте все равно 0.
#property copyright "Copyright © 2005, Ekc" #property link "" #property indicator_chart_window extern int Length=21; #property indicator_buffers 1 #property indicator_color1 Red double Buffer[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- indicators SetIndexStyle(0,DRAW_LINE); SetIndexBuffer(0,Buffer); SetIndexDrawBegin(0,Length); //---- return(0); } //+------------------------------------------------------------------+ //| Custor indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- TODO: add your code here Comment(""); //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { //---- TODO: add your code here double LinearRegValue=0,Slop=0,Num1=0,Num2=0,SumBars=0,SumSqrBars=0,SumY=0,Sum1=0,Sum2=0,Slope=0,Intercept=0; int ExtCountedBars=0; ExtCountedBars=IndicatorCounted(); if(Bars<=Length) return(0); //---- check for possible errors if (ExtCountedBars<0) return(-1); //---- last counted bar will be recounted if (ExtCountedBars>0) ExtCountedBars--; int shift,i; //---- initial accumulation shift=Bars-Length-1; if(ExtCountedBars>=Length) shift=Bars-ExtCountedBars-1; //for(shift=1;shift<=Bars;shift++) while(shift>0) { SumBars=0; //Обнуляем для расчетов SumSqrBars=0; SumY=0; Sum1=0; Sum2=0; for(i=0;i<=Length-1;i++) { SumY+=Close[shift+i]; Sum1+=i*Close[shift+i]; } SumBars=Length*(Length-1)*0.5; SumSqrBars=(Length-1)*Length*(2*Length-1)/6; Sum2=SumBars*SumY; Num1=Length*Sum1-Sum2; Num2=SumBars*SumBars-Length*SumSqrBars; if (Length==0) LinearRegValue=0; if (Num2!=0) Slope=(Num1/Num2); else Slope=0; Intercept=(SumY-Slope*SumBars)/Length; LinearRegValue=Intercept+Slope*(Length-1); Buffer[shift]=LinearRegValue; shift--; } //---- zero initial bars if(ExtCountedBars<1) for(i=0;i<Length;i++) Buffer[Bars-i]=0; Comment("SumY ",SumY,"\n","SumBars ",SumBars,"\n","SumSqrBars ",SumSqrBars, "\n","Sum1 ",Sum1,"\n","Sum2 ",Sum2,"\n","Num1 ",DoubleToStr(Num1,6),"\n","Num2 ",Num2, "\n","Slope ",DoubleToStr(Slope,6),"\n","Intercept ",Intercept,"\n","LinearRegValue ",LinearRegValue, "\n","Counted_bars ", ExtCountedBars,"\n","Bars ",Bars); //---- return(0); }
Куда вы вставляете Alert?
Куда вы вставляете Alert?
после
LinearRegValue=Intercept+Slope*(Length-1); Alert("LinearRegValue ",LinearRegValue);
Куда вы вставляете Alert?
после
LinearRegValue=Intercept+Slope*(Length-1); Alert("LinearRegValue ",LinearRegValue);
Все нормально работает, правда не сразу, секунд 5 подумал и выдал.
да теперь он и результаты по комент выдает верные, дальше нужно с экспертом разбираться :)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Вот код индикатора:
Что не так?