Subscription & data-feed pricing Class schedule

New account application Trading resources
Margin rates Stock & option commissions

Attention: Discussion forums are read-only for extended maintenance until further notice.
 Welcome Guest, please sign in to participate in a discussion. Search | Active Topics |

 harmonics Rate this Topic:
 Previous Topic · Next Topic Watch this topic · Print this topic ·
pthegreat
 Posted : Thursday, March 7, 2013 5:15:15 PM

Registered User
Joined: 6/15/2008
Posts: 1,356

Here both the up and down indicators, and conditions.

ABCD up :

Name the indicator: AB=CD-up

Sub New
AutoLoop = False
'# RangePattern = UserInput.Integer = 200
'# NewLowPer = UserInput.Integer = 20
'# PullBackPercent = UserInput.Single = 38.2
'# EntryPercent = UserInput.Single = 23.6
'#RECALC_ON_ZOOM_SCROLL
End Sub
Public Overrides Function Plot() As System.Single
Dim Range(1) As Integer
'Range(1) = price.Bar.count - 1
Range(1) = Price.IndexForDate(ActiveChart.ZoomEndDate)
Range(0) = Range(1) + 1 - RangePattern
Dim BarA As Integer = Range(0)
If Range(0) >= 0 Then
For i As Integer = Range(0) To Range(1)
If Price.Bar.LowValue(i) <= Price.Bar.LowValue(BarA) Then
BarA = i
End If
Next
If BarA - Range(0) < NewLowPer AndAlso BarA > 0 Then
Dim Count As Integer = 0
For i As Integer = BarA - 1 To 0 Step -1
Count += 1
If Price.Bar.LowValue(i) <= Price.Bar.LowValue(BarA) Then
BarA = i
Count = 0
End If
If Count >= NewLowPer Then
Range(0) = BarA
Exit For
End If
Next
End If
If BarA < Range(1) - 1 Then
Dim ABretr As Single = Single.NaN
Dim BarB As Integer = BarA
Dim BarBqualified(1) As Integer
BarBqualified(0) = BarA
BarBqualified(1) = BarA
Dim BarC As Integer = BarA
Dim BarCQualified As Integer = BarA
Dim L1 As Integer
L1 = BarA
For i As Integer = BarA + 1 To Range(1) - 1
If Price.Bar.HighValue(i) > Price.Bar.HighValue(BarB) Then
BarB = i
BarC = BarB
ABretr = PullBackPercent * (Price.Bar.HighValue(BarB) - Price.Bar.LowValue(BarA)) / 100
End If
If Price.Bar.lowValue(i) < Price.Bar.highValue(BarB) - ABretr AndAlso i > BarB AndAlso _
price.Bar.lowvalue(i) < price.Bar.lowvalue(BarB) Then
If BarC = BarB Then
BarC = i
Else If Price.Bar.LowValue(i) < Price.Bar.LowValue(BarC) Then
BarC = i
End If
BarBqualified(0) = BarB
If BarC > BarCqualified Then
For j As Integer = i To Range(1) - 1
If Price.Bar.lowValue(j) <= Price.Bar.lowValue(j - 1) AndAlso _
Price.Bar.lowValue(j) <= Price.Bar.lowValue(j + 1) Then
L1 = j
BarCqualified = BarC
BarBqualified(1) = BarBqualified(0)
Exit For
End If
Next
End If
End If
Next
If BarCqualified > BarA Then
Dim k As Integer = L1 + 1
If k <= Range(1) Then
Dim entry As Single = Price.Bar.LowValue(BarCQualified)
Dim B As Single
Dim retr As Single
Dim projection As Single
Dim steptrgt As Single = EntryPercent * (Price.Bar.HighValue(BarBqualified(1)) - Price.Bar.LowValue(BarA)) / 100
Dim AB As Single = price.Bar.highvalue(barBqualified(1)) - price.Bar.lowvalue(BarA)
Dim BC As Single = Price.Bar.HighValue(BarBqualified(1)) - price.Bar.lowvalue(BarCqualified)
retr = 100 * BC / AB
entry = entry + steptrgt
B = entry + steptrgt

k += 1
Do Until Price.Bar.Value(k) > entry OrElse k > Range(1)
k += 1
Loop
If Price.Bar.Value(k) > entry AndAlso k <= Range(1) Then
Dim PRZlow As Single
Dim PRZlowtxt As String
Dim PRZhigh As Single
Dim PRZhightxt As String
Select Case retr
Case <= 38.2
PRZlow = price.Bar.lowvalue(BarCqualified) + BC * 2.618
PRZlowtxt = "261.8%BC"
PRZhigh = price.Bar.lowvalue(BarCqualified) + BC * 2.618
PRZhightxt = "261.8%BC"
Case 38.2 To 50
PRZlow = price.Bar.lowvalue(BarCqualified) + BC * 2
PRZlowtxt = "200%BC"
PRZhigh = price.Bar.lowvalue(BarCqualified) + BC * 2.618
PRZhightxt = "261.8%BC"
Case 50 To 61.8
PRZlow = price.Bar.lowvalue(BarCqualified) + BC * 1.618
PRZlowtxt = "161.8%BC"
PRZhigh = price.Bar.lowvalue(BarCqualified) + BC * 2
PRZhightxt = "200%BC"
Case 61.8 To 70.7
PRZlow = price.Bar.lowvalue(BarCqualified) + BC * 1.41
PRZlowtxt = "141%BC"
PRZhigh = price.Bar.lowvalue(BarCqualified) + BC * 1.618
PRZhightxt = "161.8%BC"
Case 70.7 To 78.6
PRZlow = price.Bar.lowvalue(BarCqualified) + BC * 1.27
PRZlowtxt = "127%BC"
PRZhigh = price.Bar.lowvalue(BarCqualified) + BC * 1.41
PRZhightxt = "141%BC"
Case 78.6 To 88.6
PRZlow = price.Bar.lowvalue(BarCqualified) + BC * 1.13
PRZlowtxt = "113%BC"
PRZhigh = price.Bar.lowvalue(BarCqualified) + BC * 1.27
PRZhightxt = "127%BC"
Case 88.6 To 100
PRZlow = price.Bar.lowvalue(BarCqualified) + BC * 1.13
PRZlowtxt = "113%BC"
PRZhigh = price.Bar.lowvalue(BarCqualified) + BC * 1.13
PRZhightxt = "113%BC"
End Select
k += 1
Do Until Price.Bar.Value(k) > PRZlow OrElse k > Range(1)
k += 1
Loop
If Price.Bar.Value(k) > PRZlow AndAlso k <= Range(1) Then
k += 1
Do Until Price.Bar.Value(k) > PRZhigh OrElse k > Range(1)
k += 1
Loop
End If

End If
End If
End If
End If
End If

End Function
End Class

condition:

'#cumulative
'# ABCDup = chart.AB=CD-up

Static Av As Single
Static Bv As Single
Static ABCDBarCount As Integer
If isFirstBar Then
Av = Single.NaN
Bv = Single.NaN
ABCDBarCount = 0
End If
If currentindex > price.count - 15 Then
If Price.DateValue = ABCDup.DateValue Then
ABCDBarCount += 1
If ABCDBarCount = 2 Then
Av = ABCDup.Value
' Else If ABCDBarCount >= 6 AndAlso _
'  ABCDup.Value <> ABCDup.Value(1) Then
'  Bv = ABCDup.Value
End If
End If
If ABCDBarCount >= 2 Then
If (Price.Value(1) < Av AndAlso Price.Value > Av) Then
Pass
End If
End If

Else
SetIndexInvalid
End If

ABCD down:

name the indicator : AB=CD-down

Inherits RealCodeIndicator_base
' Mod ; 3/2/2013
' removed the level1 sequence. entry is plotted next bar after C is qualified,
' and being a high surrounded by 1 lower or equal high.
' added condition: Zhigh > Yhigh

Sub New
AutoLoop = False
'# RangePattern = UserInput.Integer = 200
'# NewHighPer = UserInput.Integer = 20
'# PullbackPercent = UserInput.Single = 38.2
'# EntryPercent = UserInput.Single = 23.6
'#RECALC_ON_ZOOM_SCROLL
End Sub
Public Overrides Function Plot() As System.Single
Dim Range(1) As Integer
'Range(1) = price.Bar.count - 1
Range(1) = Price.IndexForDate(ActiveChart.ZoomEndDate)
Range(0) = Range(1) + 1 - RangePattern
Dim BarA As Integer = Range(0)
If Range(0) >= 0 Then
For i As Integer = Range(0) To Range(1)
If Price.Bar.HighValue(i) >= Price.Bar.HighValue(BarA) Then
BarA = i
End If
Next
If BarA - Range(0) < NewHighPer AndAlso BarA > 0 Then
Dim Count As Integer = 0
For i As Integer = BarA - 1 To 0 Step -1
Count += 1
If Price.Bar.HighValue(i) >= Price.Bar.HighValue(BarA) Then
BarA = i
Count = 0
End If
If Count >= NewHighPer Then
Range(0) = BarA
Exit For
End If
Next
End If
If BarA < Range(1) - 1 Then
Dim ABretr As Single = Single.NaN
Dim BarB As Integer = BarA
Dim BarBqualified(1) As Integer
BarBqualified(0) = BarA
BarBqualified(1) = BarA
Dim BarC As Integer = BarA
Dim BarCQualified As Integer = BarA
Dim L1 As Integer
L1 = BarA

For i As Integer = BarA + 1 To Range(1) - 1
If Price.Bar.LowValue(i) < Price.Bar.LowValue(BarB) Then
BarB = i
BarC = BarB
ABretr = PullbackPercent * (Price.Bar.HighValue(BarA) - Price.Bar.LowValue(BarB)) / 100
End If
If Price.Bar.highValue(i) > Price.Bar.lowValue(BarB) + ABretr AndAlso i > BarB AndAlso _
price.Bar.highvalue(i) > price.Bar.highvalue(BarB) Then
If BarC = BarB Then
BarC = i
Else If Price.Bar.HighValue(i) > Price.Bar.HighValue(BarC) Then
BarC = i
End If
BarBqualified(0) = BarB
If BarC > BarCqualified Then

For j As Integer = i To Range(1) - 1
If Price.Bar.highValue(j) >= Price.Bar.highValue(j - 1) AndAlso _
Price.Bar.highValue(j) >= Price.Bar.highValue(j + 1) Then
L1 = j
BarCqualified = BarC
BarBqualified(1) = BarBqualified(0)
Exit For
End If
Next
End If
End If
Next
If BarCqualified > BarBqualified(1) Then
Dim k As Integer = L1 + 1
If k <= range(1) Then
Dim entry As Single = Price.bar.highvalue(barCQualified)
Dim B As Single
Dim retr As Single
Dim steptrgt As Single = EntryPercent * (Price.Bar.HighValue(BarA) - Price.Bar.LowValue(BarBqualified(1))) / 100
Dim AB As Single = price.Bar.highvalue(BarA) - price.Bar.lowvalue(BarBqualified(1))
Dim BC As Single = Price.Bar.HighValue(BarCqualified) - price.Bar.lowvalue(BarBqualified(1))
retr = 100 * BC / AB
entry = entry - steptrgt
B = entry - steptrgt
k += 1
Do Until Price.Bar.Value(k) < entry OrElse k > Range(1)
k += 1
Loop

If Price.Bar.Value(k) < entry AndAlso k <= Range(1) Then
Dim PRZlow As Single
Dim PRZlowtxt As String
Dim PRZhigh As Single
Dim PRZhightxt As String
Select Case retr
Case <= 38.2
PRZlow = price.Bar.Highvalue(BarCqualified) - BC * 2.618
PRZlowtxt = "261.8%BC"
PRZhigh = price.Bar.Highvalue(BarCqualified) - BC * 2.618
PRZhightxt = "261.8%BC"
Case 38.2 To 50
PRZlow = price.Bar.Highvalue(BarCqualified) - BC * 2.618
PRZlowtxt = "261.8%BC"
PRZhigh = price.Bar.Highvalue(BarCqualified) - BC * 2
PRZhightxt = "200%BC"
Case 50 To 61.8
PRZlow = price.Bar.Highvalue(BarCqualified) - BC * 2
PRZlowtxt = "200%BC"
PRZhigh = price.Bar.Highvalue(BarCqualified) - BC * 1.618
PRZhightxt = "161.8%BC"
Case 61.8 To 70.7
PRZlow = price.Bar.Highvalue(BarCqualified) - BC * 1.618
PRZlowtxt = "161.8%BC"
PRZhigh = price.Bar.Highvalue(BarCqualified) - BC * 1.41
PRZhightxt = "141%BC"
Case 70.7 To 78.6
PRZlow = price.Bar.Highvalue(BarCqualified) - BC * 1.41
PRZlowtxt = "141%BC"
PRZhigh = price.Bar.Highvalue(BarCqualified) - BC * 1.27
PRZhightxt = "127%BC"
Case 78.6 To 88.6
PRZlow = price.Bar.Highvalue(BarCqualified) - BC * 1.27
PRZlowtxt = "127%BC"
PRZhigh = price.Bar.Highvalue(BarCqualified) - BC * 1.13
PRZhightxt = "113%BC"
Case 88.6 To 100
PRZlow = price.Bar.Highvalue(BarCqualified) - BC * 1.13
PRZlowtxt = "113%BC"
PRZhigh = price.Bar.Highvalue(BarCqualified) - BC * 1.13
PRZhightxt = "113%BC"
End Select

k += 1
Do Until Price.Bar.Value(k) < PRZhigh OrElse k > Range(1)
k += 1
Loop
If Price.Bar.Value(k) < PRZhigh AndAlso k <= Range(1) Then
k += 1
Do Until Price.Bar.Value(k) < PRZlow OrElse k > Range(1)
k += 1
Loop
End If
End If
End If
End If
End If
End If

End Function
End Class

condition:

'#cumulative
'# ABCDdown = chart.AB=CD-down

Static Av As Single
Static Bv As Single
Static ABCDBarCount As Integer
If isFirstBar Then
Av = Single.NaN
Bv = Single.NaN
ABCDBarCount = 0
End If
If currentindex > price.count - 15 Then
If Price.DateValue = ABCDdown.DateValue Then
ABCDBarCount += 1
If ABCDBarCount = 2 Then
Av = ABCDdown.Value
'Else If ABCDBarCount >= 6 AndAlso _
' ABCDdown.Value <> ABCDdown.Value(1) Then
' Bv = ABCDdown.Value
End If
End If
If ABCDBarCount >= 2 Then
If (Price.Value(1) > Av AndAlso Price.Value < Av) Then Pass
'OrElse (Price.Value(1) < Bv AndAlso Price.Value > Bv)
End If
Else
SetIndexInvalid
End If

Notes:

to use the conditions, make the following change in the indicators:

'Range(1) = price.Bar.count - 1
Range(1) = Price.IndexForDate(ActiveChart.ZoomEndDate)

to :

Range(1) = price.Bar.count - 1
'Range(1) = Price.IndexForDate(ActiveChart.ZoomEndDate)

this turns of the "Zoom" capability, and will, regardless whether you slide your chart back and forth in time, only plot the most recent pattern.

the conditions return true, when either the "entry" level gets broken, or one of the targets, within the most recent 15 bars.

I made this limitation to reduce CPU load.

Before you use this indicator, make sure you fully understand how it works, and what it supposed to indicate.

I like to go long once the entry level gets broken on the ABCD-up indicator, or go long when price reverses out of the PRZ of a ABCD-down pattern, when larger timeframes are in an uptrend.

vice-versa for shorts.

The conditions seem to work well, although I suspect they're not 100%.

If you have any feedback, additions, modifications, please post.

feltburner
 Posted : Friday, March 8, 2013 10:25:08 AM
Registered User
Joined: 1/16/2005
Posts: 72

That is some serious coding; no wonder my pathetic efforts fail so miserably.  Thanks for sharing- I look forward to checking it out this weekend.

pthegreat
 Posted : Friday, March 8, 2013 1:14:05 PM

Registered User
Joined: 6/15/2008
Posts: 1,356

LoL feltburner, but I'm just leeching of Bruce's knowledge, and tireless support. He deserves most of the credit.

Hope to get some feedbacks/recommendations here.

One Idea I have is to include some options to increase probability for a trade at either the PRZ or between the C and entry point, bylooking for maybe some candlestick formations, in those areas. or some divergences from other indicators.

videohero
 Posted : Friday, March 8, 2013 3:26:02 PM
Registered User
Joined: 5/27/2010
Posts: 6

Getting quite a few compile errors in each and can't run them quite yet. I'm sure it'll get worked out, likely my oversight. Thank you for sharing.

pthegreat
 Posted : Friday, March 8, 2013 3:34:13 PM

Registered User
Joined: 6/15/2008
Posts: 1,356

create new realcode indicator

then select "class"

copy the code under "inherits realcodeIndicator_base"

should look like this :

feltburner
 Posted : Wednesday, March 13, 2013 12:20:04 PM
Registered User
Joined: 1/16/2005
Posts: 72

pthegreat,

Also had trouble getting the indicators to run but after reading your instructions and viewing your image I have the indicators working.  Is the code for the conditions entered into the "code" area or the "class" area?  Still haven't got them working yet.

Thanks,

Bruce

pthegreat
 Posted : Wednesday, March 13, 2013 12:24:28 PM

Registered User
Joined: 6/15/2008
Posts: 1,356

code

caution
 Posted : Wednesday, March 13, 2013 1:37:17 PM
Registered User
Joined: 5/5/2010
Posts: 185

pthegreat,

Thanks again for sharing!  I was never a fan of fib but i am now.  There are compelling arguments for point C to be included as a condition, when use in conjunction with other indicators can confirm C.  Also I believe there are trading opportunities between point C and entry point.

Agilisllc.

feltburner
 Posted : Wednesday, March 13, 2013 2:16:32 PM
Registered User
Joined: 1/16/2005
Posts: 72

Thanks, it's all up and running now.

caution
 Posted : Tuesday, March 26, 2013 3:35:37 PM
Registered User
Joined: 5/5/2010
Posts: 185

I've tried to alter above code to include 423.6% with no luck, what i'm i doing wrong?

Select  Case retr

Case <= 26.4
PRZlow = price.Bar.lowvalue(BarCqualified) + BC * 4.236
PRZlowtxt = "423.6%BC"
PRZhigh = price.Bar.lowvalue(BarCqualified) + BC * 4.236
PRZhightxt = "423.6%BC"
Case 26.4 To 38.2
PRZlow = price.Bar.lowvalue(BarCqualified) + BC * 2.618
PRZlowtxt = "261.8%BC"
PRZhigh = price.Bar.lowvalue(BarCqualified) + BC * 4.236
PRZhightxt = "423.6%BC"

pthegreat
 Posted : Tuesday, March 26, 2013 4:09:49 PM

Registered User
Joined: 6/15/2008
Posts: 1,356

looks fine to me.

click on the indicator and change "PullbackPercent" to 23.6, so it will find patterns that have a pullback less then the default 38.2%

caution
 Posted : Wednesday, April 3, 2013 12:57:32 PM
Registered User
Joined: 5/5/2010
Posts: 185

AB=CD, stops dawing at random points 127%, 141% etc ... almost never draws 261.8%, is anyone else having this issue?

pthegreat
 Posted : Thursday, April 4, 2013 1:23:59 PM

Registered User
Joined: 6/15/2008
Posts: 1,356

Agilisllc,

they are not random.

see page 41 "harmonic trading"

the drawn projections (PRZ) relate directly to the BC retrace of the AB leg.

I explained it in my 1st post in the other harmonic thread.

