У меня в правом верхнем углу вообще ничего не вывелось, зато в левом - "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+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Вот код индикатора:
#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++) { SumBars=0; //Обнуляем для расчетов SumSqrBars=0; SumY=0; Sum1=0; Sum2=0; for(i=0;i<=Length-1;i++) { SumY+=Close[shift+i-1]; Sum1+=i*Close[shift+i-1]; } 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-1]=LinearRegValue; } //---- zero initial bars if(ExtCountedBars<1) for(i=0;i<Length;i++) Buffer[Bars-i]=0; Comment("LinearRegValue ",LinearRegValue); return(0); }Что не так?