//+------------------------------------------------------------------+ //| Levels_A_Vlad.mq4 | //| Andrei Andreev | //| http://www.andand.ru | //+------------------------------------------------------------------+ // BASED ON: //+------------------------------------------------------------------+ //| ^X_Sensors.mq4 | //| Version 2.0.1 | //|------------------------------------------------------------------| //| Copyright © 2007, Mr.WT, Senior Linux Hacker | //| http://w-tiger.narod.ru/wk2/ | //+------------------------------------------------------------------+ #property copyright "Andrei Andreev" #property link "http://www.andand.ru" #property indicator_chart_window extern int _Mode=2; extern int _Shift = 1; extern color _R_Color = Blue; extern color _S_Color = Red; extern color _P_Color = Black; extern bool Pivot = false; int _N_Time, _My_Period, ObjectId; string OBJECT_PREFIX = "LEVELS"; string Font="Fixedsys"; double P, Pt, R1, R2, R3, R4, R5, S1, S2, S3, S4,S5; //------------------------------------------------------------------------------------------- int init() { _My_Period=PERIOD_D1; if (Period()=PERIOD_H4) _My_Period=PERIOD_W1; if (Period()>=PERIOD_W1) _My_Period=PERIOD_MN1; _N_Time = 0; ObjectCreate("S1 line", OBJ_TREND, 0, Time[_Shift], 0, Time[0], 0); ObjectCreate("S2 line", OBJ_TREND, 0, Time[_Shift], 0, Time[0], 0); ObjectCreate("S3 line", OBJ_TREND, 0, Time[_Shift], 0, Time[0], 0); ObjectCreate("S4 line", OBJ_TREND, 0, Time[_Shift], 0, Time[0], 0); ObjectCreate("S5 line", OBJ_TREND, 0, Time[_Shift], 0, Time[0], 0); ObjectCreate("R1 line", OBJ_TREND, 0, Time[_Shift], 0, Time[0], 0); ObjectCreate("R2 line", OBJ_TREND, 0, Time[_Shift], 0, Time[0], 0); ObjectCreate("R3 line", OBJ_TREND, 0, Time[_Shift], 0, Time[0], 0); ObjectCreate("R4 line", OBJ_TREND, 0, Time[_Shift], 0, Time[0], 0); ObjectCreate("R5 line", OBJ_TREND, 0, Time[_Shift], 0, Time[0], 0); ObjectCreate( "P line", OBJ_TREND, 0, Time[_Shift], 0, Time[0], 0); ObjectSet("S1 line", OBJPROP_RAY, 1); ObjectSet("S1 line", OBJPROP_STYLE, STYLE_DASH); ObjectSet("S1 line", OBJPROP_COLOR, _S_Color); ObjectSet("S2 line", OBJPROP_RAY, 1); ObjectSet("S2 line", OBJPROP_STYLE, STYLE_DASH); ObjectSet("S2 line", OBJPROP_COLOR, _S_Color); ObjectSet("S3 line", OBJPROP_RAY, 1); ObjectSet("S3 line", OBJPROP_STYLE, STYLE_DASH); ObjectSet("S3 line", OBJPROP_COLOR, _S_Color); ObjectSet("S4 line", OBJPROP_RAY, 1); ObjectSet("S4 line", OBJPROP_STYLE, STYLE_DASH); ObjectSet("S4 line", OBJPROP_COLOR, _S_Color); ObjectSet("S5 line", OBJPROP_RAY, 1); ObjectSet("S5 line", OBJPROP_STYLE, STYLE_DASH); ObjectSet("S5 line", OBJPROP_COLOR, _S_Color); ObjectSet("R1 line", OBJPROP_RAY, 1); ObjectSet("R1 line", OBJPROP_STYLE, STYLE_DASH); ObjectSet("R1 line", OBJPROP_COLOR, _R_Color); ObjectSet("R2 line", OBJPROP_RAY, 1); ObjectSet("R2 line", OBJPROP_STYLE, STYLE_DASH); ObjectSet("R2 line", OBJPROP_COLOR, _R_Color); ObjectSet("R3 line", OBJPROP_RAY, 1); ObjectSet("R3 line", OBJPROP_STYLE, STYLE_DASH); ObjectSet("R3 line", OBJPROP_COLOR, _R_Color); ObjectSet("R4 line", OBJPROP_RAY, 1); ObjectSet("R4 line", OBJPROP_STYLE, STYLE_DASH); ObjectSet("R4 line", OBJPROP_COLOR, _R_Color); ObjectSet("R5 line", OBJPROP_RAY, 1); ObjectSet("R5 line", OBJPROP_STYLE, STYLE_DASH); ObjectSet("R5 line", OBJPROP_COLOR, _R_Color); ObjectSet("P line", OBJPROP_RAY, 1); ObjectSet("P line", OBJPROP_STYLE, STYLE_SOLID); ObjectSet("P line", OBJPROP_COLOR, _P_Color); ObjectCreate("R1 label", OBJ_TEXT, 0, Time[0], 0); ObjectCreate("R2 label", OBJ_TEXT, 0, Time[0], 0); ObjectCreate("R3 label", OBJ_TEXT, 0, Time[0], 0); ObjectCreate("R4 label", OBJ_TEXT, 0, Time[0], 0); ObjectCreate("R5 label", OBJ_TEXT, 0, Time[0], 0); ObjectCreate("S1 label", OBJ_TEXT, 0, Time[0], 0); ObjectCreate("S2 label", OBJ_TEXT, 0, Time[0], 0); ObjectCreate("S3 label", OBJ_TEXT, 0, Time[0], 0); ObjectCreate("S4 label", OBJ_TEXT, 0, Time[0], 0); ObjectCreate("S5 label", OBJ_TEXT, 0, Time[0], 0); ObjectCreate( "P label", OBJ_TEXT, 0, Time[0], 0); ObjectId = 0; return(0); } //------------------------------------------------------------------------------------------- int deinit() { Comment(""); ObjectDelete("R1 label"); ObjectDelete("R1 line"); ObjectDelete("R2 label"); ObjectDelete("R2 line"); ObjectDelete("R3 label"); ObjectDelete("R3 line"); ObjectDelete("R4 label"); ObjectDelete("R4 line"); ObjectDelete("R5 label"); ObjectDelete("R5 line"); ObjectDelete("S1 label"); ObjectDelete("S1 line"); ObjectDelete("S2 label"); ObjectDelete("S2 line"); ObjectDelete("S3 label"); ObjectDelete("S3 line"); ObjectDelete("S4 label"); ObjectDelete("S4 line"); ObjectDelete("S5 label"); ObjectDelete("S5 line"); ObjectDelete("P label"); ObjectDelete("P line"); ObDeleteObjectsByPrefix(OBJECT_PREFIX); return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { if ( _N_Time == Time[0] ) return(0); double close, high, low, koeff1, koeff2; double _rates[][6]; ArrayCopyRates(_rates, NULL, _My_Period); int err = GetLastError(); if(err == 4066) { Sleep(1000); if(iClose(NULL, _My_Period, 0) != Close[0]) { Sleep(1000); return(0); } } close = _rates[1][4]; high = _rates[1][3]; low = _rates[1][2]; Pt=NormalizeDouble((high+low+close)/3,Digits); if (_Mode==1) { koeff1=0.146; koeff2=0.236; Comment ("\nУменьшенный ценовой диапазон\n pivot=",Pt); } if (_Mode==2) { koeff1=0.236; koeff2=0.382; Comment ("\nНормальный ценовой диапазон\n pivot=",Pt); } if (_Mode==3) { koeff1=0.382; koeff2=0.618; Comment ("\nРасширенный ценовой диапазон\n pivot=",Pt); } if (Pivot)P=NormalizeDouble((high+low+close)/3,Digits); else P=0; S1 =NormalizeDouble(close-((high-low)*koeff1)/2,Digits); R1 =NormalizeDouble(((high-low)*koeff1)/2+close ,Digits); S2 =NormalizeDouble(S1-((high-low)*koeff2),Digits); S3 =NormalizeDouble(S1-((high-low)*koeff2)*2,Digits); S4 =NormalizeDouble(S3-(R1-S1),Digits); S5 =NormalizeDouble(S4-((high-low)*koeff2),Digits); R2 =NormalizeDouble(((high-low)*koeff2)+R1,Digits); R3 = NormalizeDouble(R1+2*((high-low)*koeff2),Digits); R4 = NormalizeDouble(R3 + (R1 - S1),Digits); R5 = NormalizeDouble(R4 + ((high-low)*koeff2),Digits); string p,s1,s2,s3,s4,s5,r1,r2,r3,r4,r5; if(Point == 0.01) { s1 = DoubleToStr(S1, 2); s2 = DoubleToStr(S2, 2); s3 = DoubleToStr(S3, 2); s4 = DoubleToStr(S4, 2); s5 = DoubleToStr(S5, 2); r1 = DoubleToStr(R1, 2); r2 = DoubleToStr(R2, 2); r3 = DoubleToStr(R3, 2); r4 = DoubleToStr(R4, 2); r5 = DoubleToStr(R5, 2); p = DoubleToStr(P, 2); } else { s1 = DoubleToStr(S1, 4); s2 = DoubleToStr(S2, 4); s3 = DoubleToStr(S3, 4); s4 = DoubleToStr(S4, 4); s5 = DoubleToStr(S5, 4); r1 = DoubleToStr(R1, 4); r2 = DoubleToStr(R2, 4); r3 = DoubleToStr(R3, 4); r4 = DoubleToStr(R4, 4); r5 = DoubleToStr(R5, 4); p = DoubleToStr(P, 4); } //---- Pivot Lines ObjectSetText("R1 label", " R1 "+r1+"", 8, Font, _R_Color); ObjectSetText("R2 label", " R2 "+r2+"", 8, Font, _R_Color); ObjectSetText("R3 label", " R3 "+r3+"", 8, Font, _R_Color); ObjectSetText("R4 label", " R4 "+r4+"", 8, Font, _R_Color); ObjectSetText("R5 label", " R5 "+r5+"", 8, Font, _R_Color); ObjectSetText("S1 label", " S1 "+s1+"", 8, Font, _S_Color); ObjectSetText("S2 label", " S2 "+s2+"", 8, Font, _S_Color); ObjectSetText("S3 label", " S3 "+s3+"", 8, Font, _S_Color); ObjectSetText("S4 label", " S4 "+s4+"", 8, Font, _S_Color); ObjectSetText("S5 label", " S5 "+s5+"", 8, Font, _S_Color); ObjectSetText( "P label", " ", 8, Font, _P_Color); ObjectMove("R1 label", 0, Time[0], R1); ObjectMove("R2 label", 0, Time[0], R2); ObjectMove("R3 label", 0, Time[0], R3); ObjectMove("R4 label", 0, Time[0], R4); ObjectMove("R5 label", 0, Time[0], R5); ObjectMove("P label", 0, Time[0], P); ObjectMove("S1 label", 0, Time[0], S1); ObjectMove("S2 label", 0, Time[0], S2); ObjectMove("S3 label", 0, Time[0], S3); ObjectMove("S4 label", 0, Time[0], S4); ObjectMove("S5 label", 0, Time[0], S5); ObjectMove("S1 line", 0, Time[_Shift], S1); ObjectMove("S1 line", 1, Time[0], S1); ObjectMove("S2 line", 0, Time[_Shift], S2); ObjectMove("S2 line", 1, Time[0], S2); ObjectMove("S3 line", 0, Time[_Shift], S3); ObjectMove("S3 line", 1, Time[0], S3); ObjectMove("S4 line", 0, Time[_Shift], S4); ObjectMove("S4 line", 1, Time[0], S4); ObjectMove("S5 line", 0, Time[_Shift], S5); ObjectMove("S5 line", 1, Time[0], S5); ObjectMove("P line", 0, Time[_Shift], P); ObjectMove("P line", 1, Time[0], P); ObjectMove("R1 line", 0, Time[_Shift], R1); ObjectMove("R1 line", 1, Time[0], R1); ObjectMove("R2 line", 0, Time[_Shift], R2); ObjectMove("R2 line", 1, Time[0], R2); ObjectMove("R3 line", 0, Time[_Shift], R3); ObjectMove("R3 line", 1, Time[0], R3); ObjectMove("R4 line", 0, Time[_Shift], R4); ObjectMove("R4 line", 1, Time[0], R4); ObjectMove("R5 line", 0, Time[_Shift], R5); ObjectMove("R5 line", 1, Time[0], R5); //==== _N_Time = Time[0]; //---- End Of Program return(0); } //+------------------------------------------------------------------+ void ObDeleteObjectsByPrefix(string Prefix) { int L = StringLen(Prefix); int i = 0; while(i < ObjectsTotal()) { string ObjName = ObjectName(i); if(StringSubstr(ObjName, 0, L) != Prefix) { i++; continue; } ObjectDelete(ObjName); } } //-------------------------------------------------------------------------------------------