an example:

if BC is a retrace of AB between 61.8% and 70/7%, then I use the projection values 161.8 and 141% to determine the PRZ

If however, the retrace is between 38.2% and 50% then 200% and 261.8% will be used.

for example V on 15min chart

BC is between 38.2%  and 50% retrace of AB, therefore the 1st PRZ target is 200%BC.

when price fell below this line, it drew the 261.8%, that's your PRZ!

note: my indicator is a slight variant of the AB=CD as described in the book. since they also use the exact range of AB, to set a PRZ target.

again, this indicator, follows the definitions of AB=CD patterns only.

If you delve into the various harmonic patterns, you'll see that depending on the pattern, the projections of the AB=CD in the harmonic pattern will use different projections then the reciprocal ratios used, when you use the AB=CD indicator stand alone.

another example:

GS 60min chart:

XABCD paints a "Crab" pattern.

although the BC is about 78.6% retrace of AB, and therefore it should use a 127% and 141% projection of AB, the fact that it is part of a Crab pattern, a projection of between 224% to 361.8%  should be used.

here depicted using fibs in TC2000 :

As you see, so far it hit the 261.8% spot on, if fails we can look at 300%, up to 361.8%

However the Stockfinder AB=CD indicator only painted the PRZ relating to a 70.7% to 78.6% retrace, which are 127% and 141%

eventhough it is part of the crab pattern, and therefore larger projections should be used. the AB=CD's PRZ gave a good signal as well for a short bounce out of the PRZ.

Plan is to program the additional patterns, but just to busy with trading at the moment.

Just keep the forementioned in mind, hope it helps,

P.

pthegreat
 Posted : Thursday, April 4, 2013 1:27:17 PM

Registered User
Joined: 6/15/2008
Posts: 1,356

sorry:

although the BC is about 78.6% retrace of AB, and therefore it should use a 127% and 141% projection of AB, the fact that it is part of a Crab pattern, a projection of between 224% to 361.8% should be used.

although the BC is about 78.6% retrace of AB, and therefore it should use a 127% and 141% projection of BC, the fact that it is part of a Crab pattern, a projection of between 224% to 361.8% should be used.

caution
 Posted : Friday, April 5, 2013 12:43:45 PM
Registered User
Joined: 5/5/2010
Posts: 185

pthegreat

thanks for the clarification, I incorrectly assumed AB=CD would recalculate and project new fib levels as price history surpasses PRZ levels. It would be a great addition to the indicator, though i'm not sure its possible.

p.s AB=CD indicator has been spot on....

pthegreat
 Posted : Friday, April 5, 2013 1:07:27 PM

Registered User
Joined: 6/15/2008
Posts: 1,356

thx for the suggestion. I'm still breaking my head over how I will continue coding this out.

But adding the range of AB to predict CD is something I will add for sure.

SPY for example on 5min:  4/2 high to 4/3 low, subtract from 4/4 high, gave the exact low today, and eventhough after a big drop I did get some 154 weekly calls, which got a 150% return. stopped exactly at the 38.2% retrace of 4/4 high and 113% projection 4/3 low - 4/4high

the range AB, projected from point C always falls somewhere between the two fibs that calculate the PRZ.

in any case, hope to pick up with coding something soon.

take care.

pthegreat
 Posted : Tuesday, April 9, 2013 8:50:42 PM

Registered User
Joined: 6/15/2008
Posts: 1,356

update:

added "D" target as range A-high to B-low subtracted from C-high (in case of down pattern), or range A-low to B-high added to C-low (in case of up pattern).

and added text to Cpoint with the exact retrace%

If you have the previous indicator on your chart, simply rightclick it, "edit realcode" then select "class",

and replace everything below "inherits RealCodeIndicator_base"  with the code below.

## The AB=CD-down indicator, copy the following:

' Mod ; 3/2/2013
' removed the level1 sequence. entry is plotted next bar after C is qualified,
' and being a high surrounded by 1 lower or equal high.
' added condition: Chigh > Bhigh
' Mod ; 4/1/2013
' made "zooming" a userinput
' Mod ; 4/7/2013
' add retrace% to pointC
' add D projection as AB=CD range

Sub New
AutoLoop = False
'# RangePattern = UserInput.Integer = 200
'# NewHighPer = UserInput.Integer = 20
'# PullbackPercent = UserInput.Single = 38.2
'# EntryPercent = UserInput.Single = 23.6
'# Zoom = userinput.integer = 0
'#RECALC_ON_ZOOM_SCROLL
End Sub
Public Overrides Function Plot() As System.Single
Dim Range(1) As Integer
If Zoom = 0 Then
Range(1) = price.Bar.count - 1
Else
Range(1) = Price.IndexForDate(ActiveChart.ZoomEndDate)
End If
Range(0) = Range(1) + 1 - RangePattern
Dim BarA As Integer = Range(0)
If Range(0) >= 0 Then
For i As Integer = Range(0) To Range(1)
If Price.Bar.HighValue(i) >= Price.Bar.HighValue(BarA) Then
BarA = i
End If
Next
If BarA - Range(0) < NewHighPer AndAlso BarA > 0 Then
Dim Count As Integer = 0
For i As Integer = BarA - 1 To 0 Step -1
Count += 1
If Price.Bar.HighValue(i) >= Price.Bar.HighValue(BarA) Then
BarA = i
Count = 0
End If
If Count >= NewHighPer Then
Range(0) = BarA
Exit For
End If
Next
End If
If BarA < Range(1) - 1 Then
Dim ABretr As Single = Single.NaN
Dim ABpercentRetr As Single
Dim BarB As Integer = BarA
Dim BarBqualified(1) As Integer
BarBqualified(0) = BarA
BarBqualified(1) = BarA
Dim BarC As Integer = BarA
Dim BarCQualified As Integer = BarA
Dim Ctxt As String
Dim L1 As Integer
L1 = BarA

For i As Integer = BarA + 1 To Range(1) - 1
If Price.Bar.LowValue(i) < Price.Bar.LowValue(BarB) Then
BarB = i
BarC = BarB
ABretr = PullbackPercent * (Price.Bar.HighValue(BarA) - Price.Bar.LowValue(BarB)) / 100
End If
If Price.Bar.highValue(i) > Price.Bar.lowValue(BarB) + ABretr AndAlso i > BarB AndAlso _
price.Bar.highvalue(i) > price.Bar.highvalue(BarB) Then
If BarC = BarB Then
BarC = i
Else If Price.Bar.HighValue(i) > Price.Bar.HighValue(BarC) Then
BarC = i
End If
BarBqualified(0) = BarB
If BarC > BarCqualified Then

For j As Integer = i To Range(1) - 1
If Price.Bar.highValue(j) >= Price.Bar.highValue(j - 1) AndAlso _
Price.Bar.highValue(j) >= Price.Bar.highValue(j + 1) Then
L1 = j
BarCqualified = BarC
BarBqualified(1) = BarBqualified(0)
ABpercentRetr = (price.Bar.highvalue(BarCqualified) - price.Bar.lowvalue(BarBqualified(1))) / _
(price.Bar.highvalue(BarA) - price.Bar.lowvalue(BarBqualified(1))) * 100
Ctxt = "C=" & ABpercentRetr.ToString("N2") & "%"
Exit For
End If
Next
End If
End If
Next
If BarCqualified > BarBqualified(1) Then
Dim k As Integer = L1 + 1
If k <= range(1) Then
Dim entry As Single = Price.bar.highvalue(barCQualified)
Dim B As Single
Dim retr As Single
Dim steptrgt As Single = EntryPercent * (Price.Bar.HighValue(BarA) - Price.Bar.LowValue(BarBqualified(1))) / 100
Dim AB As Single = price.Bar.highvalue(BarA) - price.Bar.lowvalue(BarBqualified(1))
Dim BC As Single = Price.Bar.HighValue(BarCqualified) - price.Bar.lowvalue(BarBqualified(1))
retr = 100 * BC / AB
entry = entry - steptrgt

k += 1
Do Until Price.Bar.Value(k) < entry OrElse k > Range(1)
k += 1
Loop

If Price.Bar.Value(k) < entry AndAlso k <= Range(1) Then
Dim PRZlow As Single
Dim PRZlowtxt As String
Dim PRZhigh As Single
Dim PRZhightxt As String
Dim D As Single
D = price.Bar.Highvalue(BarCqualified) - (Price.Bar.HighValue(BarA) - Price.Bar.LowValue(BarBqualified(1)))
Select Case retr
Case <= 38.2
PRZlow = price.Bar.Highvalue(BarCqualified) - BC * 2.618
PRZlowtxt = "261.8%BC"
PRZhigh = price.Bar.Highvalue(BarCqualified) - BC * 2.618
PRZhightxt = "261.8%BC"
Case 38.2 To 50
PRZlow = price.Bar.Highvalue(BarCqualified) - BC * 2.618
PRZlowtxt = "261.8%BC"
PRZhigh = price.Bar.Highvalue(BarCqualified) - BC * 2
PRZhightxt = "200%BC"
Case 50 To 61.8
PRZlow = price.Bar.Highvalue(BarCqualified) - BC * 2
PRZlowtxt = "200%BC"
PRZhigh = price.Bar.Highvalue(BarCqualified) - BC * 1.618
PRZhightxt = "161.8%BC"
Case 61.8 To 70.7
PRZlow = price.Bar.Highvalue(BarCqualified) - BC * 1.618
PRZlowtxt = "161.8%BC"
PRZhigh = price.Bar.Highvalue(BarCqualified) - BC * 1.41
PRZhightxt = "141%BC"
Case 70.7 To 78.6
PRZlow = price.Bar.Highvalue(BarCqualified) - BC * 1.41
PRZlowtxt = "141%BC"
PRZhigh = price.Bar.Highvalue(BarCqualified) - BC * 1.27
PRZhightxt = "127%BC"
Case 78.6 To 88.6
PRZlow = price.Bar.Highvalue(BarCqualified) - BC * 1.27
PRZlowtxt = "127%BC"
PRZhigh = price.Bar.Highvalue(BarCqualified) - BC * 1.13
PRZhightxt = "113%BC"
Case 88.6 To 100
PRZlow = price.Bar.Highvalue(BarCqualified) - BC * 1.13
PRZlowtxt = "113%BC"
PRZhigh = price.Bar.Highvalue(BarCqualified) - BC * 1.13
PRZhightxt = "113%BC"
End Select

