Прошу написать индикатор (оплата)

[Удален]  

Индикатор, который будет рисовать канал (при необходимости и его середину) по ценам закрытия, ширина канала задается нижевыложенным индикатором(его средним значением), с возможностью настройки параметров : Период ATR 1, Период ATR 2 и Таймфрейм для ATR. __________________________________________________________________________________________________________________

/+------------------------------------------------------------------+
//| modaTR|
//| * |
//| * |
//+------------------------------------------------------------------+
#property copyright "*"
#property link "*"


#property indicator_separate_window
#property indicator_buffers 3
#property indicator_color1 Red
#property indicator_color2 Yellow
#property indicator_color3 Aqua

#property indicator_width4 2
#property indicator_width5 2

extern int ATR_TimeFrame=1440; // Таймфрейм для ATR
extern int ATR_1_Period=13; // Период ATR 1
extern int ATR_2_Period=55; // Период ATR 2
extern double ATR_K=1; // Коэффициент умножения ATR

//---- buffers
double atr1[];
double atr2[];
double avatr[];

//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init(){

SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(0,atr1);
SetIndexStyle(1,DRAW_LINE);
SetIndexBuffer(1,atr2);
SetIndexStyle(2,DRAW_LINE);
SetIndexBuffer(2,avatr);


SetIndexLabel(0,"ATR 1");
SetIndexLabel(1,"ATR 2");
SetIndexLabel(2,"Average ATR");

//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----

//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start(){


int limit=Bars-IndicatorCounted();

datetime daytimes[];
static bool err;
ArrayCopySeries(daytimes,MODE_TIME,Symbol(),ATR_TimeFrame);
if(GetLastError()==4066){
IndicatorShortName("жду обновления данных на таймфрейме "+fTimeFrameName(ATR_TimeFrame));
err=true;
return(0);
}
if(err){
err=false;
limit=Bars;
IndicatorShortName("modaTR");
}
for(int i=limit-1;i>=0;i--){
int NTF_BarNum=iBarShift(NULL,ATR_TimeFrame,Time[i],false)+1;
atr1[i]=ATR_K*iATR(NULL,ATR_TimeFrame,ATR_1_Period,NTF_BarNum);
atr2[i]=ATR_K*iATR(NULL,ATR_TimeFrame,ATR_2_Period,NTF_BarNum);
avatr[i]=(atr1[i]+atr2[i])/2;
}

return(0);
}
//+------------------------------------------------------------------+

string fTimeFrameName(int arg){

// fTimeFrameName();

int v;
if(arg==0){
v=Period();
}
else{
v=arg;
}
switch(v){
case 0:
return("0");
case 1:
return("M1");
case 5:
return("M5");
case 15:
return("M15");
case 30:
return("M30");
case 60:
return("H1");
case 240:
return("H4");
case 480:
return("H8");
case 1440:
return("D1");
case 10080:
return("W1");
case 43200:
return("MN1");
default:
return("Wrong TimeFrame");
}
}

 
QJJ:....

Пишите по e-mail. Сделаю.

 
2QJJ: моё письмо с уточнениями дошло?