Worden Trainer
Joined: 10/7/2004 Posts: 65,138
|
Let's start with a horizontal channel to explore the concept a bit to see if it is possible or might need modification before layering on the added complexity of linear regression channel.
So in this case, we might just set the upper bound as the top 10% of the range and the lower bound as the bottom 10% of the range.
You aren't really interested in the number of bar that price is in the ranges, but are instead interested in say the number of times price has crossed up or crossed down through the boundaries of these ranges.
So, the simple way to write say the number of times price has crossed down through the upper range of the most recent 20 bars in the most 20 bars might be the following.
CountTrue(XDOWN(10 * C, 9 * MAXH20 + MINL20), 20)
Or maybe:
CountTrue(XDOWN(STOC20, 90), 20)
You would probably also want a crossup versions so you could set minimum values for both (and the 20 in the formula is adjustable, but I am using something small for the next part).
CountTrue(XUP(10 * C, MAXH20 + 9 * MINL20), 20)
Or maybe:
CountTrue(XUP(STOC20, 10), 10)
The problem with this approach is that you really want the highs and lows of the most recent 100 bars fixed instead of changing at each bar. This requires testing each bar separately for both the cross down.
IIF(XDOWN(10 * C, 9 * MAXH20 + MINL20), 1, 0) + IIF(XDOWN(10 * C1, 9 * MAXH20 + MINL20), 1, 0) + IIF(XDOWN(10 * C2, 9 * MAXH20 + MINL20), 1, 0) + IIF(XDOWN(10 * C3, 9 * MAXH20 + MINL20), 1, 0) + IIF(XDOWN(10 * C4, 9 * MAXH20 + MINL20), 1, 0) + IIF(XDOWN(10 * C5, 9 * MAXH20 + MINL20), 1, 0) + IIF(XDOWN(10 * C6, 9 * MAXH20 + MINL20), 1, 0) + IIF(XDOWN(10 * C7, 9 * MAXH20 + MINL20), 1, 0) + IIF(XDOWN(10 * C8, 9 * MAXH20 + MINL20), 1, 0) + IIF(XDOWN(10 * C9, 9 * MAXH20 + MINL20), 1, 0) + IIF(XDOWN(10 * C10, 9 * MAXH20 + MINL20), 1, 0) + IIF(XDOWN(10 * C11, 9 * MAXH20 + MINL20), 1, 0) + IIF(XDOWN(10 * C12, 9 * MAXH20 + MINL20), 1, 0) + IIF(XDOWN(10 * C13, 9 * MAXH20 + MINL20), 1, 0) + IIF(XDOWN(10 * C14, 9 * MAXH20 + MINL20), 1, 0) + IIF(XDOWN(10 * C15, 9 * MAXH20 + MINL20), 1, 0) + IIF(XDOWN(10 * C16, 9 * MAXH20 + MINL20), 1, 0) + IIF(XDOWN(10 * C17, 9 * MAXH20 + MINL20), 1, 0) + IIF(XDOWN(10 * C18, 9 * MAXH20 + MINL20), 1, 0) + IIF(XDOWN(10 * C19, 9 * MAXH20 + MINL20), 1, 0)
And the cross up.
IIF(XUP(10 * C, MAXH20 + 9 * MINL20), 1, 0) + IIF(XUP(10 * C1, MAXH20 + 9 * MINL20), 1, 0) + IIF(XUP(10 * C2, MAXH20 + 9 * MINL20), 1, 0) + IIF(XUP(10 * C3, MAXH20 + 9 * MINL20), 1, 0) + IIF(XUP(10 * C4, MAXH20 + 9 * MINL20), 1, 0) + IIF(XUP(10 * C5, MAXH20 + 9 * MINL20), 1, 0) + IIF(XUP(10 * C6, MAXH20 + 9 * MINL20), 1, 0) + IIF(XUP(10 * C7, MAXH20 + 9 * MINL20), 1, 0) + IIF(XUP(10 * C8, MAXH20 + 9 * MINL20), 1, 0) + IIF(XUP(10 * C9, MAXH20 + 9 * MINL20), 1, 0) + IIF(XUP(10 * C10, MAXH20 + 9 * MINL20), 1, 0) + IIF(XUP(10 * C11, MAXH20 + 9 * MINL20), 1, 0) + IIF(XUP(10 * C12, MAXH20 + 9 * MINL20), 1, 0) + IIF(XUP(10 * C13, MAXH20 + 9 * MINL20), 1, 0) + IIF(XUP(10 * C14, MAXH20 + 9 * MINL20), 1, 0) + IIF(XUP(10 * C15, MAXH20 + 9 * MINL20), 1, 0) + IIF(XUP(10 * C16, MAXH20 + 9 * MINL20), 1, 0) + IIF(XUP(10 * C17, MAXH20 + 9 * MINL20), 1, 0) + IIF(XUP(10 * C18, MAXH20 + 9 * MINL20), 1, 0) + IIF(XUP(10 * C19, MAXH20 + 9 * MINL20), 1, 0)
The formula will quickly end up being too long and slow to be practical or post in the forums as the periods increase. And this formula is simpler than trying to do this in a sloping channel with a linear regression channel.
I just don't think the technique scales well enough to go to the longer periods I suspect you want or to using linear regression to support sloped channels instead of horizontal channels.
-Bruce Personal Criteria Formulas TC2000 Support Articles
|
Worden Trainer
Joined: 10/7/2004 Posts: 65,138
|
I can't think of a good way. How many bars back you have to go from the current bar could be written as follows.
IIF(ABS(C / C1 - 1) >= .055, 1, IIF(ABS(C / C2 - 1) >= .055, 2, IIF(ABS(C / C3 - 1) >= .055, 3, IIF(ABS(C / C4 - 1) >= .055, 4, IIF(ABS(C / C5 - 1) >= .055, 5, IIF(ABS(C / C6 - 1) >= .055, 6, IIF(ABS(C / C7 - 1) >= .055, 7, IIF(ABS(C / C8 - 1) >= .055, 8, IIF(ABS(C / C9 - 1) >= .055, 9, IIF(ABS(C / C10 - 1) >= .055, 10, IIF(ABS(C / C11 - 1) >= .055, 11, IIF(ABS(C / C12 - 1) >= .055, 12, IIF(ABS(C / C13 - 1) >= .055, 13, IIF(ABS(C / C14 - 1) >= .055, 14, IIF(ABS(C / C15 - 1) >= .055, 15, IIF(ABS(C / C16 - 1) >= .055, 16, IIF(ABS(C / C17 - 1) >= .055, 17, IIF(ABS(C / C18 - 1) >= .055, 18, IIF(ABS(C / C19 - 1) >= .055, 19, IIF(ABS(C / C20 - 1) >= .055, 20, IIF(ABS(C / C21 - 1) >= .055, 21, IIF(ABS(C / C22 - 1) >= .055, 22, IIF(ABS(C / C23 - 1) >= .055, 23, IIF(ABS(C / C24 - 1) >= .055, 24, IIF(ABS(C / C25 - 1) >= .055, 25, IIF(ABS(C / C26 - 1) >= .055, 26, IIF(ABS(C / C27 - 1) >= .055, 27, IIF(ABS(C / C28 - 1) >= .055, 28, IIF(ABS(C / C29 - 1) >= .055, 29, IIF(ABS(C / C30 - 1) >= .055, 30, IIF(ABS(C / C31 - 1) >= .055, 31, IIF(ABS(C / C32 - 1) >= .055, 32, IIF(ABS(C / C33 - 1) >= .055, 33, IIF(ABS(C / C34 - 1) >= .055, 34, IIF(ABS(C / C35 - 1) >= .055, 35, IIF(ABS(C / C36 - 1) >= .055, 36, IIF(ABS(C / C37 - 1) >= .055, 37, IIF(ABS(C / C38 - 1) >= .055, 38, IIF(ABS(C / C39 - 1) >= .055, 39, IIF(ABS(C / C40 - 1) >= .055, 40, IIF(ABS(C / C41 - 1) >= .055, 41, IIF(ABS(C / C42 - 1) >= .055, 42, IIF(ABS(C / C43 - 1) >= .055, 43, IIF(ABS(C / C44 - 1) >= .055, 44, IIF(ABS(C / C45 - 1) >= .055, 45, IIF(ABS(C / C46 - 1) >= .055, 46, IIF(ABS(C / C47 - 1) >= .055, 47, IIF(ABS(C / C48 - 1) >= .055, 48, IIF(ABS(C / C49 - 1) >= .055, 49, IIF(ABS(C / C50 - 1) >= .055, 50, IIF(ABS(C / C51 - 1) >= .055, 51, IIF(ABS(C / C52 - 1) >= .055, 52, IIF(ABS(C / C53 - 1) >= .055, 53, IIF(ABS(C / C54 - 1) >= .055, 54, IIF(ABS(C / C55 - 1) >= .055, 55, IIF(ABS(C / C56 - 1) >= .055, 56, IIF(ABS(C / C57 - 1) >= .055, 57, IIF(ABS(C / C58 - 1) >= .055, 58, IIF(ABS(C / C59 - 1) >= .055, 59, IIF(ABS(C / C60 - 1) >= .055, 60, IIF(ABS(C / C61 - 1) >= .055, 61, IIF(ABS(C / C62 - 1) >= .055, 62, IIF(ABS(C / C63 - 1) >= .055, 63, IIF(ABS(C / C64 - 1) >= .055, 64, IIF(ABS(C / C65 - 1) >= .055, 65, IIF(ABS(C / C66 - 1) >= .055, 66, IIF(ABS(C / C67 - 1) >= .055, 67, IIF(ABS(C / C68 - 1) >= .055, 68, IIF(ABS(C / C69 - 1) >= .055, 69, IIF(ABS(C / C70 - 1) >= .055, 70, IIF(ABS(C / C71 - 1) >= .055, 71, IIF(ABS(C / C72 - 1) >= .055, 72, IIF(ABS(C / C73 - 1) >= .055, 73, IIF(ABS(C / C74 - 1) >= .055, 74, IIF(ABS(C / C75 - 1) >= .055, 75, IIF(ABS(C / C76 - 1) >= .055, 76, IIF(ABS(C / C77 - 1) >= .055, 77, IIF(ABS(C / C78 - 1) >= .055, 78, IIF(ABS(C / C79 - 1) >= .055, 79, IIF(ABS(C / C80 - 1) >= .055, 80, IIF(ABS(C / C81 - 1) >= .055, 81, IIF(ABS(C / C82 - 1) >= .055, 82, IIF(ABS(C / C83 - 1) >= .055, 83, IIF(ABS(C / C84 - 1) >= .055, 84, IIF(ABS(C / C85 - 1) >= .055, 85, IIF(ABS(C / C86 - 1) >= .055, 86, IIF(ABS(C / C87 - 1) >= .055, 87, IIF(ABS(C / C88 - 1) >= .055, 88, IIF(ABS(C / C89 - 1) >= .055, 89, IIF(ABS(C / C90 - 1) >= .055, 90, IIF(ABS(C / C91 - 1) >= .055, 91, IIF(ABS(C / C92 - 1) >= .055, 92, IIF(ABS(C / C93 - 1) >= .055, 93, IIF(ABS(C / C94 - 1) >= .055, 94, IIF(ABS(C / C95 - 1) >= .055, 95, IIF(ABS(C / C96 - 1) >= .055, 96, IIF(ABS(C / C97 - 1) >= .055, 97, IIF(ABS(C / C98 - 1) >= .055, 98, IIF(ABS(C / C99 - 1) >= .055, 99, IIF(ABS(C / C100 - 1) >= .055, 100, 1 / 0))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
And you could put that inside a 100 period AVG() function and still be fast enough that I can post it in the forums.
AVG(IIF(ABS(C / C1 - 1) >= .055, 1, IIF(ABS(C / C2 - 1) >= .055, 2, IIF(ABS(C / C3 - 1) >= .055, 3, IIF(ABS(C / C4 - 1) >= .055, 4, IIF(ABS(C / C5 - 1) >= .055, 5, IIF(ABS(C / C6 - 1) >= .055, 6, IIF(ABS(C / C7 - 1) >= .055, 7, IIF(ABS(C / C8 - 1) >= .055, 8, IIF(ABS(C / C9 - 1) >= .055, 9, IIF(ABS(C / C10 - 1) >= .055, 10, IIF(ABS(C / C11 - 1) >= .055, 11, IIF(ABS(C / C12 - 1) >= .055, 12, IIF(ABS(C / C13 - 1) >= .055, 13, IIF(ABS(C / C14 - 1) >= .055, 14, IIF(ABS(C / C15 - 1) >= .055, 15, IIF(ABS(C / C16 - 1) >= .055, 16, IIF(ABS(C / C17 - 1) >= .055, 17, IIF(ABS(C / C18 - 1) >= .055, 18, IIF(ABS(C / C19 - 1) >= .055, 19, IIF(ABS(C / C20 - 1) >= .055, 20, IIF(ABS(C / C21 - 1) >= .055, 21, IIF(ABS(C / C22 - 1) >= .055, 22, IIF(ABS(C / C23 - 1) >= .055, 23, IIF(ABS(C / C24 - 1) >= .055, 24, IIF(ABS(C / C25 - 1) >= .055, 25, IIF(ABS(C / C26 - 1) >= .055, 26, IIF(ABS(C / C27 - 1) >= .055, 27, IIF(ABS(C / C28 - 1) >= .055, 28, IIF(ABS(C / C29 - 1) >= .055, 29, IIF(ABS(C / C30 - 1) >= .055, 30, IIF(ABS(C / C31 - 1) >= .055, 31, IIF(ABS(C / C32 - 1) >= .055, 32, IIF(ABS(C / C33 - 1) >= .055, 33, IIF(ABS(C / C34 - 1) >= .055, 34, IIF(ABS(C / C35 - 1) >= .055, 35, IIF(ABS(C / C36 - 1) >= .055, 36, IIF(ABS(C / C37 - 1) >= .055, 37, IIF(ABS(C / C38 - 1) >= .055, 38, IIF(ABS(C / C39 - 1) >= .055, 39, IIF(ABS(C / C40 - 1) >= .055, 40, IIF(ABS(C / C41 - 1) >= .055, 41, IIF(ABS(C / C42 - 1) >= .055, 42, IIF(ABS(C / C43 - 1) >= .055, 43, IIF(ABS(C / C44 - 1) >= .055, 44, IIF(ABS(C / C45 - 1) >= .055, 45, IIF(ABS(C / C46 - 1) >= .055, 46, IIF(ABS(C / C47 - 1) >= .055, 47, IIF(ABS(C / C48 - 1) >= .055, 48, IIF(ABS(C / C49 - 1) >= .055, 49, IIF(ABS(C / C50 - 1) >= .055, 50, IIF(ABS(C / C51 - 1) >= .055, 51, IIF(ABS(C / C52 - 1) >= .055, 52, IIF(ABS(C / C53 - 1) >= .055, 53, IIF(ABS(C / C54 - 1) >= .055, 54, IIF(ABS(C / C55 - 1) >= .055, 55, IIF(ABS(C / C56 - 1) >= .055, 56, IIF(ABS(C / C57 - 1) >= .055, 57, IIF(ABS(C / C58 - 1) >= .055, 58, IIF(ABS(C / C59 - 1) >= .055, 59, IIF(ABS(C / C60 - 1) >= .055, 60, IIF(ABS(C / C61 - 1) >= .055, 61, IIF(ABS(C / C62 - 1) >= .055, 62, IIF(ABS(C / C63 - 1) >= .055, 63, IIF(ABS(C / C64 - 1) >= .055, 64, IIF(ABS(C / C65 - 1) >= .055, 65, IIF(ABS(C / C66 - 1) >= .055, 66, IIF(ABS(C / C67 - 1) >= .055, 67, IIF(ABS(C / C68 - 1) >= .055, 68, IIF(ABS(C / C69 - 1) >= .055, 69, IIF(ABS(C / C70 - 1) >= .055, 70, IIF(ABS(C / C71 - 1) >= .055, 71, IIF(ABS(C / C72 - 1) >= .055, 72, IIF(ABS(C / C73 - 1) >= .055, 73, IIF(ABS(C / C74 - 1) >= .055, 74, IIF(ABS(C / C75 - 1) >= .055, 75, IIF(ABS(C / C76 - 1) >= .055, 76, IIF(ABS(C / C77 - 1) >= .055, 77, IIF(ABS(C / C78 - 1) >= .055, 78, IIF(ABS(C / C79 - 1) >= .055, 79, IIF(ABS(C / C80 - 1) >= .055, 80, IIF(ABS(C / C81 - 1) >= .055, 81, IIF(ABS(C / C82 - 1) >= .055, 82, IIF(ABS(C / C83 - 1) >= .055, 83, IIF(ABS(C / C84 - 1) >= .055, 84, IIF(ABS(C / C85 - 1) >= .055, 85, IIF(ABS(C / C86 - 1) >= .055, 86, IIF(ABS(C / C87 - 1) >= .055, 87, IIF(ABS(C / C88 - 1) >= .055, 88, IIF(ABS(C / C89 - 1) >= .055, 89, IIF(ABS(C / C90 - 1) >= .055, 90, IIF(ABS(C / C91 - 1) >= .055, 91, IIF(ABS(C / C92 - 1) >= .055, 92, IIF(ABS(C / C93 - 1) >= .055, 93, IIF(ABS(C / C94 - 1) >= .055, 94, IIF(ABS(C / C95 - 1) >= .055, 95, IIF(ABS(C / C96 - 1) >= .055, 96, IIF(ABS(C / C97 - 1) >= .055, 97, IIF(ABS(C / C98 - 1) >= .055, 98, IIF(ABS(C / C99 - 1) >= .055, 99, IIF(ABS(C / C100 - 1) >= .055, 100, 1 / 0)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))), 100)
But there are problems with this. I have it set to return 1 / 0 if it takes more than 100 bars. This is fine if you aren't averaging it because if it returns an error or puts ... in a WatchList Column you know it took more than 100 bars.
If you average this though, any 1 / 0 over the period of the average is going to make it so the value won't calculate or plot. But I am not sure what value you would substitute for 1 / 0. If you use zero, then the results look better than they should because the average gets lower. Using 101 pretty much just messes up the average as well instead of giving you an accurate picture.
-Bruce Personal Criteria Formulas TC2000 Support Articles
|