k += 1
Do Until Price.Bar.Value(k) < PRZhigh OrElse k > Range(1)
k += 1
Loop
If Price.Bar.Value(k) < PRZhigh AndAlso k <= Range(1) Then
k += 1
Do Until Price.Bar.Value(k) < D OrElse k > Range(1)
k += 1
Loop
If Price.Bar.Value(k) < D AndAlso k <= Range(1) Then
k += 1
Do Until Price.Bar.Value(k) < PRZlow OrElse k > Range(1)
k += 1
Loop
End If
End If
End If
End If
End If
End If
End If
end function
End Class

## The AB=CD-up indicator, copy the following:

inherits RealCodeIndicator_base
' Mod ; 3/2/2013
' removed the level1 sequence. entry is plotted next bar after C is qualified,
' and being a low surrounded by 1 higher or equal low.
' added condition: Clow > Blow
' Mod ; 4/1/2013
' made "zooming" a userinput
' Mod ; 4/7/2013
' add retrace% to pointC
' add D projection as AB=CD range
Sub New
AutoLoop = False
'# RangePattern = UserInput.Integer = 200
'# NewLowPer = UserInput.Integer = 20
'# PullBackPercent = UserInput.Single = 38.2
'# EntryPercent = UserInput.Single = 23.6
'# Zoom = userinput.integer = 0
'#RECALC_ON_ZOOM_SCROLL
End Sub
Public Overrides Function Plot() As System.Single
Dim Range(1) As Integer
If Zoom = 0 Then
Range(1) = price.Bar.count - 1
Else
Range(1) = Price.IndexForDate(ActiveChart.ZoomEndDate)
End If
Range(0) = Range(1) + 1 - RangePattern
Dim BarA As Integer = Range(0)
If Range(0) >= 0 Then
For i As Integer = Range(0) To Range(1)
If Price.Bar.LowValue(i) <= Price.Bar.LowValue(BarA) Then
BarA = i
End If
Next
If BarA - Range(0) < NewLowPer AndAlso BarA > 0 Then
Dim Count As Integer = 0
For i As Integer = BarA - 1 To 0 Step -1
Count += 1
If Price.Bar.LowValue(i) <= Price.Bar.LowValue(BarA) Then
BarA = i
Count = 0
End If
If Count >= NewLowPer Then
Range(0) = BarA
Exit For
End If
Next
End If
If BarA < Range(1) - 1 Then
Dim ABretr As Single = Single.NaN
Dim ABpercentRetr As Single
Dim BarB As Integer = BarA
Dim BarBqualified(1) As Integer
BarBqualified(0) = BarA
BarBqualified(1) = BarA
Dim BarC As Integer = BarA
Dim BarCQualified As Integer = BarA
Dim Ctxt As String
Dim L1 As Integer
L1 = BarA
For i As Integer = BarA + 1 To Range(1) - 1
If Price.Bar.HighValue(i) > Price.Bar.HighValue(BarB) Then
BarB = i
BarC = BarB
ABretr = PullBackPercent * (Price.Bar.HighValue(BarB) - Price.Bar.LowValue(BarA)) / 100
End If
If Price.Bar.lowValue(i) < Price.Bar.highValue(BarB) - ABretr AndAlso i > BarB AndAlso _
price.Bar.lowvalue(i) < price.Bar.lowvalue(BarB) Then
If BarC = BarB Then
BarC = i
Else If Price.Bar.LowValue(i) < Price.Bar.LowValue(BarC) Then
BarC = i
End If
BarBqualified(0) = BarB
If BarC > BarCqualified Then
For j As Integer = i To Range(1) - 1
If Price.Bar.lowValue(j) <= Price.Bar.lowValue(j - 1) AndAlso _
Price.Bar.lowValue(j) <= Price.Bar.lowValue(j + 1) Then
L1 = j
BarCqualified = BarC
BarBqualified(1) = BarBqualified(0)
ABpercentRetr = (price.Bar.highvalue(BarBqualified(1)) - price.Bar.lowvalue(BarCqualified)) / _
(price.Bar.highvalue(BarBqualified(1)) - price.Bar.lowvalue(BarA)) * 100
Ctxt = "C=" & ABpercentRetr.ToString("N2") & "%"
Exit For
End If
Next
End If
End If
Next
If BarCqualified > BarBqualified(1) Then
Dim k As Integer = L1 + 1
If k <= Range(1) Then
Dim entry As Single = Price.Bar.LowValue(BarCQualified)
Dim B As Single
Dim retr As Single
Dim projection As Single
Dim steptrgt As Single = EntryPercent * (Price.Bar.HighValue(BarBqualified(1)) - Price.Bar.LowValue(BarA)) / 100
Dim AB As Single = price.Bar.highvalue(barBqualified(1)) - price.Bar.lowvalue(BarA)
Dim BC As Single = Price.Bar.HighValue(BarBqualified(1)) - price.Bar.lowvalue(BarCqualified)
retr = 100 * BC / AB
entry = entry + steptrgt
B = entry + steptrgt
k += 1
Do Until Price.Bar.Value(k) > entry OrElse k > Range(1)
k += 1
Loop
If Price.Bar.Value(k) > entry AndAlso k <= Range(1) Then
Dim PRZlow As Single
Dim PRZlowtxt As String
Dim PRZhigh As Single
Dim PRZhightxt As String
Dim D As Single
D = price.Bar.lowvalue(BarCqualified) + (Price.Bar.HighValue(BarBqualified(1)) - Price.Bar.LowValue(BarA))
Select Case retr
Case <= 38.2
PRZlow = price.Bar.lowvalue(BarCqualified) + BC * 2.618
PRZlowtxt = "261.8%BC"
PRZhigh = price.Bar.lowvalue(BarCqualified) + BC * 2.618
PRZhightxt = "261.8%BC"
Case 38.2 To 50
PRZlow = price.Bar.lowvalue(BarCqualified) + BC * 2
PRZlowtxt = "200%BC"
PRZhigh = price.Bar.lowvalue(BarCqualified) + BC * 2.618
PRZhightxt = "261.8%BC"
Case 50 To 61.8
PRZlow = price.Bar.lowvalue(BarCqualified) + BC * 1.618
PRZlowtxt = "161.8%BC"
PRZhigh = price.Bar.lowvalue(BarCqualified) + BC * 2
PRZhightxt = "200%BC"
Case 61.8 To 70.7
PRZlow = price.Bar.lowvalue(BarCqualified) + BC * 1.41
PRZlowtxt = "141%BC"
PRZhigh = price.Bar.lowvalue(BarCqualified) + BC * 1.618
PRZhightxt = "161.8%BC"
Case 70.7 To 78.6
PRZlow = price.Bar.lowvalue(BarCqualified) + BC * 1.27
PRZlowtxt = "127%BC"
PRZhigh = price.Bar.lowvalue(BarCqualified) + BC * 1.41
PRZhightxt = "141%BC"
Case 78.6 To 88.6
PRZlow = price.Bar.lowvalue(BarCqualified) + BC * 1.13
PRZlowtxt = "113%BC"
PRZhigh = price.Bar.lowvalue(BarCqualified) + BC * 1.27
PRZhightxt = "127%BC"
Case 88.6 To 100
PRZlow = price.Bar.lowvalue(BarCqualified) + BC * 1.13
PRZlowtxt = "113%BC"
PRZhigh = price.Bar.lowvalue(BarCqualified) + BC * 1.13
PRZhightxt = "113%BC"
End Select
k += 1
Do Until Price.Bar.Value(k) > PRZlow OrElse k > Range(1)
k += 1
Loop
If Price.Bar.Value(k) > PRZlow AndAlso k <= Range(1) Then
k += 1
Do Until Price.Bar.Value(k) > D OrElse k > Range(1)
k += 1
Loop
If Price.Bar.Value(k) > D AndAlso k <= Range(1) Then
k += 1
Do Until Price.Bar.Value(k) > PRZhigh OrElse k > Range(1)
k += 1
Loop
End If
End If
End If
End If
End If
End If
End If
end function
End Class

quick example:

GLD reversed out of the down PRZ zone, defined by a 200% projection and D

a note on the condition that I'm using to sort a watchlist:

In case of a down pattern, it triggeres when price breaks a level to the DOWNside only.

This is correct, in case you use these patterns to take aggresive trades at the "entry" level.

However you can take trades when price reverse out of the PRZ zone, in which case price surpasses the PRZ level to the UPside. so I have to either rewrite the condition, or add another one to sort for reversals to the UPside.

Hope this makes sense.

caution
 Posted : Friday, May 3, 2013 11:31:41 AM
Registered User
Joined: 5/5/2010
Posts: 185

Pthegreat

Ctxt = "C=" & ABpercentRetr.ToString("N2") & "%"

In reference to above line, can the high/low value of the bar be added?

pthegreat
 Posted : Friday, May 3, 2013 12:40:19 PM

Registered User
Joined: 6/15/2008
Posts: 1,356

we could probably plot a line at the high of point C of a ABCDup pattern and a line at the low of point C of a down pattern, like so:, and add txt to point C with the lowofbar (ABCDup), and highofbar on ABCDup

good idea, to get a very early entry on the pattern, right?

caution
 Posted : Friday, May 3, 2013 12:57:28 PM
Registered User
Joined: 5/5/2010
Posts: 185

That is correct, my objective is to use the value at point C as a SellStop (low of bar).

