You're still redundantly calculating arrays (e.g. Ref(Close,-1 * ATRPeriod / 
2), Ref(Close,-1 * ATRPeriod).

For the rest, it would help if you gave a non coded (e.g. english) description 
of your rules.

As for performance, it's good practice run the backtest in full details mode 
(see AA settings for reporting) and go through every bar with a magnifying 
glass to be sure that you agree with every detail!

Mike

--- In [email protected], "three_percent" <se...@...> wrote:
>
> // ATR/Turtle Script by Andrew Senft
> //
> 
> Thank you very much for your notes.  I took out the ExRem statements out and 
> now get 100% annual returns on the S&P500.   A lot more than before.   Not 
> sure if that is right.  Also, I'm not sure how to get the initial occurance 
> of the buy trigger for the ValueWhen statement.   
> 
> ---------------------------------------------------------------------
> // Backtester Options
> SetOption("AllowSameBarExit", False);
> SetOption("MaxOpenPositions",1);
> PositionSize = -100;
> 
> 
> // Optimization numbers 
> ATRPeriod = Optimize("ATRPeriod", 15, 10, 100, 5);                            
> // 15, .30, 1.08, .15, 25
> BuyThreshold = Optimize("BuyThreshold", .3, .1, .50, .05);            // 15, 
> .30, 1.06, .25, 25
> 
> 
> BuySlope = Optimize("BuySlope", 1.08, 1.05, 1.10, .01);
> SellThreshold = Optimize("SellThreshold", .15, .1, .50, .05);
> ProfitPercent = Optimize("ProfitPercent", 25, 25, 35, 5);
> 
> 
> // Buy/Sell signals and prices
> MyATR = ATR(ATRPeriod);
> PrevClose = Ref( Close,-1);
> Buy = Ref(MyATR,-1) < BuyThreshold AND
>       PrevClose > Ref(Close,-1 * ATRPeriod / 2) AND
>       Ref(Close,-1 * ATRPeriod / 2) > Ref(Close,-1 * ATRPeriod) AND
>       PrevClose / Ref(Close,-1 * ATRPeriod) > BuySlope AND
>       Ref(MA(Volume,20),-1) > 3000 AND                // 300,000 volume or 
> more
>       Ref(Close,-1) >= 2;
> BuyPrice = Open;
> BeginATR = Ref(ValueWhen(Buy, MyATR,1), -1);
> Sell = Ref(MyATR,-1) > BeginATR + SellThreshold;
> SellPrice = Open;
> PositionScore = 100 - Ref(MyATR,-1);
> ApplyStop( stopTypeProfit, stopModePercent, ProfitPercent ,True, 0 );
> 
> --- In [email protected], "Mike" <sfclimbers@> wrote:
> >
> > Hi,
> > 
> > Without evaluating the actual logic of what you're trying to do, a couple 
> > of quick observations:
> > 
> > 1. I suspect that you're missing "AND" after 3000, not semi colon.
> > 
> > 2. You are redundantly recalculating several arrays, where single 
> > calculations stored in variables would result in faster charting.
> > 
> > e.g.
> > MyATR = ATR( ATRPeriod );
> > PrevClose = Ref( Close, -1 );
> > ...
> > 
> > 3. Your usage of ValueWhen is probably not doing what you're hoping for. 
> > ValueWhen will pick up the most recent occurrence. Since your Buy can 
> > result in many redundant signals, your usage of ValueWhen will often pick 
> > up the redundant Buy, not the first one.
> > 
> > 4. FilterBeginATR appears not to be used. Get rid of it.
> > 
> > 5. Don't call ExRem on Buy and Sell, let the backtester do that for you. If 
> > you need unique values to plot shapes, store the results in a variable and 
> > PlotShapes using the variable instead.
> > 
> > Mike
> > 
> > --- In [email protected], "three_percent" <senft@> wrote:
> > >
> > > 
> > > Missing a semicolon after 3000
> > > 
> > > 
> > > --- In [email protected], "three_percent" <senft@> wrote:
> > > >
> > > > Here is my attempt at a turtle script based on the ATR command.   I've 
> > > > been backtesting it against the S&P500 since 1990.   If you guys have 
> > > > any comments or improvements, let me know...
> > > > 
> > > > 
> > > > 
> > > > 
> > > > ---------------------------------------------------------------------
> > > > 
> > > > // ATR/Turtle Script by Andrew Senft
> > > > //
> > > > 
> > > > 
> > > > 
> > > > // Backtester Options
> > > > SetOption("AllowSameBarExit", False);
> > > > SetOption("MaxOpenPositions",1);
> > > > PositionSize = -100;
> > > > 
> > > > 
> > > > // Optimization numbers 
> > > > ATRPeriod = Optimize("ATRPeriod", 15, 10, 50, 5);
> > > > BuyThreshold = Optimize("BuyThreshold", .3, .1, .50, .05);
> > > > BuySlope = Optimize("BuySlope", 1.08, 1.05, 1.10, .01);
> > > > SellThreshold = Optimize("SellThreshold", .15, .1, .50, .05);
> > > > ProfitPercent = Optimize("ProfitPercent", 25, 25, 35, 5);
> > > > 
> > > > 
> > > > // Buy/Sell signals and prices
> > > > Buy = Ref(ATR(ATRPeriod),-1) < BuyThreshold AND
> > > >         Ref(Close,-1) > Ref(Close,-1 * ATRPeriod / 2) AND
> > > >         Ref(Close,-1 * ATRPeriod / 2) > Ref(Close,-1 * ATRPeriod) AND   
> > > >                 // NEW NEW NEW
> > > >         Ref(Close,-1) / Ref(Close,-1 * ATRPeriod) > BuySlope AND
> > > >         Ref(MA(Volume,20),-1) > 3000    // 300,000 volume or more
> > > >         Ref(Close,-1) >= 2;             // stocks over $2
> > > > BuyPrice = Open;
> > > > BeginATR = Ref(ValueWhen(Buy, ATR(ATRPeriod),1), -1);
> > > > FilterBeginATR = ValueWhen(Buy, ATR(ATRPeriod),1);
> > > > Sell = Ref(ATR(ATRPeriod),-1) > BeginATR + SellThreshold;
> > > > SellPrice = Open;
> > > > Buy = ExRem(Buy,Sell);                                          
> > > > Sell = ExRem(Sell,Buy); 
> > > > 
> > > > PositionScore = 100 - Ref(ATR(ATRPeriod),-1);
> > > > 
> > > > 
> > > > ApplyStop( stopTypeProfit, stopModePercent, ProfitPercent ,True, 0 );
> > > >
> > >
> >
>


Reply via email to