//+------------------------------------------------------------------+ //| Version July 20, 2006 | //| Editing Nikolay Kositsin 15.06.2006 farria@mail.redcom.ru | //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ //| T3 Taotra.mq4 | //| T3 code: Copyright © 1998, Tilson | //+------------------------------------------------------------------+ #property copyright "" #property link "" //---- отрисовка индикатора в главном окне #property indicator_chart_window //---- количество индикаторных буфферов #property indicator_buffers 6 //---- цвета индикатора #property indicator_color1 Brown #property indicator_color2 Red #property indicator_color3 Purple #property indicator_color4 Aqua #property indicator_color5 Green #property indicator_color6 Blue //---- ВХОДНЫЕ ПАРАМЕТРЫ ИНДИКАТОРА extern int MA_Period_1 = 3; // период индикатора 1 extern int MA_Period_2 = 5; // период индикатора 2 extern int MA_Period_3 = 8; // период индикатора 3 extern int MA_Period_4 = 12;// период индикатора 4 extern int MA_Period_5 = 21;// период индикатора 5 extern int MA_Period_6 = 34;// период индикатора 6 //---- extern int Shift1 = 0; // cдвиг индикатора 1 вдоль оси времени extern int Shift2 = 0; // cдвиг индикатора 2 вдоль оси времени extern int Shift3 = 0; // cдвиг индикатора 3 вдоль оси времени extern int Shift4 = 0; // cдвиг индикатора 6 вдоль оси времени extern int Shift5 = 0; // cдвиг индикатора 5 вдоль оси времени extern int Shift6 = 0; // cдвиг индикатора 6 вдоль оси времени extern double b=0.7; //---- индикаторные буфферы double Ind_Buffer1[]; double Ind_Buffer2[]; double Ind_Buffer3[]; double Ind_Buffer4[]; double Ind_Buffer5[]; double Ind_Buffer6[]; //---- double e1[6],e2[6],e3[6],e4[6],e5[6],e6[6]; double c1,c2,c3,c4,Price,Resalt[6]; double n[6],w1[6],w2[6],b2,b3; double M[6]; //---- введение переменных для сохранения переменных e1,e2,e3,e4,e5,e6 datetime time2; double E1[6],E2[6],E3[6],E4[6],E5[6],E6[6]; //+------------------------------------------------------------------+ //| T3 Taotra initialization function | //+------------------------------------------------------------------+ int init() { //---- определение стиля исполнения графика SetIndexStyle(0,DRAW_LINE); SetIndexStyle(1,DRAW_LINE); SetIndexStyle(2,DRAW_LINE); SetIndexStyle(3,DRAW_LINE); SetIndexStyle(4,DRAW_LINE); SetIndexStyle(5,DRAW_LINE); //---- IndicatorDigits((int)MarketInfo(Symbol(),MODE_DIGITS)); //---- имя для окон данных и лэйба для субъокон IndicatorShortName("T3 Taotra"); //---- установка номера бара, начиная с которого будет отрисовываться индикатор SetIndexDrawBegin(0,100); SetIndexDrawBegin(1,100); SetIndexDrawBegin(2,100); SetIndexDrawBegin(3,100); SetIndexDrawBegin(4,100); SetIndexDrawBegin(5,100); //---- 6 индикаторных буфферов использованы для счёта SetIndexBuffer(0,Ind_Buffer1); SetIndexBuffer(1,Ind_Buffer2); SetIndexBuffer(2,Ind_Buffer3); SetIndexBuffer(3,Ind_Buffer4); SetIndexBuffer(4,Ind_Buffer5); SetIndexBuffer(5,Ind_Buffer6); //---- горизонтальный сдвиг индикаторных линий SetIndexShift(0,Shift1); SetIndexShift(1,Shift2); SetIndexShift(2,Shift3); SetIndexShift(3,Shift4); SetIndexShift(4,Shift5); SetIndexShift(5,Shift6); //---- установка значений индикатора, которые не будут видимы на графике SetIndexEmptyValue(0,0); SetIndexEmptyValue(1,0); SetIndexEmptyValue(2,0); SetIndexEmptyValue(3,0); SetIndexEmptyValue(4,0); SetIndexEmptyValue(5,0); SetIndexEmptyValue(6,0); //---- иницмализация переменных n[0] = MA_Period_1; n[1] = MA_Period_2; n[2] = MA_Period_3; n[3] = MA_Period_4; n[4] = MA_Period_5; n[5] = MA_Period_6; //---- b2 = b*b; b3 = b2*b; c1 = -b3; c2 = (3*(b2 + b3)); c3 = -3*(2*b2 + b + b3); c4 =(1 + 3*b + b3 + 3*b2); //---- for(int iii=0; iii<6; iii++) { M[iii]=4*n[iii]; if(n[iii]<1) n[iii]=1; n[iii]=1+0.5*(n[iii]-1); w1[iii] = 2 / (n[iii] + 1); w2[iii] = 1 - w1[iii]; } //---- завершение инициализации return(0); } //+------------------------------------------------------------------+ //| T3 Taotra iteration function | //+------------------------------------------------------------------+ int start() { //----+ Введение целых переменных и получение уже подсчитанных баров int limit,nnn,bar,MaxBar,counted_bars=IndicatorCounted(); //---- проверка на возможные ошибки if(counted_bars<0) return(-1); //---- последний подсчитанный бар должен быть пересчитан if(counted_bars>0) counted_bars--; //---- определение номера самого старого бара, начиная с которого будет // произедён пересчёт всех баров MaxBar=Bars-1; //---- определение номера самого старого бара, начиная с которого будет // произедён пересчёт только новых баров limit=(Bars-counted_bars-1); if(counted_bars==0) limit--; //+--- до основного цикла расчёта индикатора восстанавливаем значения // переменных, какими они были после рачёта на втором баре //+--- восстановление значений переменных datetime Tnew=Time[limit+1]; if(limittime2) { //PrintFormat("Tnew=%s time2=%s",TimeToString(Tnew),TimeToString(time2)); //Print("ERROR01"); } else Print("ERROR02"); //return(-1); } } //---- for(bar=limit; bar>=0; bar--) { //+--- Запоминаем значения переменных, какими они были после второго бара //+--- Сохранение значений переменных +=============+ if(bar==1) if(((limit==1) && (time2!=Time[2])) || (limit>1)) { time2=Time[2]; Print("time2=Time[2];"); for(int yyy=0; yyy<6; yyy++) { E1[yyy] = e1[yyy]; E2[yyy] = e2[yyy]; E3[yyy] = e3[yyy]; E4[yyy] = e4[yyy]; E5[yyy] = e5[yyy]; E6[yyy] = e6[yyy]; } } //+---+============================================+ for(nnn=0; nnn<6; nnn++) { Price=Close[bar]; e1[nnn] = w1[nnn]*Price + w2[nnn]*e1[nnn]; e2[nnn] = w1[nnn]*e1[nnn] + w2[nnn]*e2[nnn]; e3[nnn] = w1[nnn]*e2[nnn] + w2[nnn]*e3[nnn]; e4[nnn] = w1[nnn]*e3[nnn] + w2[nnn]*e4[nnn]; e5[nnn] = w1[nnn]*e4[nnn] + w2[nnn]*e5[nnn]; e6[nnn] = w1[nnn]*e5[nnn] + w2[nnn]*e6[nnn]; //---- if(bar<=Bars-M[nnn]) Resalt[nnn]=c1*e6[nnn]+c2*e5[nnn]+c3*e4[nnn]+c4*e3[nnn]; //---- инициализация нуля else Resalt[nnn]=0; } Ind_Buffer1[bar] = Resalt[0]; Ind_Buffer2[bar] = Resalt[1]; Ind_Buffer3[bar] = Resalt[2]; Ind_Buffer4[bar] = Resalt[3]; Ind_Buffer5[bar] = Resalt[4]; Ind_Buffer6[bar] = Resalt[5]; } //---- return(0); } //+------------------------------------------------------------------+