click here to go to MoneyMentor.com
TradeStation Made Easy!
Don't let the size of this book fool you. It's 746 pages of "How To" and numerous examples, walking you through from opening the box to programming profitable systems with EasyLanguage. It's about time someone made this powerful and extensive software easy to understand!
Sunny has been teaching her "Solving the Puzzle" seminars for 20 years. Now it is all contained in one book--a book that actually makes TradeStation and EasyLanguage easy to use. Something that none of TradeStation's documentation does.

Readers of this newest Sunny Harris book, come here for downloads mentioned in the book.
Errata Sheet (Corrections to the Manuscript)
Templates Mentioned in Chapter 6:
Click here to download ELAs for Examples in TSME
Indicator Template:
{INDICATOR NAME AND PURPOSE: xxx}
INPUTS: xx;
VARIABLES: xx;
Condition1 = xx;
IF Condition1 THEN BEGIN
Value1 = xx;
xx;
END;
Plot1(Value1,”Value1”);
STRATEGY Template:
{STRATEGY NAME AND PURPOSE: xxx}
INPUTS: xx;
VARIABLES: xx;
Condition1 = xx;
Condition2 = xx;
IF Condition1 THEN BEGIN
BUY xx THIS BAR;
IF Condition2 THEN BEGIN
SELL xx THIS BAR;
END;
Function Template:
{FUNCTION NAME AND PURPOSE: xxx}
INPUTS: xx;
VARIABLES: xx;
Condition1 = xx;
Value1 = xx;
IF Condition1 THEN BEGIN
xx;
xx;
END;
xxx=Value1;
Figure 6.10: RSI Using SetColor showing colors for Overbought and Oversold

Plot1(RSI(Close, 9), "RSI") ;
If Plot1 > 65 Then
SetPlotColor(1, Blue);
If Plot1 < 35 Then
SetPlotColor(1, Green);
Code for the Indicators and Strategy Mentioned throughout the book:
Signal to Close the Open Trade
IF LastBarOnChart THEN BEGIN
IF MarketPositon = 1 THEN ExitLong;
IF MarketPosition = -1 THEN ExitShort;
END;
Indicator for 200-day Moving Average
PLOT1(Average(C,200),"200MAV");
Figure E.1—Indicator: 200Day Moving Average
PaintBar for 200-day Moving Average
Value91=Average(C,200);
Condition1=H>Value91;
Condition2=L<Value91;
IF Condition1 OR Condition2 THEN BEGIN
PlotPaintBar(L,H,"PB200");
If Condition1 THEN SetPlotColor(1,DarkGreen)
ELSE IF Condition2 THEN SetPlotColor(1,Red);
END;

Figure D.1—PaintBar for 200-Day Moving Average
ShowMe for 200-day Moving Average
Value91=Average(C,200);
Condition1=H>Value91;
Condition2=L<Value91;
IF Condition1 OR Condition2 THEN BEGIN
Plot1(C,"PB200");
If Condition1 THEN SetPlotColor(1,DarkGreen)
ELSE IF Condition2 THEN SetPlotColor(1,Red);
END;

Figure D.3—ShowMe for 200 Day Moving Average
Filter for 200-day Moving Average
INPUTS: UpColor(Green), DnColor(Red), L1(200);
VARS: jtext("");
Value1 = sjh_DynamicAvg$$_f(Close,L1,.25,2,31);
IF C > Value1 THEN BEGIN
jtext = "Long";
Plot1( jtext, "MA" , white) ; SetPlotBGColor(1,UpColor);
END;
IF C < Value1 THEN BEGIN
jtext = "Short";
Plot1( jtext, "MA" ,white) ; SetPlotBGColor(1,DnColor);
END;
Figure D.4—Filter for 200 Day MAV
You may have difficulty getting this one to work at first. The trick to making RadarScreen work is to go into the Format screen and change the value in "Load additional data for accumulative calculation" to a number that is greateer than the length of the maximum calculation of the indicator. So, for the 200 day moving average, this value needs to be set to 201.
INPUTS: DATE1(960101),DATE2(1101231),Length1(3),Length2(13),Leng(9),RSIleng(9),
ADXswt(0), RSIswt(0),jRSIOB(75), jRSIOS(25), xHR(180), yHR(60),Dollars(100),LossL(100),LossS(100);
IF LENGTH1<LENGTH2 THEN BEGIN
IF Date >= Date1 AND DATE<=DATE2 THEN BEGIN
Value1=xHR;
Value2=yHR;
Condition1=ADX(Leng)>ADX(Leng)[1];
Condition2=RSI(C,RSIleng)<jRSIOB;
Condition3=RSI(C,RSIleng)>jRSIOS;
IF ADXswt=1 THEN Condition1=true;
IF RSIswt=1 THEN Condition2=true;
IF RSIswt=1 THEN Condition3=true;
IF CurrentBar > 1
AND XAverage(Close,Length1) > XAverage(Close,Length2)
AND Condition1 AND Condition2
THEN BUY This Bar on Close;
IF CurrentBar > 1
AND XAverage(Close,Length1) < XAverage(Close,Length2)
AND Condition1 AND Condition3
THEN SELL SHORT This Bar on Close;
IF date>DATE2 THEN BEGIN
IF MarketPosition=+1 THEN SELL This Bar on Close;
IF MarketPosition=-1 THEN BUYTOCOVER This Bar on Close;
END;
IF BarsSinceEntry=xHR AND PositionProfit<Dollars THEN Sell This Bar;
IF BarsSinceEntry=yHR AND PositionProfit<Dollars THEN BuyToCover This Bar ;
IF PositionProfit < -LossL THEN SELL This Bar;
IF PositionProfit < -LossS THEN BUYTOCOVER This Bar;
IF Date>=LastCalcDate THEN BEGIN
SELL This Bar; BUYTOCOVER This Bar;
END;
END;
END;


Figure D.5 & D.6—Our Strategy
If you have other questions, or if I have left anything mentioned in the book out of this page, please call me at (760) 908-3070.
Right-click the link, and Save Target As... THEN, be sure to change the extension from .html to .eld
If you find other errors, please forward them to me so I can place them here.
page 3 Joe Krutsinger no longer has the 800 number. His direct number is 913-334-2202. See page 711 for correct information.
page 217 Under Example, about half way down the page: “Assigns to Value1 the number -1” should read “Assigns to Value1 the number 1”
page 226 last paragraph: “…shown in Figures 10.11 and 10.12” should read “…shown in Figures 10.12 and 10.13.”
page 280 ADx should read ADX
Appendix Reserved Words
Category
page 479 MaxConsecLosers and MaxConsecWinners should read:
MaxConsecLosers
Returns the largest number of consecutive closed losing trades.
EXAMPLES
MaxConsecLosers returns 5 if the largest number of consecutive closed losing trades is 5.
MaxConsecLosers returns 2 if the largest number of consecutive closed losing trades is 2.
MaxConsecWinners
Returns the largest number of consecutive closed winning trades.
EXAMPLES
MaxConsecWinners returns 5 if the largest number of consecutive closed winning trades is 5.
MaxConsecWinners returns 2 if the largest number of consecutive closed winning trades is 2.
(This error was caught by Ken McCoy. Thanks.)