Not sure if a condition can be created at that point also ?

MCPP
 Posted : Thursday, May 30, 2013 5:33:15 PM
Registered User
Joined: 8/20/2012
Posts: 27

New member here, and first a thank you to Pthegreat for posting all your work re:harmonics.

I was on your other thread and downloaded your excel sheet and have been playing around with that. I'm really impressed with how accurate it is.

That thread brought me here, and it looks like the formula above is an automated way to identify AB=CD patterns.

The Worden site is new to me and I've been testing a few indicators, trying to learn the system, but; I'm at a loss as to how to input your code.

I'm opening the indicator formula box, then pasting your formula. I end up with an error message.

I'm probably doing somthing really basic that is wrong - not sure where to look for answers.

Perhaps this is a question for Bruce L, don't know.

Any suggestions appreciated.

Thanks

pthegreat
 Posted : Thursday, May 30, 2013 7:06:21 PM

Registered User
Joined: 6/15/2008
Posts: 1,356

welcome MCPP

did a quick video on how to add the indicators/conditions.

couple of notes:

once you have them working, rightclick the indicator, and select edit.

right top corner of the popupscreen you'll see the userinput variables for the indicator

although the PullbackPercent is set to 38.2 at default, I usually change it to 37, and sometimes, once you get some experience finding the patterns, you might want to experiment with the RangePattern setting. I use setting s between 150 and 300 or so. It simply limits the amount of bars within the indicator can qualify a pattern.

Hope this helps.

MCPP
 Posted : Thursday, May 30, 2013 7:36:42 PM
Registered User
Joined: 8/20/2012
Posts: 27

Great, thanks for the info pthegreat.. I will give it a try tomorrow.

masayang
 Posted : Thursday, May 30, 2013 7:40:41 PM
Registered User
Joined: 5/10/2013
Posts: 7

Here is an another new member.  I'm new to StockFinder as well as harmonics, but I learned harmonics had great potential for swing trades. I appreciate pthegreat (Peter?) for providing us a nice coding example.

While I was using and reading Peter's code from this thread, I thought I could improve the implementation;

Using ATR to remove *noise* from ZigZag

I sometimes got annoyed by the fact that a small spike/dip of price would trigger flipping AB=CD target. Since I'm a midium term swing trader, I wanted to ignore those small price movement, then I found someone wrote a code that uses ATR  to determin the threshold of ZigZag. See http://forums.worden.com/default.aspx?g=posts&t=42846

Decoupling of model and view (aka "separation of concerns")

As a Python programmer, I would say most of those examples of RealCode are !#\$@!#%*\$. Many people are stuffing up monolithtic code into Plot() method. I still think Plot() is a good place to write a simple and small indicator, but I disagree to put everything inside Plot() when the indicator is complicated.

So.... I wrote my own version of AB=CD indicator. I would say this is an MVP (Minimum Viable Product). It only provides AB=CD target at this moment. I'll add more features day by day.

```
Public partial Class RealCodeIndicator
Inherits RealCodeIndicator_base
Public Overrides function Plot() as System.Single
' Original: http://forums.worden.com/default.aspx?g=posts&t=42846

'# Period = UserInput.Single = 14
'# Factor = UserInput.Single = 3

Static ZZ As MyZigZag
Static ABCD As ABCD

If isFirstBar Then
ZZ = New MyZigZag(Price, Period, Factor)
ABCD = New ABCD()
Plot = Single.NaN
Else
ZZ.PrePlot(Price)
If ZZ.IsExtreme(Price) Then
End If
ZZ.PostPlot(Price, Factor)
End If
If isLastBar Then AddToOutput(ZZ.GetExtremeDate(), ZZ.GetExtremePrice)
Plot = Single.NaN

end function
End Class

Class ABCD
Private _Extremes(4) As Single

Public Sub New()
_Extremes(0) = Single.NaN
_Extremes(1) = Single.NaN
_Extremes(2) = Single.NaN
_Extremes(3) = Single.NaN
End Sub

Public Sub AddExtreme(Value As Single)
_Extremes(3) = _Extremes(2)
_Extremes(2) = _Extremes(1)
_Extremes(1) = _Extremes(0)
_Extremes(0) = Value
End Sub
End Class

Class MyZigZaG
Private _TR As Single
Private _TermRatio As Single
Private _ATR As Single
Private _SumWeight As Single
Private _Weight As Single
Private _ExtDate As Date
Private _Extreme As Single
Private _Tstop As Single
Private _State As ZZState

Public Sub New(Price, Period, Factor)
_TR = Price.High - Price.Low
_TermRatio = (Period - 1) / Period
_ATR = _TR
_SumWeight = _TermRatio + 1
_Weight = 1 / _SumWeight
_ExtDate = Price.DateValue

If _StartsFromExtremeLow(Price) Then
_Extreme = Price.Low
_Tstop = System.Math.Max(Price.High, _Extreme + Factor * _ATR)
_State = ZZState.Down
Else
_Extreme = Price.High
_Tstop = System.Math.Min(Price.Low, _Extreme - Factor * _ATR)
_State = ZZState.Up
End If
End Sub

Private Function _StartsFromExtremeLow(Price) As Boolean
Return  Price.High(-1) - System.Math.Min(Price.Low, Price.Low(-1)) < _
System.Math.Max(Price.High, Price.High(-1)) - Price.Low(-1)
End Function

Public Function GetExtremeDate() As Date
Return _ExtDate
End Function

Public Function GetExtremePrice() As Single
Return _Extreme
End Function

Private Sub _SetDownState()
_State = ZZState.Down
End Sub

Private Sub _SetUpState()
_State = ZZState.Up
End Sub

Public Sub PrePlot(Price)
_TR = (Price.High - Price.Low + _
System.Math.Abs(Price.High - Price.Last(1)) + _
System.Math.Abs(Price.Last(1) - Price.Low)) / 2
_ATR = _ATR * (1 - _Weight) + _Weight * _TR
_SumWeight = _SumWeight * _TermRatio + 1
_Weight = 1 / _SumWeight
End Sub

Private Function _IsUp() As Boolean
Return _State = ZZState.Up
End Function

Private Function _IsDown() As Boolean
Return _State = ZZState.Down
End Function

Private Sub _UpdateDirectionToDown(Price, Factor)
_SetDownState()
_Extreme = Price.Low
_ExtDate = Price.DateValue
_TStop = System.Math.Max(Price.High, GetExtremePrice() + factor * _ATR)
End Sub

Private Sub _UpdateDirectionToUp(Price, Factor)
_SetUpState()
_Extreme = Price.High
_ExtDate = Price.DateValue
_TStop = System.Math.Min(Price.Low, GetExtremePrice() - factor * _ATR)
End Sub

Private Sub _UpdateDirection(Price, Factor)
If _IsUp() And (Price.Low < _TStop) Then
_UpdateDirectionToDown(Price, Factor)
ElseIf _IsDown() And (Price.High > _TStop) Then
_UpdateDirectionToUp(Price, Factor)
End If
End Sub

Private Sub _UpdateExtremeHigh(Price, Factor)
If Price.High >= GetExtremePrice() Then
_Extreme = Price.High
_ExtDate = Price.DateValue
End If
_TStop = System.Math.Max(_TStop, GetExtremePrice() - factor * _ATR)
End Sub

Private Sub _UpdateExtremeLow(Price, Factor)
If Price.Low <= GetExtremePrice Then
_Extreme = Price.Low
_ExtDate = Price.DateValue
End If
_TStop = System.Math.Min(_TStop, GetExtremePrice() + Factor * _ATR)
End Sub
Private Sub _UpdateExtreme(Price, Factor)
If _IsUp() Then
_UpdateExtremeHigh(Price, Factor)
Else
_UpdateExtremeLow(Price, Factor)
End If
End Sub

Public Sub PostPlot(Price, Factor)
_UpdateDirection(Price, Factor)
_UpdateExtreme(Price, Factor)
End Sub

Public Function IsExtreme(Price) As Boolean
If _state = ZZState.Up And Price.Low < _TStop Then Return True
If _State = ZZState.Down And Price.High > _TStop Then Return True
Return False
End Function
End Class

Enum ZZState
Up = 1
Down = 2
End Enum

```
masayang
 Posted : Thursday, May 30, 2013 7:52:07 PM
Registered User
Joined: 5/10/2013
Posts: 7

Oops. Discard previous code as I pasted a wrong one. Here is the working version.

