| Coding Forum Collaborate, receive help, or discuss coding related issues. |
![]() | | Tweet | |
| | #1 | ||
![]() | Zig zag pivot indicator ATRPeriod(9), //Number of ATR Periods ATRMulti(2.0), // ATR Multiplier StrengthSensitivity(2), //Pivot Strength ShowZigZagLines(True), ShowZigZagCount(True), ShowZigZagTime(True), ZigZagLineColorUp(BLUE), ZigZagLineColorDN(CYAN), ZigZagLineWidth(1), ZigZagLineStyle(Tool_Soli d), ZigZagTextColor(CYAN), VertOffset1(1), VertOffset2(2), // Second String on Swing Hi/Lows DecimalPlaces(2); vars: NewSwingPrice(0), LastSwingPrice(0), SwingPrice(High), SwingDate(Date), SwingTime(Time), TLDir(0), { TLDir = -1 implies prev TL dn, +1 implies prev TL up } SaveSwing(false), AddTL(false), UpdateTL(false), TLRef(0), TLSwing(0), PeakTextRef(0),PeakTextRe f2(0), PeakStr(""), PeakStr2(""), Diff(0), ArrayMax (17), ATRPoints(0), BarDiff(0), TimeDiff(0), ZigZagCount(0), ZZCountStr(""), x(0), showDebug(FALSE); Arrays: TrendLine[17] (0), DayValue[17] (0), ZigZag[1000,3](0); if CurrentBar = 1 then begin for x=0 to ArrayMax { Draw Fib Lines } begin if x <= ArrayMax then begin TrendLine[x] = TL_New (Date[1], Time[1], Low, Date, Time, Low); TL_SetExtLeft (TrendLine[x], false); TL_SetExtRight (TrendLine[x], True); end; // if end; // for end; //if currentbar { Candidate swings are just-confirmed, 3-bar (Str=1), SwingHi's and SwingLo's } NewSwingPrice = SwingHigh( 1, High, StrengthSensitivity, StrengthSensitivity+1); ATRPoints = ATRMulti*AvgTrueRange(ATR Period) ; if NewSwingPrice <> -1 then begin if (TLDir <= 0 and NewSwingPrice >= SwingPrice + ATRPoints) then { prepare to add new up TL } begin SaveSwing = true; AddTL = true; TLDir = 1; end else if TLDir = 1 and NewSwingPrice >= SwingPrice then { prepare to update prev up TL } begin SaveSwing = true; UpdateTL = true; end; end else begin { NewSwingPrice = SwingLow( 1, Low, 1, 2 ); } NewSwingPrice = SwingLow( 1, Low, StrengthSensitivity, StrengthSensitivity+1); if NewSwingPrice <> -1 then begin { prepare to add new dn TL } if TLDir >= 0 and NewSwingPrice <= SwingPrice - ATRPoints then begin SaveSwing = true; AddTL = true; TLDir = -1; end else if TLDir = -1 and NewSwingPrice <= SwingPrice then { prepare to update prev dn TL } begin SaveSwing = true; UpdateTL = true ; end; end; end; if SaveSwing then { save new swing and reset SaveSwing } begin SwingPrice = NewSwingPrice ; SwingDate = Date[StrengthSensitivity]; SwingTime = Time[StrengthSensitivity]; // SaveSwing = false ; end ; if (showDebug) then print(" AddTL === ", AddTL, " UpdateTL == ", UpdateTL, "SaveSwing == ", SaveSwing, " TL Dir = ", TLDir); { add new TL and reset AddTL } if AddTL then begin PeakTextRef = Text_New(Date, Time, Close, " "); Text_SetColor(PeakTextRef , ZigZagTextColor); if (ShowZigZagTime) then begin PeakTextRef2 = Text_New(Date, Time, Close, " "); Text_SetColor(PeakTextRef 2, ZigZagTextColor); end; if ShowZigZagLines then begin TLRef = TL_New(SwingDate, SwingTime, SwingPrice, SwingDate[1], SwingTime[1],SwingPrice[1]); Text_SetStyle(PeakTextRef , 2, 2); Text_SetStyle(PeakTextRef 2, 2, 3); TL_SetExtLeft( TLRef, false); TL_SetExtRight( TLRef, false); TL_SetSize( TLRef, ZigZagLineWidth); if TLDir = -1 then TL_SetColor( TLRef, ZigZagLineColorDN) else TL_SetColor( TLRef, ZigZagLineColorUp); LastSwingPrice = SwingPrice[1]; end; if (TLDir[1] <> TLDir[2]) then BarDiff = 0 else BarDiff = BarDiff +1; ZigZagCount = ZigZagCount + 1; ZigZag[ZigZagCount,1] = SwingPrice; // Current Swing Price ZigZag[ZigZagCount,2] = BarNumber; // BarNum ZigZag[ZigZagCount,3] = TimetoMinutes(Time); // Time Var BarDiff = ZigZag[ZigZagCount,2] - ZigZag[ZigZagCount-1,2]; if (showZigZagCount) then ZZCountStr = "[" + NumToStr(ZigZagCount,0) +"] " else ZZCountStr = ""; if TLDir = -1 then Diff = LastSwingPrice - SwingPrice else Diff = SwingPrice - LastSwingPrice; TimeDiff = Zigzag[ZigZagcount,3] - Zigzag[ZigZagcount-1,3]; {jmh} { PeakStr = ZZCountStr + " " + NumToStr(SwingPrice,Decim alPlaces) + " / " + NumToStr(Diff, DecimalPlaces); PeakStr2 = ELTimetoString(MinutestoT ime(ZigZag[ZigZagCount,3])) + " / " + NumtoStr(BarDiff,0)+ " / " + NumtoStr(TimeDiff,0);} PeakStr = NumToStr(SwingPrice,Decim alPlaces) + " / " + NumToStr(Diff, DecimalPlaces) ; PeakStr2 = " "; Text_SetString(PeakTextRe f, PeakStr); if TLDir = -1 then Text_SetLocation(PeakText Ref, SwingDate, SwingTime, SwingPrice - VertOffset1) else Text_SetLocation(PeakText Ref, SwingDate, SwingTime, SwingPrice + VertOffset2); if (ShowZigZagTime) then begin Text_SetString(PeakTextRe f2, PeakStr2); if TLDir = -1 then Text_SetLocation(PeakText Ref2, SwingDate, SwingTime, SwingPrice - VertOffset2) else Text_SetLocation(PeakText Ref2, SwingDate, SwingTime, SwingPrice + VertOffset1); end; AddTL = false; end else if UpdateTL then { update prev TL and reset UpdateTL } begin if ShowZigZagLines then TL_SetEnd( TLRef, SwingDate, SwingTime, SwingPrice); if (TLDir[1] <> TLDir[2]) then BarDiff = 0 else BarDiff = BarDiff +1; ZigZag[ZigZagCount,1] = SwingPrice; // Current Swing Price ZigZag[ZigZagCount,2] = BarNumber[1]; // BarNum ZigZag[ZigZagCount,3] = TimetoMinutes(Time); // Time Var BarDiff = ZigZag[ZigZagCount,2] - ZigZag[ZigZagCount-1,2]; if (showZigZagCount) then ZZCountStr = "[" + NumToStr(ZigZagCount,0) +"] " else ZZCountStr = ""; if TLDir = -1 then Diff = LastSwingPrice - SwingPrice else Diff = SwingPrice - LastSwingPrice; TimeDiff = Zigzag[ZigZagcount,3] - Zigzag[ZigZagcount-1,3]; { PeakStr = ZZCountStr + "" + NumToStr(SwingPrice,Decim alPlaces) + " / " + NumToStr(Diff, DecimalPlaces);} PeakStr = NumToStr(SwingPrice,Decim alPlaces) + " / " + NumToStr(Diff, DecimalPlaces); PeakStr2 = " "; { PeakStr2 = ELTimetoString(MinutestoT ime(ZigZag[ZigZagCount,3])) + " / " + NumtoStr(BarDiff,0)+ " / " + NumtoStr(TimeDiff,0);} Text_SetString( PeakTextRef, PeakStr); if TLDir = -1 then Text_SetLocation(PeakText Ref, SwingDate, SwingTime, SwingPrice - VertOffset1) else Text_SetLocation(PeakText Ref, SwingDate, SwingTime, SwingPrice + VertOffset2); if (ShowZigZagTime) then begin Text_SetString(PeakTextRe f2, PeakStr2); if TLDir = -1 then Text_SetLocation(PeakText Ref2, SwingDate, SwingTime, SwingPrice - VertOffset2) else Text_SetLocation(PeakText Ref2, SwingDate, SwingTime, SwingPrice + VertOffset1); end; UpdateTL = false; end; if SaveSwing then begin if TLDir = -1 then begin DayValue[0] = Swingprice; DayValue[1] = LastSwingprice; end else begin DayValue[1] = Swingprice; DayValue[0] = LastSwingprice; end; Diff = DayValue[0] - DayValue[1]; if (showDebug) then print("Day0 = ", DayValue[0], " DayMax= ", DayValue[1], " Diff =", Diff, " TLDir = ", TLDir); for x=0 to ArrayMax begin if TrendLine[x] > 0 then begin { SetEnd before SetBegin } TL_SetEnd (TrendLine[x], Date, Time, DayValue[x]); TL_SetBegin (TrendLine[x], Date, Time, DayValue[x]); end; // if TrendLine end; // for loop SaveSwing = False; end; // if SaveSwing ENJOY | ||
| |
|
| The Following 4 Users Say Thank You to spyro For This Useful Post: | ||
![]() |
| Thread Tools | |
| Display Modes | Help Others By Rating This Thread |
| |
| ∧ Similar Threads | ||||
| Thread | Thread Starter | Forum | Replies | Last Post |
| An Auto Pivot Level Indicator | GCB | Trading Indicators | 16 | 12-26-2011 02:41 AM |
| Seeking Floor Trader Pivot Indicator | Adrian | Coding Forum | 8 | 07-11-2009 09:38 PM |
| Auto Pivot Point Indicator with Labels | Soultrader | Trading Indicators | 4 | 04-30-2009 08:50 AM |
| Indicator with Data of Another Indicator | Tresor | Coding Forum | 13 | 08-06-2008 10:48 AM |
| Other Pivot Formulas | tradem | Technical Analysis | 4 | 10-27-2007 11:51 AM |