//+------------------------------------------------------------------+ //| 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 8 #property indicator_color1 Green #property indicator_color2 IndianRed #property indicator_color3 Blue #property indicator_color4 Blue #property indicator_color5 Blue #property indicator_color6 Red #property indicator_color7 Red #property indicator_color8 Green SetLevelValue(1,-200); SetLevelValue(2,-100); SetLevelValue(3,100); SetLevelValue(4,200); extern int bolPrd=20; extern double bolDev=2.0; extern int keltPrd=20; extern double keltFactor=1.5; extern int cciPeriod=50; int momPrd=12; double upB[]; double loB[]; double upK[]; double loK[]; double upB2[]; double loB2[]; double mm[]; double cciline1[]; double cciline2[]; 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; int init() { IndicatorBuffers(8); SetIndexStyle(0,DRAW_HISTOGRAM,STYLE_SOLID,1); SetIndexBuffer(0,upB); SetIndexEmptyValue(0,EMPTY_VALUE); SetIndexStyle(1,DRAW_HISTOGRAM,STYLE_SOLID,1); SetIndexBuffer(1,loB); SetIndexEmptyValue(1,EMPTY_VALUE); SetIndexStyle(2,DRAW_HISTOGRAM,STYLE_SOLID,2); SetIndexBuffer(2,upB2); SetIndexEmptyValue(2,EMPTY_VALUE); SetIndexStyle(3,DRAW_HISTOGRAM,STYLE_SOLID,2); SetIndexBuffer(3,loB2); SetIndexEmptyValue(3,EMPTY_VALUE); SetIndexStyle(4,DRAW_ARROW); SetIndexBuffer(4,upK); SetIndexEmptyValue(4,EMPTY_VALUE); SetIndexArrow(4,167); SetIndexStyle(5,DRAW_ARROW); SetIndexBuffer(5,loK); SetIndexEmptyValue(5,EMPTY_VALUE); SetIndexArrow(5,167); SetIndexBuffer(6,mm); SetIndexStyle(7,DRAW_LINE); SetIndexBuffer(7,cciline1); SetIndexStyle(8,DRAW_LINE); SetIndexBuffer(8,cciline2); 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; for (shift=limit;shift>=0;shift--) { d=iCCI(NULL,0,cciPeriod,PRICE_CLOSE,shift); mm[shift]=d; if(d>0) { upB[shift]=d; /*if (mm[shift]>mm[shift+1]) { upB[shift]=d; upB2[shift]=0; loB[shift]=0; loB2[shift]=0; } else { upB[shift]=0; upB2[shift]=d; loB[shift]=0; loB2[shift]=0; }*/ cciline1[shift]=d; } else { loB[shift]=d; /*if (mm[shift]<mm[shift+1]) { loB[shift]=d; loB2[shift]=0; upB[shift]=0; upB2[shift]=0; } else { loB[shift]=0; loB2[shift]=d; upB[shift]=0; upB2[shift]=0; }*/ cciline2[shift]=d; } 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 (d > 0) { upB2[shift]=d; upB[shift]=0; loB[shift]=0; loB2[shift]=0; } else { loB2[shift]=d; loB[shift]=0; upB[shift]=0; upB2[shift]=0; } } else { //loK[shift]=0; //upK[shift]=EMPTY_VALUE; if (d > 0) { upB[shift]=d; upB2[shift]=0; loB[shift]=0; loB2[shift]=0; } else { loB[shift]=d; loB2[shift]=0; upB[shift]=0; upB2[shift]=0; } } } return(0); }
Sample
Analysis
Market Information Used:
Indicator Curves created:
Implements a curve of type DRAW_HISTOGRAM
Implements a curve of type DRAW_ARROW
Implements a curve of type DRAW_LINE
Indicators Used:
Commodity channel index
Indicator of the average true range
Standard Deviation indicator
Custom Indicators Used:
Order Management characteristics:
Other Features: