Счетчики баров, тиков и пунктов

 

Пишу индикатор, который считает количество пунктов вверх и вниз прошедших ценой за один тик.
Что не так в коде и где ошибка, подскажите плиз!

#property indicator_chart_window

extern int LimitBar = 10;
extern int cegl = 6;
extern string Shrift = "Arial Black";
extern bool delete = true;

double old_price, max_price, sum_pip_sell, sum_pip_bay, new_pip_bay, new_pip_sell, old_pip_bay, old_pip_sell;
datetime ctat_SB =0;

int init() {return(0);}

int deinit() {
if (delete == true) {
GetDellName(); 
}
ObjectsDeleteAll(0, OBJ_TREND);
return(0);
}

int start() {
double price;
string name_4,name_b;
int i=0;
int limit, pip; 
double delta; 
int counted_bars=IndicatorCounted(); 
if(counted_bars<0) return(-1);
if(counted_bars>0) counted_bars--;
limit=Bars-counted_bars;
if(ctat_SB==0) ctat_SB=Time[0];

if(limit>0) limit=0;

for(i=limit; i>=0; i--) {
if(old_price==0) old_price=Close[i];

if(iBarShift(NULL,0,ctat_SB)-iBarShift(NULL,0,Time[i])>=LimitBar) { ' счетчик баров для LimitBar

sum_pip_sell =0;
sum_pip_bay = 0; 
new_pip_bay = 0;
new_pip_sell = 0;
old_pip_bay = 0;
old_pip_sell = 0;

} 

price = Close[i];
if(price > max_price) max_price=price; 

delta = price - old_price; ' разница пунктов
pip = delta*10000; ' округляем до целого

//---- Каунт плюс 

if(delta>=0) { ' условие для ап пунктов

new_pip_bay = pip;
sum_pip_bay = old_pip_bay+new_pip_bay;
old_pip_bay = sum_pip_bay; 

}
//---- Каунт минус
if(delta<0) { ' условие для даун пунктов

new_pip_sell = MathAbs(pip);
sum_pip_sell = old_pip_sell+new_pip_sell;
old_pip_sell = sum_pip_sell;

} 
//----
old_price=price;

//---- размещаем счетчик на графике
name_4 = "TPM_ 4 "+TimeToStr(ctat_SB);
SetText(name_4+"sell",DoubleToStr(sum_pip_sell,0),ctat_SB+60*Period()*2, max_price+(Ask-Bid)*6, Blue,12); 
SetText(name_4+"bay",DoubleToStr(sum_pip_bay,0),ctat_SB-60*Period()*2, max_price+(Ask-Bid)*4.5, Red,12); 

} 

return(0);
}
void SetText(string name,string text,datetime t1, double p1, color c, int size) // --- отображение текста
{
if (ObjectFind(name)!=-1) ObjectDelete(name);
ObjectCreate(name,OBJ_TEXT,0,0,0,0,0); 
ObjectSet(name, OBJPROP_TIME1 , t1);
ObjectSet(name, OBJPROP_PRICE1, p1); 
ObjectSetText(name,text,cegl,Shrift,c);
}

//+------------------------------------------------------------+
void GetDellName (string name_n = "TPM_ ") // -- удаление меток с графика
{
string vName;
for(int i=ObjectsTotal()-1; i>=0;i--)
{
vName = ObjectName(i);
if (StringFind(vName,name_n) !=-1) ObjectDelete(vName);
} 
} 
//----

Заранее спасибо!

 
Fox_RM:

Пишу индикатор, который считает количество пунктов вверх и вниз прошедших ценой за один тик.
Что не так в коде и где ошибка, подскажите плиз!

Заранее спасибо!

Файлы:
tiktakwav.mq4  3 kb
 
Спасибо, nikost!
 

Наткнулся на несколько сообщений на форуме с просьбой выложить индикаторы-счетчики баров, пунктов, тиков.

Доработал свои, выкладываю. Уверен кому нибудь пригодятся.

Файлы:
 
Счетчик тиков.
Файлы:
 
Счетчик баров.
Файлы:
 
Тему переименуйте. Как то не вяжется "Помогите с кодом" и выкладывание своего творчества, которое кому-то может и пригодится
 
Vinin:
Тему переименуйте. Как то не вяжется "Помогите с кодом" и выкладывание своего творчества, которое кому-то может и пригодится

Сделано. Это старая осталась)
 
Fox_RM:

Пишу индикатор, который считает количество пунктов вверх и вниз прошедших ценой за один тик.
Что не так в коде и где ошибка, подскажите плиз!

Заранее спасибо!


У тебя нет // в коментах, в них стоят одинарные кавычки вместо //
 
ПРИВЕ БРАТУХА ВПЕРЕД НА АМБРАЗРУ
Причина обращения: