//+------------------------------------------------------------------+ //| ShowGAP.mq4 | //+------------------------------------------------------------------+ #property copyright "Copyright © 2014, AST" #property link "Russia" //---- indicator settings #property indicator_chart_window #property description "Отображает на графике разрывы цены" #property strict extern int SizeGAP = 2; // Размер ГЭПа extern color ColorUp = clrBlue; extern color ColorDown = clrRed; extern int LineWidth = 3; #define PREFIX "GAP_" // Префикс графических объектов,.. #define SIGN_TREND_LINE "TR_LINE_" // Признак объекта "трендовая линия" //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { return(0); } //+-----------------------------------------------------------------------------+ //| Custom indicator deinitialization function //+-----------------------------------------------------------------------------+ int deinit() { DeleteAllObjects(); return(0); } //+------------------------------------------------------------------+ //| Start | //+------------------------------------------------------------------+ int start() { int limit; int counted_bars=IndicatorCounted(); //---- last counted bar will be recounted if(counted_bars>0) counted_bars--; limit=Bars-counted_bars; if(counted_bars==0) limit-=1+1; for(int i=1; i Open[i+1]) //up bar { if (Close[i] > Open[i] && NormalizeDouble((Open[i]-Close[i+1])/Point,0) >= SizeGAP) ShowTrendLine(i,Time[i+1],Close[i+1],Time[i-1],ColorUp,LineWidth); if (Close[i] < Open[i] && NormalizeDouble((Close[i]-Close[i+1])/Point,0) >= SizeGAP) ShowTrendLine(i,Time[i+1],Close[i+1],Time[i-1],ColorUp,LineWidth); if (Close[i] < Open[i] && NormalizeDouble((Open[i+1]-Open[i])/Point,0) >= SizeGAP) ShowTrendLine(i,Time[i+1],Open[i+1],Time[i-1],ColorUp,LineWidth); if (Close[i] > Open[i] && NormalizeDouble((Open[i+1]-Close[i])/Point,0) >= SizeGAP) ShowTrendLine(i,Time[i+1],Open[i+1],Time[i-1],ColorUp,LineWidth); } if (Close[i+1] < Open[i+1]) //down bar { if (Close[i] < Open[i] && NormalizeDouble((Close[i+1]-Open[i])/Point,0) >= SizeGAP) ShowTrendLine(i,Time[i+1],Close[i+1],Time[i-1],ColorDown,LineWidth); if (Close[i] > Open[i] && NormalizeDouble((Close[i+1]-Close[i])/Point,0) >= SizeGAP) ShowTrendLine(i,Time[i+1],Close[i+1],Time[i-1],ColorDown,LineWidth); if (Close[i] > Open[i] && NormalizeDouble((Open[i]-Open[i+1])/Point,0) >= SizeGAP) ShowTrendLine(i,Time[i+1],Open[i+1],Time[i-1],ColorDown,LineWidth); if (Close[i] < Open[i] && NormalizeDouble((Close[i]-Open[i+1])/Point,0) >= SizeGAP) ShowTrendLine(i,Time[i+1],Open[i+1],Time[i-1],ColorDown,LineWidth); } } return(0); } //+-----------------------------------------------------------------------------+ //| Отображение трендовой линии //+-----------------------------------------------------------------------------+ void ShowTrendLine(int index, datetime leftTime, double leftPrice, datetime rightTime, color clr, int w) { string name = PREFIX + SIGN_TREND_LINE + DoubleToStr(index,0) + "_" + (string)leftTime; if (ObjectFind(name) < 0) { ObjectCreate(name, OBJ_TREND, 0, leftTime, leftPrice, rightTime, leftPrice); ObjectSet(name, OBJPROP_STYLE, STYLE_SOLID); ObjectSet(name, OBJPROP_COLOR, clr); ObjectSet(name, OBJPROP_WIDTH,w); ObjectSet(name, OBJPROP_BACK, true); ObjectSet(name, OBJPROP_RAY, false); return; } ObjectMove(name, 0, leftTime, leftPrice); ObjectMove(name, 1, rightTime, leftPrice); } //+-----------------------------------------------------------------------------+ //| Удаление всех объектов, созданных программой //+-----------------------------------------------------------------------------+ void DeleteAllObjects() { for (int i = ObjectsTotal() - 1; i >= 0; i--) if (StringSubstr(ObjectName(i), 0, StringLen(PREFIX)) == PREFIX) ObjectDelete(ObjectName(i)); }