Spécifications
Суть индикатора, отображение размера свечи в режиме онлайн, и звуковое уведомление (Не более 3 раз на одной свече) при достижении заданного значения.
Проблемы текущего кода, периодически виснет и не обновляет значение, а так же посылает ложные уведомления и очень много раз.
помогите наладить пожалуйста!!!!
Заранее благодарен!
#property indicator_chart_window
input int TextSize = 15; //размер шрифта
input color TextColor = Red; //цвет текста
input int TextAngle = 0; //угол поворота текста
input int MaxBar = 1; //количество баров, начиная с 0, для которых вычисляется размер свечей
input string muz="news.wav"; // сигнал алерта
input bool sound=1; // алерт мелодия
input int posize=100; // размер свечи в пунктах
input bool point=1; // вывод пункты
input int f=1;// на какой свече сигнал
int OnInit()
{
return(INIT_SUCCEEDED);
}
int OnCalculate(const int rates_total,
const int prev_calculated,
const datetime &time[],
const double &open[],
const double &high[],
const double &low[],
const double &close[],
const long &tick_volume[],
const long &volume[],
const int &spread[])
//---------------
{
double psize=NormalizeDouble((high[f]-low[f])/_Point, 0);
double prsize=NormalizeDouble(MathAbs((close[f]-open[f])/_Point)/psize*100,0);
if(psize >= posize)
{
if(sound) PlaySound(muz);
};
{
int i;
for ( i = 0; i < MaxBar; i++ )
{
if ( ObjectFind ("candlesize"+ IntegerToString(i)) >=0 )
{
ObjectDelete("candlesize"+ IntegerToString(i));
}
ObjectCreate ("candlesize"+ IntegerToString(i),
OBJ_TEXT,
0,
time[i],
high[i]+StepPer()*Point);
ObjectSet ( "candlesize"+IntegerToString(i),
OBJPROP_ANGLE,
TextAngle
);
ObjectSetText ( "candlesize"+IntegerToString(i),
DoubleToStr(NormalizeDouble((high[i]-low[i]+Point)/Point, 0), 0),
TextSize,
NULL,
TextColor
);
//----------------------------
}
return(rates_total);
}
}
int StepPer ()
{
int i = 0;
switch (Period())
{
case PERIOD_M1:
i = 5;
break;
case PERIOD_M5:
i = 15;
break;
case PERIOD_M15:
i = 25;
break;
case PERIOD_M30:
i = 40;
break;
case PERIOD_H1:
i = 60;
break;
case PERIOD_H4:
i = 90;
break;
case PERIOD_D1:
i = 220;
break;
case PERIOD_W1:
i = 500;
break;
case PERIOD_MN1:
i = 2000;
break;
default:
break;
}
return (i);
}