//+------------------------------------------------------------------+ //| ChuvaChu.mq4 | //| Copyright © 2010, MetaQuotes Software Corp. | //| http://www.metaquotes.net | //+------------------------------------------------------------------+ #property copyright "Copyright © 2010, MetaQuotes Software Corp." #property link "http://www.metaquotes.net" #property indicator_chart_window extern color UpColor = Green; extern color DnColor = Red; double fr_up[6]; double fr_dn[6]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- DeleteUpLines(); DeleteDnLines(); //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- DeleteUpLines(); DeleteDnLines(); //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { static int prewbar; if(prewbar==iTime(Symbol(),0,0)) return; prewbar= iTime(Symbol(),0,0); //---- int j=0; ArrayInitialize(fr_up, 0); for(int i=3; i<=1000; i++) { fr_up[j]=iFractals(Symbol(), 0, MODE_UPPER, i); if(fr_up[j]>0) { fr_up[j+1]=i; j=j+2; } if(j>4) { if(CreateUpLines()<0) { j=0; i=fr_up[3]-1; ArrayInitialize(fr_up, 0); } else break; } } j=0; ArrayInitialize(fr_dn, 0); for(i=3; i<=1000; i++) { fr_dn[j]=iFractals(Symbol(), 0, MODE_LOWER, i); if(fr_dn[j]>0) { fr_dn[j+1]=i; j=j+2; } if(j>4) { if(CreateDnLines()<0) { j=0; i=fr_dn[3]-1; ArrayInitialize(fr_dn, 0); } else break; } } //---- return(0); } //+------------------------------------------------------------------+ //-------------------------------------------------------------------------------- int CreateUpLines() { if(fr_up[4]>fr_up[2]) { if(ObjectFind("UPCHUV2")>=0) if(ObjectGet("UPCHUV2", OBJPROP_PRICE1)!=fr_up[4] || ObjectGet("UPCHUV2", OBJPROP_PRICE2)!=fr_up[2]) DeleteUpLines(); else return(1); ObjectCreate("UPCHUV2", OBJ_TREND, 0, iTime(Symbol(), 0, fr_up[5]), fr_up[4], iTime(Symbol(), 0, fr_up[3]), fr_up[2]); ObjectSet("UPCHUV2", OBJPROP_COLOR, UpColor); if(ObjectGetValueByShift("UPCHUV2", fr_up[1])=0) ObjectDelete("UPCHUV2"); return(-1); } //------------------------------------------------------------------- int CreateDnLines() { if(fr_dn[4]=0) if(ObjectGet("DNCHUV2", OBJPROP_PRICE1)!=fr_dn[4] || ObjectGet("DNCHUV2", OBJPROP_PRICE2)!=fr_dn[2]) DeleteDnLines(); else return(1); ObjectCreate("DNCHUV2", OBJ_TREND, 0, iTime(Symbol(), 0, fr_dn[5]), fr_dn[4], iTime(Symbol(), 0, fr_dn[3]), fr_dn[2]); ObjectSet("DNCHUV2", OBJPROP_COLOR, DnColor); if(ObjectGetValueByShift("DNCHUV2", fr_dn[1])>fr_dn[0] && fr_dn[0]>fr_dn[2]) { ObjectCreate("DNCHUV1", OBJ_TREND, 0, iTime(Symbol(), 0, fr_dn[3]), fr_dn[2], iTime(Symbol(), 0, fr_dn[1]), fr_dn[0]); ObjectSet("DNCHUV1", OBJPROP_COLOR, DnColor); return(1); } } if(ObjectFind("DNCHUV2")>=0) ObjectDelete("DNCHUV2"); return(-1); } //--------------------------------------------------------------------------------- void DeleteUpLines() { if(ObjectFind("UPCHUV1")>=0) ObjectDelete("UPCHUV1"); if(ObjectFind("UPCHUV2")>=0) ObjectDelete("UPCHUV2"); } //--------------------------------------------------------------------------------- void DeleteDnLines() { if(ObjectFind("DNCHUV1")>=0) ObjectDelete("DNCHUV1"); if(ObjectFind("DNCHUV2")>=0) ObjectDelete("DNCHUV2"); }