Перейти к содержанию
Форекс Форум трейдеров Академии «MasterForex-V»

Рекомендуемые сообщения

  • 4 года спустя...

Здравствуйте уважаемие трейдери. Имею очень хороший канальный индикатор, который очень хорошо показывает тренд на истории котировок, а на реале - перерисовывается. Кто может переделать, чтобы он не перерисовывался? Буду очень благодарен.

 

//+------------------------------------------------------------------+

//| Multi.Period.mq4 |

//| Copyright © 2010, Vladimir Hlystov |

//| cmillion@narod.ru |

//+------------------------------------------------------------------+

#property copyright "Copyright © 2010, Vladimir Hlystov"

#property link "http://cmillion.narod.ru"

//+------------------------------------------------------------------+

#property indicator_chart_window

#property indicator_buffers 8

#property indicator_color1 Lime

#property indicator_width1 1

#property indicator_color2 Lime

#property indicator_width2 1

#property indicator_color3 Blue

#property indicator_width3 1

#property indicator_color4 Blue

#property indicator_width4 1

#property indicator_color5 Green

#property indicator_width5 1

#property indicator_color6 Green

#property indicator_width6 1

#property indicator_color7 Red

#property indicator_width7 1

#property indicator_color8 Red

#property indicator_width8 1

//---- input parameters

/*

PERIOD_M1 1 1 minute

PERIOD_M5 5 5 minute

PERIOD_M15 15 15 minute

PERIOD_M30 30 30 minute

PERIOD_H1 60 1 hour

PERIOD_H4 240 4 hour

PERIOD_D1 1440 1 day

PERIOD_W1 10080

PERIOD_MN1 43200

*/

extern int timeframe1 = 5; //Период. Может быть одним из периодов графика. 0 означает период текущего графика

extern int timeframe2 = 15; //Период. Может быть одним из периодов графика. 0 означает период текущего графика

extern int timeframe3 = 30; //Период. Может быть одним из периодов графика. 0 означает период текущего графика

extern int timeframe4 = 60; //Период. Может быть одним из периодов графика. 0 означает период текущего графика

 

//---- buffers

double Buffer1[];

double Buffer2[];

double Buffer3[];

double Buffer4[];

double Buffer5[];

double Buffer6[];

double Buffer7[];

double Buffer8[];

//+------------------------------------------------------------------+

int init()

{

if (timeframe1<Period()) timeframe1=Period();

if (timeframe2<=timeframe1) timeframe2=next_period(timeframe1+1);

if (timeframe3<=timeframe2) timeframe3=next_period(timeframe2+1);

if (timeframe4<=timeframe3) timeframe4=next_period(timeframe3+1);

//---- indicator lines

SetIndexStyle(0,DRAW_LINE);

SetIndexBuffer(0, Buffer1);

SetIndexStyle(1,DRAW_LINE);

SetIndexBuffer(1, Buffer2);

SetIndexStyle(2,DRAW_LINE);

SetIndexBuffer(2, Buffer3);

SetIndexStyle(3,DRAW_LINE);

SetIndexBuffer(3, Buffer4);

SetIndexStyle(4,DRAW_LINE);

SetIndexBuffer(4, Buffer5);

SetIndexStyle(5,DRAW_LINE);

SetIndexBuffer(5, Buffer6);

SetIndexStyle(6,DRAW_LINE);

SetIndexBuffer(6, Buffer7);

SetIndexStyle(7,DRAW_LINE);

SetIndexBuffer(7, Buffer8);

//----

SetIndexLabel(0, "4TF "+StrPer(timeframe1)+StrPer(timeframe2)+StrPer(timeframe3)+StrPer(timeframe4));

return(0);

}

//+------------------------------------------------------------------+

int start()

{

int counted_bars=IndicatorCounted();

if(counted_bars>0) counted_bars--;

int limit=Bars-counted_bars;

for(int i=0; i<limit; i++)

{

Buffer1 = iMA(NULL,timeframe1,1,0,0,2,iBarShift(NULL,timeframe1,Time,false));

Buffer2 = iMA(NULL,timeframe1,1,0,0,3,iBarShift(NULL,timeframe1,Time,false));

Buffer3 = iMA(NULL,timeframe2,1,0,0,2,iBarShift(NULL,timeframe2,Time,false));

Buffer4 = iMA(NULL,timeframe2,1,0,0,3,iBarShift(NULL,timeframe2,Time,false));

Buffer5 = iMA(NULL,timeframe3,1,0,0,2,iBarShift(NULL,timeframe3,Time,false));

Buffer6 = iMA(NULL,timeframe3,1,0,0,3,iBarShift(NULL,timeframe3,Time,false));

Buffer7 = iMA(NULL,timeframe4,1,0,0,2,iBarShift(NULL,timeframe4,Time,false));

Buffer8 = iMA(NULL,timeframe4,1,0,0,3,iBarShift(NULL,timeframe4,Time,false));

}

return(0);

}

//+------------------------------------------------------------------+

int next_period(int per)

{

if (per > 43200) return(0);

if (per > 10080) return(43200);

if (per > 1440) return(10080);

if (per > 240) return(1440);

if (per > 60) return(240);

if (per > 30) return(60);

if (per > 15) return(30);

if (per > 5) return(15);

if (per > 1) return(5);

if (per == 1) return(1);

if (per == 0) return(Period());

}

//+------------------------------------------------------------------+

string StrPer(int per)

{

if (per == 1) return(" M1 ");

if (per == 5) return(" M5 ");

if (per == 15) return(" M15 ");

if (per == 30) return(" M30 ");

if (per == 60) return(" H1 ");

if (per == 240) return(" H4 ");

if (per == 1440) return(" D1 ");

if (per == 10080) return(" W1 ");

if (per == 43200) return(" MN1 ");

return("ошибка периода");

}

//+------------------------------------------------------------------+

Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...