```Public partial Class RealCodeIndicator
Inherits RealCodeIndicator_base
Public Overrides function Plot() as System.Single
' Original: http://forums.worden.com/default.aspx?g=posts&t=42846

'# Period = UserInput.Single = 14
'# Factor = UserInput.Single = 3

Static ZZ As MyZigZag
Static ABCD As ABCD

If isFirstBar Then
ZZ = New MyZigZag(Price, Period, Factor)
ABCD = New ABCD()
Plot = Single.NaN
Else
ZZ.PrePlot(Price)
If ZZ.IsExtreme(Price) Then
End If
ZZ.PostPlot(Price, Factor)
End If
If isLastBar Then
End If

Plot = Single.NaN
End Function
End Class

Class ABCD
Private _Extremes(4) As Single
Private _Output As String

Public Sub New()
_Extremes(0) = Single.NaN
_Extremes(1) = Single.NaN
_Extremes(2) = Single.NaN
_Extremes(3) = Single.NaN
_Output = ""
End Sub

Public Sub AddExtreme(Value As Single)
_Extremes(3) = _Extremes(2)
_Extremes(2) = _Extremes(1)
_Extremes(1) = _Extremes(0)
_Extremes(0) = Value
End Sub

Private Sub _AddToOutput(Str As String)
_Output = _Output & Str & System.Environment.NewLine
End Sub

Private Function _OutputAsC()
Dim Out As String = "If this is C Then" & System.Environment.NewLine
Dim AB As Single = _Extremes(1) - _Extremes(2)
Return Out & " D would be " & AB + _Extremes(0)
End Function

Private Function _OutputAsD()
Dim Out As String = "If this is D Then" & System.Environment.NewLine
Dim AB As Single = _Extremes(2) - _Extremes(3)
Return Out & " Target would be " & AB + _Extremes(1)
End Function

Public Function Display() As String
Return _Output
End Function
End Class

Class MyZigZaG
Private _TR As Single
Private _TermRatio As Single
Private _ATR As Single
Private _SumWeight As Single
Private _Weight As Single
Private _ExtDate As Date
Private _Extreme As Single
Private _Tstop As Single
Private _State As ZZState

Public Sub New(Price, Period, Factor)
_TR = Price.High - Price.Low
_TermRatio = (Period - 1) / Period
_ATR = _TR
_SumWeight = _TermRatio + 1
_Weight = 1 / _SumWeight
_ExtDate = Price.DateValue

If _StartsFromExtremeLow(Price) Then
_Extreme = Price.Low
_Tstop = System.Math.Max(Price.High, _Extreme + Factor * _ATR)
_State = ZZState.Down
Else
_Extreme = Price.High
_Tstop = System.Math.Min(Price.Low, _Extreme - Factor * _ATR)
_State = ZZState.Up
End If
End Sub

Private Function _StartsFromExtremeLow(Price) As Boolean
Return  Price.High(-1) - System.Math.Min(Price.Low, Price.Low(-1))  _TStop) Then
_UpdateDirectionToUp(Price, Factor)
End If
End Sub

Private Sub _UpdateExtremeHigh(Price, Factor)
If Price.High >= GetExtremePrice() Then
_Extreme = Price.High
_ExtDate = Price.DateValue
End If
_TStop = System.Math.Max(_TStop, GetExtremePrice() - factor * _ATR)
End Sub

Private Sub _UpdateExtremeLow(Price, Factor)
If Price.Low  _TStop Then Return True
Return False
End Function
End Class

Enum ZZState
Up = 1
Down = 2
End Enum

```
pthegreat
 Posted : Tuesday, July 2, 2013 10:03:25 PM

Registered User
Joined: 6/15/2008
Posts: 1,356

thanks for the sharing masayang, but the second code, has errors

masayang
 Posted : Wednesday, July 3, 2013 1:45:16 AM
Registered User
Joined: 5/10/2013
Posts: 7

Hmm. That code works on my environment, SF 5.0.39.17229 on Windows Server 2012.  What kind of error did you get actually?

jas0501
 Posted : Wednesday, July 3, 2013 10:34:27 AM
Registered User
Joined: 12/31/2005
Posts: 2,499

QUOTE (masayang)

Hmm. That code works on my environment, SF 5.0.39.17229 on Windows Server 2012.  What kind of error did you get actually?

In your code where is

`ZZ.PostPlot(Price, Factor)`
masayang
 Posted : Thursday, July 11, 2013 1:46:38 AM
Registered User
Joined: 5/10/2013
Posts: 7

Sorry folks. I confirmed that code didn't work.

masayang
 Posted : Thursday, July 11, 2013 1:56:49 AM
Registered User
Joined: 5/10/2013
Posts: 7

Here is an updated version. Now it displays AB=CD target as well as BAT, Gartley, Crab, or Butterfly target when available.

```	Public Overrides function Plot() as System.Single
' Original: http://forums.worden.com/default.aspx?g=posts&t=42846

'# Period = UserInput.Single = 14
'# Factor = UserInput.Single = 3

Static ZZ As MyZigZag
Static XABCD As XABCD

If isFirstBar Then
ZZ = New MyZigZag(Price, Period, Factor)
XABCD = New XABCD()
Plot = Single.NaN
Else
ZZ.PrePlot(Price)
If ZZ.IsExtreme(Price) Then
End If
ZZ.PostPlot(Price, Factor)
End If
If isLastBar Then
End If

Plot = Single.NaN

end function
End Class

Class XABCD
Private _Extremes(5) As Single
Private _Output As String

Public Sub New()
_Extremes(0) = Single.NaN 'D
_Extremes(1) = Single.NaN 'C
_Extremes(2) = Single.NaN 'B
_Extremes(3) = Single.NaN 'A
_Extremes(4) = Single.NaN 'X
_Output = ""
End Sub

Public Sub AddExtreme(Value As Single)
_Extremes(4) = _Extremes(3)
_Extremes(3) = _Extremes(2)
_Extremes(2) = _Extremes(1)
_Extremes(1) = _Extremes(0)
_Extremes(0) = Value
End Sub

Private Function XA() As Single
Return _Extremes(3) - _Extremes(4)
End Function

Private Function AB() As Single
Return _Extremes(3) - _Extremes(2)
End Function

Private Function BC() As Single
Return _Extremes(1) - _Extremes(2)
End Function

Private Function CD() As Single
Return _Extremes(1) - _Extremes(0)
End Function

Private Function isCrab() As Boolean
'AB >= 0.382XA and AB <=0.618XA
If AB() < 0.352 * XA() Then Return False
If AB() > 0.648 * XA() Then Return False
'BC >= 0.382AB and BC <= 0.886AB
If BC() < 0.352 * AB() Then Return False
If BC() > 0.916 * AB() Then Return False
'CD >= 2.618BC and CD <= 3.618CD
'If CD() < 2.588 * BC() Then Return False
'If CD() > 3.648 * BC() Then Return False
Return True
End Function

Private Function isDeepCrab() As Boolean
'AB=0.886XA
If AB() < 0.856 * XA() Then Return False
If AB() > 0.916 * XA() Then Return False
'BC >= 0.382AB and BC < 0.886AB
If BC() < 0.352 * AB() Then Return False
If BC() > 0.916 * AB() Then Return False
'CD >= 2.24BC and CD <= 3.618BC
'If CD() < 2.21 * BC() Then Return False
'If CD() > 3.648 * BC() Then Return False
Return True
End Function

Private Function isButterfly() As Boolean
'AB=0.786XA
If AB() < 0.756 * XA() Then Return False
If AB() > 0.816 * XA() Then Return False
'BC>=0.382AB and BC<=0.886AB
If BC() < 0.352 * AB() Then Return False
If BC() > 0.916 * AB() Then Return False
'CD>=1.618BC and CD<=2.24BC
'If CD() < 1.588 * BC() Then Return False
'If CD() > 2.27 * BC() Then Return False
Return True
End Function

Private Function isGartley() As Boolean
'AB=0.618XA
If AB() < 0.588 * XA() Then Return False
If AB() > 0.648 * XA() Then Return False
'=and(C7>=0.382, C7<=0.886)
'BC >= 0.382AB and BC <= 0.886AB
If BC() < 0.352 * AB() Then Return False
If BC() > 0.916 * AB() Then Return False
'CD >= 1.13BC and CD <= 1.618BC
'If CD() < 1.1 * BC() Then Return False
'If CD() > 0.916 * BC() Then Return False
Return True
End Function

Private Function isBAT() As Boolean
'AB >= 0.382XA AND AB <= 0.5XA
If AB() < 0.382 * XA() Then Return False
If AB() > 0.5 * XA() Then Return False
'BC >= 0.382AB and BC <= 0.886AB
If BC() < 0.382 * AB() Then Return False
If BC() > 0.886 * AB() Then Return False
'=and(C8>=1.618, C8<=2.618)
'CD >= 1.618BC and CD <= 2.618BC
'If CD() < 1.618 * BC() Then Return False
'If CD() > 2.618 * BC() Then Return False
Return True
End Function

Private Sub _AddToOutput(Str As String)
_Output = _Output & Str & System.Environment.NewLine
End Sub

Private Function BatTarget() As Single
'A - * 0.886XA
Return _Extremes(3) - XA() * 0.886
End Function

Private Function GartleyTarget() As Single
'A - 0.786XA
return _Extremes(3)-0.786*XA()
End Function

Private Function CrabTarget() As Single
'A - 1.618*XA
return _Extremes(3) - 1.618*XA()
End Function

Private Function DeepCrabTarget() As Single
return CrabTarget()
End Function

Private Function ButterflyTarget() As Single
'A - 1.27XA()
Return _Extremes(3) - 1.27 * XA()
End Function

Private Function ABCDTarget() As Single
Return _Extremes(1) - AB()
End Function

Public Function Display() As String
_AddToOutput("AB=CD Target=" & ABCDTarget())
If isBAT() Then _AddToOutput("BAT Target=" & BatTarget())
If isGartley() Then _AddToOutput("Gartley Target=" & GartleyTarget())
If isCrab() Then _AddToOutput("Crab Target=" & CrabTarget())
If isDeepCrab() Then _AddToOutput("Deep Crab Target=" & DeepCrabTarget())
If isButterfly() Then _AddToOutput("Butterfly Target=" & ButterflyTarget())
Return _Output
End Function
End Class

Class MyZigZaG
Private _TR As Single
Private _TermRatio As Single
Private _ATR As Single
Private _SumWeight As Single
Private _Weight As Single
Private _ExtDate As Date
Private _Extreme As Single
Private _Tstop As Single
Private _State As ZZState

Public Sub New(Price, Period, Factor)
_TR = Price.High - Price.Low
_TermRatio = (Period - 1) / Period
_ATR = _TR
_SumWeight = _TermRatio + 1
_Weight = 1 / _SumWeight
_ExtDate = Price.DateValue

If _StartsFromExtremeLow(Price) Then
_Extreme = Price.Low
_Tstop = System.Math.Max(Price.High, _Extreme + Factor * _ATR)
_State = ZZState.Down
Else
_Extreme = Price.High
_Tstop = System.Math.Min(Price.Low, _Extreme - Factor * _ATR)
_State = ZZState.Up
End If
End Sub

Private Function _StartsFromExtremeLow(Price) As Boolean
Return  Price.High(-1) - System.Math.Min(Price.Low, Price.Low(-1)) < _
System.Math.Max(Price.High, Price.High(-1)) - Price.Low(-1)
End Function

Public Function GetExtremeDate() As Date
Return _ExtDate
End Function

Public Function GetExtremePrice() As Single
Return _Extreme
End Function

Private Sub _SetDownState()
_State = ZZState.Down
End Sub

Private Sub _SetUpState()
_State = ZZState.Up
End Sub

Public Sub PrePlot(Price)
_TR = (Price.High - Price.Low + _
System.Math.Abs(Price.High - Price.Last(1)) + _
System.Math.Abs(Price.Last(1) - Price.Low)) / 2
_ATR = _ATR * (1 - _Weight) + _Weight * _TR
_SumWeight = _SumWeight * _TermRatio + 1
_Weight = 1 / _SumWeight
End Sub

Private Function _IsUp() As Boolean
Return _State = ZZState.Up
End Function

Private Function _IsDown() As Boolean
Return _State = ZZState.Down
End Function

Private Sub _UpdateDirectionToDown(Price, Factor)
_SetDownState()
_Extreme = Price.Low
_ExtDate = Price.DateValue
_TStop = System.Math.Max(Price.High, GetExtremePrice() + factor * _ATR)
End Sub

Private Sub _UpdateDirectionToUp(Price, Factor)
_SetUpState()
_Extreme = Price.High
_ExtDate = Price.DateValue
_TStop = System.Math.Min(Price.Low, GetExtremePrice() - factor * _ATR)
End Sub

Private Sub _UpdateDirection(Price, Factor)
If _IsUp() And (Price.Low < _TStop) Then
_UpdateDirectionToDown(Price, Factor)
ElseIf _IsDown() And (Price.High > _TStop) Then
_UpdateDirectionToUp(Price, Factor)
End If
End Sub

Private Sub _UpdateExtremeHigh(Price, Factor)
If Price.High >= GetExtremePrice() Then
_Extreme = Price.High
_ExtDate = Price.DateValue
End If
_TStop = System.Math.Max(_TStop, GetExtremePrice() - factor * _ATR)
End Sub

Private Sub _UpdateExtremeLow(Price, Factor)
If Price.Low <= GetExtremePrice Then
_Extreme = Price.Low
_ExtDate = Price.DateValue
End If
_TStop = System.Math.Min(_TStop, GetExtremePrice() + Factor * _ATR)
End Sub
Private Sub _UpdateExtreme(Price, Factor)
If _IsUp() Then
_UpdateExtremeHigh(Price, Factor)
Else
_UpdateExtremeLow(Price, Factor)
End If
End Sub

Public Sub PostPlot(Price, Factor)
_UpdateDirection(Price, Factor)
_UpdateExtreme(Price, Factor)
End Sub

Public Function IsExtreme(Price) As Boolean
If _state = ZZState.Up And Price.Low < _TStop Then Return True
If _State = ZZState.Down And Price.High > _TStop Then Return True
Return False
End Function
End Class

Enum ZZState
Up = 1
Down = 2
End Enum

```
masayang
 Posted : Thursday, July 11, 2013 1:57:42 AM
Registered User
Joined: 5/10/2013
Posts: 7

Now I need to find how to create a condition from my indicator.

masayang
 Posted : Sunday, August 4, 2013 12:51:55 AM
Registered User
Joined: 5/10/2013
Posts: 7

I've just implemented a new feature so that I can find Bat, Crab, Gartley, or Butterfly pattern in the chart. You can find the latest code from https://gist.github.com/masayang/215ca81f6e137857b160

Attached image is AKAM 15min chart. It's amazing the price reversed at \$46.66, which is 1.618XA.

wwrightjuly4
 Posted : Thursday, October 10, 2013 9:51:38 PM
Gold Customer

Joined: 4/10/2006
Posts: 954

interesting.

wwrightjuly4
 Posted : Thursday, October 10, 2013 9:57:44 PM
Gold Customer

Joined: 4/10/2006
Posts: 954

Tried to get this to post a value so I could sort and search for, but it won't sort.  Not sure why.

none = 0
Bat     = 1
Gartley = 2
Crab    = 4
Butterfly = 8
ABCD    = 16

So, this creates a code  i.e.  1 is a BAT

3 is BAT + Gartley

7 is Bat+GART+Crab

15 is bat +gart+crab+butterfly

31 is bat+gart+crab + butterfly+abcd

and any other combination creates a code which you can identify the patterns covered by the chart.

<WBIGuid("3b6b8e77-cbd1-4ca5-bfd4-5672750d6203"),FriendlyName("RealCodeIndicator"),BlockTemplateEmptyMethodOnly()> _
Public Partial Class RealCodeIndicator
Inherits RealCodeIndicator_base

Public Overrides Function Plot() As System.Single
' Original: http://forums.worden.com/default.aspx?g=posts&t=42846
'# Period = UserInput.Single = 14
'# Factor = UserInput.Single = 3
'# Delta = UserInput.Single = 3
Static ZZ As MyZigZag
Static XABCD As XABCD
If isFirstBar Then
ZZ = New MyZigZag(Price, Period, Factor)
XABCD = New XABCD(Delta)
plot = Single.NaN
Else
ZZ.PrePlot(Price)
If ZZ.IsExtreme(Price) Then
End If
ZZ.PostPlot(Price, Factor)
End If
plot = XABCD.GetCode()

end function
End Class

Class XABCD
Private _X,_A, _B, _C, _D As Single
Private _Output As String
Private _Delta As Single
Private code As XabcdCode

Public Function GetCode() As Single
code = XabcdCode.none
CheckABCD(code)
CheckBat(code)
CheckGartley(code)
CheckCrab(code)
CheckButterfly(code)
Return code
End Function

Public Sub New(Delta As Single)
_Delta = Delta
_A = Single.NaN
_B = Single.NaN
_C = Single.NaN
_D = Single.NaN
_Output = ""
End Sub
Public Sub AddExtreme(Value As Single)
_X = _A
_A = _B
_B = _C
_C = _D
_D = Value
End Sub
Private Function _ABCDTarget() As Single
'BC=0.382AB
If _BC() >= 0.382 * (1 - _delta / 100) * _AB() And _BC() <= 0.382 * (1 + _delta / 100) * _AB() Then
Return _C - 2.24 * _BC()
End If
'BC=0.5AB
If _BC() >= 0.5 * (1 - _delta / 100) * _AB() And _BC() <= 0.5 * (1 + _delta / 100) * _AB() Then
Return _C - 2 * _BC()
End If
'BC=0.618AB
If _BC() >= 0.618 * (1 - _delta / 100) * _AB() And _BC() <= 0.618 * (1 + _delta / 100) * _AB() Then
Return _C - 1.618 * _BC()
End If
'BC=0.707AB
If _BC() >= 0.707 * (1 - _delta / 100) * _AB() And _BC() <= 0.707 * (1 + _delta / 100) * _AB() Then
Return _C - 1.41 * _BC()
End If
'BC=0.786AB
If _BC() >= 0.786 * (1 - _delta / 100) * _AB() And _BC() <= 0.786 * (1 + _delta / 100) * _AB() Then
Return _C - 1.27 * _BC()
End If
'BC=0.886AB
If _BC() >= 0.886 * (1 - _delta / 100) * _AB() And _BC() <= 0.886 * (1 + _delta / 100) * _AB() Then
Return _C - 1.13 * _BC()
End If

return single.NaN
End Function
Private Function _BatTarget() As Single
'AB<0.618XA
If _AB() > 0.618 * (1 + _delta / 100) * _XA() Then Return Single.NaN
'BC is 0.382AB~0.886AB
If _BC() < 0.382 * (1 - _delta / 100) * _AB() Then Return Single.NaN
If _BC() > 0.886 * (1 + _delta / 100) * _AB() Then Return Single.NaN
Return _A - 0.886 * _XA()
End Function
Private Function _GartleyTarget() As Single
'AB=0.618XA
If _AB() > 0.618 * (1 + _delta / 100) * _XA() Then Return Single.NaN
If _AB() < 0.618 * (1 - _delta / 100) * _XA() Then Return Single.NaN
'BC is 0.382AB~0.886AB
If _BC() < 0.382 * (1 - _delta / 100) * _AB() Then Return Single.NaN
If _BC() > 0.886 * (1 + _delta / 100) * _AB() Then Return Single.NaN
Return _A - 0.786 * _XA()
End Function
Private Function _CrabTarget() As Single
'AB=0.382~0.618XA
If _AB() > 0.618 * (1 + _delta / 100) * _XA() Then Return Single.NaN
If _AB() < 0.382 * (1 - _delta / 100) * _XA() Then Return Single.NaN
'BC is 0.382AB~0.886AB
If _BC() < 0.382 * (1 - _delta / 100) * _AB() Then Return Single.NaN
If _BC() > 0.886 * (1 + _delta / 100) * _AB() Then Return Single.NaN
Return _A - 1.618 * _XA()
End Function
Private Function _ButterflyTarget() As Single
'AB=0.786
If _AB() > 0.786 * (1 + _delta / 100) * _XA() Then Return Single.NaN
If _AB() < 0.786 * (1 - _delta / 100) * _XA() Then Return Single.NaN
'BC is 0.382AB~0.886AB
If _BC() < 0.382 * (1 - _delta / 100) * _AB() Then Return Single.NaN
If _BC() > 0.886 * (1 + _delta / 100) * _AB() Then Return Single.NaN
Return _A - 1.27 * _XA()
End Function
Private Function _XA() As Single
Return _A - _X
End Function
Private Function _AB() As Single
Return _A - _B
End Function
Private Function _BC() As Single
Return _C - _B
End Function
Private Function _CD() As Single
Return _C - _D
End Function

