//------------------------------------------------------------------------------
//
// price chart with trade calls for aroon + sar signs
//
//------------------------------------------------------------------------------
ScriptVersion = " explorativo del Main al 12 de set 2005";
//////////////////// PRECIO //////////////////////////////////////////////
Plot(C,"",colorBlack,styleCandle|styleNoLabel);
Filter = Close > 10;
AddColumn(Close,"Close");
PositionSize = 100;
/////////////////////// MEDIAS MOVILES///////////////////
slope = Param("slope",2,2,100,1);
Color20= IIf(LinRegSlope(MA(C,20),slope)<0,colorRed,colorBrightGreen);
event1= LinRegSlope(MA(C,20),slope)<0;
Plot( MA( C, 20), "",Color20 , styleLine);
//Plot( event1, "", colorRose, styleArea|styleOwnScale);
Color50= IIf(LinRegSlope(MA(C,50),slope)<0,colorRed,colorBlue);
Plot( MA( C, 50), "",Color50 , styleLine);
Color100= IIf(LinRegSlope(MA(C,100),slope)<0,colorRed,colorYellow);
Plot( MA( C, 100), "",Color100 , styleLine);
Color150= IIf(LinRegSlope(MA(C,150),slope)<0,colorRed,10);
Plot( MA( C, 150), "",Color150 , styleLine);
event1=Cross(MA(C,20),MA(C,50));
PlotShapes( IIf(event1 ,shapeDigit1,0) ,5, 0, L,-30);
event2=Cross(MA(C,50),MA(C,100));
PlotShapes( IIf(event2 ,shapeDigit2,0) ,6, 0, L,-30);
event3=Cross(MA(C,100),MA(C,150));
PlotShapes( IIf(event3 ,shapeDigit3,0) ,7, 0, L,-30);
event4=Cross(MA(C,50),MA(C,20));
PlotShapes( IIf(event4 ,shapeDigit4,0) ,5, 0, H,30);
event5=Cross(MA(C,100),MA(C,50));
PlotShapes( IIf(event5 ,shapeDigit5,0) ,6, 0, H,30);
event6=Cross(MA(C,150),MA(C,100));
PlotShapes( IIf(event6 ,shapeDigit6,0) ,7, 0, H,30);
event7=Cross(MA(C,5),MA(C,20));
PlotShapes( IIf(event7 ,shapeDigit7,0) ,9, 0, L,-30);
//////////////////////////////////MACD///////////////////////////////////
MACDRequired=1;
FAST = Param("FAST",12,0,100,1);
SLOW = Param("SLOW",26,0,100,1);
SIG = Param("SIG",9,0,100,1);
MACDLine = MACD(FAST,SLOW);
MACDSignal = Signal(FAST,SLOW,SIG);
MACDHisto = MACDLine - MACDSignal;
MIN10= Param("X MACD10", 5,1,30,step=0.1);
MIN60= Param("X MACD60",10,1,30,step=0.1);
MACDBACKBARS=Param("Lookback MACD",1,1,30,step=1);
MinDir= Param("DirChange",0.6,-5,5,step=0.01);
NOEXCESS= Param("Remove Excess Signals",1,0,1,step=1);
if(Interval() <= 600 ) MACDRequired=MIN10; // 10 minute +/-5 extreme
if(Interval() >= 3600) MACDRequired=MIN60; // 60 minute +/- 10
/////////////////// HISTOGRAMA ////////////////////////////////
MACDHisto = MACDLine - MACDSignal;
HistDivUp = Cross(LinRegSlope(MACDHisto,3),0);
HistDivDn = Cross(0,LinRegSlope(MACDHisto,3));
HBuy = HistDivUp ;
HSell = HistDivDn ;
PlotShapes( IIf(HBuy ,3,0) ,colorBlue, 0,Graph0,-22 );
PlotShapes( IIf(HSell,4,0) ,colorYellow, 0,Graph0,-22);
////////////////////// AROON //////////////////////////////////
Period = Param("Aroon Period",14,1,100,1);
LLVBarsSince = LLVBars(L, Period) + 1;
HHVBarsSince = HHVBars(H, Period) + 1;
AD = 100 * (Period - LLVBarsSince) / (Period - 1);
AU = 100 * (Period - HHVBarsSince) / (Period - 1);
AO = AU - AD;
MINAROONOSC= Param("AO ",45,0,100,step=0.1);
MINAROONSIG= Param("AV ",99.9,0,100,step=0.1);
MINAROONOSC= Optimize("Aroon Osc ",MINAROONOSC,0,100,step=1);
MINAROONSIG= Optimize("Aroon Value",MINAROONSIG,0,100,step=1);
event1 =Cross(MINAROONSIG,AD) AND AO <= -MINAROONOSC;
event2=Cross(MINAROONSIG,AU) AND AO >= MINAROONOSC;
// Include MACD / Signal Cross
AroonMACD=MACD() >= Signal();
event3=Cross(MINAROONSIG,AU) AND AO >= MINAROONOSC AND AroonMACD > 0;
event4 =Cross(MINAROONSIG,AD) AND AO <= -MINAROONOSC ;
//if(AroonBuy[BarCount-1]) PlotShapes( ( AroonBuy OR AroonSell )+5 ,IIf( AroonBuy, colorPaleGreen, colorPink ), 0 );
event5=Cross(AO,0);
event6= Cross(0,AO);
event7=Cross(AO,-50);
event8= Cross(0,AO);
event9= Cross(AU,AD);
event10=Cross(AD,AU);
//Plot(AU ,"AU" ,colorBrightGreen,styleLine);
//Plot(AD,"AD" ,colorRed ,styleLine);
//Plot(AO ,"Osc",colorBlack,styleLine+styleOwnScale);
AroonBuy= event9;
AroonSell=event10;
PlotShapes( IIf(AroonBuy ,5,0) ,colorBlue, 0,L);
PlotShapes( IIf(AroonSell,6,0) ,colorYellow, 0,H);
//////////////////////////////// DMI //////////////////////////////////
MACDLine = MACD(FAST,SLOW);
range=Param("R ADX ",14,1,50,step=1);
//Prefs(49);
MINADX= Param("X ADX ",30,1,50,step=0.1);
ADXBACKBARS= Param("LB ADX",3,1,30,step=1);
// Find the direction of ADX
ADXTipDirA = LinRegSlope(ADX(range),2); // Short term direction change
ADXTipDir = LinRegSlope(ADXTipDirA*4,3); // Short term direction change
ADXFastDir = LinRegSlope(ADX(range),3); // Medium
ADXSlowDir = LinRegSlope(ADX(range),6); // Longer
// Direction *CHANGE* of ADX at the 'extremes'
ADXSlopeUp = Cross(ADXTipDir,0) AND ADX(range)<20;
ADXSlopeDn = Cross(0,ADXTipDir) AND ADX(range)>MINADX;
ADXHistory = ADX(range);
ADXBuy1 = ADXFastDir >0 AND ADX(range)> 20 AND ( PDI(range)>MDI(range)) AND MACDLine > 0;//TrendUp
ADXSell2 = ADXFastDir >0 AND ADX(range)> 20 AND ( MDI(range)>PDI(range)) AND MACDLine < 0; //TrendDown
ADXBuy3= ADXSlowDir >0; //AND ADX(range)< 20 AND ( PDI(range)>MDI(range));//WarnUp
ADXSell4= ADXSlowDir >0; //AND ADX(range)< 20 AND ( MDI(range)>PDI(range));//WarnDn
ADXBuy5=ADX(range)>MDI(range) AND MDI(range)>30;//MDIX
ADXSell6=ADX(range)>PDI(range) AND PDI(range)>30;//PDIX
ADXBuy7 = BarsSince(ADXTipDir<MinDIR)<BarsSince(ADXBuy1)+ADXBACKBARS AND ADX(range)>MINADX;
ADXSell8 = BarsSince(ADXTipDir<MinDIR)<BarsSince(ADXSell6)+ADXBACKBARS AND ADX(range)>MINADX;
ADXBuy9 = BarsSince(MACDLine < -MACDRequired)<MACDBACKBARS ; // AND HistDivUp;
ADXSell10 = BarsSince(MACDLine > MACDRequired)<MACDBACKBARS; // AND HistDivDn;
ADXBuy11 = ADXBuy5 AND ADXSlopeDn;
ADXSell12 = ADXSell6 AND ADXSlopeDn;
ADXBuy13 = ADXBuy5 AND ADXTipDir<0 AND Peak(ADXHistory,0.5,1)>ADX(range); //AND ADXSlopeDn;
ADXSell14 = ADXSell6 AND ADXTipDir<0 AND Peak(ADXHistory,0.5,1)>ADX(range); //AND ADXSlopeDn;
ADXBuy15 = ADXBuy5 AND ADXTipDir<0 AND ADXHistory[BarCount-10]<ADX(range); //AND ADXSlopeDn;
ADXSell16 = ADXSell6 AND ADXTipDir<0 AND ADXHistory[BarCount-10]<ADX(range); //AND ADXSlopeDn;
ADXBuy17 = ADXBuy5 AND ADXSlopeDn;
ADXBuy18=Cross(PDI(range),MDI(range));
ADXSell19=Cross(MDI(range),PDI(range));
ADXBuy=ADXBuy18;
ADXSell=ADXSell19;
// Remove excess Buy/Sell Signals from ADX Based Signals
if(NOEXCESS) ADXBuy = ExRemSpan( ADXBuy, 5);
if(NOEXCESS) ADXSell = ExRemSpan( ADXSell, 5);
PlotShapes( IIf(ADXBuy ,5,0) ,colorBlack, 0);
PlotShapes( IIf(ADXSell,6,0) ,colorWhite, 0);
////////////////////// BOLLINGER BANDS ///////////////////////
TopBand = BBandTop(Close, 20, 2);
LowBand = BBandBot(Close, 20, 2);
dirup= (BarsSince(Low<LowBand)<5);
dirdn= (BarsSince(High>TopBand)<5);
BBBuy=0;
BBSell=0;
///////////////////// ORDEN DE COMPRA ////////////////////////////////////
//Buy = AroonBuy;
//Sell = AroonSell;
// Remove excess Buy/Sell Signals
//Short = Sell;
//Cover = Buy;
//if(NOEXCESS) Buy = ExRemSpan( Buy, 1 );
//if(NOEXCESS) Sell = ExRemSpan( Sell, 1 );
//PlotShapes( IIf(Buy ,1,0) ,colorBlue, 0,Graph0,-18 );
//PlotShapes( IIf(Sell,2,0) ,colorYellow, 0,Graph0,-18 );
//////////////////REGRESION LINEAL ///////////////////////////////////
LookBack=Param("Lookback (RegressionChannel)",72,1,300);
NH = LastValue(HHVBars(High,LookBack)); // lookback period - can be set by the user if necessary
NL = LastValue(LLVBars(Low ,LookBack)); // lookback period - can be set by the user if necessary
N=0;
if(NL>NH) { N=NL; } else { N=NH; }
Start = 1;
X = Cum(Start); // Set up the x cordinate array of the Linear Regression Line
Y = Close; // Set the y co-ordinate of the Linear Regression line
/* Calculate the slope (bconst) and the y intercept (aconst) of the line */
SUMX = LastValue(Sum(X,N));
SUMY = LastValue(Sum(Y,N));
SUMXY = LastValue(Sum(X*Y,N));
SUMXSqd = LastValue(Sum(X*X,N));
SUMSqdX = LastValue(SUMX * SUMX);
bconst = (N * SUMXY - SUMX * SUMY)/(N * SUMXSqd - SUMSqdX);
aconst = (SUMY - bconst * (SUMX))/N;
/* Force the x value to be very negative so the graph does not apear before the
lookback period */
Domain = IIf ( X > LastValue(X) - N, 1 , -1e10);
Xvar = X * Domain;
/* Linear Regression Line */
Yvar = aconst + bconst * Xvar;
Plot(Yvar + LastValue(HHV(High - Yvar,N)),"Upper Channel",colorWhite,styleLine|styleNoLabel);
Plot(Yvar,"Middle Channel",colorWhite,styleLine|styleNoLabel);
Plot(Yvar - LastValue(HHV(Yvar - Low ,N)),"Lower Channel",colorWhite,styleLine|styleNoLabel);
///////////////// SAR ////////////////////////////////////////////////
IAF = 0.02; // acceleration factor
MaxAF = 0.2; // max acceleration
psar = Close; // initialize
long = 1; // assume long for initial conditions
af = IAF; // init acelleration factor
ep = Low[ 0 ]; // init extreme point
hp = High [ 0 ];
lp = Low [ 0 ];
for( i = 2; i < BarCount; i++ )
{
if ( long )
{
psar [ i ] = psar [ i-1 ] + af * ( hp - psar [ i-1 ] );
}
else
{
psar [ i ] = psar [ i-1 ] + af * ( lp - psar [ i-1 ] );
}
reverse = 0;
//check for reversal
if ( long )
{
if ( Low [ i ] < psar [ i ] )
{
long = 0; reverse = 1; // reverse position to Short
psar [ i ] = hp; // SAR is High point in prev trade
lp = Low [ i ];
af = IAF;
}
}
else
{
if ( High [ i ] > psar [ i ] )
{
long = 1; reverse = 1; //reverse position to long
psar [ i ] = lp;
hp = High [ i ];
af = IAF;
}
}
if ( reverse == 0 )
{
if ( long )
{
if ( High [ i ] > hp )
{
hp = High [ i ];
af = af + IAF;
if( af > MaxAF ) af = MaxAF;
}
if( Low[ i - 1 ] < psar[ i ] ) psar[ i ] = Low[ i - 1 ];
if( Low[ i - 2 ] < psar[ i ] ) psar[ i ] = Low[ i - 2 ];
}
else
{
if ( Low [ i ] < lp )
{
lp = Low [ i ];
af = af + IAF;
if( af > MaxAF ) af = MaxAF;
}
if( High[ i - 1 ] > psar[ i ] ) psar[ i ] = High[ i - 1 ];
if( High[ i - 2 ] > psar[ i ] ) psar[ i ] = High[ i - 2 ];
}
}
}
Plot( psar, "SAR", colorSkyblue, styleDots | styleNoLine | styleThick );
///////////// COMENTARIOS DE INTERPRETACION ///////////////////
if( SelectedValue(ADXBuy1) OR SelectedValue(ADXSell2))
{
if( SelectedValue(ADXBuy1)) { printf("We're in a uptrend."); };
if( SelectedValue(ADXSell2)) { printf("We're in a downtrend."); };
}
else
{
printf("Falling ADX - watch for MACD Histogram Divergence");
if(SelectedValue(HistDivUp)) printf("(currently UP)");
if(SelectedValue(HistDivDn)) printf("(currently DOWN)");
}
if( SelectedValue(ADXFastDir)>0 )
{
if(SelectedValue(ADXBuy5)) printf("Wait for retest of low, and then ADX turn down");
if(SelectedValue(ADXSell6)) printf("Wait for retest of high, and then ADX turn down");
}
WriteIf( BBBuy ,"Bollinger Buy Signal (usually good until 20EMA)","");
WriteIf( BBSell ,"Bollinger Sell Signal (usually good until 20EMA)","");
WriteIf( ADXBuy3 ,"Watch out - could be a beginning uptrend.","");
WriteIf( ADXSell4 ,"Watch out - could be a beginning downtrend.","");
WriteIf( ADXBuy1 AND MACDLine < 1 AND HistDivDn, "*WARNING* Trend could fail to begin !","");
WriteIf( ADXSell2 AND MACDLine > -1 AND HistDivUp, "*WARNING* Trend could fail to begin !","");
WriteIf( ADX(range) < 20 , "Trading range, weak direction - watch for Histogram Divergences","");
WriteIf( True ," ------- DEBUG -------","");
WriteIf( HistDivUp ,"Histogram divergence up ","Hup wait");
WriteIf( HistDivDn ,"Histogram divergence down","Hdn wait");
WriteIf( ADXSlopeUp ,"ADX Up ","Aup wait");
WriteIf( ADXSlopeDn ,"ADX Dn ","Adn wait");
WriteIf( MDI(range)>30 ,"MDI","DMI wait");
WriteIf( PDI(range)>30 ,"PDI","DMI wait");
WriteIf( ADXBuy5 ,"MDI-X","DMI wait");
WriteIf( ADXSell6 ,"PDI-X","DMI wait");