[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[amibroker] Buy/sell signals disappear when auto-trendline changes



PureBytes Links

Trading Reference Links

Hi,
I would like to use trendline breakout as part of my trading system.
I have added buy/sell signals to the Advanced Trendlines AFL in the AB library (full AFL attached below).  A buy signal is triggered when Close crosses up the resistance line; and a sell signal is triggered when Close goes below the support line.

However I am having problem backtesting the AFL below because the buy/sell signals will only stay as long as the trendlines do not change (i.e. the close price of the buy/sell trade bar remains above/below the trendlines).  But as soon as the trendlines update themselves (as the original AFL is designed to do), the buy/sell signals disappear - this is because now the trade bar no longer crosses the new trendlines.

Is there a way to get around this problem and make the buy/sell signals stay permanent after they are triggered ?  Would anyone be able to please help ?

I tried using a new array to store the buy/sell signals but it doesn't seem to work, e.g.
for( i = 2; i < BarCount; i++ )
{
if( Buy[i-1]==1 OR nbuy[i-1]==1) nbuy[i-1]=1;
if( Short[i-1]==1 OR nshort[i-1]==1) nshort[i-1]=1;
}
then do something with nbuy/nshort.

Thanks.
Kevin




_SECTION_BEGIN("Advanced Trend Lines");
function TD_Supply()
{
return ( H > Ref(H, 1) AND H > Ref(H, -1) AND H > Ref(C, -2));
}
function TD_Demand()
{
return ( L < Ref(L, 1) AND L < Ref(L, -1) AND L < Ref(C, -2));
}

function IsTD_Supply(n)
{
n = (BarCount - 1) - n;
return LastValue( Ref(H, -n) > Ref(H, -n+1) AND Ref(H, -n) > Ref(H, -n-1) AND Ref(H, -n) > Ref(C, -n-2));
}
function IsTD_Demand(n)
{
n = (BarCount - 1) - n;
return LastValue( Ref(L, -n) < Ref(L, -n+1) AND Ref(L, -n) < Ref(L, -n-1) AND Ref(L, -n) < Ref(C, -n-2));
}
function GetXSupport(Lo, Percentage, Back)
{
return ((BarCount - 1) - LastValue(TroughBars(Lo, Percentage,Back)));
}
function GetYSupport(Lo, Percentage, Back)
{
return (LastValue(Trough(Lo, Percentage, back)));
}

function GetXResistance(Hi, Percentage, Back)
{
return ((BarCount - 1) -LastValue(PeakBars(Hi, Percentage, Back)));
}
function GetYResistance(Hi, Percentage, Back)
{
return (LastValue(Peak(Hi, Percentage, Back)));
}
////////////////////////////////////////////////////////////////////////
//Parameters
Percentage = LastValue(IIf(ADX(14)>25, 0.1, 0.5));
Lines = Param("Lines?", 1, 1, BarCount-2);
DrawR = ParamList("Resistance Points", "Off|High to High|High to Low", 1);
DrawS = ParamList("Support Points", "Off|Low to Low|Low to High", 1);
DrawAllLines = ParamToggle("Draw All Lines?", "No|Yes", 1);
Method = ParamToggle("Method", "TD Points|ZigZag",1);
ShowTDP = ParamToggle("Show TD Pionts", "No|Yes");
AllOrDownR = ParamToggle("Resistance Direction", "All|Down");
AllOrUpS = ParamToggle("Support Direction", "All|Up");
////////////////////////////////////////////////////////////////////////
Main = C;
Con = ConS = ConR = 1;
if(DrawS=="Low to Low")
{
Support1 = L;
Support2 = L;
}
else
{
Support1 = L;
Support2 = H;
}
if(DrawR=="High to High")
{
Resistance1 = H;
Resistance2 = H;
}
else
{
Resistance1 = H;
Resistance2 = L;
}
////////////////////////////////////////////////////////////////////////
//Plotting Area
Plot(Main, "", IIf(C>O,colorGreen, colorRed), styleBar);
if(DrawAllLines)
for(i = 2; i<=Lines+1; i++)
{
if(DrawS!="Off")
{
x0 = GetXSupport(Support1, Percentage, i);
x1 = GetXSupport(Support2, Percentage, i-1);
y0 = GetYSupport(Support1, Percentage, i);
y1 = GetYSupport(Support2, Percentage, i-1);
x = LineArray(x0, y0, x1, y1, 1);
if(!Method)
Con = (IsTD_Demand(x0) AND IsTD_Demand(x1));
if(AllOrUpS) ConS = y0 < y1;
if(Con AND ConS)
Plot(x, "", colorLightBlue, styleLine|styleThick);
xa = x;
}
if(DrawR!="Off")
{
x0 = GetXResistance(Resistance1, Percentage, i);
x1 = GetXResistance(Resistance2, Percentage, i-1);
y0 = GetYResistance(Resistance1, Percentage, i);
y1 = GetYResistance(Resistance2, Percentage, i-1);
x = LineArray(x0, y0, x1, y1, 1);
if(!Method)
Con = (IsTD_Supply(x0) AND IsTD_Supply(x1));
if(AllOrDownR) ConR = y0 > y1;
if(Con AND ConR)
Plot(x, "", colorRed , styleLine|styleThick);
}
}
else
{
if(DrawS!="Off")
{
x0 = GetXSupport(Support1, Percentage, Lines+1);
x1 = GetXSupport(Support2, Percentage, Lines);
y0 = GetYSupport(Support1, Percentage, Lines+1);
y1 = GetYSupport(Support2, Percentage, Lines);
x = LineArray(x0, y0, x1, y1, 1);
if(!Method)
Con = (IsTD_Demand(x0) AND IsTD_Demand(x1));
if(AllOrUpS) ConS = y0 < y1;
if(Con AND ConS)
Plot(x, "", colorLightBlue, styleLine|styleThick);
xa = x;
}
if(DrawR!="Off")
{
x0 = GetXResistance(Resistance1, Percentage, Lines+1);
x1 = GetXResistance(Resistance2, Percentage, Lines);
y0 = GetYResistance(Resistance1, Percentage, Lines+1);
y1 = GetYResistance(Resistance2, Percentage, Lines);
x = LineArray(x0, y0, x1, y1, 1);
if(!Method)
Con = (IsTD_Supply(x0) AND IsTD_Supply(x1));
if(AllOrDownR) ConR = y0 > y1;
if(Con AND ConR)
Plot(x, "", colorRed , styleLine|styleThick);

}
}

if(ShowTDP)
{
PlotShapes(TD_Supply()*shapeSmallCircle, colorRed, 0, H, H*.001);
PlotShapes(TD_Demand()*shapeSmallCircle, colorGreen, 0, L, -L*.001);
}
Title =FullName()+" ({{NAME}})\n{{DATE}}\n"+"Open: "+O+", Hi: "+H+", Lo: "+L+", Close: "+C;

Buy = Cross(C, x) ;
Short = Cross(xa, C);
Cover = Buy;
Sell = Short;
PlotShapes( (Buy) * shapeUpArrow + (Short) * shapeDownArrow, colorBlack, 0,IIf( (Buy), L,H ),-20 );



_SECTION_END(); 



------------------------------------

**** IMPORTANT PLEASE READ ****
This group is for the discussion between users only.
This is *NOT* technical support channel.

TO GET TECHNICAL SUPPORT send an e-mail directly to 
SUPPORT {at} amibroker.com

TO SUBMIT SUGGESTIONS please use FEEDBACK CENTER at
http://www.amibroker.com/feedback/
(submissions sent via other channels won't be considered)

For NEW RELEASE ANNOUNCEMENTS and other news always check DEVLOG:
http://www.amibroker.com/devlog/

Yahoo! Groups Links

<*> To visit your group on the web, go to:
    http://groups.yahoo.com/group/amibroker/

<*> Your email settings:
    Individual Email | Traditional

<*> To change settings online go to:
    http://groups.yahoo.com/group/amibroker/join
    (Yahoo! ID required)

<*> To change settings via email:
    mailto:amibroker-digest@xxxxxxxxxxxxxxx 
    mailto:amibroker-fullfeatured@xxxxxxxxxxxxxxx

<*> To unsubscribe from this group, send an email to:
    amibroker-unsubscribe@xxxxxxxxxxxxxxx

<*> Your use of Yahoo! Groups is subject to:
    http://docs.yahoo.com/info/terms/