//+------------------------------------------------------------------+ //| TMA.mq4 | //| Matias Romeo | //| mailto:matias.romeo@gmail.com | //+------------------------------------------------------------------+ #property copyright "Matias Romeo" #property link "mailto:matias.romeo@gmail.com" #property indicator_chart_window #property indicator_buffers 1 #property indicator_color1 Green //Input parameters extern int Periods=30; extern int ApplyTo=0; //Apply To like "Applied price enumeration" //0 Close price. //1 Open price. //2 High price. //3 Low price. //4 Median price, (high+low)/2. //5 Typical price, (high+low+close)/3. //6 Weighted close price, (high+low+close+close)/4 //Indicator buffers double tma[]; //Global variables int weights[]; double divisor; int init() { SetIndexStyle(0,DRAW_LINE); SetIndexBuffer(0,tma); IndicatorShortName( "TMA(" + Periods + ")" ); //Calculate weigths ArrayResize(weights,Periods); double dPeriods = Periods; int to=MathCeil(dPeriods/2.0); for(int i=0; i<to; i++) { weights[i] = i+1; weights[Periods-1-i] = i+1; } divisor = 0.0; for(int j=0; j<Periods; j++) divisor += weights[j]; return(0); } int deinit() { return(0); } int start() { int counted_bars = IndicatorCounted(); if( counted_bars < 0 ) return(-1); //Recalculate last bar if( counted_bars > 0 ) counted_bars++; int limit = Bars - counted_bars; for(int i=limit-1; i>=0; i--) { double tma_val = 0.0; for(int j=0; j<Periods; j++) { double price = getPrice(ApplyTo, i+Periods-j); tma_val += price*weights[j]; } tma[i] = tma_val/divisor; } return(0); } double getPrice(int priceType, int index) { double price = 0.0; switch(priceType) { case PRICE_OPEN : price = Open[index]; break; case PRICE_HIGH : price = High[index]; break; case PRICE_LOW : price = Low[index]; break; case PRICE_MEDIAN : price = (High[index]+Low[index])/2.0; break; case PRICE_TYPICAL : price = (High[index]+Low[index]+Close[index])/3.0; break; case PRICE_WEIGHTED: price = (High[index]+Low[index]+2*Close[index])/4.0; break; case PRICE_CLOSE : default : price = Close[index]; break; } return(price); } //+------------------------------------------------------------------+
Sample
Analysis
Market Information Used:
Series array that contains open prices of each bar
Series array that contains the highest prices of each bar
Series array that contains the lowest prices of each bar
Series array that contains close prices for each bar
Indicator Curves created:
Implements a curve of type DRAW_LINE
Indicators Used:
Custom Indicators Used:
Order Management characteristics:
Other Features: