//+------------------------------------------------------------------+ //| Geo_Fractal3.mq4 | //| Copyright © 2011, Geokom | //| geokom2004@yandex.ru | //+------------------------------------------------------------------+ // // // Geo_Fractal3.mq4 - Индикатор для отображения закрытия выше фрактала на трех ТФ // 28022012 Geo_Fractal3.mq4 - Индикатор для отображения закрытия выше фрактала на четырех ТФ // #property copyright "Copyright © 2011, Geokom" #property link "geokom2004@yandex.ru" #property indicator_chart_window extern int MA_TF1 = PERIOD_D1; extern int MA_TF2 = PERIOD_H4; extern int MA_TF3 = PERIOD_H1; extern int MA_TF4 = PERIOD_M15; extern bool UseShift = true; bool ReDraw = true ; double FrLowD1=0; double FrUpD1=0; double FrLowH4=0; double FrUpH4=0; double FrLowH1=0; double FrUpH1=0; double FrLowM15=0; double FrUpM15=0; double C,O,H,L, SPR ; string CommentString; int k; //-------------------------------------------------------------------- //-------------------------------------------------------------------- //-------------------------------------------------------------------- //-------------------------------------------------------------------- void DrawLine (string LineName, bool magnet , datetime Time1,double Price1, datetime Time2,double Price2, bool draw, color LineColor, int LineStyle, bool TrendLine, bool Ray) // Находим свою линию. Если цена другая меняем линию. Если линии ннет - Рисуем новую. { if (ObjectFind(LineName)==0) { if(!draw) {ObjectDelete(LineName);return;} if (magnet && ObjectGet(LineName,OBJPROP_TIME1) != Time1) { ObjectSet(LineName,OBJPROP_TIME1,Time1); } if (magnet && ObjectGet(LineName,OBJPROP_PRICE1) != Price1) { ObjectSet(LineName,OBJPROP_PRICE1,Price1); } if (TrendLine) { if (magnet && ObjectGet(LineName,OBJPROP_TIME2) != Time2) { ObjectSet(LineName,OBJPROP_TIME2,Time2); } if (magnet && ObjectGet(LineName,OBJPROP_PRICE2) != Price2) { ObjectSet(LineName,OBJPROP_PRICE2,Price2); } } ObjectSet(LineName,OBJPROP_COLOR,LineColor); ObjectSet(LineName,OBJPROP_STYLE,LineStyle); ObjectSet(LineName,OBJPROP_RAY,Ray); } if (ObjectFind(LineName)!=0&&draw) { if (!TrendLine) { ObjectCreate (LineName,OBJ_HLINE,0,0,Price1,0); } if (TrendLine) { ObjectCreate (LineName,OBJ_TREND,0,Time1,Price1,Time2,Price2); ObjectSet(LineName,OBJPROP_RAY,Ray); } ObjectSet(LineName,OBJPROP_COLOR,LineColor); ObjectSet(LineName,OBJPROP_STYLE,LineStyle); } return; } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { int limit; int counted_bars=IndicatorCounted(); // проверим возможные ошибки - зачем время терять, если нет ничего if(counted_bars<0) return(-1); // пересчитаем последний if(counted_bars>0) counted_bars--; limit=Bars-counted_bars; if ( SPR ==0) { SPR = MarketInfo(Symbol(),MODE_SPREAD);} if (Digits ==2 || Digits ==4) {k = 10;} if (Digits ==3 || Digits ==5) {k = 1;} double LowShift = 0; double HighShift = 0; if (UseShift){ LowShift = 10 *Point / k; HighShift = SPR*Point + 10*Point / k; } //============================================================================================= // Поиск фрактала на D1 ======================================================================= FrLowD1=0; FrUpD1=0; for (int f=1;f<50;f++) //Ищем фрактал ( f=1 -начиная с 1 закрытого бара) { if ((FrLowD1==0)&&(iFractals(NULL, MA_TF1, MODE_LOWER,f)!=0)) {FrLowD1=iFractals(NULL, MA_TF1, MODE_LOWER,f);int fld1=f; DrawLine("FrLowD1" ,ReDraw , iTime(NULL, MA_TF1,fld1), FrLowD1-LowShift,2*TimeCurrent() - iTime(NULL, 0,10), FrLowD1-LowShift, true, Red, 4, true, false );} //запомнили номер бара с фракталом if ((FrUpD1==0)&&(iFractals(NULL, MA_TF1, MODE_UPPER,f)!=0)) {FrUpD1=iFractals(NULL, MA_TF1, MODE_UPPER,f);int fud1=f; DrawLine("FrUpD1" ,ReDraw , iTime(NULL, MA_TF1,fud1), FrUpD1+HighShift,2*TimeCurrent() - iTime(NULL, 0,10), FrUpD1+HighShift, true, Blue, 4, true, false );} //запомнили номер бара с фракталом } for (int i=1;i FrUpD1) { // ObjectCreate("D1B", OBJ_TEXT, 0,2*TimeCurrent() - iTime(NULL, MA_TF1,fud1) ,FrUpD1,0,0 ); ObjectCreate("D1B", OBJ_TEXT,0, 2*TimeCurrent() - iTime(NULL, 0,10) ,FrUpD1,0,0 ); ObjectSetText("D1B", "D1", 10,"arial", Blue); DrawLine("FrUpD1" ,ReDraw , iTime(NULL, MA_TF1,fud1), FrUpD1+HighShift,2*TimeCurrent() - iTime(NULL, 0,10), FrUpD1+HighShift, true, Blue, 0, true, false ); break; } } } // Поиск фрактала D1 ============================================================================ //============================================================================================= //============================================================================================= // Поиск фрактала на H4 ======================================================================= FrLowH4=0; FrUpH4=0; for ( f=1;f<50;f++) //Ищем фрактал ( f=1 -начиная с 1 закрытого бара) { if ((FrLowH4==0)&&(iFractals(NULL, MA_TF2, MODE_LOWER,f)!=0)) {FrLowH4=iFractals(NULL, MA_TF2, MODE_LOWER,f);int flh4=f; DrawLine("FrLowH4" ,ReDraw , iTime(NULL, MA_TF2,flh4), FrLowH4-LowShift,2*TimeCurrent() - iTime(NULL, 0,10), FrLowH4-LowShift, true, Red, 4, true, false );} //запомнили номер бара с фракталом if ((FrUpH4==0)&&(iFractals(NULL, MA_TF2, MODE_UPPER,f)!=0)) {FrUpH4=iFractals(NULL, MA_TF2, MODE_UPPER,f);int fuh4=f; DrawLine("FrUpH4" ,ReDraw , iTime(NULL, MA_TF2,fuh4), FrUpH4+HighShift,2*TimeCurrent() - iTime(NULL, 0,10), FrUpH4+HighShift, true, Blue, 4, true, false );} //запомнили номер бара с фракталом } for ( i=1;i FrUpH4 ) { // ObjectCreate("H4B", OBJ_TEXT, 0,2*TimeCurrent() - iTime(NULL, MA_TF2,fuh4) ,FrUpH4,0,0 ); ObjectCreate("H4B", OBJ_TEXT,0, 2*TimeCurrent() - iTime(NULL, 0,10) ,FrUpH4,0,0 ); ObjectSetText("H4B", "H4", 9,"arial", Blue); DrawLine("FrUpH4" ,ReDraw , iTime(NULL, MA_TF2,fuh4), FrUpH4+HighShift,2*TimeCurrent() - iTime(NULL, 0,10), FrUpH4+HighShift, true, Blue, 0, true, false ); break; } } } // Поиск фрактала H4 ============================================================================ //============================================================================================= //============================================================================================= // Поиск фрактала на H1 ======================================================================= FrLowH1=0; FrUpH1=0; for ( f=1;f<50;f++) //Ищем фрактал ( f=1 -начиная с 1 закрытого бара) { if ((FrLowH1==0)&&(iFractals(NULL, MA_TF3, MODE_LOWER,f)!=0)) {FrLowH1=iFractals(NULL, MA_TF3, MODE_LOWER,f);int flh1=f; DrawLine("FrLowH1" ,ReDraw , iTime(NULL, MA_TF3,flh1), FrLowH1-LowShift,2*TimeCurrent() - iTime(NULL, 0,10), FrLowH1-LowShift, true, Red, 4, true, false );} //запомнили номер бара с фракталом if ((FrUpH1==0)&&(iFractals(NULL, MA_TF3, MODE_UPPER,f)!=0)) {FrUpH1=iFractals(NULL, MA_TF3, MODE_UPPER,f);int fuh1=f; DrawLine("FrUpH1" ,ReDraw , iTime(NULL, MA_TF3,fuh1), FrUpH1+HighShift,2*TimeCurrent() - iTime(NULL, 0,10), FrUpH1+HighShift, true, Blue, 4, true, false );} //запомнили номер бара с фракталом } for ( i=1;i FrUpH1) { // ObjectCreate("H1B", OBJ_TEXT, 0,2*TimeCurrent() - iTime(NULL, MA_TF3,fuh1) ,FrUpH1,0,0 ); ObjectCreate("H1B", OBJ_TEXT, 0, 2*TimeCurrent() - iTime(NULL, 0,10) ,FrUpH1,0,0 ); ObjectSetText("H1B", "H1", 8,"arial", Blue); DrawLine("FrUpH1" ,ReDraw , iTime(NULL, MA_TF3,fuh1), FrUpH1+HighShift,2*TimeCurrent() - iTime(NULL, 0,10), FrUpH1+HighShift, true, Blue, 0, true, false ); break; } } } // Поиск фрактала H1 ============================================================================ //============================================================================================= //============================================================================================= // Поиск фрактала на M15 ======================================================================= FrLowM15=0; FrUpM15=0; for ( f=1;f<50;f++) //Ищем фрактал ( f=1 -начиная с 1 закрытого бара) { if ((FrLowM15==0)&&(iFractals(NULL, MA_TF4, MODE_LOWER,f)!=0)) {FrLowM15=iFractals(NULL, MA_TF4, MODE_LOWER,f);int flm15=f; DrawLine("FrLowM15" ,ReDraw , iTime(NULL, MA_TF4,flm15), FrLowM15-LowShift,2*TimeCurrent() - iTime(NULL, 0,10), FrLowM15-LowShift, true, Red, 4, true, false );} //запомнили номер бара с фракталом if ((FrUpM15==0)&&(iFractals(NULL, MA_TF4, MODE_UPPER,f)!=0)) {FrUpM15=iFractals(NULL, MA_TF4, MODE_UPPER,f);int fum15=f; DrawLine("FrUpM15" ,ReDraw , iTime(NULL, MA_TF4,fum15), FrUpM15+HighShift,2*TimeCurrent() - iTime(NULL, 0,10), FrUpM15+HighShift, true, Blue, 4, true, false );} //запомнили номер бара с фракталом } for ( i=1;i FrUpM15) { // ObjectCreate("M15B", OBJ_TEXT, 0,2*TimeCurrent() - iTime(NULL, MA_TF4,fum15) ,FrUpM15,0,0 ); ObjectCreate("M15B", OBJ_TEXT,0, 2*TimeCurrent() - iTime(NULL, 0,10) ,FrUpM15,0,0 ); ObjectSetText("M15B", "M15", 8,"arial", Blue); DrawLine("FrUpM15" ,ReDraw , iTime(NULL, MA_TF4,fum15), FrUpM15+HighShift,2*TimeCurrent() - iTime(NULL, 0,10), FrUpM15+HighShift, true, Blue, 0, true, false ); break; } } } // Поиск фрактала M15 ============================================================================ //============================================================================================= return(0); } //+------------------------------------------------------------------+