//+------------------------------------------------------------------+ //| ExCandles.mq4 | //| Copyright © 2006, Alex Sidd (Executer) | //| http://www.metaquotes.net/ | //+------------------------------------------------------------------+ #property copyright "Copyright © 2006, Alex Sidd (Executer)" #property link "mailto:work_st@mail.ru" //---- #property indicator_chart_window #property indicator_buffers 1 #property indicator_color1 Black //---- input parameters int ExPeriod = 10; //---- buffers double CCodeBuffer[]; //+------------------------------------------------------------------+ //| initialization function | //+------------------------------------------------------------------+ int init() { string short_name; IndicatorBuffers(1); SetIndexStyle(0, DRAW_NONE); SetIndexBuffer(0, CCodeBuffer); SetIndexDrawBegin(0, ExPeriod); short_name = "ExCandles"; IndicatorShortName(short_name); SetIndexLabel(0, short_name); //---- return(0); } //+------------------------------------------------------------------+ //| deinitialization function | //+------------------------------------------------------------------+ int deinit() { ObjectsDeleteAll(0, OBJ_ARROW); //---- return(0); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ bool IsViselnik(int i1, int i2) { if((Open[i1] - Close[i1] > 0) && ((High[i1] - Open[i1])*100 / (Open[i1] - Close[i1] + 0.0000001) < 15) && ((Close[i1] - Low[i1])*100 / (Open[i1] - Close[i1] + 0.0000001) > 200) && (Open[i2] - Close[i2] < 0)) return(true); else return(false); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ bool IsHummer(int i1, int i2) { if((Open[i1] - Close[i1] < 0) && ((High[i1] - Close[i1])*100 / (Close[i1] - Open[i1] + 0.0000001) > 200) && ((Open[i1] - Low[i1])*100 / (Close[i1] - Open[i1] + 0.0000001) < 15) && (Open[i2] - Close[i2] > 0)) return(true); else return(false); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ bool IsBear(int i1, int i2, int i3) { if((Open[i2] - Close[i2] > 0) && (Open[i2] >= Close[i3]) && (Close[i2] <= Open[i3]) && (Open[i3] - Close[i3] < 0) && ((Open[i2] - Close[i2]) / (Close[i3] - Open[i3] + 0.0000001) > 1.5)) return(true); else return(false); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ bool IsBull(int i1, int i2, int i3) { if((Open[i2] - Close[i2] < 0) && (Open[i3] - Close[i3] > 0) && (Close[i2] >= Open[i3]) && (Open[i2] <= Close[i3]) && ((Close[i2] - Open[i2]) / (Open[i3] - Close[i3] + 0.0000001) > 1.5)) return(true); else return(false); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ bool Zavesa_black(int i1, int i2) { if((Open[i1] - Close[i1] > 0) && (Open[i2] - Close[i2] < 0) && ((Close[i2] - Open[i2]) / (High[i2] - Low[i2]) > 0.6) && (Open[i1] > High[i2]) && (Close[i1] < (Open[i2] + (Close[i2] - Open[i2])/2))) return(true); else return(false); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ bool Prosvet(int i1, int i2, int i3) { if((Open[i1] - Close[i1] < 0) && (Open[i2] - Close[i2] > 0) && ((Open[i2] - Close[i2]) / (High[i2] - Low[i2]) > 0.6) && (Open[i1] < Low[i2]) && (Close[i1] > (Close[i2] + (Open[i2] - Close[i2]) / 2))) return(true); else return(false); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ bool morning_star(int i1, int i2, int i3) { if((Open[i3] - Close[i3] > 0) && (Close[i2] - Open[i2] > 0) && (Close[i1] - Open[i1] > 0) && (Close[i2] < Close[i3]) && (Open[i1] > Close[i2]) && (((MathAbs(Open[i3] - Close[i1]) + MathAbs(Open[i1] - Close[i3])) / (Open[i3] - Close[i3] + 0.0000001)) < 0.1) && ((Open[i3] - Close[i3]) / (High[i3] - Low[i3]) > 0.8) && ((Close[i2] - Open[i2]) / (High[i2] - Low[i2]) < 0.3) && (Close[i1] - Open[i1]) / (High[i1] - Low[i1]) > 0.8) return(true); else return(false); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ bool evening_star(int i1, int i2, int i3) { if((Open[i3] - Close[i3] < 0) && (Close[i2] - Open[i2] < 0) && (Close[i1] - Open[i1] < 0) && (Close[i2] > Close[i3]) && (Open[i1] < Close[i2]) && (((MathAbs(Open[i3] - Close[i1]) + MathAbs(Open[i1] - Close[i3])) / (Close[i3] - Open[i3] + 0.0000001)) < 0.1) && ((Close[i3] - Open[i3]) / (High[i3] - Low[i3]) > 0.8) && ((Open[i2] - Close[i2]) / (High[i2] - Low[i2]) < 0.3) && ((Open[i1] - Close[i1]) / (High[i1] - Low[i1]) > 0.8)) return(true); else return(false); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ bool IsEveningDodgiStar(int i1, int i2, int i3) { if((Open[i3] - Close[i3] < 0) && (Close[i2] - Open[i2] == 0) && (Close[i1] - Open[i1] < 0) && (Close[i2] >= Close[i3]) && (Open[i1] <= Close[i2]) && (((MathAbs(Open[i3] - Close[i1]) + MathAbs(Open[i1] - Close[i3])) / (Open[i3] - Close[i3] + 0.0000001)) < 0.1)) return(true); else return(false); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ bool IsMorningDodgiStar(int i1, int i2, int i3) { if((Open[i3] - Close[i3] > 0) && (Close[i2] - Open[i2] == 0) && (Close[i1] - Open[i1] > 0) && (Close[i2] <= Close[i3]) && (Open[i1] >= Close[i2]) && (((MathAbs(Open[i3] - Close[i1]) + MathAbs(Open[i1] - Close[i3])) / (Open[i3] - Close[i3] + 0.0000001)) < 0.1)) return(true); else return(false); } //+------------------------------------------------------------------+ //| Executer Candles Indicator | //+------------------------------------------------------------------+ int start() { int i, counted_bars = IndicatorCounted(); double negative = 0, positive = 0; //---- if(Bars <= ExPeriod) return(0); if(counted_bars < 1) for(i = 1; i <= ExPeriod; i++) CCodeBuffer[Bars-i] = 0.0; //---- i = Bars - ExPeriod - 1; if(counted_bars >= ExPeriod) i = Bars - counted_bars - 1; while(i >= 0) { if(IsViselnik(i, i + 1) == true) { ObjectCreate("Висельник" + i, OBJ_ARROW, 0, Time[i], High[i] + 20*Point); ObjectSet("Висельник" + i, OBJPROP_ARROWCODE, SYMBOL_ARROWDOWN); ObjectSet("Висельник" + i, OBJPROP_COLOR, Red); CCodeBuffer[i] = 1; } if(IsHummer(i, i + 1) == true) { ObjectCreate("Молот" + i, OBJ_ARROW, 0, Time[i], Low[i] - 20*Point); ObjectSet("Молот" + i, OBJPROP_ARROWCODE, SYMBOL_ARROWUP); ObjectSet("Молот" + i, OBJPROP_COLOR, Blue); CCodeBuffer[i] = 2; } if(IsBear(i - 1, i, i + 1) == true) { ObjectCreate("Медвежье поглощение" + i, OBJ_ARROW, 0, Time[i], High[i] + 20*Point); ObjectSet("Медвежье поглощение" + i, OBJPROP_ARROWCODE, SYMBOL_ARROWDOWN); ObjectSet("Медвежье поглощение" + i, OBJPROP_COLOR, Red); CCodeBuffer[i] = 3; } if(IsBull(i - 1, i, i + 1) == true) { ObjectCreate("Бычье поглощение" + i, OBJ_ARROW, 0, Time[i], Low[i] - 20*Point); ObjectSet("Бычье поглощение" + i, OBJPROP_ARROWCODE, SYMBOL_ARROWUP); ObjectSet("Бычье поглощение" + i, OBJPROP_COLOR, Blue); CCodeBuffer[i] = 4; } if(Zavesa_black(i, i + 1) == true) { ObjectCreate("Завеса из темных облаков" + i, OBJ_ARROW, 0, Time[i], High[i] + 20*Point); ObjectSet("Завеса из темных облаков" + i, OBJPROP_ARROWCODE, SYMBOL_ARROWDOWN); ObjectSet("Завеса из темных облаков" + i, OBJPROP_COLOR, Red); CCodeBuffer[i] = 5; } if(Prosvet(i - 1, i, i + 1) == true) { ObjectCreate("Просвет в облаках" + i, OBJ_ARROW, 0, Time[i], Low[i] - 20*Point); ObjectSet("Просвет в облаках" + i, OBJPROP_ARROWCODE, SYMBOL_ARROWUP); ObjectSet("Просвет в облаках" + i, OBJPROP_COLOR, Blue); CCodeBuffer[i] = 6; } if(evening_star(i - 1, i, i + 1) == true) { ObjectCreate("Вечерняя звезда" + i, OBJ_ARROW, 0, Time[i], High[i] + 20*Point); ObjectSet("Вечерняя звезда" + i, OBJPROP_ARROWCODE, SYMBOL_ARROWDOWN); ObjectSet("Вечерняя звезда" + i, OBJPROP_COLOR, Red); CCodeBuffer[i] = 7; } if(morning_star(i - 1, i, i + 1) == true) { ObjectCreate("Утренняя звезда" + i, OBJ_ARROW, 0, Time[i], Low[i] - 20*Point); ObjectSet("Утренняя звезда" + i, OBJPROP_ARROWCODE, SYMBOL_ARROWUP); ObjectSet("Утренняя звезда" + i, OBJPROP_COLOR, Blue); CCodeBuffer[i] = 8; } if(IsEveningDodgiStar(i - 1, i, i + 1) == true) { ObjectCreate("Вечерняя доджи звезда" + i, OBJ_ARROW, 0, Time[i], High[i] + 20*Point); ObjectSet("Вечерняя доджи звезда" + i, OBJPROP_ARROWCODE, SYMBOL_ARROWDOWN); ObjectSet("Вечерняя доджи звезда" + i, OBJPROP_COLOR, Red); CCodeBuffer[i] = 9; } if(IsMorningDodgiStar(i - 1, i, i + 1) == true) { ObjectCreate("Утренняя доджи звезда" + i, OBJ_ARROW, 0, Time[i], Low[i] - 20*Point); ObjectSet("Утренняя доджи звезда" + i, OBJPROP_ARROWCODE, SYMBOL_ARROWUP); ObjectSet("Утренняя доджи звезда" + i, OBJPROP_COLOR, Blue); CCodeBuffer[i] = 10; } i--; } //---- return(0); } //+------------------------------------------------------------------+