Welcome Guest, please sign in to participate in a discussion. Search | Active Topics |

How to create an indicator to count days something has been true Rate this Topic:
Previous Topic · Next Topic Watch this topic · Print this topic ·
STRATEGY11
Posted : Wednesday, September 9, 2009 7:57:06 PM
Registered User
Joined: 4/21/2008
Posts: 81
I'd like to keep a running count of bars during which the stock has been rangebound (e.g. 10% from 20-day high).  I tried something like this but it didn't work.  All I got was zero values.  I think there is a problem with price.MaxHigh(...) because it is not finding the 20-day high one day ago, two days ago, and so on... I think it is bad syntax to do this: MaxHigh(20)(x)?  Please point out what I'm doing wrong.  Thanks.

------------------

Dim count, x As Integer
Count = 0
If islastbar Then
 For x = 0 To 20
  If price.Close(x) > 0.9 * price.MaxHigh(20) And _
   price.Close <= Price.MaxHigh(20) Then count = count + 1
 Next
End If
jas0501
Posted : Wednesday, September 9, 2009 8:23:27 PM
Registered User
Joined: 12/31/2005
Posts: 2,499
price.maxhigh(20,daysAgo) is the syntax

Problems: 
1. You never plotted a value

2. as wrriten only the last day's value will be plotted

Dim count, x As Integer
Count = 0
If islastbar Then
 For x = 0 To 20
  If price.Close(x) > 0.9 * price.MaxHigh(20) And _
   price.Close <= Price.MaxHigh(20) Then count = count + 1
 Next
End If
plot = count

For a continuous plot you can keep a running total

static count as integer
if isfirstbar then
   count = 0
end if
'
' conditionally increment count
'
if price.close > price.maxhigh(20) * 0.09 andalso _
  price.close < price.maxhigh(20) then
   count += 1
endif

'
' potentially decrement count after 21 days have elapsed
' to keep count of last 20 days
'
if currentindex >= 21 then
    if price.close(20) > price.maxhigh(20,20) * 0.90 andalso _
       price.close(20) <= price.maxhigh(20,20) then
        count -= 1
   end if
end if
plot = count




Mark17
Posted : Friday, September 11, 2009 10:51:24 AM
Registered User
Joined: 7/1/2009
Posts: 97

I'd like to see what that looks like, jas0501, but when I enter the following I get errors in line 14 (plot not declared), line 17 (local variable 'count' is already declared in the current block), and line 38 (name 'plot' is not declared):

'*********************************************
'* if Price.Close > Price.Close(1) then Pass *
'*********************************************


Dim count, x As Integer
Count = 0
If islastbar Then
 For x = 0 To 20
  If price.Close(x) > 0.9 * price.MaxHigh(20) And _
   price.Close <= Price.MaxHigh(20) Then count = count + 1
 Next
End If
plot = count


Static count As Integer
If isfirstbar Then
 count = 0
End If
'
' conditionally increment count
'
If price.close > price.maxhigh(20) * 0.09 AndAlso _
 price.close < price.maxhigh(20) Then
 count += 1
End If
'
' potentially decrement count after 21 days have elapsed
' to keep count of last 20 days
'
if currentindex >= 21 then
 if price.close(20) > price.maxhigh(20, 20) * 0.90 andalso _
  price.close(20) <= price.maxhigh(20, 20) then
  count -= 1
 end if
end if
plot = count

Bruce_L
Posted : Friday, September 11, 2009 10:57:09 AM


Worden Trainer

Joined: 10/7/2004
Posts: 65,138
Mark17,
There are three issues I can see.

You appear to be using this in a RealCode Rule. The RealCode needs to be used in a RealCode Indicator because that's the only place in StockFinder where the Plot syntax is currently valid.

You also appear to be combining your RealCode with jas0501's suggested RealCode. You need to eliminate everything above the line (keep the following line and everything below it):

Static count As Integer

There also appears to be a mismatch between the code that increments up and the code that increments down. If I alter the increment up portion to match the increment down portion I end up with something like the following (this is the complete RealCode and should replace everything in the Code tab of a RealCode Indicator):

Static count As Integer
If isfirstbar Then
    count = 0
End If
'
' conditionally increment count
'
If currentindex >= 20 AndAlso _
    price.close > price.maxhigh(20) * .9 Then
    count += 1
End If
'
' potentially decrement count
' to keep count of last 20 days
'
If currentindex >= 40 AndAlso _
    price.close(20) > price.maxhigh(20, 20) * .9 Then
    count -= 1
End If

If currentindex >= 39 Then
    plot = count
Else
    plot = Single.NaN
End If

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

Forum Jump
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.