//------------------------------------------------------------------ #property copyright "mladen" #property link "www.forex-tsd.com" //------------------------------------------------------------------ #property indicator_separate_window #property indicator_buffers 4 #property indicator_plots 3 #property indicator_label1 "TTM waves" #property indicator_type1 DRAW_FILLING #property indicator_color1 clrLime,clrOrange #property indicator_label2 "TTM waves" #property indicator_type2 DRAW_COLOR_LINE #property indicator_color2 clrLimeGreen,clrPaleVioletRed #property indicator_style2 STYLE_SOLID #property indicator_width2 2 // // // // // input int Period1 = 34; // Period 1 input int Period2 = 45; // Period 2 input int Period3 = 53; // Period 3 input int SmoothPeriod = 10; // Smoothing period input color ColorFrom = clrOrange; // Color down input color ColorTo = clrLime; // Color Up input int ColorSteps = 50; // Color steps for drawing // // // // // double wave[]; double wavec[]; double wfu[]; double wfd[]; //------------------------------------------------------------------ // //------------------------------------------------------------------ // // // // // int cSteps; int OnInit() { SetIndexBuffer(0,wfu,INDICATOR_DATA); SetIndexBuffer(1,wfd,INDICATOR_DATA); SetIndexBuffer(2,wave,INDICATOR_DATA); SetIndexBuffer(3,wavec,INDICATOR_COLOR_INDEX); cSteps = (ColorSteps>1) ? ColorSteps : 2; PlotIndexSetInteger(1,PLOT_COLOR_INDEXES,cSteps+1); for (int i=0;i=0; k++) wave[i] -= (2.0*work[i-k][_diff1]+work[i-k][_diff2]+work[i-k][_diff3])/4.0; wfu[i] = 0; wfd[i] = 0; if (wave[i]>0 && wave[i]>wave[i-1]) wfu[i] = wave[i]; if (wave[i]<0 && wave[i]=0; k++) { min = (wave[i-k]max) ? wave[i-k] : max; } if((max-min) == 0) col = 50; else col = 100 * (wave[i]-min)/(max-min); wavec[i] = MathFloor(col*cSteps/100.0); } return(rates_total); } //------------------------------------------------------------------ // //------------------------------------------------------------------ // // // // // double workLinr[][6]; double iLinr(double price, double period, int r, int instanceNo=0) { if (ArrayRange(workLinr,0)!= totalBars) ArrayResize(workLinr,totalBars); // // // // // period = MathMax(period,1); workLinr[r][instanceNo] = price; double lwmw = period; double lwma = lwmw*price; double sma = price; for(int k=1; k=0; k++) { double weight = period-k; lwmw += weight; lwma += weight*workLinr[r-k][instanceNo]; sma += workLinr[r-k][instanceNo]; } return(3.0*lwma/lwmw-2.0*sma/period); } //------------------------------------------------------------------ // //------------------------------------------------------------------ // // // // // color getColor(int stepNo, int totalSteps, color from, color to) { double stes = (double)totalSteps-1.0; double step = (from-to)/(stes); return((color)round(from-step*stepNo)); } color gradientColor(int step, int totalSteps, color from, color to) { color newBlue = getColor(step,totalSteps,(from & 0XFF0000)>>16,(to & 0XFF0000)>>16)<<16; color newGreen = getColor(step,totalSteps,(from & 0X00FF00)>> 8,(to & 0X00FF00)>> 8) <<8; color newRed = getColor(step,totalSteps,(from & 0X0000FF) ,(to & 0X0000FF) ) ; return(newBlue+newGreen+newRed); }