//+------------------------------------------------------------------+ //| TEMA&DEMA_PriceTAG.mq4 | //| Kurai_Sora. | //| http://goldsearch.blog24.fc2.com | //+------------------------------------------------------------------+ #property copyright "Kurai_Sora" #property link "http://goldsearch.blog24.fc2.com/" #property indicator_chart_window #property indicator_buffers 5 #property indicator_color1 Lime #property indicator_width1 2 #property indicator_color2 Silver #property indicator_width2 1 #property indicator_style2 STYLE_DOT #property indicator_color3 Silver #property indicator_width3 1 #property indicator_style3 STYLE_DOT #property indicator_color4 DeepSkyBlue #property indicator_width4 4 #property indicator_color5 DeepPink #property indicator_width5 4 //---- input parameters extern int EMA_period=14; extern int HL_Priod=3; extern int Dist=5; //HL-Band distance extern string Type="PRICE_OPEN"; extern bool Colorize = false;// up/down colorize extern bool DEMA_Mode = false;// DEMA_Mode extern bool PriceTAG = false;// PriceTAG //---- buffers double TemaBuffer[]; double Upband[]; double Dnband[]; double Upline[]; double Dnline[]; double Ema[]; double Ema2[]; double Ema3[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- indicators IndicatorBuffers(8); SetIndexStyle(0,DRAW_LINE); SetIndexBuffer(0,TemaBuffer); SetIndexStyle(1,DRAW_LINE); SetIndexBuffer(1,Upband); SetIndexStyle(2,DRAW_LINE); SetIndexBuffer(2,Dnband); SetIndexStyle(3,DRAW_LINE); SetIndexBuffer(3,Upline); SetIndexLabel(3,NULL); SetIndexStyle(4,DRAW_LINE); SetIndexBuffer(4,Dnline); SetIndexLabel(4,NULL); SetIndexBuffer(5,Ema); SetIndexBuffer(6,Ema2); SetIndexBuffer(7,Ema3); IndicatorShortName("TEMA("+EMA_period+")"); //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { int i,limit,limit2,limit3,counted_bars=IndicatorCounted(); //---- if (counted_bars==0) { limit=Bars-1; limit2=limit-EMA_period; limit3=limit2-EMA_period; } if (counted_bars>0) { limit=Bars-counted_bars-1; limit2=limit; limit3=limit2; } for (i=limit;i>=0;i--) Ema[i]=iMA(NULL,0,EMA_period,0,MODE_EMA,Type,i); for (i=limit2;i>=0;i--) Ema2[i]=iMAOnArray(Ema,0,EMA_period,0,MODE_EMA,i); for (i=limit3;i>=0;i--) Ema3[i]=iMAOnArray(Ema2,0,EMA_period,0,MODE_EMA,i); if (DEMA_Mode) { for (i=limit3;i>=0;i--) TemaBuffer[i]=2*Ema[i]-Ema2[i];//DEMA }else{ for (i=limit3;i>=0;i--) TemaBuffer[i]=3*Ema[i]-3*Ema2[i]+Ema3[i];//TEMA if (PriceTAG) { datetime PB_sift = Time[0] + 3 * Period() * 60; SetPrice("MAwithPriceTAG", PB_sift,TemaBuffer[0],White,3); } } //---- for (i=limit3;i>=0;i--) Upband[i] = High[iHighest(NULL,0,MODE_HIGH,HL_Priod,i)]+Dist*Point; for (i=limit3;i>=0;i--) Dnband[i] = Low[iLowest(NULL,0,MODE_LOW,HL_Priod,i)]-Dist*Point; //colorize if (Colorize) { for (i=limit3-1;i>=0;i--) { if(TemaBuffer[i]>=TemaBuffer[i+1]){ Upline[i]=TemaBuffer[i]; Dnline[i]=EMPTY_VALUE; //Upband[i]=EMPTY_VALUE; }else{ Upline[i]=EMPTY_VALUE; //Dnband[i]=EMPTY_VALUE; Dnline[i]=TemaBuffer[i]; } if(Upline[i] != EMPTY_VALUE && Upline[i+1] == EMPTY_VALUE) Upline[i+1]=TemaBuffer[i+1]; if(Dnline[i] != EMPTY_VALUE && Dnline[i+1] == EMPTY_VALUE) Dnline[i+1]=TemaBuffer[i+1]; } } } return(0); //PriceTAG------------------------------------------------------------------+ void SetPrice(string name, datetime Tm, double Prc, color clr,int size) { if(ObjectFind(name) == -1) { ObjectCreate(name, OBJ_ARROW, 0, Tm, Prc); ObjectSet(name, OBJPROP_COLOR, clr); ObjectSet(name, OBJPROP_WIDTH, size); ObjectSet(name, OBJPROP_ARROWCODE, SYMBOL_RIGHTPRICE); ObjectSet(name, OBJPROP_BACK, true); } else { ObjectSet(name, OBJPROP_TIME1, Tm); ObjectSet(name, OBJPROP_PRICE1, Prc); ObjectSet(name, OBJPROP_COLOR, clr); ObjectSet(name, OBJPROP_WIDTH, size); ObjectSet(name, OBJPROP_ARROWCODE, SYMBOL_RIGHTPRICE); ObjectSet(name, OBJPROP_BACK, true); } }