// Ticker TrailCD.mq4
// Èíäèêàòîð
#property copyright "mandorr@gmail.com"
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 MediumVioletRed
#property indicator_width1 2
#property indicator_style1 0
#property indicator_maximum 120
#property indicator_minimum -120
extern int TrailFast=25; // Áûñòðûé òðàë
extern int TrailSlow=65; // Ìåäëåííûé òðàë
extern int CountBars=1000; // Êîëè÷åñòâî îòîáðàæàåìûõ áàðîâ
int count;
int price;
int price_prev;
int trail_fast;
int trail_slow;
double ticker[10]; // áóôåð òèêîâ
double buffer[];
void init()
{
SetIndexBuffer(0,buffer);
SetIndexLabel(0,"Value");
SetIndexDrawBegin(0,0);
count=ArrayResize(ticker,CountBars);
count=0;
price_prev=0;
trail_fast=0; if (TrailFast>0) trail_fast=TrailFast;
trail_slow=0; if (TrailSlow>0) trail_slow=TrailSlow;
}
void start()
{
int i, value_fast, value_slow;
if (trail_fast>=trail_slow) {Print("Íåâåðíûå ïàðàìåòðû èíäèêàòîðà"); return;}
price=MathRound(Bid/Point);
if (price_prev==0)
{
count=0;
price_prev=price;
ticker[0]=price*Point;
buffer[0]=0;
IndicatorShortName("Ticker ("+count+") TrailCD ("+trail_fast+","+trail_slow+")");
return;
}
if (price==price_prev) return;
price_prev=price;
for (i=count; i>=0; i--)
{
ticker[i+1]=ticker[i];
}
ticker[0]=price*Point;
if (count<CountBars-1) count++;
price=MathRound(ticker[count]/Point);
value_fast=price;
value_slow=price;
for (i=count; i>=0; i--)
{
price=MathRound(ticker[i]/Point);
if (value_fast<price-trail_fast) value_fast=price-trail_fast;
if (value_fast>price+trail_fast) value_fast=price+trail_fast;
if (value_slow<price-trail_slow) value_slow=price-trail_slow;
if (value_slow>price+trail_slow) value_slow=price+trail_slow;
buffer[i]=100*(value_fast-value_slow)/(trail_slow-trail_fast);
}
IndicatorShortName("Ticker ("+count+") TrailCD ("+trail_fast+","+trail_slow+")");
}
Comments