// 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" <sfclimb...@...> 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 );
> > >
> >
>