Traders Laboratory - View Single Post - Does anyone have the squeeze indicator
View Single Post
  #2 (permalink)  
Old 01-21-2008, 10:10 AM
thrunner thrunner is online now
thrunner has no status.

 
Join Date: Feb 2007
Posts: 179
Thanks: 60
Thanked 47 Times in 25 Posts
Re: Does anyone have the squeeze indicator

This is interesting. NT may have pulled their version of the Squeeze indicator after TTM started developing in NT.. http://www.ninjatrader-support.com/v...hlight=squeeze

For those who find this indicator of use, the original opensource code was created by Nick and eKam over at the TS forum before TTM copied it. There is a TS version here in TL: http://www.traderslaboratory.com/for...ation-662.html

eSignal version:
function preMain() { setStudyTitle("FPSqueeze"); setCursorLabelName("FPSqueeze", 0); setDefaultBarFgColor(Color.blue, 0); setPlotType(PLOTTYPE_HISTOGRAM,0); setDefaultBarThickness(4,0); //addBand(0,PS_SOLID,1,Color.black,"zero"); var BBlow=null; var BBhigh=null; var KClow=null; var KChigh=null; var Mom=null; var vHigh=null; var vLow=null; var vClose=null; var fp1 = new FunctionParameter("nMA", FunctionParameter.NUMBER); fp1.setName("Squeeze Moving Average"); fp1.setLowerLimit(1); fp1.setDefault(20); var fp2 = new FunctionParameter("nSD", FunctionParameter.NUMBER); fp2.setName("Standard Deviation"); fp2.setLowerLimit (1); fp2.setDefault(2.0); var fp3 = new FunctionParameter("nColorSqueeze", FunctionParameter.COLOR); fp3.setName("Squeeze Color"); fp3.setDefault(Color.red); var fp4 = new FunctionParameter("nColorAction", FunctionParameter.COLOR); fp4.setName("Action Color"); fp4.setDefault(Color.lime); } function ATR(nInputLength) { var dSum = 0; var dH = high(0, -nInputLength); var dL = low(0, -nInputLength); var dC = close(-1, -nInputLength); if (dH == null || dL == null || dC == null) { return; } for (i = 0; i < nInputLength; ++i) { var vTrueHigh = Math.max(dH[i], dC[i]); var vTrueLow = Math.min(dL[i], dC[i]); var vTrueRange = (vTrueHigh - vTrueLow); dSum += vTrueRange; } dSum /= nInputLength; return dSum; } function main(nMA, nSD, nColorSqueeze, nColorAction) { //Bollinger Band Variables using 1.4 Standard Deviation var myStudy1 = upperBB (nMA,nSD); var myStudy2 = lowerBB (nMA,nSD); var momStudy1 = ema(10,mom(12)); var macdstudy = new macdHist(12,26,9); BBlow = myStudy2.getValue(0); BBhigh = myStudy1.getValue(0); Mom = momStudy1.getValue(0); macdvalue = macdstudy.getValue(0); var BarCntr; var nRangeFactor = 1.5; if (getBarState() == BARSTATE_NEWBAR) BarCntr += 1; if (BarCntr < nMA) { return; } else { var dKeltnerBasis= call("/Library/KeltnerEMA.efs", nMA); var dATR = ATR(nMA); KClow = (dKeltnerBasis - (nRangeFactor * dATR)); KChigh = (dKeltnerBasis + (nRangeFactor * dATR)); } //Logic to create red or blue squeeze signal if ((BBhigh <= KChigh) || (BBlow >= KClow)) { drawShapeRelative(0,0,Shape.CIRCLE,null,nColorSqueeze,Shape.TOP); } if ((BBhigh > KChigh) || (BBlow < KClow)) { drawShapeRelative(0,0,Shape.CIRCLE,null,nColorAction,Shape.TOP); } if (Mom > 0) { setBarFgColor(Color.blue); } else { setBarFgColor(Color.red); } drawTextPixel( 1, 93, "FPSqueeze v0.1: www.forexproject.com", Color.black, null, Text.RELATIVETOLEFT | Text.RELATIVETOBOTTOM | Text.BOLD, "Arial",10 ); return ((Mom+macdvalue)/2); }
Metatrader version:
//+------------------------------------------------------------------+ //| bbsqueeze.mq4 | //| Copyright © 2005, Nick Bilak, beluck[AT]gmail.com | //+------------------------------------------------------------------+ #property copyright "Copyright © 2005, Nick Bilak" #property link "http://metatrader.50webs.com/" #property indicator_separate_window #property indicator_buffers 6 #property indicator_color1 LimeGreen #property indicator_color2 IndianRed #property indicator_color3 LightGreen #property indicator_color4 LightPink #property indicator_color5 Blue #property indicator_color6 Red //---- input parameters extern int totalBars=300; extern int bolPrd=12; extern double bolDev=2.0; extern int keltPrd=6; extern double keltFactor=1; extern int momPrd=8; extern bool alertBox=false; extern bool audioAlert=false; //---- buffers double upB[]; double loB[]; double upK[]; double loK[]; double upB2[]; double loB2[]; int i,j,slippage=3; double breakpoint=0.0; double ema=0.0; int peakf=0; int peaks=0; int valleyf=0; int valleys=0, limit=0; double ccis[61],ccif[61]; double delta=0; double ugol=0; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- indicators SetIndexStyle(0,DRAW_HISTOGRAM,0,2); SetIndexBuffer(0,upB); SetIndexEmptyValue(0,0); SetIndexStyle(1,DRAW_HISTOGRAM,0,2); SetIndexBuffer(1,loB); SetIndexEmptyValue(1,0); SetIndexStyle(4,DRAW_ARROW); SetIndexBuffer(4,upK); SetIndexEmptyValue(42,0); SetIndexArrow(4,167); SetIndexStyle(5,DRAW_ARROW); SetIndexBuffer(5,loK); SetIndexEmptyValue(5,EMPTY_VALUE); SetIndexArrow(5,167); SetIndexStyle(2,DRAW_HISTOGRAM,0,2); SetIndexBuffer(2,upB2); SetIndexEmptyValue(2,0); SetIndexStyle(3,DRAW_HISTOGRAM,0,2); SetIndexBuffer(3,loB2); SetIndexEmptyValue(3,0); //---- return(0); } int start() { int counted_bars=IndicatorCounted(); int shift,limit; double diff,d[],std,bbs; /* if (counted_bars<0) return(-1); if (counted_bars>0) counted_bars--; limit=Bars-31; if(counted_bars>=31) limit=Bars-counted_bars-1;*/ if (counted_bars<0) return(-1); limit=totalBars; //Bars-31; ArrayResize(d,limit); for (shift=limit;shift>=0;shift--) { /*upB[shift]=0; upB2[shift]=0; loB[shift]=0; loB2[shift]=0;*/ //d[shift]=(iMomentum(NULL,0,momPrd,PRICE_CLOSE,shift) - iMomentum(NULL,0,momPrd,PRICE_CLOSE,shift+1)); d[shift]=LinearRegressionValue(momPrd,shift); //d[shift]=0;//FindDirection(shift); if (shift == 1) Print (d[shift]); if(d[shift]>0) { if (d[shift] >= d[shift+1]) { upB[shift]=d[shift]; upB2[shift]=0; } else { upB2[shift]=d[shift]; upB[shift]=0; } loB[shift]=0; loB2[shift]=0; } else if (d[shift] < 0) { if (d[shift] <= d[shift+1]) { loB[shift]=d[shift]; loB2[shift]=0; } else { loB2[shift]=d[shift]; loB[shift]=0; } upB[shift]=0; upB2[shift]=0; } else { upB[shift]=0.01; upB2[shift]=0.01; loB[shift]=-0.01; loB2[shift]=-0.01; } diff = iATR(NULL,0,keltPrd,shift)*keltFactor; std = iStdDev(NULL,0,bolPrd,MODE_SMA,0,PRICE_CLOSE,shift); bbs = bolDev * std / diff; if(bbs<1) { upK[shift]=0; loK[shift]=EMPTY_VALUE; if (alertBox == true && shift == 0) Alert("Warning for ", Symbol(), " on ", Period(), " chart!"); if (audioAlert == true && shift == 0) PlaySound("alert.wav"); } else { loK[shift]=0; upK[shift]=EMPTY_VALUE; } } return(0); } //+------------------------------------------------------------------+ double FindDirection (int i) { int j; double val; double bulls, bears; for (j=i+8; j>i; j--) { bulls += High[j]-Close[j]; bears += Close[j]-Low[j]; if (bulls > bears) { val = 0.5; } else if (bears > bulls) { val = -0.5; } //sum += (Close[j] - Open[j]); //val = sum/j; } return (val); } double LinearRegressionValue(int Len,int shift) { double SumBars = 0; double SumSqrBars = 0; double SumY = 0; double Sum1 = 0; double Sum2 = 0; double Slope = 0; SumBars = Len * (Len-1) * 0.5; SumSqrBars = (Len - 1) * Len * (2 * Len - 1)/6; for (int x=0; x<=Len-1;x++) { double HH = Low[x+shift]; double LL = High[x+shift]; for (int y=x; y<=(x+Len)-1; y++) { HH = MathMax(HH, High[y+shift]); LL = MathMin(LL, Low[y+shift]); } Sum1 += x* (Close[x+shift]-((HH+LL)/2 + iMA(NULL,0,Len,0,MODE_EMA,PRICE_CLOSE,x+shift))/2); SumY += (Close[x+shift]-((HH+LL)/2 + iMA(NULL,0,Len,0,MODE_EMA,PRICE_CLOSE,x+shift))/2); } Sum2 = SumBars * SumY; double Num1 = Len * Sum1 - Sum2; double Num2 = SumBars * SumBars-Len * SumSqrBars; if (Num2 != 0.0) { Slope = Num1/Num2; } else { Slope = 0; } double Intercept = (SumY - Slope*SumBars) /Len; //debugPrintln(Intercept+" : "+Slope); double LinearRegValue = Intercept+Slope * (Len - 1); return (LinearRegValue); }

Reply With Quote