/*[[ Name := SafeZone Stop Author := Copyright ?2004, MetaQuotes Software Corp. Link := http://www.metaquotes.net/ Separate Window := No First Color := Cyan First Draw Type := Symbol First Symbol := 159 Use Second Data := No Second Color := Red Second Draw Type := Line Second Symbol := 218 ]]*/ Inputs: LookBack(10), StopFactor(3), EMALength(13); Variables: Pen(0), Counter(0), SafeStop(0), EMA0(0), EMA1(0), EMA2(0); Variables: first(True), prevbars(0), loopbegin(0), shift(0), value1(0), PreSafeStop(0); SetLoopCount(0); // Initial checkings If LookBack < 1 or EMALength < 1 Then Exit; If Bars < prevbars Or Bars - prevbars > 1 Then first = True; prevbars = Bars; If first Then Begin loopbegin = Bars - LookBack - 3; If loopbegin < 0 Then Exit; // not enough bars first = False; End; loopbegin = loopbegin + 1; For shift = loopbegin DownTo 0 Begin EMA0 = iMA(EMALength,MODE_EMA,shift); EMA1 = iMA(EMALength,MODE_EMA,shift+1); EMA2 = iMA(EMALength,MODE_EMA,shift+2); PreSafeStop = GetIndexValue(shift+1); Pen = 0; Counter = 0; If EMA0 > EMA1 Then Begin For value1=0 to LookBack Begin If Low[shift+value1] < Low[shift+value1+1] Then Begin Pen = Low[shift+value1+1] - Low[shift+value1] + Pen; Counter = Counter + 1; End; End; If Counter <> 0 Then SafeStop = Close[shift] - (StopFactor * (Pen/Counter)) Else SafeStop = Close[shift] - (StopFactor * Pen); If SafeStop < PreSafeStop and EMA1 > EMA2 Then SafeStop = PreSafeStop; End; If EMA0 < EMA1 Then Begin For value1=0 to LookBack Begin If High[shift+value1] > High[shift+value1+1] Then Begin Pen = High[shift+value1] - High[shift+value1+1] + Pen; Counter = Counter + 1; End; End; If Counter <> 0 Then SafeStop = Close[shift] + (StopFactor * (Pen/Counter)) Else SafeStop = Close[shift] + (StopFactor * Pen); If SafeStop > PreSafeStop and EMA1 < EMA2 Then SafeStop = PreSafeStop; End; PreSafeStop = SafeStop; loopbegin = loopbegin - 1; SetIndexValue(shift,SafeStop); End;