//---------------------------------------------+ // AutoFib TradeZones | // © 2010 Eagleye777, www.fxtools.info | // *Mod of AutoFibo by Julien Loutre | // www.forexcomm.com | //---------------------------------------------+ #property link "http://www.fxtools.info" #property indicator_chart_window #property indicator_buffers 2 #property indicator_color1 MidnightBlue #property indicator_color2 FireBrick extern int Fib_Period = 240; extern bool Show_StartLine = false; extern bool Show_EndLine = false; extern bool Show_Channel = false; extern int Fib_Style = 5; extern color Fib_Color = Gold; extern color StartLine_Color = RoyalBlue; extern color EndLine_Color = FireBrick; extern color BuyZone_Color = MidnightBlue; extern color SellZone_Color = FireBrick; //---- buffers double WWBuffer1[]; double WWBuffer2[]; double level_array[10]={0,0.236,0.382,0.5,0.618,0.764,1,1.618,2.618,4.236}; string leveldesc_array[13]={"0","23.6%","38.2%","50%","61.8%","76.4%","100%","161.8%","261.80%","423.6%"}; int level_count; string level_name; string StartLine = "Start Line"; string EndLine = "End Line"; int init() { IndicatorBuffers(2); if (Show_Channel) { SetIndexStyle(0,DRAW_LINE,1); SetIndexStyle(1,DRAW_LINE,1); SetIndexLabel(0, "High"); SetIndexLabel(1, "Low"); SetIndexBuffer(0, WWBuffer1); SetIndexBuffer(1, WWBuffer2); } IndicatorDigits(Digits+2); IndicatorShortName("AutoFib TradeZones"); ObjectCreate("FibLevels", OBJ_FIBO, 0, Time[0],High[0],Time[0],Low[0]); ObjectCreate("BuyZone", OBJ_RECTANGLE, 0,0,0,0); ObjectCreate("SellZone", OBJ_RECTANGLE, 0,0,0,0); if (Show_StartLine) {if (ObjectFind(StartLine)==-1) { ObjectCreate(StartLine,OBJ_VLINE,0,Time[Fib_Period],Close[0]); ObjectSet(StartLine,OBJPROP_COLOR,StartLine_Color); } } if (Show_EndLine) {if (ObjectFind(EndLine)==-1) { ObjectCreate(EndLine,OBJ_VLINE,0,Time[0],Close[0]); ObjectSet(EndLine,OBJPROP_COLOR,EndLine_Color); } } return(0); } int deinit() { ObjectDelete("FibLevels"); ObjectDelete("BuyZone"); ObjectDelete("SellZone"); } int start() { //Start Line ------------------------------------------- int BarShift; if (Show_StartLine) { datetime HLineTime=ObjectGet(StartLine,OBJPROP_TIME1); if (HLineTime>=Time[0]) {BarShift=0;} BarShift=iBarShift(NULL,0,HLineTime); } else if (!Show_StartLine){BarShift=0;} if (ObjectFind(StartLine)==-1) {BarShift=0;} //End Line ------------------------------------------- int BarShift2; if (Show_EndLine) { datetime HLine2Time=ObjectGet(EndLine,OBJPROP_TIME1); if (HLine2Time>=Time[0]) {BarShift2=0;} BarShift2=iBarShift(NULL,0,HLine2Time); } else if (!Show_EndLine){BarShift2=0;} if (ObjectFind(EndLine)==-1) {BarShift2=0;} //---------------------------------------------------------- double SellZoneHigh,BuyZoneLow; if (Show_StartLine) { SellZoneHigh = iHigh(NULL,0,iHighest(NULL,0,MODE_HIGH,BarShift-BarShift2,BarShift2+1)); BuyZoneLow = iLow(NULL,0,iLowest(NULL,0,MODE_LOW,BarShift-BarShift2,BarShift2+1)); } if (!Show_StartLine) { SellZoneHigh = iHigh(NULL,0,iHighest(NULL,0,MODE_HIGH,Fib_Period,1)); BuyZoneLow = iLow(NULL,0,iLowest(NULL,0,MODE_LOW,Fib_Period,1)); } double PriceRange = SellZoneHigh - BuyZoneLow; double BuyZoneHigh = BuyZoneLow + (0.236*PriceRange); double SellZoneLow = SellZoneHigh - (0.236*PriceRange); datetime StartZoneTime =Time[Fib_Period]; datetime EndZoneTime =Time[0]+Time[0]; level_count=ArraySize(level_array); int counted_bars=IndicatorCounted(); int limit,i; if(counted_bars>0) counted_bars--; limit=Bars-counted_bars; for(i=limit-1; i>=0; i--) { WWBuffer1[i] = getPeriodHigh(Fib_Period,i); WWBuffer2[i] = getPeriodLow(Fib_Period,i); if (Show_StartLine) {ObjectSet("FibLevels", OBJPROP_TIME1, Time[BarShift]); ObjectSet("FibLevels", OBJPROP_TIME2, Time[BarShift2]);} if (!Show_StartLine) {ObjectSet("FibLevels", OBJPROP_TIME1, StartZoneTime);} ObjectSet("FibLevels", OBJPROP_TIME2, Time[0]); if (Open[Fib_Period] < Open[0]) // Up { if (Show_StartLine) { ObjectSet("FibLevels", OBJPROP_PRICE1, SellZoneHigh); ObjectSet("FibLevels", OBJPROP_PRICE2, BuyZoneLow); } if (!Show_StartLine) { ObjectSet("FibLevels", OBJPROP_PRICE1, getPeriodHigh(Fib_Period,i)); ObjectSet("FibLevels", OBJPROP_PRICE2, getPeriodLow(Fib_Period,i)); } } else { if (Show_StartLine) { ObjectSet("FibLevels", OBJPROP_PRICE1, BuyZoneLow); ObjectSet("FibLevels", OBJPROP_PRICE2, SellZoneHigh); } if (!Show_StartLine) { ObjectSet("FibLevels", OBJPROP_PRICE1, getPeriodLow(Fib_Period,i)); ObjectSet("FibLevels", OBJPROP_PRICE2, getPeriodHigh(Fib_Period,i)); } } ObjectSet("FibLevels", OBJPROP_LEVELCOLOR, Fib_Color); ObjectSet("FibLevels", OBJPROP_STYLE, Fib_Style); ObjectSet("FibLevels", OBJPROP_FIBOLEVELS, level_count); for(int j=0; j buffer) { buffer = High[i]; } else { if (Open[i] > Close[i]) // Down { if (Open[i] > buffer) { buffer = Open[i]; } } } } return (buffer); } double getPeriodLow(int period, int pos) { int i; double buffer = 100000; for (i=pos;i<=pos+period;i++) { if (Low[i] < buffer) { buffer = Low[i]; } else { if (Open[i] > Close[i]) // Down { if (Close[i] < buffer) { buffer = Close[i]; } } else { if (Open[i] < buffer) { buffer = Open[i]; } } } } return (buffer); }