Welcome Guest, please sign in to participate in a discussion. | Search | Active Topics | |
Registered User Joined: 7/1/2009 Posts: 97
|
Searching for "adaptive moving average" returned "an error occurred in the database." Before I go into detail about what I'm looking for, can you tell me if there's a pre-existing thread on anything related to Perry Kaufman's AMA? Thanks.
|
|
Worden Trainer
Joined: 10/7/2004 Posts: 65,138
|
The only topic of which I am aware about the Kaufman Adaptive Moving Average was for creating a Custom Code Block (Kaufman Adaptive moving average). I believe replacing everything in the Code tab of the RealCode Editor with the following should create a RealCode Indicator of a KAMA of Price:
'# Period = UserInput.Integer = 10
'# Cumulative
Static KAMA As Single
Static Sum As Single
If Period >= 1 Then
If CurrentIndex >= Period Then
Sum += System.Math.Abs(Price.Last - Price.Last(1)) - _
System.Math.Abs(Price.Last(Period - 1) - Price.Last(Period))
Dim ER As Single = 0
If Sum > 0 Then
ER = System.Math.Abs(Price.Last - Price.Last(Period - 1)) / Sum
End If
Dim Alpha As Single = (ER * .6015 + .0645) ^ 2
KAMA = (1 - Alpha) * KAMA + Alpha * Price.Last
Else If isFirstBar Then
Sum = 0
KAMA = Price.Last
Else
Sum += System.Math.Abs(Price.Last - Price.Last(1))
Dim ER As Single = 0
If Sum > 0 Then
ER = System.Math.Abs(Price.Last - Price.Last(CurrentIndex)) / Sum
End If
Dim Alpha As Single = (ER * .6015 + .0645) ^ 2
KAMA = (1 - Alpha) * KAMA + Alpha * Price.Last
End If
Plot = KAMA
Else
Plot = Single.NaN
End If
-Bruce Personal Criteria Formulas TC2000 Support Articles
|
|
Registered User Joined: 7/1/2009 Posts: 97
|
Great... now is there an easy way to create rules such as when price crosses above/below the AMA or when other MAs in that pain cross over it? When I open a rule box for either price history or the AMA, the AMA or price history, respectively, are not identified as rule triggers (I'm guessing the reason is because the AMA was synthetically created in RC).
|
|
Registered User Joined: 7/1/2009 Posts: 97
|
"Pane," of course--sorry, it's Sunday morning. :)
|
|
Worden Trainer
Joined: 10/7/2004 Posts: 65,138
|
Drag and Drop the AMA to the Price History Pane and select Overlay to get it in the same Pane. Then right-click on the AMA and select Scaling | Scale With | Price History to get it in the same Scale.
-Bruce Personal Criteria Formulas TC2000 Support Articles
|
|
Registered User Joined: 7/1/2009 Posts: 97
|
Thanks!
|
|
Platinum Customer
Joined: 3/31/2006 Posts: 3,207
|
Bruce
Can this be written for Indicators
I dragged and dropped the indicator and changed all the Price.Last ro AA.Value but doesn't seem accurate
'# AA = indicator.MyAD5WithVolume
'# Period = UserInput.Integer = 10
'# Cumulative
Static KAMA As Single
Static Sum As Single
If Period >= 1 Then
If CurrentIndex >= Period Then
Sum += System.Math.Abs(AA.Value - AA.Value(1)) - _
System.Math.Abs(AA.Value(Period - 1) - AA.Value(Period))
Dim ER As Single = 0
If Sum > 0 Then
ER = System.Math.Abs(AA.Value - AA.Value(Period - 1)) / Sum
End If
Dim Alpha As Single = (ER * .6015 + .0645) ^ 2
KAMA = (1 - Alpha) * KAMA + Alpha * AA.Value
Else If isFirstBar Then
Sum = 0
KAMA = AA.Value
Else
Sum += System.Math.Abs(AA.Value - AA.Value(1))
Dim ER As Single = 0
If Sum > 0 Then
ER = System.Math.Abs(AA.Value - AA.Value(CurrentIndex)) / Sum
End If
Dim Alpha As Single = (ER * .6015 + .0645) ^ 2
KAMA = (1 - Alpha) * KAMA + Alpha * AA.Value
End If
Plot = KAMA
Else
Plot = Single.NaN
End If
|
|
Worden Trainer
Joined: 10/7/2004 Posts: 65,138
|
thnkbigr,
I'm not sure exactly what the issue might be (I don't know anything about the Indicator being averaged), but it might be due to a mismatch between the number of Price Bars and the number of Bars in your Indicator. If that is the case, using AutoLoop = False in the Class tab might be a better option (replace everything below the Inherits line in the Class tab of a RealCod Indicator with the following):
Sub New
AutoLoop = False
'# AA = indicator.MyAD5WithVolume
'# Period = UserInput.Integer = 10
'# Cumulative
End Sub
Public Overrides Function Plot() As System.Single
If Period >= 1 Then
Dim KAMA As Single = AA.Bar.Value(0)
AddToOutput(AA.Bar.DateValue(0), KAMA)
If AA.Bar.Count >= 2 Then
Dim Sum As Single = 0
For i As Integer = 1 To System.Math.Min(Period, AA.Bar.Count) - 1
Sum += System.Math.Abs(AA.Bar.Value(i) - AA.Bar.Value(i - 1))
Dim ER As Single = 0
If Sum > 0 Then
ER = System.Math.Abs(AA.Bar.Value(i) - AA.Bar.Value(0)) / Sum
End If
Dim Alpha As Single = (ER * .6015 + .0645) ^ 2
KAMA = (1 - Alpha) * KAMA + Alpha * AA.Bar.Value(i)
AddToOutput(AA.Bar.DateValue(i), KAMA)
Next
If AA.Bar.Count >= Period + 1 Then
For i As Integer = Period To AA.Bar.Count - 1
Sum += System.Math.Abs(AA.Bar.Value(i) - AA.Bar.Value(i - 1)) - _
System.Math.Abs(AA.Bar.Value(i - Period) - _
AA.Bar.Value(i - Period + 1))
Dim ER As Single = 0
If Sum > 0 Then
ER = System.Math.Abs(AA.Bar.Value(i) - _
AA.Bar.Value(i - Period + 1)) / Sum
End If
Dim Alpha As Single = (ER * .6015 + .0645) ^ 2
KAMA = (1 - Alpha) * KAMA + Alpha * AA.Bar.Value(i)
AddToOutput(AA.Bar.DateValue(i), KAMA)
Next
End If
End If
End If
End Function
End Class
-Bruce Personal Criteria Formulas TC2000 Support Articles
|
|
Platinum Customer
Joined: 3/31/2006 Posts: 3,207
|
Bruce,
I have never done a Class tab yet no matter what I do I get errors
This is what comes up when I click the class tab can you highlight what I need to erase and paste the above.
thx
<WBIGuid("41edfbc8-8f4f-4876-b7de-285c3c216832"),FriendlyName("RealCodeIndicator"),BlockTemplateEmptyMethodOnly()> _
Public partial Class RealCodeIndicator
inherits RealCodeIndicator_base
Public Overrides function Plot() as System.Single
'***************************************
'* Example: Returns the net change *
'* Plot = Price.Close - Price.Close(1) *
'***************************************
end function
End Class
|
|
Worden Trainer
Joined: 10/7/2004 Posts: 65,138
|
Replace everything below the Inherits line in the Class tab of a RealCod Indicator means you need to keep:
<WBIGuid("41edfbc8-8f4f-4876-b7de-285c3c216832"),FriendlyName("RealCodeIndicator"),BlockTemplateEmptyMethodOnly()> _
Public partial Class RealCodeIndicator
inherits RealCodeIndicator_base
And Replace:
Public Overrides function Plot() as System.Single
'***************************************
'* Example: Returns the net change *
'* Plot = Price.Close - Price.Close(1) *
'***************************************
end function
End Class
-Bruce Personal Criteria Formulas TC2000 Support Articles
|
|
Platinum Customer
Joined: 3/31/2006 Posts: 3,207
|
Can I plot the Adaptive MA on High and Lows
I tried the following but is this accurate?
'# Period = UserInput.Integer = 10
'# Cumulative
Static KAMA As Single
Static Sum As Single
If Period >= 1 Then
If CurrentIndex >= Period Then
Sum += System.Math.Abs(Price.Last - Price.Last(1)) - _
System.Math.Abs(Price.Last(Period - 1) - Price.Last(Period))
Dim ER As Single = 0
If Sum > 0 Then
ER = System.Math.Abs(Price.Last - Price.Last(Period - 1)) / Sum
End If
Dim Alpha As Single = (ER * .6015 + .0645) ^ 2
KAMA = (1 - Alpha) * KAMA + Alpha * Price.High
Else If isFirstBar Then
Sum = 0
KAMA = Price.High
Else
Sum += System.Math.Abs(Price.High - Price.High(1))
Dim ER As Single = 0
If Sum > 0 Then
ER = System.Math.Abs(Price.High - Price.High(CurrentIndex)) / Sum
End If
Dim Alpha As Single = (ER * .6015 + .0645) ^ 2
KAMA = (1 - Alpha) * KAMA + Alpha * Price.High
End If
Plot = KAMA
Else
Plot = Single.NaN
End If
|
|
Worden Trainer
Joined: 10/7/2004 Posts: 65,138
|
I'm suspecting you would want to replace every instance of Price.Last with Price.High:
'# Period = UserInput.Integer = 10
'# Cumulative
Static KAMA As Single
Static Sum As Single
If Period >= 1 Then
If CurrentIndex >= Period Then
Sum += System.Math.Abs(Price.High - Price.High(1)) - _
System.Math.Abs(Price.High(Period - 1) - Price.High(Period))
Dim ER As Single = 0
If Sum > 0 Then
ER = System.Math.Abs(Price.High - Price.High(Period - 1)) / Sum
End If
Dim Alpha As Single = (ER * .6015 + .0645) ^ 2
KAMA = (1 - Alpha) * KAMA + Alpha * Price.High
Else If isFirstBar Then
Sum = 0
KAMA = Price.High
Else
Sum += System.Math.Abs(Price.High - Price.High(1))
Dim ER As Single = 0
If Sum > 0 Then
ER = System.Math.Abs(Price.High - Price.High(CurrentIndex)) / Sum
End If
Dim Alpha As Single = (ER * .6015 + .0645) ^ 2
KAMA = (1 - Alpha) * KAMA + Alpha * Price.High
End If
Plot = KAMA
Else
Plot = Single.NaN
End If
But I suppose it is possible that you would want the Alpha based on Price.Last instead of Price.High (if you have multiple Moving Averages and want to use the same Alpha for all of the MAs, you would need to choose something to use that was common to all of the MAs for example - although I'm not sure if this is desirable or not). In such a case, Price.Last might be as good a choice as any:
'# Period = UserInput.Integer = 10
'# Cumulative
Static KAMA As Single
Static Sum As Single
If Period >= 1 Then
If CurrentIndex >= Period Then
Sum += System.Math.Abs(Price.Last - Price.Last(1)) - _
System.Math.Abs(Price.Last(Period - 1) - Price.Last(Period))
Dim ER As Single = 0
If Sum > 0 Then
ER = System.Math.Abs(Price.Last - Price.Last(Period - 1)) / Sum
End If
Dim Alpha As Single = (ER * .6015 + .0645) ^ 2
KAMA = (1 - Alpha) * KAMA + Alpha * Price.High
Else If isFirstBar Then
Sum = 0
KAMA = Price.High
Else
Sum += System.Math.Abs(Price.Last - Price.Last(1))
Dim ER As Single = 0
If Sum > 0 Then
ER = System.Math.Abs(Price.Last - Price.Last(CurrentIndex)) / Sum
End If
Dim Alpha As Single = (ER * .6015 + .0645) ^ 2
KAMA = (1 - Alpha) * KAMA + Alpha * Price.High
End If
Plot = KAMA
Else
Plot = Single.NaN
End If
-Bruce Personal Criteria Formulas TC2000 Support Articles
|
|
Guest-1 |