[MT4指标]通道指标线
主图指标
mt4指标类型:震荡指标
是否能用在mt4手机版上:否
是否含有未来函数:无
//+------------------------------------------------------------------+
//| Channels.mq4 |
//| Copyright ? 2010, Shon Shampain |
//| http://www.zencowsgomu.com |
//| |
//| Visit http://www.ZenCowsGoMu.com, an oasis of sanity |
//| for currency traders. |
//| |
//| Original out-of-the-box thinking, ideas, indicators, |
//| educational EAs and more. |
//| |
//| Home of the consistent T4 Forex trading signal. |
//| +396 pips June 2010, +1835 pips 2010 YTD |
//| Backtesting profitably since 1-1-2002. |
//+------------------------------------------------------------------+
#property copyright "Shon Shampain"
#property link "http://www.zencowsgomu.com"
#property indicator_chart_window
#property indicator_buffers 3
#property indicator_color1 Aqua
#property indicator_color2 Aqua
#property indicator_color3 White
extern int max_periods = 20;
extern bool tenths = true;
int d;
double mult;
double high, low;
double upper ;
double lower ;
double middle ;
int init()
{
d = Digits;
if (tenths) d -= 1;
mult = 1.0;
for (int x = 0; x < d; x++)
mult *= 10.0;
SetIndexBuffer(0, upper);
SetIndexBuffer(1, lower);
SetIndexBuffer(2, middle);
return(0);
}
int deinit()
{
return(0);
}
void get_high_low(int i, int max)
{
high = 0.0;
low = 99999.9;
for (int j = 0; j < max; j++)
{
if (High[i+j] > high) high = High[i+j];
if (Low[i+j] < low) low = Low[i+j];
}
}
double calc_channel_balance(int i, int max)
{
double avg_price, price_change, range, pct, total;
double dmax = max;
total = 0.0;
for (int j = 0; j < max; j++)
{
avg_price = (High[i+j] + Low[i+j]) / 2.0;
range = upper[i+j] - lower[i+j];
if (range == 0.0) pct = 0.0;
else pct = (avg_price - lower[i+j]) / range;
total += pct;
}
total /= dmax;
return(total);
}
int start()
{
int counted_bars = IndicatorCounted();
int i = Bars - counted_bars - 1;
while (i >= 0)
{
if (i + max_periods > Bars)
{
upper = EMPTY_VALUE;
lower = EMPTY_VALUE;
middle = EMPTY_VALUE;
}
else
{
get_high_low(i, max_periods);
upper = high;
lower = low;
middle = (high + low) / 2.0;
double bal = calc_channel_balance(i, max_periods);
Comment("Balance: ", DoubleToStr(bal * 100.0, 2));
}
i--;
}
return(0);
}
Channels.jpg
