//------------------------------------------------------------------ #property copyright "mladen" #property link "www.forex-tsd.com" //------------------------------------------------------------------ #property indicator_separate_window #property indicator_buffers 4 #property indicator_plots 3 #property indicator_label1 "Volume veighted MACD OSMA" #property indicator_type1 DRAW_FILLING #property indicator_color1 C'216,237,243',MistyRose #property indicator_label2 "Volume veighted MACD" #property indicator_type2 DRAW_LINE #property indicator_color2 clrLimeGreen #property indicator_style2 STYLE_SOLID #property indicator_width2 2 #property indicator_label3 "Volume veighted MACD Signal" #property indicator_type3 DRAW_LINE #property indicator_color3 clrGold #property indicator_style3 STYLE_SOLID #property indicator_width3 2 // // // // // enum enPrices { pr_close, // Close pr_open, // Open pr_high, // High pr_low, // Low pr_median, // Median pr_typical, // Typical pr_weighted, // Weighted pr_average, // Average (high+low+oprn+close)/4 pr_haclose, // Heiken ashi close pr_haopen , // Heiken ashi open pr_hahigh, // Heiken ashi high pr_halow, // Heiken ashi low pr_hamedian, // Heiken ashi median pr_hatypical, // Heiken ashi typical pr_haweighted, // Heiken ashi weighted pr_haaverage // Heiken ashi average }; // // // // // input int FastPeriod = 12; // Fast period input int SlowPeriod = 26; // Slow period input int SignalPeriod = 9; // Signal period input enPrices Price = pr_close; // Price to use input bool RealV = false; // Use real volume // // // // // double osmau[]; double osmad[]; double macd[]; double signal[]; //------------------------------------------------------------------ // //------------------------------------------------------------------ // // // // // int OnInit() { SetIndexBuffer(0,osmau,INDICATOR_DATA); SetIndexBuffer(1,osmad,INDICATOR_DATA); SetIndexBuffer(2,macd,INDICATOR_DATA); SetIndexBuffer(3,signal,INDICATOR_DATA); // // // // // IndicatorSetString(INDICATOR_SHORTNAME," VEMA MACD ("+string(FastPeriod)+","+string(SlowPeriod)+","+string(SignalPeriod)+")"); return(0); } //------------------------------------------------------------------ // //------------------------------------------------------------------ // // // // // double vemas[][6]; #define _numf 0 #define _denf 1 #define _emaf 2 #define _nums 3 #define _dens 4 #define _emas 5 int OnCalculate(const int rates_total, const int prev_calculated, const datetime& time[], const double& open[], const double& high[], const double& low[], const double& close[], const long& tick_volume[], const long& volume[], const int& spread[]) { if (ArrayRange(vemas,0)!=rates_total) ArrayResize(vemas,rates_total); // // // // // double alphaf = 2.0/(1.0+FastPeriod); double alphas = 2.0/(1.0+SlowPeriod); double alphag = 2.0/(1.0+SignalPeriod); for (int i=(int)MathMax(prev_calculated-1,0); i=pr_haclose && price<=pr_haaverage) { if (ArrayRange(workHa,0)!= bars) ArrayResize(workHa,bars); // // // // // double haOpen; if (i>0) haOpen = (workHa[i-1][2] + workHa[i-1][3])/2.0; else haOpen = open[i]+close[i]; double haClose = (open[i] + high[i] + low[i] + close[i]) / 4.0; double haHigh = MathMax(high[i], MathMax(haOpen,haClose)); double haLow = MathMin(low[i] , MathMin(haOpen,haClose)); if(haOpen