Inputs: Length(100), Strength(8), Tolerance(0.10), BullColor(Blue), BearColor(Red); Variables: F1(0.618), F2(0.786), F3(1.27), F4(1.618), P1Bar(-1), P2Bar(-1), T1Bar(-1), T2Bar(-1), P1(0.0), P2(0.0), T1(0.0), T2(0.0), PTValid(False), HLValid(False), InZone(False), GD(0.0), XA(0.0), AB(0.0), BC(0.0), CD(0.0), AD(0.0), C1(False), C2(False), C3(False), C4(False), ABdXA(0.0), BCdAB(0.0), CDdBC(0.0), ADdXA(0.0), TL1(-1), TL2(-1), TL3(-1), TL4(-1), TL5(-1), TL6(-1); P1Bar = SwingHighBar(1, High, Strength, Length); P2Bar = SwingHighBar(2, High, Strength, Length); T1Bar = SwingLowBar(1, Low, Strength, Length); T2Bar = SwingLowBar(2, Low, Strength, Length); If P1Bar <> -1 and P2Bar <> -1 and T1Bar <> -1 and T2Bar <> -1 Then Begin {Test for a bullish 222} {Trough X is T2} T2 = Low[T2Bar]; {Peak A is P2} P2 = High[P2Bar]; {Trough B is T1} T1 = Low[T1Bar]; {Peak C is P1} P1 = High[P1Bar]; {D is the buy point} GD = Low; PTValid = P1Bar < T1Bar and T1Bar < P2Bar and P2Bar < T2Bar; HLValid = P1 < P2 and T1 > T2 and P1 > T1; InZone = GD < T1 and GD > T2 and P2 >= Highest(High, T2Bar); If PTValid and HLValid and InZone Then Begin XA = P2 - T2; AB = P2 - T1; BC = P1 - T1; CD = P1 - GD; AD = P2 - GD; ABdXA = AB / XA; {AB should be 61.8% of XA} C1 = ABdXA > F1 - Tolerance and ABdXA < F1 + Tolerance; BCdAB = BC / AB; {BC should be 61.8-78.6% of AB} C2 = BCdAB > F1 - Tolerance and BCdAB < F2 + Tolerance; CDdBC = CD / BC; {CD should be 127-161.8% of BC} C3 = CDdBC > F3 - Tolerance and CDdBC < F4 + Tolerance; ADdXA = AD / XA; {AD should be 78.6% of XA} C4 = ADdXA > F2 - Tolerance and ADdXA < F2 + Tolerance; If C1 and C2 and C3 and C4 Then Begin TL1 = TL_New(Date[T2Bar], Time[T2Bar], T2, Date[P2Bar], Time[P2Bar], P2); If TL1 >= 0 Then Begin TL_SetColor(TL1, BullColor); TL_SetStyle(TL1, Tool_Solid); TL_SetSize(TL1, 2); End; TL2 = TL_New(Date[P2Bar], Time[P2Bar], P2, Date[T1Bar], Time[T1Bar], T1); If TL2 >= 0 Then Begin TL_SetColor(TL2, BullColor); TL_SetStyle(TL2, Tool_Solid); TL_SetSize(TL2, 2); End; TL3 = TL_New(Date[T1Bar], Time[T1Bar], T1, Date[P1Bar], Time[P1Bar], P1); If TL3 >= 0 Then Begin TL_SetColor(TL3, BullColor); TL_SetStyle(TL3, Tool_Solid); TL_SetSize(TL3, 2); End; TL4 = TL_New(Date[P1Bar], Time[P1Bar], P1, Date, Time, GD); If TL4 >= 0 Then Begin TL_SetColor(TL4, BullColor); TL_SetStyle(TL4, Tool_Solid); TL_SetSize(TL4, 2); End; TL5 = TL_New(Date[T1Bar], Time[T1Bar], T1, Date, Time, GD); If TL5 >= 0 Then Begin TL_SetColor(TL5, BullColor); TL_SetStyle(TL5, Tool_Dotted); End; TL6 = TL_New(Date[T2Bar], Time[T2Bar], T2, Date, Time, GD); If TL6 >= 0 Then Begin TL_SetColor(TL6, BullColor); TL_SetStyle(TL6, Tool_Dotted); End; End; End; {Test for a bearish 222} {Peak X is P2} {Trough A is T2} {Peak B is P1} {Trough C is T1} {GD is the short point} GD = High; PTValid = T1Bar < P1Bar and P1Bar < T2Bar and T2Bar < P2Bar; HLValid = T1 > T2 and P1 < P2 and T1 < P1; InZone = GD > P1 and GD < P2 and T2 <= Lowest(Low, P2Bar); If PTValid and HLValid and InZone Then Begin XA = P2 - T2; AB = P1 - T2; BC = P1 - T1; CD = GD - T1; AD = GD - T2; ABdXA = AB / XA; {AB should be 61.8% of XA} C1 = ABdXA > F1 - Tolerance and ABdXA < F1 + Tolerance; BCdAB = BC / AB; {BC should be 61.8-78.6% of AB} C2 = BCdAB > F1 - Tolerance and BCdAB < F2 + Tolerance; CDdBC = CD / BC; {CD should be 127-161.8% of BC} C3 = CDdBC > F3 - Tolerance and CDdBC < F4 + Tolerance; ADdXA = AD / XA; {AD should be 78.6% of XA} C4 = ADdXA > F2 - Tolerance and ADdXA < F2 + Tolerance; If C1 and C2 and C3 and C4 Then Begin TL1 = TL_New(Date[P2Bar], Time[P2Bar], P2, Date[T2Bar], Time[T2Bar], T2); If TL1 >= 0 Then Begin TL_SetColor(TL1, BearColor); TL_SetStyle(TL1, Tool_Solid); TL_SetSize(TL1, 2); End; TL2 = TL_New(Date[T2Bar], Time[T2Bar], T2, Date[P1Bar], Time[P1Bar], P1); If TL2 >= 0 Then Begin TL_SetColor(TL2, BearColor); TL_SetStyle(TL2, Tool_Solid); TL_SetSize(TL2, 2); End; TL3 = TL_New(Date[P1Bar], Time[P1Bar], P1, Date[T1Bar], Time[T1Bar], T1); If TL3 >= 0 Then Begin TL_SetColor(TL3, BearColor); TL_SetStyle(TL3, Tool_Solid); TL_SetSize(TL3, 2); End; TL4 = TL_New(Date[T1Bar], Time[T1Bar], T1, Date, Time, GD); If TL4 >= 0 Then Begin TL_SetColor(TL4, BearColor); TL_SetStyle(TL4, Tool_Solid); TL_SetSize(TL4, 2); End; TL5 = TL_New(Date[P1Bar], Time[P1Bar], P1, Date, Time, GD); If TL5 >= 0 Then Begin TL_SetColor(TL5, BearColor); TL_SetStyle(TL5, Tool_Dotted); End; TL6 = TL_New(Date[P2Bar], Time[P2Bar], P2, Date, Time, GD); If TL6 >= 0 Then Begin TL_SetColor(TL6, BearColor); TL_SetStyle(TL6, Tool_Dotted); End; End; End; End;