Помощь с написанием индикатора

 

#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 Green
double ExtBuffer[];
double ExtBuffer1[];
int init()
{
IndicatorBuffers(2);
SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(0,ExtBuffer);
SetIndexBuffer(1,ExtBuffer1);
return(0);
}
int start()
{
int i;
for(i=0;i<Bars;i++)ExtBuffer1[i]=Close[i];
while(iRSIOnArray(ExtBuffer1,0,9,0)>iRSIOnArray(ExtBuffer1, 0,9, 1))ExtBuffer1[0]=ExtBuffer1[0]-Point;
while(iRSIOnArray(ExtBuffer1,0,9,0)<iRSIOnArray(ExtBuffer1, 0,9, 1))ExtBuffer1[0]=ExtBuffer1[0]+Point;
for(i=0;i<Bars;i++)ExtBuffer[i]=ExtBuffer1[i];
return(0);
}

Кто может объяснить, почему терминал зависает.

 
artem:

#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 Green
double ExtBuffer[];
double ExtBuffer1[];
int init()
{
IndicatorBuffers(2);
SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(0,ExtBuffer);
SetIndexBuffer(1,ExtBuffer1);
return(0);
}
int start()
{
int i;
for(i=0;i<Bars;i++)ExtBuffer1[i]=Close[i];
while(iRSIOnArray(ExtBuffer1,0,9,0)>iRSIOnArray(ExtBuffer1, 0,9, 1))ExtBuffer1[0]=ExtBuffer1[0]-Point;
while(iRSIOnArray(ExtBuffer1,0,9,0)<iRSIOnArray(ExtBuffer1, 0,9, 1))ExtBuffer1[0]=ExtBuffer1[0]+Point;
for(i=0;i<Bars;i++)ExtBuffer[i]=ExtBuffer1[i];
return(0);
}

Кто может объяснить, почему терминал зависает.

Насчет зависания не знаю, но зачем вызывать функцию, которая довольно сильно кушает ресурсы неколько раз. Не проще ли сделать например так:

double tmp1, tmp2;

tmp1=iRSIOnArray(ExtBuffer1,0,9,0);

tmp2=iRSIOnArray(ExtBuffer1,0,9,1);

Хотя это то же не совсем удачный вариант. Но работать будет раза в два быстрее.

И почему используется while - это ж можно бесконечный цикл получить.

Оказывается и зависанием выяснили.

Испульзуй

i f(tmp1>tmp2 ) {....}

if (tmp1<tmp2) {.....}

Причина обращения: