Registered User Joined: 12/12/2006 Posts: 77
|
Good Afternoon!
I am seeking help creating a PCF or Scan that searches for stocks with a 20 EMA crossing a 50 EMA. They would be crossing with an increase of at least 25% over yesterday's volume. The movement may be either up or down - preferably in separate searches.
Thank you for your assistance!
ucsense1
|
Worden Trainer
Joined: 10/7/2004 Posts: 65,138
|
Please try one of the following Personal Criteria Formulas:
EMA20 xUp EMA50 with 25% increase in Volume:
XAVGC20 > XAVGC50 AND XAVGC20.1 <= XAVGC50.1 AND V > 1.25 * V1
EMA20 xDn EMA50 with 25% increase in Volume:
XAVGC20 < XAVGC50 AND XAVGC20.1 >= XAVGC50.1 AND V > 1.25 * V1
EMA20 crossing EMA50 (either direction) with 25% increase in Volume:
SGN(XAVGC20 - XAVGC50) <> SGN(XAVGC20.1 - XAVGC50.1) AND V > 1.25 * V1
You may wish to review the following:
Moving Average PCF Templates
Things to check if your moving averages don't "seem right" or "seem to match"
How to create a Personal Criteria Forumula (PCF)
PCF Formula Descriptions
-Bruce Personal Criteria Formulas TC2000 Support Articles
|
Registered User Joined: 12/12/2006 Posts: 77
|
Thanks, Bruce! Just what I needed!
|
Worden Trainer
Joined: 10/7/2004 Posts: 65,138
|
You're welcome.
-Bruce Personal Criteria Formulas TC2000 Support Articles
|
Registered User Joined: 12/12/2006 Posts: 77
|
Recently, I came upon a Condition you created which required a bit of time to create. This is something I have been working on for a period of time but nowhere near as close to the formula you created. This particular Condition concentrated on the downside.
I am more interested in the upside. I am attaching the formula for the downside condition and am asking you to assist me to the upside. I know there are a number of changes necessary but, as I know next to nothing of Real Code, I fear that I would screw it up on my own.
Here is the Condition:
'# BBTop = chart.BollingerBands.0
'# BBBottom = chart.BollingerBands.1
'# Percent = UserInput.Single = 1
'# DiffTop = UserInput.Single = 0.3
'# DiffBot = UserInput.Single = 0.3
'# Cumulative
Static MaDownCount As Integer
Static WithinCount As Integer
Static SixMonthBars As Integer
If isFirstBar Then
If isYearly Then
SixMonthBars = 1
Else If isQuarterly Then
SixMonthBars = 2
Else If isMonthly Then
SixMonthBars = 6
Else If isWeekly Then
SixMonthBars = 26
Else If BarInterval.TotalDays >= 1 Then
SixMonthBars = 126 / BarInterval.TotalDays
Else
SixMonthBars = 126 * System.Math.Ceiling(390 / BarInterval.TotalMinutes)
End If
End If
If Price.Last(3) <= BBTop.Value(3) AndAlso _
Price.Last(3) >= BBBottom.Value(3) AndAlso _
Price.Open(3) <= BBTop.Value(3) AndAlso _
Price.Open(3) >= BBBottom.Value(3) Then
WithinCount += 1
Else
WithinCount = 0
End If
If CurrentIndex >= 20 Then
If Price.Last < Price.Last(10) AndAlso _
Price.Last < Price.Last(20) Then
MaDownCount += 1
Else
MaDownCount = 0
End If
If CurrentIndex >= 22 Then
If 100 * (1 - BBBottom.Value(1) / BBBottom.AVG(5, 3)) > Percent AndAlso _
MaDownCount >= 3 AndAlso _
WithinCount >= 5 AndAlso _
Price.Last > Price.Open AndAlso _
Price.Last(1) < Price.Open(1) AndAlso _
Price.Last(1) < BBBottom.Value(1) AndAlso _
Price.Last(2) < Price.Open(2) Then
Dim Avg As Single = (BBTop.AVG(5, 3) + BBBottom.AVG(5, 3)) / 2
Dim LowPerc(1) As Single
LowPerc(0) = Single.MaxValue
LowPerc(1) = Single.MaxValue
Dim AvgPerc(1) As Single
AvgPerc(0) = 0
AvgPerc(1) = 0
For j As Integer = 0 To 4
Dim Perc As Single = 100 * (1 - Avg / BBTop.Value(3 + j))
LowPerc(0) = System.Math.Min(LowPerc(0), Perc)
AvgPerc(0) += Perc
Perc = 100 * (1 - BBBottom.Value(3 + j) / AVG)
LowPerc(1) = System.Math.Min(LowPerc(1), Perc)
AvgPerc(1) += Perc
Next
AvgPerc(0) = AvgPerc(0) / 5
AvgPerc(1) = AvgPerc(1) / 5
Dim HighPeriod As Integer = System.Math.Min(CurrentIndex, SixMonthBars)
If AvgPerc(0) - LowPerc(0) < DiffTop AndAlso _
AvgPerc(1) - LowPerc(1) < DiffBot AndAlso _
Price.MaxClose(5, 3) >= .94 * Price.MaxHigh(HighPeriod) Then
Pass
End If
End If
Else
SetIndexInvalid
End If
Else
MaDownCount = 0
SetIndexInvalid
End If
If you need any further information, I will supply it ASAP.
Thank you!
ucsense1
|
Worden Trainer
Joined: 10/7/2004 Posts: 65,138
|
I seriously would have little idea in how to convert the supposedly downside RealCode Condition given into an upside version (I did not even know it concentrated on the downside) as much of the RealCode is just rote implementation of SageRx's algorithms into RealCode.
Some things would seem obvious. Everything having to do with WithinCount and SixMonthBars would remain the same same.
Static MaDownCount As Integer
And:
If Price.Last < Price.Last(10) AndAlso _
Price.Last < Price.Last(20) Then
MaDownCount += 1
Else
MaDownCount = 0
End If
And:
MaDownCount >= 3 AndAlso _
Would probably become:
Static MaUpCount As Integer
And:
If Price.Last > Price.Last(10) AndAlso _
Price.Last > Price.Last(20) Then
MaUpCount += 1
Else
MaUpCount = 0
End If
And:
MaUpCount >= 3 AndAlso _
While:
Price.Last > Price.Open AndAlso _
Price.Last(1) < Price.Open(1) AndAlso _
Price.Last(1) < BBBottom.Value(1) AndAlso _
Price.Last(2) < Price.Open(2) Then
Would probalby become:
Price.Last < Price.Open AndAlso _
Price.Last(1) > Price.Open(1) AndAlso _
Price.Last(1) > BBTop.Value(1) AndAlso _
Price.Last(2) > Price.Open(2) Then
A also suspect:
Dim HighPeriod As Integer = System.Math.Min(CurrentIndex, SixMonthBars)
And:
Price.MaxClose(5, 3) >= .94 * Price.MaxHigh(HighPeriod) Then
Would become
Dim LowPeriod As Integer = System.Math.Min(CurrentIndex, SixMonthBars)
And:
Price.MinClose(5, 3) <= 1.06 * Price.MinLow(LowPeriod) Then
But I really do not know how or even if anything relating to calculating the variables used in the following two lines would change (and that constitutes a significant portion of the RealCode):
If AvgPerc(0) - LowPerc(0) < DiffTop AndAlso _
AvgPerc(1) - LowPerc(1) < DiffBot AndAlso _
-Bruce Personal Criteria Formulas TC2000 Support Articles
|