MetaStock Tips & Tools IN THIS SAMPLE ISSUE Multi-Frame Templates for Custom Formulas ZigZag-Based Volume Histogram New Multi-Frame Features Trade Equity Enhancements Pairs Trading Tests Sudoku Puzzle Active Trader Market Breadth System Market Breadth Portfolios Miscellaneous New & Revised MetaStock Code Self-Installing Formula Contents 1 6 6 8 11 12 17 21 23-34 35 MULTI-FRAME TEMPLATES FOR CUSTOM FORMULAS By Roy Larsen Tools For MetaStock MetaStock Tips & Tools Published by R A Larsen & Associates Palmerston North 4412 NEW ZEALAND Tel: +64 6 358 3723 rlarsen@quik.co.nz www.metastocktips.co.nz © 2004-2013 Roy Larsen Volume 8, Issue 4 September 2012 (Sample) I ’ve recently taken the Multi-Frame Compression/Expansion process one step beyond what was previously possible for the average user. If you’ve looked closely at existing formulas in the "CE" format you might have noticed that only one price per indicator is ever compressed. Although this is usually sufficient when adapting one MetaStock function it can be very limiting if the aim is to adapt a custom formula with two or more standard functions and requiring two or more data arrays. It occurred to me that, since only a small number of MSTT readers are likely to have the confidence and skill to adapt a Multi-Frame formula to their own needs, wouldn’t the task of inserting custom MetaStock code into the Multi-Frame format be much simpler if there was a template to work from? So that’s what I’ve created . Naturally there are a few restrictions on what you can and can't do using this approach. For example, you can only use functions that allow a Data Array and/or Expression parameter to be nominated. Functions that cannot be used are those that default to the underlying O, H, L, C or V data arrays and don’t give you any choice in the matter. Functions that don’t allow the use of compressed data arrays (as provided within a template) can only produce a usable result for the current timeframe of a chart (or exploration data etc.). Another restriction is that your efforts are limited to just 350 or so characters of code. Unfortunately the structure of each supporting template takes up most of the available space. Additional space can be recovered by deleting unnecessary comments. Although this is not my preferred option it may be a necessary one in some instances. All charts in this publication are courtesy of MetaStock September unless 2012 stated otherwise. Page 1 A third obstacle that might be rather more difficult to negotiate is that there are only 4 available variable names over and above those already used by each template. The good news is that several of the existing single-character names are available for recycling if and when they are needed. Names available for recycling include virtually all those not used in the "Expanded result" section of each template. The result of your code must be renamed "K", and only one result from the custom code can be expanded to the required timeframe. However, the two template variables that accept input values ("N" and "R") can be used for a custom formula in addition to the names already available. If "N" is used by your code as something other than an Input() parameter then you must remove both instances of "-N" from the "Expanded result" section. Once the O, H, L, C and V data arrays have been compressed they are represented by the Q, B, Y, K and U variable names. These are the only data arrays that your custom formulas can use. All references to O, H, L, C or V must be changed to Q, B, Y, K or U. Existing variable names can be retained as long as they don’t cause the limit of 20 variable-names to be exceeded. These templates are only available for the D+ and ID Multi-Frame series, and Compression Only (C) versions are listed in addition to the Compression/ Expansion (CE) versions. With Compression Only formulas all variable names otherwise used by the "Expand result" section would also be available for your custom code. To help you get a feel for working with these templates I’ve created one example using custom code for the SellP() MetaStock function. Then there’s a second example using a "Gann-Trend" formula. Multi-Frame versions of the first example already exist, but the point of this exercise is to show you how to insert custom formulas into one of the templates. The custom formula I pulled from my Indicator Builder is shown in Figure 1, and the code after adaptation for template use is shown in Figure 2. {Selling Pressure} N:=10; K:=WC(); Figure 1. TR:=Wilders(HHV(H,2)-LLV(L,2),N); Custom code for the VR:=V/Ref(Wilders(V,N),-1); MetaStock SellP() function. WR:=(K-Ref(K,-1))/Min(K,Ref(K,-1)); CN:=Abs(WR)*K*3/TR; If(WR<=0,VR,VR/Exp(CN)); {Selling Pressure} N:=10; K:=(B+Y+2*K)/4; TR:=Wilders(HHV(B,2)-LLV(Y,2),N); VR:=U/Ref(Wilders(U,N),-1); WR:=(K-Ref(K,-1))/Min(K,Ref(K,-1)); CN:=Abs(WR)*K*3/TR; K:=If(WR<=0,VR,VR/Exp(CN)); Necessary changes have been made to the code in Figure 2 to apply the compressed BYKU data arrays rather than the conventional HLCV data arrays. Dropping this formula into the template and checking that it worked as intended took only me a few minutes. Notice that I didn’t even need to change any of the custom formula’s variable names. Apart from the restrictions I mentioned earlier there’s no reason why you couldn’t adapt some of your own custom indicators to the Multi-Frame format using this method The completed template is shown over the page as Figure 3, and the six basic templates can be found on pages 23 - 28. September 2012 Figure 2. The same custom code after being changed to the MultiFrame template format. Changed data array names are shown as bold and underlined text. Page 2 The second conversion example is shown in Figures 4, 5 and 6 where a "GANNTrend" indicator has been modified for the "D" and "D+" Multi-Frame series. It’s only a few days since a user asked if this was possible, so the indicators shown in Figures 6 & 7 represent a real-life application of templates to the conversion process. {Multi-Frame D+CE SellP} {Constructed using Multi-Frame CE template} {Requires Forum & MSTT DLLs} {Roy Larsen, 2012, 17/8/12} {Proprietary code removed} Indications are that this and related GANN formulas have been around for a long time, even including weekly versions for EOD charts. What my templates demonstrate is a rather painless way to adapt many MS indicators to longer timeframes. Well, "painless" may not be quite the right word because I’m sure that some quite innocuous looking formulas will simply refuse to cooperate. Nevertheless, the conversion of many Metastock indicators to the Multi-Frame format has just gotten a whole lot easier. Figure 3. Here the custom code for the MetaStock SellP() function has been inserted into the Multi-Frame template. Only a few simple changes to data array names were needed to complete the project. Changed data array names are shown as bold and underlined text. September 2012 Page 3 {Gann-Trend 4/27/99} {Swing Direction} {Gann-Swing 4/27/99} {Market swing is defined as:} {Up = 2 higher highs, Down = 2 lower lows.} Us:=BarsSince(Sum(H>Ref(H,-1),2)=2); Ds:=BarsSince(Sum(L<Ref(L,-1),2)=2); Hc:=HighestSince(1,Us=0,H); Lc:=LowestSince(1,Ds=0,L); Sd1:=If(Us=0, {then}If((L<>Lc) AND (Ref(L,-1)<>Lc), {then}1, {else}0), {else}If(Ds=0, {then}If((H<>HC) AND (Ref(H,-1)<>Hc), {then}-1, {else}0), {else}0)); Sd2:=If(Sd1=1, {then} If(Ref(BarsSince(Sd1=1),-1) > Ref(BarsSince(Sd1=-1),-1), {then}1, {else}0), {else} If(Sd1=-1, {then}If(Ref(BarsSince(Sd1=1),-1) < Ref(BarsSince(Sd1=-1),-1), {then}-1, {else}0), {else}0)); TD1:=ValueWhen(1,Sd2<>0,Sd2); Td1; {Multi-Frame D CE Gann-Trend} {Constructed using Multi-Frame D-CE template} {Requires Forum & MSTT DLLs} {Roy Larsen, 2012, 7/9/12} {Proprietary code removed} Figure 4. The Gann-Trend formula as given to me. {Gann-Trend} {Swing Direction} {Created by Adam Hefner?} Us:=BarsSince(Sum(H>Ref(H,-1),2)=2); Ds:=BarsSince(Sum(L<Ref(L,-1),2)=2); Hc:=HighestSince(1,Us=0,H); Lc:=LowestSince(1,Ds=0,L); Sd1:=If(Us=0, If((L<>Lc) AND (Ref(L,-1)<>Lc),1,0), If(Ds=0,If((H<>HC) AND (Ref(H,-1)<>Hc),-1,0),0)); Sd2:=If(Sd1=1,If(Ref(BarsSince(Sd1=1),-1)> Ref(BarsSince(Sd1=-1),-1),1,0), If(Sd1=-1,If(Ref(BarsSince(Sd1=1),-1)< Ref(BarsSince(Sd1=-1),-1),-1,0),0)); ValueWhen(1,Sd2<>0,Sd2); Figure 5. The same formula as in Figure 4 but with {else} and {then} comments removed, and the variable / data array names to be changed marked in bold type. Figure 6. Inserting code for the GANN-Trend indicator into the MultiFrame D-CE template. Only a few simple changes to variable / data array names were necessary - see bold type. September 2012 Page 4 {Multi-Frame D+CE Gann-Trend} {Constructed using Multi-Frame D+CE template} {Requires Forum & MSTT DLLs} {Roy Larsen, 2012, 7/9/12} {Proprietary code removed} Figure 7. Code for the Gann-Trend indicator into the Multi-Frame D+CE template. September 2012 Page 5 ZIG-BASED VOLUME HISTOGRAM By Roy Larsen T he indicator code shown in Figure 4 was put together in response to a request posted on the Equis Forum. The enquirer asked for a cumulative volume plot based on timeframes formed by Zig() function reversals. Also requested was that results should be capable of being plotted as green and red histograms, green for positive price moves and red for negative moves. The most difficult part of creating this formula was figuring out how to identify each Zig() turning point (see the "A" and "B" variables). Once that was determined the rest was simply a matter of adapting the Multi-Frame volume calculation and, of course, separating positive volume from negative volume. {Zig-Based Volume Histogram} {Roy Larsen, 30/7/12} N:=Input("ZigZag % Parameter",0,99,10); A:=Zig(C,N,%); B:=Ref(A,-1)>A AND Ref(A,1)>A OR A>Ref(A,-1) AND A>Ref(A,1); X:=A>ValueWhen(2,1,A); Z:=Cum(1); {Calculate/plot frame Volume} D:=BarsSince(Ref(B,-1)+(Z=1))+1; ExtFml("Forum.Sum",V,D)*X; ExtFml("Forum.Sum",V,D)*(X=0); While Zig() has been used in this instance, I’m quite sure that volume for many other frame definitions could be captured just as easily. In this case I didn’t even need to worry about the N/A bar introduced by the "B" variable at the hard right edge. "B" has to be delayed by one bar before the "D" variable can function properly anyway, and that delay eliminates the previously-created N/A bar by shifting it one bar to the right and off the right side of the chart. Figure 8. A volume accumulator with timeframes determined by Zigzag-based price reversals. NEW MULTI-FRAME FEATURES By Roy Larsen W ith this issue I’ve released a completely new "D~" series of Multi-Frame indicators. In conjunction with this series I’ve also released new features for the "D" range. Most readers would have received a note from me asking for feedback on the potential usefulness of timeframes based on the number of bars rather than a calendar period. Undoubtedly some of you must have thought that I was nuts for even raising the idea. Perhaps I am. Nevertheless I must have received responses from about a third of the MSTT readership, and of those twice as many were in favor of the suggestion as those against it. Over the years I’ve strongly resisted any pressure to create any rolling timeframe indicators, and I still have serious doubts about their usefulness. The poll result, however, suggested that it was time for me to re-evaluate my position on "rolling frame" indicators. As a concession to my own thoughts on the matter I’ve included a mechanism that forces a rolling frame to periodically synchronize with calendar events. This option can be disabled or, at the user’s discretion, applied at 1, 2, 3, 4, 6 or 12 monthly intervals. As you’ve already seen I’ve named this series "D~" – the tilde character evocative of a rolling or wave-like motion. To me a rolling timeframe is one that depends purely on where data starts for some, and where it ends. For others. Such timeframes only give the appearance of consistency when they have a reference point that remains constant. That illusion is quickly shattered when the reference point changes for any reason. September 2012 rolling timeframe indicators … ... doubts about their usefulness Page 6 v Figure 9. A view of the "D~" series Parameter window. At the end of the day, though, these indicators are not about what I think. They’ve been created for those among us who see value in the use of arbitrary timeframes. The maximum frame size is 65 days but I’d expect shorter timeframes to be the norm. The default has been set to 3 days. While testing I’ve found that "D~" indicators can accurately reproduce certain calendar-based timeframes by virtue of the resync mechanism. Daily, monthly and quarterly timeframes are typical examples of that. Monthly timeframes can be set by combining a 1-month resync option with the number of days set to 23 or higher. For instruments that are traded on more than 5 days a week the number of days per frame would obviously need to be higher. Some time ago I seriously considered discontinuing the "D" series of indicators. In the event, however, I’ve decided to add the split-week feature to this series in preference to adding even more features to the "D+" series. The split-week feature caters for two end-of-frame variations. One option splits each week between Tuesday and Wednesday, and the other makes the split between Wednesday and Thursday. In essence the split provides either 2 plus 3 days or 3 plus 2 days. I’m have stocks in mind here, but of course the splitting points are the same for Forex or any other intraday or EOD data. Figure 10. A view of the revised "D" series Parameter window. No other structural changes have been made to the "D" series of indicators, but considerable effort has gone into identifying problems with individual indicators across all series and making the necessary corrections. The Wilson CSC indicators have been removed from each series for now. Although I was able to correct one error appearing in a couple of these formulas, there is still another problem that I’ve not had time to track down. As it appears that few people use these formulas I don’t see any urgent need to find and correct the problem. September 2012 Page 7 TRADE EQUITY ENHANCEMENTS By Roy Larsen I ’m pleased to announce some small but significant improvements to the Trade Equity family of tools for MetaStock. Some of the changes are purely cosmetic and make very little difference in the wider scheme of things. One change in particular, though, stands out as a game-breaker. So as not to keep you guessing I’ll start telling the story about that change right away. A few months ago a fellow trader asked me if Trade Equity could be used for testing pairs. My reply was that I thought it could but that I’d need to sit down and work through the possibilities before offering a definitive answer. Subsequently, though, my investigations suggested that it was more difficult to do than I had at first imagined. I’m not a pair’s trader but it seems to me that there are two possible objectives with pairs trading. One is to use the practice as a risk-management technique, and the other is to magnify potential gains (I’m not talking about Forex trading here). Putting my assumptions to one side, what I needed to figure out was how to test the effectiveness of trading signals generated by one security when they are applied to one or more different securities (not necessarily on the same side of the market). To begin with I considered adapting the Trade Equity DE (dual) formulas for the task, but as I thought about it there seemed to be two main obstacles to this approach. First of all I knew that the DE indicator would run more slowly than its LE and SE stable mates. My other concerns were that any DE conversion would be difficult to implement, and the result of that conversion probably somewhat clumsy even on a good day. What I needed was a primary TE indicator that could operate on either side of the market, and to complement it a secondary equity indicator that was equally ambidextrous. The concept I decided to go with was that one TE indicator should generate signals for one side of the market, for example, such as trading an index. Those same signals would then be applied to a security or portfolio of choice, also on just one side of the market, but not necessarily the same side as that used for creating the original signals. Then it hit me. I already had two very similar indicators in Trade Equity GV LE and Trade Equity GV SE, so why not add a short capability to the LE indicator and a long capability to the SE indicator? Brilliant (thinks I), but would it work? Right about now I imagine you’re thinking that if the idea was a lemon then you wouldn’t be reading about it, and you’d be right of course. Thankfully the concept does work, though not without the odd problem raising its head, or the occasional need for compromise. ... why not add a short capability to the LE indicator and a long capability to the SE indicator? I wonder why I didn’t think of this possibility years ago! They say that necessity is the mother of invention, and up until this point there had never seemed to be a need (not to me at least) for an equity curve indicator that could flip from long to short or vice versa. Luckily there are only a few lines of code related specifically to the side of the market that Trade Equity operates on. To cut a long story short my solution was to insert both long and short side code into each TE indicator, then add an option for selecting the required side of the market. Although I’m not totally comfortable with the September 2012 Page 8 control mechanism that I settled on, it works precisely as I had hoped it might. The User Options setting has been expanded from 0-27 out to 0-127. By selecting display options in the range of 100-127 the LE indicator switches from long to short and the SE indicator similarly switches from short to long. Mission accomplished. Well, almost. Of course these changes mean that, for the most part, both linkable display modules must ignore the extra 100 in the Option Display value passed to them by the parent indicator. What I haven’t documented yet is whether the long-side display modules will return correct values for the opposite side of the market. I’ve been down that path with two of the portfolio experts and the only calculations that wouldn’t play ball were the "Trade Efficiency" statistics. The quickest solution was simply to take them out of the expert altogether. Who understands what the Trade Efficiency stats tell us anyway? Who understands what the Trade Efficiency stats tell us anyway? The stand-alone display modules don’t use the parent indicators display options because they have their own parameter selection for options. However, they do have access to the display option global variable created by the parent indicator, so they’re also able to make decisions based on the sourcing indicator’s market polarity. I’ve checked the linkable display modules for both Trade Equity indicators and found that only two options, 15 and 16, appeared to need changing. To make the maximum excursions displays for both sides of the market operate correctly it would be necessary to switch 15 for 16 (and vice versa) if operating on the alternate side of the market. At the time I was still considering whether to use the "Mn" and "Mx" global variables to feed into each display module’s "Nd" and "Ns" variables as extreme excursions instead of the "Xs" global variable used up until now. The "Mn" and "Mx" global variables were added to the Trade Equity indicators some time back to allow portfolio-based experts to calculate maximum excursions based on HIGH and LOW prices rather than on trade entry, exit or CLOSE prices. I decided to switch to the "Mn" and "Mx" global variables for determining extreme price movements. Looking at the changes made earlier to the display modules it’s apparent that the "Mn" and "Mx" variables do away with the need to switch options 15 and 16 if the parent indicator has had its market polarity changed. Nevertheless it is still necessary to strip 100 from the TE Display Options parameter so that it returns to the 0-27 range. See the text box below for how this is achieved. {Trade Equity GV LE Display} {Roy Larsen, 2004-2012, 25/7/12} {use with Trade Equity GV LE, v8.5} Z:=ExtFml("GV.GetVar","Le"); D:=DayOfMonth();A:=LastValue(D); M:=Month();B:=LastValue(M);Y:=Year(); G:=M*31+D-(M>B OR (M=B AND D>A))*372; G:=G<ValueWhen(2,1,G);Z:=If(Z>99,Z-100,Z); As an unfortunate byproduct of adding calculations for the other side of the market into Trade Equity indicators they now have very little available free September 2012 Page 9 space (situation normal I suppose). One way to deliver trading signals to TE via external formulas is to arrange those formulas (and Trade Equity) so that they take up minimal room. Traditionally the "Signals" section of Trade Equity would have looked much like that shown below, and it still can as long as the formula names for your inputs are kept short. {Signals} N:=Fml("MSTT IH Buy AU SP300 W"); Ns:=0; X:=Fml("MSTT AT Trail AU W"); Xs:=Fml("MSTT Intrabar Stop W"); The overheads required by Fml() and FmlVar() calls are not humungous, but they can and do slow things down a little. To marginally reduce the impact of such overheads while conserving space at the same time, I’ve devised a recommended new layout for TE signal formulas. My suggested layout has the ability to deliver either binary or price signals. Rather than requiring two or three separate Fml() calls for each system, most signals can now be delivered by one input formula. One exception would be if your system needed to deliver concurrent entry and exit signals. Intrabar trades must still be delivered by two formulas. Why? Because entry signals are represented by positive spikes and exit signals are represented by negative spikes. Clearly a single signal cannot simultaneously deliver both positive and negative values. Another possible exception might be when both binary and price exit signals are required. However, I can’t imagine any combination of setup conditions that couldn’t be managed by inserting any relevant delays (such as "exit on the next open") into the system formula and delivering all exit signals as prices to the "Xs" input variable. Price signals can also be used to function as binary signals if you so desire. Sadly, binary signals can’t deliver prices. ... a single signal cannot simultaneously deliver both positive and negative values. {PS MOO (Meisels Overbought/Oversold)} M1:=Sum(If(C>Ref(C,-1),+1,If(C<Ref(C,-1),-1,0)),10); EntryLong:=Cross(-6,M1) OR M1=-6; ExitLong:=Cross(M1,0) OR M1=0; EntryShort:=Cross(M1,6) OR M1=6; ExitShort:=Cross(0,M1) OR M1=0; Long:=EntryLong-ExitLong; Short:=EntryShort-ExitShort; Long; Using the modified layout of the "PS Meisels Overbought/Oversold" system as an example (see above), the Trade Equity Signals setup area seen below demonstrates how to feed both entry and exit signals to TE and extract the appropriate entry and exit signals from the one input. For testing the short side you’d need to use FmlVar() at the cost of around 12 extra characters. {Signals} I:=Fml("PS MOO"); N:=I>0; Ns:=0; X:=I<0; Xs:=0; September 2012 Page 10 {Signals} I:=Fml("PS MOO"); N:=I>0; Ns:=0; X:=I<0; Xs:=I*(I<0); {if an Exit Stop is enabled} {Code} Notice that the "I" variable name is now used to receive system signals. Externally generated inputs are not needed beyond this point so the "I" variable then becomes available immediately after the {Code} comment. The "MS MOO" system doesn’t use price stops, so the "Ns" and "Xs" variables are normally be set to zero for that system anyway. In the example above it should be pointed out that that "X" and "Xs" can only be used together if they are, in fact, the same signal (–price). Applying a price signal to X is quite OK; the "<" operator converts it into a binary signal even though that is not strictly necessary. A problem arises, though, when the timing of "X" and "Xs" is different. That won’t happen with properly constructed system signals, and it’s up to the user to make sure that the signal source is 100% valid. If a delay is normally applied to "X" then it’s important to know that "Xs" ignores any TE exit delay setting. When that variable is active an "exit stop" will take effect immediately, and of course the same signal applied as a conventional binary exit signal will have been beaten to the draw because of the delay setting. Finally, note that revised Trade Equity indicators can be found at the end of this newsletter. Page 35 has a listing of all formulas that have been discussed in this issue. Appropriate download links should have already been provided in my distribution letter. Failing that the necessary information will be available for the asking. PAIRS TRADING TESTS By Roy Larsen T he "Trade Equity Pairs" indicators have been created to allow testing of pairs in any mix of long and/or short combination. For this to work the TE primary indicator must be set up for the underlying security and system signals, and the secondary TE indicator fed the same signals via an intermediate Trade Equity Pairs indicator. The function of the Pairs indicator is to extract signals applied to the primary security (e.g. by monitoring Trade Equity GV LE), and then feeding those signals to the secondary TE indicator to test one or more secondary securities. The aim is to find those securities that demonstrate a strong colinearity to the primary security. The two indicators in Figures 12 and 13 extract long or short signals (whichever is appropriate) from the primary security and act as a conduit for transferring trading signals from one Trade Equity indicator to the other. September 2012 Page 11 Although both Trade Equity indicators are capable of executing same-bar trades, it is not currently possible to transfer such trade signals from one TE indicator to the other. That’s because same-bar signals cannot be extracted simply by monitoring the "R" trade-latch variable. Nevertheless, since this feature is seldom if ever used it really doesn’t affect the usefulness of the Pairs process. It would not be difficult to create an alternative transfer method (signal conduit) if the need should arise. What appears to be an anomaly with the method I’ve devised is that delays applied to the master security and TE indicator do not get applied to the secondary TE indicator. Signals applied to the primary TE indicator already have any delays included before they reach the "R" variable (trade latch). Therefore the secondary TE indicator, be it LE or SE, should not apply any (unintentional) additional delays to the Pairs signals. Signals applied to the secondary TE indicator cannot legitimately precede those applied to the master TE indicator. However, there might well be situations where a delay could legitimately be applied to secondary signals. As with normal Trade Equity usage, test results can be displayed by Expert Commentaries. Those results can be used to assess the degree of correlation between the primary security and a secondary portfolio or one of its constituents. For individual securities it’s simply necessary to attach the appropriate "Chart" commentary to the targeted chart. For portfolio results you must run the appropriate "Portfolio" or "Super" exploration and use the associated expert commentary to display a summary of test results. If necessary the "Portfolio" and "Super" scans can be modified to report a specific statistic from each or any column. To do this you will need to locate the relevant calculation and create an output at the point where a result for each security is added into the portfolio accumulator for that statistic. The result that you want to display in the exploration report must be the last output for that column. Although a column can generate several outputs, only the last output in sequence will appear in the report. All other outputs are masked (i.e. overridden) by the output that appears in the report. SUDOKU BREAK 7 3 3 6 1 6 1 5 8 5 In order to make the task of finding those calculations a little easier I’ve placed list of each column’s calculations at the beginning of the column. In column A, for example, you’ll find a "Max favorable excursion" heading and an {MFE} calculation section – see the text box below and on Page 13. 6 5 2 9 5 4 7 3 7 6 6 3 9 3 6 9 4 1 2 Figure 11. Sudoku puzzle - (medium) see solutions on page 22. {MFE} SV:=LastValue(ExtFml("GP.GetVar","MXFV")); RS:=LastValue(Highest(ExtFml("GV.GetVar","Mx"))); SV:=ExtFml("GP.SetVar","MXFV",Max(SV,RS)); To report the MFE for each security you will need to add "RS;" (without quotes) to the end of the "RS" or second "SV" line as shown above. The "RS" variable usually returns the final value of a particular calculation for the current security. The first "SV" variable is the cumulative value of all results up to the previous security. The second "SV" variable adds the current "RS" value to the "SV" accumulator, thus updating it to include the total value for all securities so far. September 2012 Page 12 As already mentioned there must not be any active outputs appearing further down the exploration column. Existing outputs that might follow the "RS" output (for MFE in this case) should be deleted or commented. When changing the output expression or variable reported by column B, be aware that there are a couple of existing outputs in the portfolio scans that are easily overlooked because they are presented (coded) as unnamed variables. {MFE} SV:=LastValue(ExtFml("GP.GetVar","MXFV")); RS:=LastValue(Highest(ExtFml("GV.GetVar","Mx"))); RS; SV:=ExtFml("GP.SetVar","MXFV",Max(SV,RS)); Just when I thought I’d finished the discussion on Trade Equity Pairs someone asked about testing pairs with the EST. I responded by saying that this article would appear in the next issue of MSTT and left it that. There was no question in my mind that a composite TE/EST test could be put together, but my concern was that actually doing so would be a rather difficult task for many readers. And to be honest even I struggle to follow my own procedures at times, so how difficult would that be for less experienced users? Accordingly I’ve created a TE/EST composite Pairs system test. Although the system that’s been devised has some advantages over a pure TE-based arrangement, I have to say that it doesn’t offer as many advantages as I thought it would. As I see it there is one major limitation with a pure Trade Equity approach in that it only allows a portfolio to be tested against one security at a time. As an exercise I ran each of 73 ETFs against the same 73-ETF portfolio using the "PS MOO" system. For this I had to enter a specific target ETF in the "Trade Equity Pairs GV SE" indicator 73 times. This exercise took me a about 2 hours. I had hoped that by using the EST I’d be able to minimize my setup time and, in doing so, significantly reduce total test times. Sadly the EST wasn’t as cooperative as I’d expected, so the hoped-for time savings didn’t eventuate. For you, however, the EST-based method might save some time, though whether or not the EST provides as much information as a TE portfolio report is a moot point. The portfolio I ran these tests on is made up of ETFs with at least 2500 bars of data, and that data all having common dates. By that I mean that the date of each bar across all ETFs is the same. Put another way, there are no missing bars and no extra bars. This is an important consideration when wanting to display portfolio results using one of the Trade Equity Portfolio Display indicators. The difficulty with Pairs testing is that, while it’s easy to step through a portfolio of securities, it’s much more difficult to switch automatically to a different system for a second or subsequent pass across the same portfolio. For that reason Trade Equity Pairs testing is pretty much limited to one primary set of signals at a time. Changing either the system, or the primary security that generates that system’s signals, can only be done manually. In theory the EST can change the system being applied on the fly by virtue of the OPT function. The reality, however, is that running four different master securities in the one test (effectively giving four system variations) is about as much as the EST can handle without triggering a catastrophic meltdown. September 2012 Page 13 Figures 16 and 18 respectively attempt to show the organization and data flow of a Trade-Equity-only Pairs process and a Trade-Equity/EST pairs process. Of necessity the TE/EST composite method is organized a little differently from the TE-only method. Hopefully those diagrams add a measure of clarity. When testing pairs signals are applied to one security, and those signals are then replicated for one or more different securities. So, if ABC and XYZ are the pair to be tested, primary signals would normally be created by ABC, and those signals, not the system itself, would be applied to XYZ. Strictly speaking the system under test is only applied to ABC. In all likelihood the system would generate a quite different set of signals if it was applied directly to XYZ. What’s essential, though, is that the signals applied to XYZ (and any other security being pairs-tested against ABC) must align with the signals generated by ABC. Figure 12. This indicator extracts trading signals specific to the YHOO symbol from Trade Equity GV LE and formats them for Pairs use by Trade Equity GV SE. {Trade Equity Pairs GV LE} {Roy Larsen, 2012 20/8/12} {Proprietary code removed from sample newsletter} {Trade Equity Pairs GV SE} {Roy Larsen, 2012, 30/7/12} {Proprietary code removed from sample newsletter} Figure 13. This indicator extracts trading signals specific to the YHOO symbol from Trade Equity GV SE and formats them for Pairs use by Trade Equity GV LE. {Trade Equity GV LE} {Roy Larsen, 2003-2012, 11/8/12, v8.5} {Inputs} A:=Input("Trade Equity GV LE, Opt 0-27, SE=100+",0,127,0); B:=Input("Entry, 1=O 2=C 3=H 4=L 5=Stop",1,5,1); Z:=Input("Exit, 1=O 2=C 3=H 4=L 5=Stop",1,5,1); G:=Input("Entry Cost",0,999,0); J:=Input("Exit Cost",0,999,0); D:=Input("Entry/Exit Delays 00-55",0,55,11); Figure 14. K:=1000; F:=1; {Equity/Factor} Shows Trade Equity GV LE set up to trade {Signals} the PS MOO system long on YHOO, using it I:=Fml("PS MOO"); as the primary security to generate identical N:=I>0; signals for another portfolio by way of Ns:=0; Trade Equity Pairs GV LE. X:=I<0; Signals would be applied to secondary Xs:=0; securities by Trade Equity GV SE or the EST. September 2012 Page 14 Color Code PS long or short systems System Indicators TE Pairs Setup Indicators Explorations Custom binary or price-stop entry/exit signals Expert Commentaries Optional Printed Reports Trade Equity GV LE (long or short as appropriate) Trade Equity GV SE (long or short as appropriate) Trade Equity Pairs GV LE (to replicate primary security’s signals) Trade Equity Pairs GV SE (to replicate primary security’s signals) Trade Equity GV SE (applies Pairs signals to security or portfolio) Trade Equity GV LE (applies Pairs signals to security or portfolio) Trade Equity Reset (prepares global variable storage) Figure 15. This shows user settings required for Trade Equity GV SE to be paired long with Trade Equity GV LE. Figure 14 shows Trade Equity GV LE set up to trade the PS MOO system long on YHOO, and Figure 12 shows how Trade Equity Pairs GV LE prepares the signals generated by YHOO for use with Trade Equity GV SE on a separate security or portfolio, also on the long side. Trade Equity Super/Portfolio SE Scans Trade Equity Super/Portfolio LE Scans Trade Equity SE Portfolio Expert Commentary Trade Equity LE Portfolio Expert Commentary Super/Portfolio Scan Commentary Printed Reports {Trade Equity GV SE} {Roy Larsen, 2003-2012, 11/8/12, v8.5} {Inputs} A:=Input("Trade Equity GV LE, Opt 0-27, SE=100+",0,127,100); B:=Input("Entry, 1=O 2=C 3=H 4=L 5=Stop",1,5,1); Z:=Input("Exit, 1=O 2=C 3=H 4=L 5=Stop",1,5,1); G:=Input("Entry Cost",0,999,0); J:=Input("Exit Cost",0,999,0); D:=Input("Entry/Exit Delays 00-55",0,55,00); K:=1000; F:=1; {Equity/Factor} {Signals} I:=Fml("Trade Equity Pairs GV LE"); N:=I>0; Ns:=0; X:=I<0; Xs:=0; September 2012 Figure 16. This flow chart shows the steps necessary to create primary trading signals for one security, pass them to the secondary Trade Equity indicator, then sum portfolio results using the Explorer and Expert Commentaries. Page 15 Color Code PS long or short systems System Indicators TE Pairs Setup Indicators Custom binary or price-stop entry/exit signals EST Signal Processing EST Reports Trade Equity GV LE (long or short as appropriate) Figure 17. These steps are needed to create primary trading signals for one security, pass them to the Enhanced System Tester, and then examine individual results for each security. The EST generates very little portfolio information. Trade Equity GV SE (long or short as appropriate) Enhanced System Tester Buy Order or Sell Short Order Windows replicate primary signals generated by Trade Equity GV LE or Trade Equity GV SE Enhanced System Tester Reports Figure 18. {Trade Equity GV SE} Trade Equity GV SE setup parameters {Roy Larsen, 2003-2012, 11/8/12, v8.5} required to generate long trading {Inputs} signals from one of four primary A:=Input("Trade Equity GV SE, Opt 0-27, LE=100+",0,127,100); securities (see Figure 19) under test. B:=Input("Entry, 1=O 2=C 3=H 4=L 5=Stop",1,5,1); Z:=Input("Exit, 1=O 2=C 3=H 4=L 5=Stop",1,5,1); G:=Input("Entry Cost",0,999,0); J:=Input("Exit Cost",0,999,0); Figure 19. D:=Input("Entry/Exit Delays 00-55",0,55,11); This EST system accepts signals from the K:=1000; F:=1; {Equity/Factor} primary Trade Equity indicator (SE in this {Signals} example) and applies one of up to 4 sets of I:=Fml("PS MOO"); signals to a secondary security or portfolio. N:=I>0; This EST system replaces both Ns:=0; the TE Pairs setup indicators and the TEX:=I<0; based secondary portfolio scan function. Xs:=0; It can test a portfolio relative to up to 4 primary securities. {Trade Equity Pairs for EST} {Roy Larsen, 2012, 27/8/12} {Proprietary code removed from sample newsletter} September 2012 Page 16 AT MARKET BREADTH SYSTEM By Roy Larsen T he trading system being discussed this time around is the AT Market Breadth system as described by Volker Knapp in the September 2012 issue of Active Trader. In essence it’s based on the ratio of news highs to new lows for any given portfolio. I suggest that you purchase a copy of Active Trader if you’re at all interested in checking out this dip-buying system. It’s not a system that will make you rich in the short term, and that’s mainly because it’s only in the market around 1% of the time. It aims to enter on market dips, hopefully just as confidence reverses the market direction. All trades are held for 5 days and then sold at the next OPEN. The breadth indicator underpinning this system is a New-Highs/New-Lows ratio calculated as: NHNL = New Highs / (New Highs + New Lows). New Highs and New Lows represent the number of securities in any portfolio making new 20day highs and new 20-day lows respectively. The oscillator so formed by the NHNL formula is smoothed by a 10-day Simple Moving Average {Trade Equity GV LE} {Roy Larsen, 2003-2012, 11/8/12, v8.5} {Inputs} A:=Input("Trade Equity GV LE, Opt 0-27, SE=100+",0,127,0); B:=Input("Entry, 1=O 2=C 3=H 4=L 5=Stop",1,5,1); Z:=Input("Exit, 1=O 2=C 3=H 4=L 5=Stop",1,5,1); G:=Input("Entry Cost",0,999,0); J:=Input("Exit Cost",0,999,0); D:=Input("Entry/Exit Delays 00-55",0,55,11); K:=2000; F:=-0.5;{Equity/Factor} {Signals} I:=Fml("AT Market Breadth AT") * Fml("Date Filter"); N:=I>0; Ns:=0; X:=I<0; Xs:=0; Figure 20. Trade Equity settings for testing the "Market Breadth" systems. The entry rule is to buy on the next OPEN when the SMA of the NHNL oscillator (which swings between 0 and 1) falls below 0.2, and the stocks price has been falling for three or more days in a row. The exit rule is to sell on the OPEN once the trade has been held for 5 full days. Active Trader suggests that no more than 5% of account equity per position and that the maximum number of trades at any one time be kept to 20 or less. They also suggest specific starting equity as well as costs and slippage allowances. The AT rules allow multiple positions to be held up to the 20-trade limit. My tests were run with Trade Equity and didn’t include costs or any limit on the number of open trades. A list of the 17 stocks in the standard AT portfolio is provided on page 22. I’ve used this portfolio for some of my tests, but I’ve also run tests on larger portfolios drawn from the S&P 100 and EFTs that have been traded for more than 10 years. When providing breadth data for other projects I’ve generally built historical data files for loading as MetaStock data. This time I’m only providing the tools needed to create temporary global variables. There are reasons for doing it this way, and the biggie is that they don’t need daily updating – that is, they can be created on the fly as and when needed. Allied to this each portfolio must have its own its own market breadth files. I’ve created several versions of the two files as I’ve needed them by running the "Breadth D" scan with appropriate data loaded. This creates two global variable breadth files. The two global variables (ScanHighC and ScanHighC) can only be used for one portfolio at a time, so the "Reset" and "Breadth D" must be rerun for each new portfolio. For some time now a feature of Trade Equity has been the Portfolio Display module. As with the last issue of MSTT I’ll be using it to plot equity curves for September 2012 Page 17 each portfolio tested. I know I’ve discussed the need for "validated" data to be used with this tool but I’m happy to explain the situation again. Creating data files "on-the-fly" is a process that demands validated data to work with. Basically what validation does is weed out securities that have missing or extra bars of data. For Trade Equity global variables to accurately accumulate values for each date or bar of data (e.g. by summing all bars of a series of equity curves) it’s essential that those securities have identical dates. Global variables don’t store date or time values and so have no way of aligning themselves to those labels. One missing bar of data renders the global variable it’s being written to as corrupt and non-repairable for the current process. In some circumstances it’s OK to continue using the corrupted data, though knowing that it’s not as accurate as it could be. In other situations that’s totally unacceptable. The validation process is a way of identifying the securities in a portfolio that have identical dates, and saving those securities as a portfolio under the Favorites folder. This is best done by creating a new folder for each portfolio and giving it a name that identifies its contents. I have folders called "AT Standard Portfolio", "ETF Valid 2600 4-9-12" and "SP100 Valid". Each of these has 2600 EOD bars and common dates across all bars. I’m using 2600 bars rather than 2500 or some lesser number so that I can start my tests at the beginning of June 2002, this being where the Active Trader tests start. {Data Validity} {Roy Larsen, 2005} {This exploration scans a list of securities to find those with complete data sets. Column results are then included in the filter for use in a second scan to filter out securities with missing or extra data records.} {Col A: Day} ValueWhen(1,Cum(1)=1,DayOfMonth()); {Col B: Month} ValueWhen(1,Cum(1)=1,Month()); {Col C: Year} YearValueWhen(1,Cum(1)=1,Year()); {Col D: SumMonth} Cum(DayOfMonth()); {Col E: Sum Days} Cum(DayOfWeek()); {Col F: Sum Bars} Cum(1); {Filter} {Disable filter for first run. Use results to set filter values. Enable filter & rerun to select valid securities.} {colA=9 AND colB=5 AND colC=2002 AND colD=41016 AND colE=7858} Filter enabled Periodicity Records required Yes Daily 2600 Figure 21. The Data Validity Scan for The validating exploration reports the start day, month and year in columns finding matching data dates A, B and C, cumulative day-of-month in column D, and cumulative day-ofacross an entire portfolio. week in column E. One only needs to look at the exploration report to find a large block of common numbers and then rerun the exploration after entering the appropriate numbers into the Filter section. The results of the filtered run should be saved for later use. The AT Standard Portfolio {AT Breadth} doesn’t need validation because it already has common dates {Short variable delivers secondary signals} as far back as my 2600-bar tests go. The validation exploration is shown in Figure 21. Note that braces are used to comment out the filter section on the first pass, then removed to activate it for the second pass. {Code removed from sample newsletter} Another "secret" to getting consistent, reliable and repeatable portfolio results from Trade Equity is to make sure that the chart used for displaying a portfolio equity curve has the same number of bars loaded as used for the TE explorations. For this system that’s 2600 EOD bars. Hopefully I’ll finish my testing before any more data is added (no data updates is key to getting repeatable results over several days). I’ve already experienced inconsistent results this morning because I forgot to change the standard 2500 bars loaded to 2600. I couldn’t work out why the TE expert was reporting one profit figure and the portfolio equity curve another. The figures agreed 100% once extra bars were loaded for the active chart. September 2012 Figure 22. Creates secondary signals via "Short" variable. See Figures 25-26. Run TE "Reset" and "Depth D" scans to prepare breadth data. Page 18 The next problem I faced was that the EST results for the standard AT portfolio didn’t match TE results for any of the 17 {Col F} securities. I resolved this problem by switching TE from $1000 {Reset New Highs and New Lows counters} to $2000 of initial equity and changing the "F" variable to "-0.5". {New Highs and Lows} This tells TE to use 50% of initial equity and only purchase A:=ExtFml("GP.SetVar","ScanHighC",0); whole shares – something that’s normal for the EST. With those A:=ExtFml("GP.SetVar","ScanLowC",0); adjustments TE and the EST finally produced identical results. Figure 23. Thank goodness for that. Unfortunately the 93 validated stocks Add this code to the Trade from the S&P 100 didn’t deliver anything like yesterdays values even though Equity Portfolio Reset scan I changed the appropriate system settings. Oh, I see the problem; I wrongly so that all GV resets are marked the results report as being generated by the 93 S&P 100 stock confined to a one exploration. portfolio rather than the 72 ETF portfolio. Silly me! {Trade Equity Portfolio Reset} The "Trade Equity Portfolio Reset" and "Trade Equity Scan Breadth D" explorations must be run before either a Trade Equity scan or an EST test. That’s necessary so that the breadth GV counters are reset and repopulated with the appropriate breadth data before Trade Equity or the EST do their thing. It’s important that the breadth data arrays provide information that’s relevant to the portfolio being tested – loading breadth information for one portfolio and then using it to create signals for a different portfolio is probably not going to work too well. I suppose you could do that, but it seems to me that it would be somewhat akin to eating an apple in order to find out what a banana tastes like. {Trade Equity Portfolio Scan Breadth} {Col A:} {Create breadth data for validated portfolio} {Code removed from sample newsletter} Figure 24. This exploration follows the TE Portfolio Reset scan - it generates breadth data for the selected portfolio. It’s named so that it can be batched with other TE scans to be run in the proper order. The equity curves shown in Figures 30, 31 and 32 show significant drawdowns in October 2008 that you need to be aware of. Don’t forget that this system buys as the price is falling and it has no mechanism to extricate you from a trading heading way south. Notice, though, that the biggest gains come very shortly after the biggest drawdowns. You can see portfolio excursions by using options 5 and 6 of the portfolio display module, but make sure that the chart you use it on has the same number of bars loaded as the TE exploration or explorations that created the New Highs and New Lows data files. {AT Market Breadth AT} {AT 17 Portfolio signals} {AT Market Breadth EF} {EFT 72 & SP 93 Portfolio signals} {Code removed from sample newsletter} {Code removed from sample newsletter} Figure 25. This indicator generates Trade Equity signals for the AT 17 Standard Portfolio. Run TE "Reset" and "Depth D" scans un to prepare breadth data. Figure 26. This indicator generate Trade Equity signals for the EF 72 and SP 93 Portfolios. Trade Equity "Reset" and "Depth D" scans must be run to prepare breadth data. September 2012 Page 19 { AT Market Breadth 17} { AT Market Breadth 72} Buy Order Order Type Order Expiration Initial Equity Default Size Buy Order Order Type Order Expiration Initial Equity Default Size Market Day $2000 $1000 Market Day $2000 $1000 Signal Formula {AT Market Breadth} Signal Formula {AT Market Breadth} {Code removed from sample newsletter} {Code removed from sample newsletter} Figure 27. The EST setup for testing the AT 17 Standard portfolio. Run the Reset and Breadth explorations before running this system with the EST. Figure 28. The EST setup for testing the ETF-72 portfolio. Run the Reset and Breadth explorations before running this system with the EST. { AT Market Breadth 93} Buy Order Order Type Order Expiration Initial Equity Default Size Market Day $2000 $1000 Signal Formula {AT Market Breadth} {Code removed from sample newsletter} Figure 29. The EST setup for testing the SP-93 portfolio, taken from the S&P 100 . Run the Reset and Breadth explorations before running this system with the EST. September 2012 Page 20 Figure 30. This equity curve represents trading results for the AT Standard Portfolio of 17 stocks.. Figure 31. This equity curve represents trading results for the Portfolio of 72 validated EFTs. Figure 32. This equity curve represents trading results for a Portfolio of 93 S&P 100 validated stocks. MARKET BREADTH PORTFOLIOS By Roy Larsen The three portfolios used for my tests are shown over the page. Keep in mind that the integrity of the breadth data files you create (20-day new highs and new lows) is critically dependant on validated data (common data dates across each portfolio), so be sure to check these and any other portfolios that you choose to run tests with. The alternative is to create your own MetaStock breadth data files, files that will need daily updating if they’re to be kept current. (See next page) September 2012 Page 21 Active Trader Standard Portfolio AAPL, C, BA, CAT, CSCO, KO, DIS, FITB, HPQ, INTC, IBM, IP, JPM, MSFT, SBUX, T, WMT. 4 2 1 9 3 8 5 7 6 9 6 5 2 4 7 1 3 8 1 9 7 5 8 2 3 6 4 8 5 3 4 7 6 2 9 1 6 4 2 1 9 3 8 5 7 2 7 6 8 5 1 9 4 3 3 1 9 7 2 4 6 8 5 5 8 4 3 6 9 7 1 2 SP 93 Portfolio AAPL, ABT, ACN, AEP, ALL, AMGN, AMZN, APA, APC, AXP, BA, BAC, BAX, BHI, BK, BMY, BRK.B, C, CAT, CL, CMCSA, COF, COP, CSCO, CVS, CVX, DD, DELL, DIS, DOW, DVN, EBAY, EMC, EMR, EXC, F, FCX, FDX, GD, GE, GILD, GS, HAL, HD, HNZ, HON, HPQ, IBM, INTC, JNJ, JPM, KFT, KO, LLY, LMT, LOW, MCD, MDT, MET, MMM, MO, MON, MRK, MS, MSFT, NKE, NOV, NWSA, ORCL, OXY, PEP, PFE, PG, QCOM, RTN, SLB, SO, SPG, T, TGT, TWX, TXN, UNH, UNP, UPS, USB, UTX, VZ, WAG, WFC, WMB, WMT, XOM. 7 3 8 6 1 5 4 2 9 ETF 72 Portfolio ICF, IYK, IYC, IYE, IYF, IYG, IYH, IYY, IYJ, IYR, IYW, IYZ, IDU, EWZ, EWC, EFA, EZU, EWQ, EWG, EWH, EWJ, EWM, EWW, EPP, EWS, EWY, EWT, EWU, IBB, SOXX, IWF, IWB, IWD, IWO, IWM, IWN, IWV, IWW, IWP, IWR, IWS, OEF, IVW, IVV, IVE, IEV, IOO, IJK, IJH, IJJ, IGM, IGV, IJT, IJR, IJS, OIH, PPH, RTH, SMH, QQQ, XLY, XLP, XLE, XLF, XLV, XLI, XLB, XLK, XLU, SPY, MDY, VTI. Figure 33. Sudoku solution. PREMIUM DATA SERVICES I f you are serious about getting the most from MetaStock, you will need top quality data. Having bad data is worse than no data at all. I use Premium Data, available from Norgate Investor Services. They provide premium quality end-of-day data suitable for MetaStock, covering stock markets (ASX, SGX, Amex, NYSE, NASDAQ, OTC), futures markets (80 contracts) and Forex (78 currency pairs). The data is fully adjusted for all corporate actions such as consolidations, splits, mergers, renames, code changes, and allows sophisticated groupings such as industry, index participation and dividend-paying securities. A free trial is available. Are you getting the most from MetaStock? If you currently use another provider, let Norgate Investor Services know and they'll give you a special offer. They really are worth your consideration. www.premiumdata.net Disclaimer: There are significant risks associated with securities trading. Nothing in this newsletter should be considered investment advice, trading advice or recommendations as to investment management. I am not an investment advisor, and the information provided in this newsletter is for educational purposes only. Each subscriber uses the information published in MetaStock Tips & Tools at their own discretion and bears all risk associated with the application of that information to their trading or investment decisions. Nothing in this newsletter implies that any formula, method or strategy is in fact correct, or reliable in all circumstances. September 2012 Page 22 {Multi-Frame D C Template} {Requires Forum & MSTT DLLs} {Roy Larsen, 2012, 7/9/12} {Proprietary code removed from sample newsletter} Figure 34. The Multi-Frame D Compression template. September 2012 Page 23 {Multi-Frame D CE Template} {Requires Forum & MSTT DLLs} {Roy Larsen, 2012, 7/9/12} {Proprietary code removed from sample newsletter} Figure 35. The Multi-Frame D Compression/Expansion template. September 2012 Page 24 {Multi-Frame D+C Template} {Requires Forum & MSTT DLLs} {Roy Larsen, 2012, 17/8/12} {Proprietary code removed from sample newsletter} Figure 36. The Multi-Frame D+ Compression template. September 2012 Page 25 {Multi-Frame D+CE Template} {Requires Forum & MSTT DLLs} {Roy Larsen, 2012, 17/8/12} {Proprietary code removed from sample newsletter} Figure 37. The Multi-Frame D+ Compression/Expansion template. September 2012 Page 26 {Multi-Frame ID C Template} {Requires Forum & MSTT DLLs} {Roy Larsen, 2012, 17/8/12} {Proprietary code removed from sample newsletter} Figure 38. The Multi-Frame ID Compression template. September 2012 Page 27 {Multi-Frame ID CE Template} {Requires Forum & MSTT DLLs} {Roy Larsen, 2012, 17/8/12} {Proprietary code removed from sample newsletter} Figure 39. The Multi-Frame ID Compression/Expansion template. September 2012 Page 28 {Trade Equity GV LE} {Roy Larsen, 2003-2012, 11/8/12, v8.5} {Inputs} A:=Input("Trade Equity GV LE, Opt 0-27, SE=100+",0,127,100); B:=Input("Entry, 1=O 2=C 3=H 4=L 5=Stop",1,5,1); Z:=Input("Exit, 1=O 2=C 3=H 4=L 5=Stop",1,5,1); G:=Input("Entry Cost",0,999,1); J:=Input("Exit Cost",0,999,1); D:=Input("Entry/Exit Delays 00-55",0,55,11); K:=1000; F:=1;{Equity/Factor} {Signals} I:=Fml("PS MOO"); N:=I>0; Ns:=0; X:=I<0; Xs:=0; {Code} I:=ExtFml("GV.SetVar","Cf",F);I:=ExtFml("GV.SetVar","Le",A); Xd:=LastValue(Int(Frac(D/9.9)*10)); D:=LastValue(Int(D/10));Ns:=(B=5)*Ns; F:=ValueWhen(1+D,1,If(F=0,-1,If(Abs(F)>1,Abs(F),-F))); M:=If(Ns>0,Min(H,Max(L,Ns)),If(B=1,O,If(B=3,H,If(B=4,L,C)))); N:=N*(Alert(N=0,2)+(Cum(N>-1)=1)); X:=X*(Z<5)*(Alert(X=0,2)+(Cum(N>-1)=1)); N:=ValueWhen(1+D,1,N);N:=If(B<5,N,Ns>0); N:=If((F<=1)*(F>0)*(F*K<M),(K=0)*N,N); Xs:=(Xs>0)*Min(H,Max(L,Xs)); Y:=If(Xs>0,Xs,If(Z=1,O,If(Z=3,H,If(Z=4,L,C)))); X:=ValueWhen(1+Xd,1,X);X:=X+Xs>0; Y:=If((Z<5)*(X=0),C{Y},Y);Y:=If((Xs>0)*N*X,Xs,Y); Figure 40. I:=Cum(Abs(F)+N+X>-2)=1;N:=(I>-1)*N; Version 8.5 of the Y:=If((N+X=0)*Alert(N*X,2),ValueWhen(2,1,Y),Y); Trade Equity GV LE indicator. R:=BarsSince(I+N)<(BarsSince(I+X)+(Cum(N)=1 AND Cum(I+X)=1)); R:=If((N+X>1)*(Alert(R,2)+((D+Xd<1) *(B<>2)*(Z>1)*(Max(B,Z)>4 OR B<>Z))),1,R); U:=R*Alert(R=0,2)+I;M:=If(I*(N=0),C,M); Rx:=Alert(R,2);Q:=Rx*(LastValue(Cum(1))=Cum(1)); Z:={Q+}(R=0)*Rx;D:=A<99;A:=ValueWhen(1,U,If(M,M,1)); F:=ValueWhen(1,U,If(F<0,K*Abs(F), If(F<=1,Int((F*K-G)/A)*A+G,F*A+G)))*(K>0); B:=Rx*(1+BarsSince(U)); I:=(F-G)*Y/A-F;U:=(F-G)*(A-Y)/A-G; N:=(Z+Q>0)*If(D,If(K,I-J*Z,Y-A),If(K,U-J*Z,A-Y)); Xs:=Rx*If(D,If(K,I-Z*J,Y-A),If(K,U-Z*J,A-Y)); X:=Cum((Z+Q>0)*(N>0)*(B-1));Xd:=Cum((Z+Q>0)*(N<=0)*(B-1)); M:=Cum(N)+K+R*(Q=0)*If(D,If(K,I,Y-A),If(K,U,A-Y)); I:=ExtFml("GV.SetVar","Mx",Rx*If(D,If(K,(F-G)* ((H/A)-1)-G-J*Z,H-A),If(K,(F-G)*((A-L)/A)-G-J*Z,A-L))); I:=ExtFml("GV.SetVar","Mn",RX*If(D,If(K,(F-G)* ((L/A)-1)-G-J*Z,L-A),If(K,(F-G)*((A-H)/A)-G-J*Z,A-H))); I:=ExtFml("GV.SetVar","A",A);I:=ExtFml("GV.SetVar","Cn",G); I:=ExtFml("GV.SetVar","Cp",K);I:=ExtFml("GV.SetVar","Cx",J); I:=ExtFml("GV.SetVar","Eq",M);I:=ExtFml("GV.SetVar","F",F); I:=ExtFml("GV.SetVar","N",N);I:=ExtFml("GV.SetVar","Tr",R); I:=ExtFml("GV.SetVar","X",X);I:=ExtFml("GV.SetVar","Xd",Xd); I:=ExtFml("GV.SetVar","Xs",Xs);I:=ExtFml("GV.SetVar","Y",Y); {Fml("Trade Equity GV LE Display");}M; September 2012 Page 29 {Trade Equity GV LE Display} {Roy Larsen, 2004-2013, 10/1/13} {use with Trade Equity GV LE, v8.5} Z:=ExtFml("GV.GetVar","Le"); D:=DayOfMonth();A:=LastValue(D); M:=Month();B:=LastValue(M);Y:=Year(); G:=M*31+D-(M>B OR (M=B AND D>A))*372; G:=G<ValueWhen(2,1,G);Z:=If(Z>99,Z-100,Z); K:=ExtFml("GV.GetVar","Cp");M:=LastValue(K); N:=ExtFml("GV.GetVar","N");M:=ExtFml("GV.GetVar","Eq"); R:=ExtFml("GV.GetVar","Tr");Nd:=ExtFml("GV.GetVar","Xs"); F:=ExtFml("GV.GetVar","F");I:=Cum(IsDefined(R))=1; Q:=R*(Cum(1)=LastValue(Cum(1))); F:=ExtFml("Forum.Sum",F,1); F:=If(F=0,1,F); Ns:=HighestSince(1,I,ExtFml("GV.GetVar","Mx")); Nd:=LowestSince(1,I,ExtFml("GV.GetVar","Mn")); A:=HighestSince(1,I+R*Alert(R=0,2)*(Z<19),M)=M; B:=ValueWhen(1,I+A,Max(M,ValueWhen(1,I+(R=0),M))); D:=LowestSince(1,I+A,M);Rd:=HighestSince(1,I,B-D); Rp:=100*HighestSince(1,I,(B-D)/(B+(B=0))); I:=Alert(Cum(IsDefined(Ref(I,2)))=1,3); Y:=If(Z>24,G,Y<>ValueWhen(2,1,Y)) OR Cum(I)=0 OR Cum(I)=2; Y:=TroughBars(1,Y,1)=0 OR Alert(Cum(I)=1,3) OR Cum(1)=LastValue(Cum(1)); Y:=ExtFml("Forum.Sum",Y,1); A:=ValueWhen(1,Y,M); B:=ValueWhen(2,Y,M); G:=PREC(100*(A-B)*(B<>0)/(Abs(B)+(B=0)),2); U:=(M-ValueWhen(1,I+(M=Highest(M)),M))/(K+(K=0)); U:=U+(U=0)*0.0000001; D:=If(Z=0,M, If(Z=1,M-K, If(Z=2,100*(M-K)/F, If(Z=3,N+M-K-Cum(N), If(Z=4,100*(N+M-K-Cum(N))/F, If(Z=5,N, If(Z=6,100*N/F, If(Z=7,Cum((N>0)*N), If(Z=8,Cum((N<0)*N), If(Z=9,Cum(N>0), Cum((R=0)*Alert(R,2)+Q>0 AND N<=0))))))))))); D:=If(Z<11,D, If(Z=11,R, If(Z=12,R*Alert(R=0,2)-(R=0)*Alert(R,2), If(Z=13,BarsSince(I+(R=0)), If(Z=14,Cum(R), If(Z=15,Ns, If(Z=16,Nd, If(Z=17,-Rd, If(Z=18,-Rp, If(Z=19,-Rd, -Rp)))))))))); D:=If(Z<21,D, If(Z=21,M-ValueWhen(1,I OR M=Highest(M),M), If(Z=22,100*U, If(Z=23,(A-B)*(B<>0), If(Z=24,G, If(Z=25,(A-B)*(B<>0), If(Z=26,G,F))))))); I:=Cum(IsDefined(D)); D:=ExtFml("Forum.SUM",D,1); If(Z=10 AND I=0,0, If(I=0,LastValue(ValueWhen(1,I=1,D)),D)); Figure 41. Version 8.5 of the Trade Equity GV LE Display indicator September 2012 Page 30 {Trade Equity GV LE Display H} {Roy Larsen, 2004-2013, 10/1/13} {use with Trade Equity GV LE, v8.5} J:=Fml("Trade Equity GV LE"); Z:=Input("Trade Equity GV LE Display H, Option?",0,27,0); J:=Input("Output, 1=One Plot, 2=Two Plots (histogram)",1,2,1); D:=DayOfMonth();A:=LastValue(D); M:=Month();B:=LastValue(M);Y:=Year(); G:=M*31+D-(M>B OR (M=B AND D>A))*372; G:=G<ValueWhen(2,1,G); K:=ExtFml("GV.GetVar","Cp");M:=LastValue(K); N:=ExtFml("GV.GetVar","N");M:=ExtFml("GV.GetVar","Eq"); R:=ExtFml("GV.GetVar","Tr");Nd:=ExtFml("GV.GetVar","Xs"); F:=ExtFml("GV.GetVar","F");I:=Cum(IsDefined(R))=1; Q:=R*(Cum(1)=LastValue(Cum(1))); F:=ExtFml("Forum.Sum",F,1); F:=If(F=0,1,F); Ns:=HighestSince(1,I,ExtFml("GV.GetVar","Mx")); Nd:=LowestSince(1,I,ExtFml("GV.GetVar","Mn")); A:=HighestSince(1,I+R*Alert(R=0,2)*(Z<19),M)=M; B:=ValueWhen(1,I+A,Max(M,ValueWhen(1,I+(R=0),M))); D:=LowestSince(1,I+A,M);Rd:=HighestSince(1,I,B-D); Rp:=100*HighestSince(1,I,(B-D)/(B+(B=0))); I:=Alert(Cum(IsDefined(Ref(I,2)))=1,3); Y:=If(Z>24,G,Y<>ValueWhen(2,1,Y)) OR Cum(I)=0 OR Cum(I)=2; Y:=TroughBars(1,Y,1)=0 OR Alert(Cum(I)=1,3) OR Cum(1)=LastValue(Cum(1)); Y:=ExtFml("Forum.Sum",Y,1); A:=ValueWhen(1,Y,M); B:=ValueWhen(2,Y,M); G:=PREC(100*(A-B)*(B<>0)/(Abs(B)+(B=0)),2); U:=(M-ValueWhen(1,I+(M=Highest(M)),M))/(K+(K=0)); D:=If(Z=0,M, If(Z=1,M-K, If(Z=2,100*(M-K)/F, If(Z=3,N+M-K-Cum(N), If(Z=4,100*(N+M-K-Cum(N))/F, If(Z=5,N, If(Z=6,100*N/F, If(Z=7,Cum((N>0)*N), If(Z=8,Cum((N<0)*N), If(Z=9,Cum(N>0), Cum((R=0)*Alert(R,2)+Q>0 AND N<=0))))))))))); D:=If(Z<11,D, If(Z=11,R, If(Z=12,R*Alert(R=0,2)-(R=0)*Alert(R,2), If(Z=13,BarsSince(I+(R=0)), If(Z=14,Cum(R), If(Z=15,Ns, If(Z=16,Nd, If(Z=17,-Rd, If(Z=18,-Rp, If(Z=19,-Rd, -Rp)))))))))); D:=If(Z<21,D, If(Z=21,M-ValueWhen(1,I OR M=Highest(M),M), If(Z=22,100*U, If(Z=23,(A-B)*(B<>0), If(Z=24,G, If(Z=25,(A-B)*(B<>0), If(Z=26,G,F))))))); I:=Cum(IsDefined(D));D:=ExtFml("Forum.SUM",D,1); D:=If(Z=12 AND I=0,0, If(I=0,LastValue(ValueWhen(1,I=1,D)),D)); ValueWhen(1,J=2,If(D>=0,D,0)); If(J=2,If(D<0,D,0),D); Figure 42. Version 8.5 of the Trade Equity GV LE Display H indicator September 2012 Page 31 {Trade Equity GV SE} {Roy Larsen, 2003-2012, 11/8/12, v8.5} {Inputs} A:=Input("Trade Equity GV SE, Opt 0-27, LE=100+",0,127,0); B:=Input("Entry, 1=O 2=C 3=H 4=L 5=Stop",1,5,1); Z:=Input("Exit, 1=O 2=C 3=H 4=L 5=Stop",1,5,1); G:=Input("Entry Cost",0,999,1); J:=Input("Exit Cost",0,999,1); D:=Input("Entry/Exit Delays 00-55",0,55,11); K:=1000; F:=1;{Equity/Factor} {Signals} I:=FmlVar("PS MOO","Long"); N:=I>0; Ns:=0; X:=I<0; Xs:=0; {Code} I:=ExtFml("GS.SetVar","Cf",F);I:=ExtFml("GS.SetVar","Se",A); Xd:=LastValue(Int(Frac(D/9.9)*10)); D:=LastValue(Int(D/10));Ns:=(B=5)*Ns; F:=ValueWhen(1+D,1,If(F=0,-1,If(Abs(F)>1,Abs(F),-F))); M:=If(Ns>0,Min(H,Max(L,Ns)),If(B=1,O,If(B=3,H,If(B=4,L,C)))); N:=N*(Alert(N=0,2)+(Cum(N>-1)=1)); X:=X*(Z<5)*(Alert(X=0,2)+(Cum(N>-1)=1)); N:=ValueWhen(1+D,1,N);N:=If(B<5,N,Ns>0); N:=If((F<=1)*(F>0)*(F*K<M),(K=0)*N,N); Xs:=(Xs>0)*Min(H,Max(L,Xs)); Y:=If(Xs>0,Xs,If(Z=1,O,If(Z=3,H,If(Z=4,L,C)))); X:=ValueWhen(1+Xd,1,X);X:=X+Xs>0; Y:=If((Z<5)*(X=0),C{Y},Y);Y:=If((Xs>0)*N*X,Xs,Y); I:=Cum(Abs(F)+N+X>-2)=1;N:=(I>-1)*N; Y:=If((N+X=0)*Alert(N*X,2),ValueWhen(2,1,Y),Y); R:=BarsSince(I+N)<(BarsSince(I+X)+(Cum(N)=1 AND Cum(I+X)=1)); R:=If((N+X>1)*(Alert(R,2)+((D+Xd<1) *(B<>2)*(Z>1)*(Max(B,Z)>4 OR B<>Z))),1,R); U:=(R+Alert(R=0,2)=2)+I;M:=If(I*(N=0),C,M); Rx:=Alert(R,2);Q:=Rx*(LastValue(Cum(1))=Cum(1)); Z:={Q+}(R=0)*Rx;D:=A>99;A:=ValueWhen(1,U,If(M,M,1)); F:=ValueWhen(1,U,If(F<0,K*Abs(F), If(F<=1,Int((F*K-G)/A)*A+G,F*A+G)))*(K>0); B:=Rx*(1+BarsSince(U)); I:=(F-G)*Y/A-F;U:=(F-G)*(A-Y)/A-G; N:=(Z+Q>0)*If(D,If(K,I-Z*J,Y-A),If(K,U-Z*J,A-Y)); Xs:=Rx*If(D,If(K,I-Z*J,Y-A),If(K,U-Z*J,A-Y)); X:=Cum((Z+Q>0)*(N>0)*(B-1));Xd:=Cum((Z+Q>0)*(N<=0)*(B-1)); M:=Cum(N)+K+R*(Q=0)*If(D,If(K,I,Y-A),If(K,U,A-Y)); I:=ExtFml("GS.SetVar","Mx",Rx*If(D,If(K,(F-G)* ((H/A)-1)-G-J*Z,H-A),If(K,(F-G)*((A-L)/A)-G-J*Z,A-L))); I:=ExtFml("GS.SetVar","Mn",Rx*If(D,If(K,(F-G)* ((L/A)-1)-G-J*Z,L-A),If(K,(F-G)*((A-H)/A)-G-J*Z,A-H))); I:=ExtFml("GS.SetVar","A",A);I:=ExtFml("GS.SetVar","Cn",G); I:=ExtFml("GS.SetVar","Cp",K);I:=ExtFml("GS.SetVar","Cx",J); I:=ExtFml("GS.SetVar","Eq",M);I:=ExtFml("GS.SetVar","F",F); I:=ExtFml("GS.SetVar","N",N);I:=ExtFml("GS.SetVar","Tr",R); I:=ExtFml("GS.SetVar","X",X);I:=ExtFml("GS.SetVar","Xd",Xd); I:=ExtFml("GS.SetVar","Xs",Xs);I:=ExtFml("GS.SetVar","Y",Y); {Fml("Trade Equity GV SE Display");}M; September 2012 Figure 43. Version 8.5 of the Trade Equity GV SE indicator Page 32 {Trade Equity GV SE Display} {Roy Larsen, 2004-2013, 10/1/13} {use with Trade Equity GV SE, v8.5} Z:=ExtFml("GS.GetVar","Se"); D:=DayOfMonth();A:=LastValue(D); M:=Month();B:=LastValue(M);Y:=Year(); G:=M*31+D-(M>B OR (M=B AND D>A))*372; G:=G<ValueWhen(2,1,G);Z:=If(Z>99,Z-100,Z); K:=ExtFml("GS.GetVar","Cp");M:=LastValue(K); N:=ExtFml("GS.GetVar","N");M:=ExtFml("GS.GetVar","Eq"); R:=ExtFml("GS.GetVar","Tr");Nd:=ExtFml("GS.GetVar","Xs"); F:=ExtFml("GS.GetVar","F");I:=Cum(IsDefined(R))=1; Q:=R*(Cum(1)=LastValue(Cum(1))); F:=ExtFml("Forum.Sum",F,1); F:=If(F=0,1,F); Ns:=HighestSince(1,I,ExtFml("GS.GetVar","Mx")); Nd:=LowestSince(1,I,ExtFml("GS.GetVar","Mn")); A:=HighestSince(1,I+R*Alert(R=0,2)*(Z<19),M)=M; B:=ValueWhen(1,I+A,Max(M,ValueWhen(1,I+(R=0),M))); D:=LowestSince(1,I+A,M);Rd:=HighestSince(1,I,B-D); Rp:=100*HighestSince(1,I,(B-D)/(B+(B=0))); I:=Alert(Cum(IsDefined(Ref(I,2)))=1,3); Y:=If(Z>24,G,Y<>ValueWhen(2,1,Y)) OR Cum(I)=0 OR Cum(I)=2; Y:=TroughBars(1,Y,1)=0 OR Alert(Cum(I)=1,3) OR Cum(1)=LastValue(Cum(1)); Y:=ExtFml("Forum.Sum",Y,1); A:=ValueWhen(1,Y,M); B:=ValueWhen(2,Y,M); G:=PREC(100*(A-B)*(B<>0)/(Abs(B)+(B=0)),2); D:=If(Z=0,M, If(Z=1,M-K, If(Z=2,100*(M-K)/F, If(Z=3,N+M-K-Cum(N), If(Z=4,100*(N+M-K-Cum(N))/F, If(Z=5,N, If(Z=6,100*N/F, If(Z=7,Cum((N>0)*N), If(Z=8,Cum((N<0)*N), If(Z=9,Cum(N>0), Cum((R=0)*Alert(R,2)+Q>0 AND N<=0))))))))))); D:=If(Z<11,D, If(Z=11,R, If(Z=12,R*Alert(R=0,2)-(R=0)*Alert(R,2), If(Z=13,BarsSince(I+(R=0)), If(Z=14,Cum(R), If(Z=15,Ns, If(Z=16,Nd, If(Z=17,-Rd, If(Z=18,-Rp, If(Z=19,-Rd, -Rp)))))))))); D:=If(Z<21,D, If(Z=21,M-ValueWhen(1,I OR M=Highest(M),M), If(Z=22,100*(M-ValueWhen(1,I OR M=Highest(M),M))/(K+(K=0)), If(Z=23,(A-B)*(B<>0), If(Z=24,G, If(Z=25,(A-B)*(B<>0), If(Z=26,G,F))))))); I:=Cum(IsDefined(D));D:=ExtFml("Forum.SUM",D,1); If(Z=10 AND I=0,0, If(I=0,LastValue(ValueWhen(1,I=1,D)),D)); Figure 44. Version 8.5 of the Trade Equity GV SE Display indicator September 2012 Page 33 {Trade Equity GV SE Display H} {Roy Larsen, 2004-2013, 10/1/13} {use with Trade Equity GV SE, v8.5} J:=Fml("Trade Equity GV SE"); Z:=Input("Trade Equity GV SE Display H, Option?",0,27,0); J:=Input("Output, 1=One Line, 2=Two Lines (histogram)",1,2,1); D:=DayOfMonth();A:=LastValue(D); M:=Month();B:=LastValue(M);Y:=Year(); G:=M*31+D-(M>B OR (M=B AND D>A))*372; G:=G<ValueWhen(2,1,G); K:=ExtFml("GS.GetVar","Cp");M:=LastValue(K); N:=ExtFml("GS.GetVar","N");M:=ExtFml("GS.GetVar","Eq"); R:=ExtFml("GS.GetVar","Tr");Nd:=ExtFml("GS.GetVar","Xs"); F:=ExtFml("GS.GetVar","F");I:=Cum(IsDefined(R))=1; Q:=R*(Cum(1)=LastValue(Cum(1))); F:=ExtFml("Forum.Sum",F,1); F:=If(F=0,1,F); Ns:=HighestSince(1,I,ExtFml("GS.GetVar","Mx")); Nd:=LowestSince(1,I,ExtFml("GS.GetVar","Mn")); A:=HighestSince(1,I+R*Alert(R=0,2)*(Z<19),M)=M; B:=ValueWhen(1,I+A,Max(M,ValueWhen(1,I+(R=0),M))); D:=LowestSince(1,I+A,M);Rd:=HighestSince(1,I,B-D); Rp:=100*HighestSince(1,I,(B-D)/(B+(B=0))); I:=Alert(Cum(IsDefined(Ref(I,2)))=1,3); Y:=If(Z>24,G,Y<>ValueWhen(2,1,Y)) OR Cum(I)=0 OR Cum(I)=2; Y:=TroughBars(1,Y,1)=0 OR Alert(Cum(I)=1,3) OR Cum(1)=LastValue(Cum(1)); Y:=ExtFml("Forum.Sum",Y,1); A:=ValueWhen(1,Y,M); B:=ValueWhen(2,Y,M); G:=PREC(100*(A-B)*(B<>0)/(Abs(B)+(B=0)),2); D:=If(Z=0,M, If(Z=1,M-K, If(Z=2,100*(M-K)/F, If(Z=3,N+M-K-Cum(N), If(Z=4,100*(N+M-K-Cum(N))/F, If(Z=5,N, If(Z=6,100*N/F, If(Z=7,Cum((N>0)*N), If(Z=8,Cum((N<0)*N), If(Z=9,Cum(N>0), Cum((R=0)*Alert(R,2)+Q>0 AND N<=0))))))))))); D:=If(Z<11,D, If(Z=11,R, If(Z=12,R*Alert(R=0,2)-(R=0)*Alert(R,2), If(Z=13,BarsSince(I+(R=0)), If(Z=14,Cum(R), If(Z=15,Ns, If(Z=16,Nd, If(Z=17,-Rd, If(Z=18,-Rp, If(Z=19,-Rd, -Rp)))))))))); D:=If(Z<21,D, If(Z=21,M-ValueWhen(1,I OR M=Highest(M),M), If(Z=22,100*(M-ValueWhen(1,I OR M=Highest(M),M))/(K+(K=0)), If(Z=23,(A-B)*(B<>0), If(Z=24,G, If(Z=25,(A-B)*(B<>0), If(Z=26,G,F))))))); I:=Cum(IsDefined(D));D:=ExtFml("Forum.SUM",D,1); D:=If(Z=12 AND I=0,0, If(I=0,LastValue(ValueWhen(1,I=1,D)),D)); ValueWhen(1,J=2,If(D>=0,D,0)); If(J=2,If(D<0,D,0),D); Figure 45. Version 8.5 of the Trade Equity GV SE Display H indicator September 2012 Page 34 SELF-INSTALLING FORMULA CONTENTS Self-installing EXE file MS 8+ Sep 2012 Trade Equity Formulas.exe Explorations Trade Equity Data Validity Trade Equity Portfolio Reset Trade Equity Portfolio Scan DE1 Trade Equity Portfolio Scan DE2 Trade Equity Portfolio Scan LE Trade Equity Portfolio Scan SE Trade Equity Super Scan DE1 Trade Equity Super Scan DE2 Trade Equity Super Scan LE Trade Equity Super Scan SE Experts Trade Equity Chart Report DE Trade Equity Chart Report LE Trade Equity Chart Report LSE Trade Equity Chart Report SE Trade Equity Portfolio Report DE Trade Equity Portfolio Report LE Trade Equity Portfolio Report LSE Trade Equity Portfolio Report SE Trade Equity Super Scan Report DE Trade Equity Super Scan Report LE Trade Equity Super Scan Report LSE Trade Equity Super Scan Report SE Indicators Bar Count Date Filter PS MOO (Meisels Overbought/Oversold} Trade Equity GV DE Trade Equity GV DE Long Trade Equity GV DE Short Trade Equity GV Display Options Trade Equity GV LE Trade Equity GV LE Display Trade Equity GV LE Display H Trade Equity GV LE Portfolio Display Trade Equity GV SE Trade Equity GV SE Display Trade Equity GV SE Display H Trade Equity GV SE Portfolio Display Trade Equity Pairs GV LE Trade Equity Pairs GV SE DLLs Forum, MSTT, GD, GP, GS, GV Templates Trade Equity LE Trade Equity LSE Trade Equity SE Default Display settings 2/2 22/1 11/1 2/2 22/1 - 2/2 22/1 2/2 22/1 11/1 Figure 46. Contents of the MS 8+ Sep 2012 Trade Equity Formulas.exe file. Self-installing EXE file MS 8+ Sep 2012 System Formulas.exe Explorations Trade Equity Portfolio Scan Breadth D Trade Equity Portfolio Scan Breadth P Indicators AT Breadth AT Market Breadth AT AT Market Breadth EFT PS AMA (Adaptive Moving Average) PS BP1 (Bull Power Bear Power 1) PS BP2 (Bull Power Bear Power 2) PS BP3 (Bull Power Bear Power 3) PS CBO (Consolidation Breakout) PS CCI (Commodity Channel Index) PS CFO (Chande Forecast Oscillator) PS CMO (CMO Reversal) PS CPP (Cooper 1234 Pattern) PS CPR (Cycle Progression) PS DM1 (Dynamic Momentum Index 1) PS EMA (Exponential Moving Average) PS FT1 (Fractal Trading System 1) PS FT2 (Fractal Trading System 2) PS LSS (Long Sell Short Sale-5 Day) PS MH1 (MACD Histogram 1) PS MH2 (MACD Histogram 2) PS MOO (Meisels Overbought/Oversold) PS MSW (MESA Sine Wave) PS PC3 (Percentage Crossover 3%) PS PO1 (Projection Oscillator 1) PS PT1 (Pattern Trading System 1) PS SRS (StochRSI) PS SWI (Swing Index) PS VBC (Volatility Breakout (Chaikin)) PS VHF (Vertical Horizontal Filter) Figure 47. Contents of the MS 8+ Sep 2012 System Formulas.exe file. September 2012 Page 35
© Copyright 2024