Private Sub _AddToOutput(Str As String)
_Output = _Output & Str & System.Environment.NewLine
End Sub
Private Function CheckBat(ByRef code As XabcdCode) As String
Dim Target As Single
Target = _BatTarget()
If Not system.Single.isnan(target) Then
code = (code Or XABCDCode.Bat)
Return "BAT Target=" & Target
Else
Return ""
End If
End Function
Private Function CheckGartley(ByRef code As XabcdCode) As String
Dim Target As Single
Target = _GartleyTarget()
If Not system.Single.isnan(target) Then
code = (code Or XABCDCode.Gartley)
Return "Gartley Target=" & Target
Else
Return ""
End If

End Function

Private Function CheckCrab(ByRef code As XabcdCode) As String
Dim Target As Single
Target = _CrabTarget()
If Not system.Single.isnan(target) Then
code = (code Or XABCDCode.Crab)
Return "Crab Target=" & Target
Else
Return ""
End If

End Function
Private Function CheckButterfly(ByRef code As XabcdCode) As String
Dim Target As Single
Target = _ButterflyTarget()
If Not system.Single.isnan(target) Then
code = (code Or XABCDCode.Butterfly)
Return "Butterfly Target=" & Target
Else
Return ""
End If

End Function
Private Function CheckABCD(ByRef code As XabcdCode) As String
Dim Target As Single
Target = _ABCDTarget()
If Not system.Single.isnan(target) Then
code = (code Or XABCDCode.ABCD)
Return "ABCD Target=" & target
Else
Return ""
End If
End Function
Public Function Display() As String
code = XabcdCode.none
Return _Output
End Function
End Class

Class MyZigZaG
Private _TR As Single
Private _TermRatio As Single
Private _ATR As Single
Private _SumWeight As Single
Private _Weight As Single
Private _ExtDate As Date
Private _Extreme As Single
Private _Tstop As Single
Private _State As ZZState

Public Sub New(Price As Object, Period As Single, Factor As Single)
_TR = Price.High - Price.Low
_TermRatio = (Period - 1) / Period
_ATR = _TR
_SumWeight = _TermRatio + 1
_Weight = 1 / _SumWeight
_ExtDate = Price.DateValue
If _StartsFromExtremeLow(Price) Then
_Extreme = Price.Low
_Tstop = System.Math.Max(Price.High, _Extreme + Factor * _ATR)
_State = ZZState.Down
Else
_Extreme = Price.High
_Tstop = System.Math.Min(Price.Low, _Extreme - Factor * _ATR)
_State = ZZState.Up
End If
End Sub
Private Function _StartsFromExtremeLow(Price As Object) As Boolean
Return Price.High(-1) - System.Math.Min(Price.Low, Price.Low(-1)) < _
System.Math.Max(Price.High, Price.High(-1)) - Price.Low(-1)
End Function
Public Function GetExtremeDate() As Date
Return _ExtDate
End Function
Public Function GetExtremePrice() As Single
Return _Extreme
End Function
Private Sub _SetDownState()
_State = ZZState.Down
End Sub
Private Sub _SetUpState()
_State = ZZState.Up
End Sub
Public Sub PrePlot(Price As Object)
_TR = (Price.High - Price.Low + _
System.Math.Abs(Price.High - Price.Last(1)) + _
System.Math.Abs(Price.Last(1) - Price.Low)) / 2
_ATR = _ATR * (1 - _Weight) + _Weight * _TR
_SumWeight = _SumWeight * _TermRatio + 1
_Weight = 1 / _SumWeight
End Sub
Private Function _IsUp() As Boolean
Return _State = ZZState.Up
End Function
Private Function _IsDown() As Boolean
Return _State = ZZState.Down
End Function
Private Sub _UpdateDirectionToDown(Price As Object, Factor As Single)
_SetDownState()
_Extreme = Price.Low
_ExtDate = Price.DateValue
_TStop = System.Math.Max(Price.High, GetExtremePrice() + factor * _ATR)
End Sub
Private Sub _UpdateDirectionToUp(Price As Object, Factor As Single)
_SetUpState()
_Extreme = Price.High
_ExtDate = Price.DateValue
_TStop = System.Math.Min(Price.Low, GetExtremePrice() - factor * _ATR)
End Sub
Private Sub _UpdateDirection(Price As Object, Factor As Single)
If _IsUp() And (Price.Low < _TStop) Then
_UpdateDirectionToDown(Price, Factor)
ElseIf _IsDown() And (Price.High > _TStop) Then
_UpdateDirectionToUp(Price, Factor)
End If
End Sub

Private Sub _UpdateExtremeHigh(Price As Object, Factor As Single)
If Price.High >= GetExtremePrice() Then
_Extreme = Price.High
_ExtDate = Price.DateValue
End If
_TStop = System.Math.Max(_TStop, GetExtremePrice() - factor * _ATR)
End Sub
Private Sub _UpdateExtremeLow(Price As Object, Factor As Single)
If Price.Low <= GetExtremePrice Then
_Extreme = Price.Low
_ExtDate = Price.DateValue
End If
_TStop = System.Math.Min(_TStop, GetExtremePrice() + Factor * _ATR)
End Sub
Private Sub _UpdateExtreme(Price As Object, Factor As Single)
If _IsUp() Then
_UpdateExtremeHigh(Price, Factor)
Else
_UpdateExtremeLow(Price, Factor)
End If
End Sub
Public Sub PostPlot(Price As Object, Factor As Single)
_UpdateDirection(Price, Factor)
_UpdateExtreme(Price, Factor)
End Sub
Public Function IsExtreme(Price As Object) As Boolean
If _state = ZZState.Up And Price.Low < _TStop Then Return True
If _State = ZZState.Down And Price.High > _TStop Then Return True
Return False
End Function
End Class

Enum ZZState
Up = 1
Down = 2
End Enum

Enum XabcdCode
none = 0
Bat     = 1
Gartley = 2
Crab    = 4
Butterfly = 8
ABCD    = 16
End Enum

caution
 Posted : Tuesday, May 27, 2014 1:13:04 PM
Registered User
Joined: 5/5/2010
Posts: 185

Bruce,

In reference to pthegreat posting on Tuesday, April 09, 2013 8:50:42 PM , is it possible to create a condition for fib levels 23.6%,113%, 127%,141%,

161.8%, 200%, 261.8%, D ... 0.50 cents above/below.?

caution
 Posted : Friday, May 30, 2014 3:04:04 PM
Registered User
Joined: 5/5/2010
Posts: 185

Yes, No, Maybe....

Bruce_L
 Posted : Friday, May 30, 2014 3:11:14 PM

Worden Trainer

Joined: 10/7/2004
Posts: 65,138

It is too involved for me to say yes or no yet, so I guess the answer is maybe.

It is possible that pthegreat, jas0501 or masayang might have a more definitive answer.

I'm currently working on creating RealCode in the context of a personal training session. As a PTS costs \$95 per hour, it gets priority over free RealCode in the forums.

You can schedule a PTS with a TC2000 trainer as well if you would like. They can also build scans for you. Ask them anything related to TC2000 (or StockFinder with advance notice). Have them set up your layouts, customize your charts, teach you general functionality, etc. Such sessions can be conducted via remote assistance where the trainer can view your machine and save any changes they make and teach you some things along the way. These sessions are \$95.00 an hour with a one hour minimum. Call the sales line at 1-800-776-4940 or email us at support@TC2000.com to arrange one of these sessions.

-Bruce
Personal Criteria Formulas
TC2000 Support Articles
 Posted : Sunday, June 1, 2014 8:37:59 AM
Registered User
Joined: 5/6/2014
Posts: 81

QUOTE (caution)

In reference to pthegreat posting on Tuesday, April 09, 2013 8:50:42 PM , is it possible to create a condition for fib levels 23.6%,113%, 127%,141%,

161.8%, 200%, 261.8%, D ... 0.50 cents above/below.?

caution; I'm sorry but I recently entered into a professional partnership, and I can't share any code anymore.

Having said that, if you go through all my posts, I'm sure from what I have shared and from Bruce's invaluable input, you should be able to do what you're asking.

good luck,

pthegreat

 Posted : Wednesday, June 4, 2014 9:25:23 AM
Registered User
Joined: 5/6/2014
Posts: 81

QUOTE (Bruce_L)

I'm currently working on creating RealCode in the context of a personal training session. As a PTS costs \$95 per hour, it gets priority over free RealCode in the forums.

Bruce, one suggestion;

I have noticed that a lot of old posts have dissapeared. I assume that the forum can hold only a certain amount of data, and then older posts get removed?

There was a lot of valuable info that I can't find anymore. Is it possible that Worden would make a downloadable archive available of all posts, since beginning of time?

Regards,

P.

Bruce_L
 Posted : Wednesday, June 4, 2014 2:30:34 PM

Worden Trainer

Joined: 10/7/2004
Posts: 65,138

The main reason a post would disappear is because it is in a forum which has been removed the website.

These forums are removed for a variety of reasons, but the biggest is that the forum is for an outdated product which is no longer available or supported. When the information in the forums is about a more recent similar product which is still available, the information is frequently wrong or misleading.

If you have a particular topic you want to look at which is not available, you can make a request that it be moved into one of the currently available forums. We might be able to get a particular post moved, but the older removed forum as a whole in which the post is contained will not be re-added.

-Bruce
Personal Criteria Formulas
TC2000 Support Articles
Users browsing this topic
Guest-1

 Forum Jump Customer Training & Support - Ask a Trainer - TC2000 version 12/18 - Ask a Trainer - TC2000 version 7 - Ask a Trainer - StockFinder 5.0 - PCFs, EasyScan and Custom Indicators General Discussions - Stock and Market Talk - TC2000 version 12 or 18 - TC2000 version 7 - StockFinder 5.0 - RealCode for StockFinder 5.0 Tutorial Videos - TC2000 version 12 tutorial videos - TC2000 version 7 tutorial videos You cannot post new topics in this forum. You cannot reply to topics in this forum. You cannot delete your posts in this forum. You cannot edit your posts in this forum. You cannot create polls in this forum. You cannot vote in polls in this forum.