
ибо индикаторы (даже не проверял), явно тормозные ).
// ---------------------------------------------------------------------------
// Классический канал Дончиана - по экстремумам за N дней.
//
// Буферы индикатора:
// 0 - Верхняя граница.
// 1 - Нижняя граница.
// 2 - Середина канала.
// ---------------------------------------------------------------------------
#property indicator_chart_window
#property indicator_buffers 6
#property indicator_color1 clrRed
#property indicator_color2 clrRed
#property indicator_color3 clrRed
#property indicator_style3 STYLE_DOT
// Длина рассматриваемой истории.
extern int HISTORY_DEPTH = 128;
// Буферы индикатора.
double buf_up[], buf_dn[], buf_md[];
double buf_up2[], buf_dn2[], buf_md2[];
// Инициализация.
int init()
{
IndicatorShortName(StringConcatenate(
"DONCHIAN CHANNEL (", HISTORY_DEPTH, ")"));
IndicatorDigits(Digits);
SetIndexBuffer(0, buf_up);
SetIndexBuffer(1, buf_dn);
SetIndexBuffer(2, buf_md);
SetIndexBuffer(3, buf_up2);
SetIndexBuffer(4, buf_dn2);
SetIndexBuffer(5, buf_md2);
SetIndexStyle(3,DRAW_LINE,0,1,Blue);
SetIndexStyle(4,DRAW_LINE,0,1,Blue);
SetIndexStyle(5,DRAW_LINE,0,1,Blue);
SetIndexLabel(0, "UPPER BOUND");
SetIndexLabel(1, "LOWER BOUND");
SetIndexLabel(2, "MIDDLE LINE");
return(0);
}
// Главный цикл.
int start()
{
int i;
for(i = 0; i<11111; i++)
{
buf_up[i] = Close[iHighest(NULL, 0, MODE_CLOSE, HISTORY_DEPTH, i)];
buf_dn[i] = Open [iLowest(NULL, 0, MODE_OPEN, HISTORY_DEPTH, i)];
buf_md[i] = 0.5 * (buf_up[i] + buf_dn[i]);
}
for(i = 0; i<11111; i++)
{
if(buf_up[i]>buf_up[i+1])
buf_up2[i]=Close[iHighest(NULL, 0, MODE_CLOSE, HISTORY_DEPTH, i)];
}
return(0);
}
//+------------------------------------------------------------------+
я не понял логику…одна сделка после пробоя
нужно точно знать формулу для этих уровней, т.к. буферов для них нет и считывать их будет достаточно проблематично
AM2