28 July 2011

BASIC AFL

The indicator logic is described in the January issue of TASC and sounds intriguing. Without rehashing the details of the indicator calculation, it is very similar to Welles Wilder’s Directional Movement Index Calculation (DMI) except that Wilder’s Directional Movement (largest part of today’s range outside of yesterday’s range) is replaced by calculating the differences between today’s High and yesterday’s Low (positive Vortex Movement) and today’s Low and yesterday’s High (negative Vortex Movement).

Go long when the VI (or Dmi) goes from less than zero to greater than zero.
Go short when the VI (or Dmi) goes from above zero to less than zero.

period = Param("Period", 14, 2 );

VMP = Sum( abs( H - Ref( L, -1 ) ), period );
VMM = Sum( abs( L - Ref( H, -1 ) ), period );
STR = Sum( ATR( 1 ), period );

VIP = VMP / STR;
VIM = VMM / STR;

Plot( VIP, "VI"+period+"+", colorBlue);
Plot( VIM, "VI"+period+"-", colorRed );



SIMPLE TREND

_SECTION_BEGIN("StockManiacs Trendline - www.stockmaniacs.net");
/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
THIS SECTION DRAWS TD TREND LINES */

percent = 0.01 * 1; /* Adjust this percent as necessary, */
firstpointL = 2;
firstpointH = 2;

y0=LastValue(Trough(L,percent,firstpointL));
y1=LastValue(Trough(Ref(L,-1),percent,1));

for( i = 1; i < BarCount AND y0 >= y1; i++ )
{

firstpointL++;
y0=LastValue(Trough(L,percent,firstpointL));
}

x0=BarCount - 1 - LastValue(TroughBars(L,percent,firstpointL));
x1=BarCount - 1 - LastValue(TroughBars(Ref(L,-1),percent,1));
LineL = LineArray( x0, y0, x1, y1, 1 );
/*
Plot(C, "C", colorBlack, styleCandle);
*/
Plot( LineL, " Support Trend line", colorGreen,4 +8 );


yt0=LastValue(Peak(H,percent,firstpointH));
yt1=LastValue(Peak(Ref(H,-1),percent,1));

for(i = 1; i < BarCount AND yt0 <= yt1; i++ ) { firstpointH++; yt0=LastValue(Peak(H,percent,firstpointH)); } xt0=BarCount - 1 - LastValue(PeakBars(H,percent,firstpointH)); xt1=BarCount - 1 - LastValue(PeakBars(Ref(H,-1),percent,1)); LineH = LineArray( xt0, yt0, xt1, yt1, 1 ); Plot( LineH, "Resistance Trend line", colorRed,4 + 8 ); /*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ _SECTION_END(); _SECTION_BEGIN("Price"); SetChartOptions(0,chartShowArrows|chartShowDates); _N(Title = StrFormat("{{NAME}} - {{INTERVAL}} {{DATE}} Open %g, Hi %g, Lo %g, Close %g (%.1f%%) {{VALUES}}", O, H, L, C, SelectedValue( ROC( C, 1 ) ) )); Plot( C, "Close", ParamColor("Color", colorBlack ), styleNoTitle | ParamStyle("Style") | GetPriceStyle() ); _SECTION_END(); CANDLE PATTERN HAMMER /******************************************************* Candlestick Commentary Load this file into the Commentary Option of the Analysis tab. Green arrows indicate bullish candles. Red arrows indicate bearish candles. Scroll down the commentary for comments. This is a work in progress. Thanks to all on this forum whose code I may have incorporated into this file. Comments are from Steve Nison "Japanese Candlestick Charting Techniques" and the LitWick web site. **********************************************************/ /*Body Colors*/ whiteBody=C>=O;
blackBody=O>C;

/*Body Size*/
smallBodyMaximum=0.0025;//less than 0.25%
LargeBodyMinimum=0.01;//greater than 1.0%
smallBody=(O>=C*(1-smallBodyMaximum) AND whiteBody)
OR (C>=O*(1-smallBodyMaximum) AND blackBody);
largeBody=(C>=O*(1+largeBodyMinimum) AND whiteBody)
OR C<=O*(1-largeBodyMinimum) AND blackBody; mediumBody=NOT LargeBody AND NOT smallBody; identicalBodies=abs(abs(Ref(O,-1)-Ref(C,-1))-abs(O-C)) < abs(O-C)*smallBodyMaximum; realBodySize=abs(O-C); /*Shadows*/ smallUpperShadow=(whiteBody AND H<=C*(1+smallBodyMaximum)) OR (blackBody AND H<=O*(1+smallBodyMaximum)); smallLowerShadow=(whiteBody AND L>=O*(1-smallBodyMaximum))
OR (blackBody AND L>=C*(1-smallBodyMaximum));
largeUpperShadow=(whiteBody AND H>=C*(1+largeBodyMinimum))
OR (blackBody AND H>=O*(1+largeBodyMinimum));
largeLowerShadow=(whiteBody AND L<=O*(1-largeBodyMinimum)) OR (blackBody AND L<=C*(1-largeBodyMinimum)); /*Gaps*/ upGap= IIf(Ref(blackBody,-1)AND whiteBody AND O>Ref(O,-1),1,
IIf(Ref(blackbody,-1) AND blackBody AND C>Ref(O,-1),1,
IIf(Ref(whiteBody,-1) AND whiteBody AND O>Ref(C,-1),1,
IIf(Ref(whiteBody,-1) AND blackBody AND C>Ref(C,-1),1,0))));

downGap=IIf(Ref(blackBody,-1)AND whiteBody AND C2*realBodySize) OR
(whiteBody AND abs(H-C)>2*realBodySize));
Hammer = (((H-L)>3*(O-C)) AND ((C-L)/(0.001+H-L)>0.6) AND ((O-L)/(0.001+H-L)>0.6));
InvertedHammer = (((H-L)>3*(O-C)) AND ((H-C)/(0.001+H-L)>0.6) AND ((H-O)/(0.001+H-L)>0.6));
//Hammer=smallUpperShadow AND NOT doji AND
// ((blackBody AND abs(C-L)>2*realBodySize) OR
// (whiteBody AND abs(L-O)>2*realBodySize));

tweezerTop=abs(H-Ref(H,-1))<=H*0.0025; tweezerBottom=abs(L-Ref(L,-1))<=L*0.0025; engulfing= IIf(blackBody AND Ref(blackbody,-1) AND CRef(O,-1),1,
IIf(blackBody AND Ref(whiteBody,-1) AND O>Ref(C,-1) AND CRef(C,-1) AND ORef(O,-1)AND ORef(L,-1),1,
IIf(blackBody AND Ref(whiteBody,-1) AND C>Ref(L,-1) AND ORef(L,-1),1,
IIf(whiteBody AND Ref(blackBody,-1) AND O>Ref(L,-1) AND
CRef(C,-1),1,
IIf(blackBody AND Ref(whiteBody,-1) AND C>Ref(O,-1) AND ORef(O,-1),1,
IIf(whiteBody AND Ref(blackBody,-1) AND O>Ref(C,-1) AND
C Ref( High , -1 ) OR Ref(x1, -2) AND Close > Ref( High , -2 )OR Ref(x1, -3) AND Close > Ref( High , -3 );
GetreadyBuy1=((NOT Ref(GetreadyBuy,-1)) AND (NOT Ref(GetreadyBuy,-2)));
GetreadyBuy3=GetreadyBuy1 AND GetReadyBuy;
Buy=Ref(GetreadyBuy, -1) AND C>Ref(L,-1);
Buy1=(NOT Ref(Buy,-1));
Buy3=Buy1 AND Buy;
BuyStop=Ref(GetreadyBuy,-1) AND (Ref(L,-1));
x2=InvertedHammerSpecial;
GetreadySell=Ref(x2, -1) AND Close < Ref( Low , -1 ) OR Ref(x2, -2) AND Close < Ref( Low , -2 )OR Ref(x2, -3) AND Close < Ref( Low , -3 ); GetreadySell1=((NOT Ref(GetreadySell,-1)) AND (NOT Ref(GetreadySell,-2))); GetreadySell3=GetreadySell1 AND GetReadySell; Short=Ref(GetreadySell, -1) AND CRef(L,-2);



Sell1=((NOT Ref(Sell,-1)) AND (NOT Ref(Sell,-2)));
Sell2=Sell1 AND Sell;

Cover1=((NOT Ref(Cover,-1)) AND (NOT Ref(Cover,-2)));
Cover2=Cover1 AND Cover;




_SECTION_BEGIN("Title");
if( Status("action") == actionIndicator )
(
Title = EncodeColor(colorYellow)+ "Winston system - 1-hammer, 2-getready, up/down arrow=Enter position, Orange colour short and white colour long, white dot trailing profit exit long and orange dot trailing profit exit short, triangles are pivot markers" + " - " + Name() + " - " + EncodeColor(colorYellow)+ Interval(2) + EncodeColor(colorWhite) +
" - " + Date() +" - "+"\n" +EncodeColor(colorYellow) + "Vol= "+ WriteVal(V)+"\n"+ EncodeColor(colorYellow)+
WriteIf(x1, "1-Hammer Special"+C+" ","")+
WriteIf(GetreadyBuy3, "2-Get Ready to Buy"+C+" ","")+
WriteIf(Buy3, "BUY AT "+C+" ","")+
WriteIf(BuyStop, "BUYSTOP AT"+Ref(L,-2)+" ","")+
WriteIf(Sell2, "Exit Buy at "+C+" ","")+




WriteIf(x2, "1-Inverted Hammer Special"+C+" ","")+
WriteIf(GetreadySell3, "2-Get Ready to Short"+C+" ","")+
WriteIf(Short3, " SHORT AT "+C+" ","")+
WriteIf(ShortStop, "SHORTSTOP AT "+Ref(H,-2)+" ","")+
WriteIf(Cover2, "Exit short at "+C+" ",""));


Plot(C,"Close",colorWhite,64);
PlotShapes(x1*shapeDigit1,colorWhite,0,L);
PlotShapes(GetreadyBuy3*shapeDigit2,colorWhite,0,L);
PlotShapes(Buy3*shapeUpArrow,colorWhite,0,L,Offset=-45);
PlotShapes(Sell2*shapeSmallCircle,colorWhite,0,H,Offset=45);

PlotShapes(x2*shapeDigit1,colorOrange,0,H,Offset=25);
PlotShapes(GetreadySell3*shapeDigit2,colorOrange,0,H,Offset=25);
PlotShapes(Short3*shapeDownArrow,colorOrange,0,H,Offset=-45);
PlotShapes(Cover2*shapeSmallCircle,colorOrange,0,L,Offset=-45);

AlertIf( Ref(GetreadyBuy3, -1), "SOUND C:\\Windows\\Media\\Ringin.wav", "Get Ready To Buy", 2 );
AlertIf( Ref(Buy3, -1), "SOUND C:\\Windows\\Media\\Ringin.wav", "Buy Now", 2 );
AlertIf( Ref(GetreadySell3, -1), "SOUND C:\\Windows\\Media\\Ringin.wav", "Get Ready To Short", 2 );
AlertIf( Ref(Short3, -1), "SOUND C:\\Windows\\Media\\Ringin.wav", "Short Now", 2 );

RSIperiod = 14; // Param("RSI p",3,14,30,1);
Percent = 5; // Param("ZIG %",8,9,15,1);
EMAperiod = 9; //Param("EMA p",4,5,10,1);
HHVperiod = 8; //Param("HHV p",3,5,10,1);
NumLine = 2; //Param("Num Lines",3,1,20,1);

Base = DEMA(RSI(RSIperiod),EMAperiod);


for( i = 1; i <= numline; i++ ) { ResBase = LastValue(Peak(Base,Percent,i)); SupBase = LastValue(Trough(Base,Percent,i)); Plot(ValueWhen( ResBase==Base, HHV(H,HHVperiod) ), "Resist Level", colorDarkRed, styleLine); Plot(ValueWhen( supbase==Base, LLV(L,HHVperiod) ), "Support Level", colorDarkGreen, styleLine); } //Code to automatically identify pivots //********************************** */ // -- what will be our lookback range for the hh and ll? farback=Param("How Far back to go",100,50,5000,10); nBars = Param("Number of bars", 12, 5, 40); // -- Create 0-initialized arrays the size of barcount aHPivs = H - H; aLPivs = L - L; // -- More for future use, not necessary for basic plotting aHPivHighs = H - H; aLPivLows = L - L; aHPivIdxs = H - H; aLPivIdxs = L - L; nHPivs = 0; nLPivs = 0; lastHPIdx = 0; lastLPIdx = 0; lastHPH = 0; lastLPL = 0; curPivBarIdx = 0; // -- looking back from the current bar, how many bars // back were the hhv and llv values of the previous // n bars, etc.? aHHVBars = HHVBars(H, nBars); aLLVBars = LLVBars(L, nBars); aHHV = HHV(H, nBars); aLLV = LLV(L, nBars); // -- Would like to set this up so pivots are calculated back from // last visible bar to make it easy to "go back" and see the pivots // this code would find. However, the first instance of // _Trace output will show a value of 0 aVisBars = Status("barvisible"); nLastVisBar = LastValue(Highest(IIf(aVisBars, BarIndex(), 0))); _TRACE("Last visible bar: " + nLastVisBar); // -- Initialize value of curTrend curBar = (BarCount-1); curTrend = ""; if (aLLVBars[curBar] < aHHVBars[curBar]) { curTrend = "D"; } else { curTrend = "U"; } // -- Loop through bars. Search for // entirely array-based approach // in future version for (i=0; i lastHPIdx) {

// -- Bar and price info for candidate pivot

candIdx = curBar - aHHVBars[curBar];

candPrc = aHHV[curBar];

if (

lastHPH < candPrc AND candIdx > lastLPIdx AND

candIdx < curBar) { // -- OK, we'll add this as a pivot... aHPivs[candIdx] = 1; // ...and then rearrange elements in the // pivot information arrays for (j=0; j candPrc AND

candIdx > lastHPIdx AND

candIdx < curBar) { // -- OK, we'll add this as a pivot... aLPivs[candIdx] = 1; // ...and then rearrange elements in the // pivot information arrays for (j=0; jendR AND medR>startR AND abs(startR-endR)<0.02*(startR+endR) AND dt1LastValue(x)-back;
MaxGraph = 10;
Graph1 = C;
Graph1Style=64;
GraphXSpace=5;

/*H&S Neck Line*/

Aper = medt1-startt1;
bper = endt1-medt1;
La = LastValue(ValueWhen(x==medt1,LLV(L,Aper)));
Lb = LastValue(ValueWhen(x==-1+endt1,LLV(L,bper)));
Fa=L==La AND x>startt1 AND xmedt1 AND xstartt-5,trendlineS,-1e10);Graph3BarColor=5;
//-------------------------------------------------------------------------------------------------
/*Inverted H & S*/

tpR = TroughBars( s12, per, 1 ) == 0;
tendt1 = LastValue(ValueWhen(tpr,x,1));
tmedt1 = LastValue(ValueWhen(tpr,x,2));
tstartt1 = LastValue(ValueWhen(tpr,x,3));
tdt1 = tendt1-tstartt1;
C2 = x==tendt1 OR x==tmedt1 OR x==tstartt1;
tendR = LastValue(ValueWhen( tpR, s12, 1 ) );
tmedR = LastValue(ValueWhen( tpR, s12, 2 ) );
tstartR = LastValue( ValueWhen( tpR, s12, 3 ));
//
Filter2=tmedRLastValue(x)-back;
Graph1BarColor=IIf(C1 AND Filter1,colorWhite,IIf(C2 AND Filter2,10,1));

/*Inverted H&S Neck Line*/

tAper = tmedt1-tstartt1;tbper=tendt1-tmedt1;
Ha = LastValue(ValueWhen(x==tmedt1,HHV(H,tAper)));
Hb = LastValue(ValueWhen(x==-1+tendt1,HHV(H,tbper)));
tFa = H==Ha AND x>tstartt1 AND xtmedt1 AND xRstartt-5,trendlineR,-1e10);Graph4BarColor=10;
Filter = Filter1 OR Filter2;
//
NumColumns= 2;/*Graph2=x==-1+tendt1;*/
Column0 = Filter1;
Column1 = Filter2;
Column0Format=Column1Format=1.0;
Column0Name="H&S";
Column1Name="inv H&S";
//-------------------------------------------------------------------------------------------------
Title = EncodeColor(colorGold)+Name()+" - "+EncodeColor(colorBrightGreen)+FullName()+"\n "+
EncodeColor(colorGold)+StrFormat(" - Open %g, Hi %g, Lo %g, Close %g ",O,H,L,C )+EncodeColor(colorRed)+" - "+Date()+
" - Volume :"+WriteVal(V,1.0);
_SECTION_END();


ELLIOTT FRACTAL


//ELLIOT Fractals
_SECTION_BEGIN("Price");
SetChartOptions(0,chartShowArrows|chartShowDates);
_N(Title = StrFormat("{{NAME}} - {{INTERVAL}} {{DATE}} Open %g, Hi %g, Lo %g, Close %g (%.1f%%) {{VALUES}}", O, H, L, C, SelectedValue( ROC( C, 1 ) ) ));
Plot( C, "Close", ParamColor("Color", colorBlack ), styleCandle
| ParamStyle("Style") | GetPriceStyle() );
// Paste the code below to your price chart somewhere and green ribbon means both
// both MACD and ADX trending up so if the red ribbon shows up the MACD and the ADX
// are both trending down.

_SECTION_BEGIN("trending ribbon");
uptrend=PDI()>MDI()AND Signal()PDI()AND Signal()>MACD();


Plot( 2, /* defines the height of the ribbon in percent of pane width */"ribbon",
IIf( uptrend, colorGreen, IIf( downtrend, colorRed, 0 )), /* choose color */
styleOwnScale|styleArea|styleNoLabel, -0.5, 100 );

_SECTION_END();

_SECTION_END();

_SECTION_BEGIN("LEMA");
P = ParamField("Price field",-1);
Periods = Param("Periods", 20, 2, 200, 1, 10 );
lema = EMA (Close,Periods)+ EMA((Close-EMA(Close,Periods)),Periods);
Plot( lEMA, _DEFAULT_NAME(), ParamColor( "Color", colorCycle ),
ParamStyle("Style") );
_SECTION_END();

_SECTION_BEGIN("ELLIOTT Fractals");
/*
The basic definition of an 'up' fractal is a bar high that is both higher than the two bars immediately preceding it
and higher than the two bars immediately following it.
The lows of the bars are NOT considered in determining the up fractal progression.

If two bars in the progression have equal highs followed by two consecutive bars with lower highs,
then a total of six bars rather than the usual five bars will make up the progression.
The first High becomes the counting fractal. Reverse for 'down' fractals.

The 5 bar formation works best on Daily or longer time frame charts.For intraday data charts we often use 9 bar, 13 bar and 21 bar formations for fractal counting
*/
Up5BarFractal = Ref(H,-2) < H AND Ref(H,-1) < H AND Ref(H,1) < H AND Ref(H,2) < H; Up6BarFractal = Ref(H,-2) < H AND Ref(H,-1) < H AND (H == Ref(H,1)) AND Ref(H,2) < H AND Ref(H,3) < H; Down5BarFractal = Ref(L,-2) > L AND Ref(L,-1) > L AND Ref(L,1) > L AND Ref(L,2) > L;
Down6BarFractal = Ref(L,-2) > L AND Ref(L,-1) > L AND (L == Ref(L,1)) AND Ref(L,2) > L AND Ref(L,3) > L;

//TODO: More filtering: Show only troughs that are around atrough in trix(9).

PlotShapes( IIf(Down5BarFractal ,shapeSmallUpTriangle,0) ,colorBlack, 0, L,-12);
PlotShapes( IIf(Down6BarFractal ,shapeSmallUpTriangle,0) ,colorBlack, 0, L,-12);

PlotShapes( IIf(Up5BarFractal ,shapeSmallDownTriangle,0) ,colorBlack, 0, H,-12);
PlotShapes( IIf(Up6BarFractal ,shapeSmallDownTriangle,0) ,colorBlack, 0, H,-12);

Up = (Up5BarFractal OR Up6BarFractal);
Down = (Down5BarFractal OR Down6BarFractal);
//Removing false fractals:
DownSignal = Flip(Ref(Up,-1), Ref(Down,-1));
UpSignal = Flip(Ref(Down,-1), Ref(Up,-1));

LastHigh[0] = H[0];
LastLow[0] = L[0];

LastLowIndex = 0;
LastHighIndex = 0;
Valid = 0;
for (i=1; i < BarCount; i++) { LastHigh[i] = LastHigh[i-1]; LastLow[i] = LastLow[i-1]; if (Up[i]) { Valid[i] = True; if (DownSignal[i]) { //Sequence of 2 Up Fractals. Validate only the higher one. Valid[i] = H[i] >= H[LastHighIndex];
Valid[LastHighIndex] = H[LastHighIndex] > H[i];
}
LastHigh[i] = Max(H[i], H[LastHighIndex ]);
LastHighIndex = i;
}

if (Down[i])
{
Valid[i] = True;
if (UpSignal[i])
{
//Sequence of 2 Down Fractals. Validate only the lower one.
Valid[i] = L[i] <= L[LastLowIndex]; Valid[LastLowIndex] = L[LastLowIndex] < L[i]; } LastLow[i] = Min(L[i], L[LastLowIndex]); LastLowIndex = i; } } TrixN = Trix(9); TroughLow = Ref(TrixN, -3) > TrixN AND Ref(TrixN, -2) > TrixN AND Ref(TrixN, -1) > TrixN AND Ref(TrixN, 1) > TrixN AND Ref(TrixN, 2) > TrixN AND Ref(TrixN, 3) > TrixN;
TroughHigh = Ref(TrixN, -3) < TrixN AND Ref(TrixN, -2) < TrixN AND Ref(TrixN, -1) < TrixN AND Ref(TrixN, 1) < TrixN AND Ref(TrixN, 2) < TrixN AND Ref(TrixN, 3) < TrixN; //TroughLow = Ref(TrixN, -2) > TrixN AND Ref(TrixN, -1) > TrixN AND Ref(TrixN, 1) > TrixN AND Ref(TrixN, 2) > TrixN;
//TroughHigh = Ref(TrixN, -2) < TrixN AND Ref(TrixN, -1) < TrixN AND Ref(TrixN, 1) < TrixN AND Ref(TrixN, 2) < TrixN; ZeroValid = Cross(TrixN, 0) OR Cross(0, TrixN) OR Ref(Cross(TrixN, 0),1) OR Ref(Cross(0, TrixN),1); ValidLow = TroughLow OR Ref(TroughLow, 1) OR Ref(TroughLow, 2) OR Ref(TroughLow, 3) OR Ref(TroughLow, 4);// OR Ref(TroughLow, 5)); ValidHigh = TroughHigh OR Ref(TroughHigh, 1) OR Ref(TroughHigh, 2) OR Ref(TroughHigh, 3) OR Ref(TroughHigh, 4);// OR Ref(TroughHigh, 5)); //Plot(LastHigh-10 ,"LastHigh", colorBlue, styleLine); //Plot(LastLow-10 ,"LastLow ", colorRed, styleLine); //Plot(Valid*5 + 10 ,"LastLow ", colorGreen, styleLine | styleThick); //PlotShapes( IIf(Down AND Valid,shapeSmallUpTriangle,0) ,colorGreen, 0, L,-12); //PlotShapes( IIf(Up AND Valid,shapeSmallDownTriangle,0) ,colorRed, 0, H,-12); Maxi = Up AND (ValidHigh OR ZeroValid); Mini = Down AND (ValidLow OR ZeroValid); PlotShapes( IIf(Down AND (ValidLow OR ZeroValid),shapeSmallUpTriangle,0) ,colorBlue, 0, L,-12); PlotShapes( IIf(Up AND (ValidHigh OR ZeroValid),shapeSmallDownTriangle,0) ,colorOrange, 0, H,-12); AlertIf(Down AND (ValidLow OR ZeroValid), "SOUND C:\\Windows\\Media\\Chord.wav", "Audio alert", 2); AlertIf(Up AND (ValidHigh OR ZeroValid), "SOUND C:\\Windows\\Media\\Ding.wav", "Audio alert", 2); //Plot(UpSignal*3+5,"UpSignal", colorBlue, styleLine| styleThick); //Plot(DownSignal*3 ,"DownSignal", colorRed, styleLine| styleThick); /* LastMaxi = 0; LastMini = 0; ElliotLines = 0; State = 0; for (i=1; i < BarCount; i++) { State[i] = State[i-1]; if (Maxi[i]) { State[i] = 1;//down } if (Mini[i]) { State[i] = 2; } } PlotShapes(IIf(State > 0, shapeSmallCircle, 0), IIf(State == 1, colorRed, colorBlue), 0, IIf(State == 1, H, L), -5);
*/
//Line = LineArray( x0, y0, x1, y1, 1 );
//Plot( Line, "Trend line", colorBlue );

/*
Wave B
Usually 50% of Wave A
Should not exceed 75% of Wave A
Wave C
either 1 x Wave A
or 1.62 x Wave A
or 2.62 x Wave A
*/
function CorrectiveRatios(StartPrice, A, B, C, RatioDelta, Delta)
{

ALength = abs(startPrice - A); BLength = abs(A-B);
CLength = abs(B-C);

Ratio1 = BLength / CLength ;
Cond1 = Ration1 >= 0.5 - RatioDelta AND ratio1 <= 0.75 + RatioDelta; Cond2 = abs(Clength - ALength) < Delta OR abs(Clength - 1.62 * ALength) < Delta OR abs(CLength - 2.62 * ALength) < Delta; return Cond1 AND Cond2; } function ImpulseRules(StartPrice, One, Two, Three, Four, Five) { //Wave 2 should be beneath wave 1 start: Cond1 = Two > StartPrice AND Two < One; //Wave 4 - the same: Cond2 = Four > Two AND Four < Three; //Wave 5 should be <= wave 3 Cond3 = abs(Three-Two) >= abs(Five - Four);
//Wave 1 should be smaller than wave five, making wave 3 the biggest:
Cond4 = abs(StartPrice - One) < abs(Five - Four); return Cond1 AND Cond2 AND Cond3 AND Cond4; } _SECTION_END(); //3 Gradient Color _SECTION_BEGIN("3 color gradient"); priceAxesWidth=0; dateAxesHeight=0; TitleHeight=0; pxwidth = Status("pxwidth"); pxheight = Status("pxheight"); chartwidth = pxwidth-priceAxesWidth; chartheight = pxheight-dateAxesHeight; topColor=ParamColor("topColor",ColorRGB(207,254,240) ); centerColor=ParamColor("centerColor", ColorRGB(249,236,164)); botColor=ParamColor("BottomColor", ColorRGB( 253,223,196)); priceAxesColor=ParamColor("priceAxesColor", colorWhite ); dateAxesColor=ParamColor("dateAxesColor", colorWhite); relPos=Param("centerPosition%",50,0,100,1)/100; centerHeight=chartheight*Param("centerHeight%",10,0,100,1)/100; x0=0; y0=Max(TitleHeight,chartheight*relPos-centerHeight/2); x1=chartwidth; y1=Min(chartheight,chartheight*relPos+centerHeight/2); GfxSetBkMode( 1 ); GfxSetOverlayMode(1); GfxGradientRect(0,0,chartwidth,TitleHeight, colorWhite ,colorWhite); GfxGradientRect(chartwidth,0,pxwidth,pxheight, priceAxesColor ,priceAxesColor); GfxGradientRect(0,chartheight,chartwidth,pxheight, dateAxesColor ,dateAxesColor); GfxGradientRect(x0,y0,x1,y1, CenterColor ,CenterColor ); GfxGradientRect(0,TitleHeight,chartwidth, y0,topColor, CenterColor ); GfxGradientRect(0,y1,chartwidth, chartheight, CenterColor ,botColor); _SECTION_END(); BEAST BSA _SECTION_BEGIN("Background_Setting"); SetChartBkGradientFill( ParamColor("BgTop", colorBlack), ParamColor("BgBottom", colorBlack),ParamColor("titleblock",colorDarkTeal )); _SECTION_END(); _SECTION_BEGIN("The_Beast_2"); SetBarsRequired(10000,10000); /* this ensures that the charts include all bars AND NOT just those on screen */ Prd1=Param("ATR Period 1-20",4,1,20,1);//{Default = 4 Because most traders use 5} Prd2=Param("LookBack Period 1-20",7,1,20,1);//{Default = 11 Because most traders use 10} //{Green} {Start Long position when Close>Green}
Green=HHV(LLV(L,Prd1)+ATR(Prd1),Prd2);
//{Red} {Stop loss when CloseGreen ,colorBrightGreen,IIf(C < RED,colorRed,colorWhite)); PlotOHLC( HaOpen, HaHigh, HaLow, HaClose, "", color, styleCandle,styleThick ); SetChartOptions(0,chartShowArrows|chartShowDates); _N(Title = StrFormat("{{NAME}} - {{INTERVAL}} {{DATE}} Open %g, Hi %g, Lo %g, Close %g (%.1f%%) Vol " +WriteVal( V, 1.0 ) +" {{VALUES}}", O, H, L, C, SelectedValue( ROC( C, 1 )) )); _SECTION_END(); _SECTION_BEGIN("Trailing_Stop_Short"); stoplossPercentage = Param("Stoploss Percentage", 5, 2, 10); lookbackPeriod = Param("Lookback period", 10, 5, 30); Plot(HHV(C,lookbackPeriod) - HHV(C,lookbackPeriod) * (stoplossPercentage / 100), "Trailing stoploss", ParamColor( "Color", colorCycle ),ParamStyle("Style",styleLine|Stylehidden ,maskAll)); _SECTION_END(); _SECTION_BEGIN("Trailing_Stop_Long"); //ATR values can be changed from 1 to 3 multiplications in steps of 0.25 //ATR value or the last low pivot value can be selected. This feature can be overridden from the parameter window. It is recommended to use only ATR Value //Choice of plots line or just dots from the parameter window is also possible mf = Param("ATR multiplier",3,1,3,0.25); ap=Param("ATR Period",10,5,30,1); Lb=Param("Lookback Period",20,10,40,1); ps=ParamToggle("Use last low pivot","Use,Dont",1); //Thick = Param("Thick" , 0.02, 0.01, 0.2, 0.01); t1=HHV(C,Lb); t2=(mf*ATR(ap)); t3=Trough(C,2,1); t4=t1-t2; t5=Min(t4,t3); if(ps) { t6 = t1-t2; } else { t6=t5; } initial=t6; stop[ 0 ] = Close[ 0 ]; for( i = 1 ; i < BarCount; i++) { if( Close[ i ] > stop[ i - 1])
{
temp = t6[ i ];
if( temp > stop[ i - 1 ] ) stop[ i ] = temp;
else stop[ i ] = stop[ i - 1 ];
}
else
stop[ i ] = initial[ i ];

}

Plot(stop,"ATR Stop",ParamColor( "Color", colorSeaGreen ),ParamStyle("Style",styleLine|Stylehidden,maskAll));

_SECTION_END();

_SECTION_BEGIN("Trailing_Lines");
Plot(LLV(HHV(H,5)-ATR(5),8),"",ParamColor( "Color Line 0", colorDarkGreen ),ParamStyle("Style Line 0",styleLine,maskAll));
Plot(LLV(HHV(H,5)-ATR(5),7),"",ParamColor( "Color Line 1", colorDarkGrey),ParamStyle("styleLine 1",styleLine,maskAll));
Plot(LLV(HHV(H,5)-ATR(5),6),"",ParamColor( "Color Line 2", colorDarkGrey ),ParamStyle("Style Line 2",styleLine,maskAll));
Plot(LLV(HHV(H,5)-ATR(5),5),"",ParamColor( "Color Line 3", colorDarkGrey),ParamStyle("Style Line 3",styleLine,maskAll));
Plot(LLV(HHV(H,5)-ATR(5),4),"",ParamColor( "Color Line 4", colorDarkGrey ),ParamStyle("Style Line 4",styleLine,maskAll));
Plot(LLV(HHV(H,5)-ATR(5),3),"",ParamColor( "Color Line 5", colorDarkYellow ),ParamStyle("Style Line 5",styleLine,maskAll));

_SECTION_END();




/*_SECTION_BEGIN("Stop_loss");

lookbackPeriod = Param("Lookback period", 10, 5, 30);
stoplossPercentage = Param("Stoploss Percentage", 5, 2, 10);
Thick = Param("Thick" , 0.02, 0.01, 0.2, 0.01);


StopLoss=(HHV(C,lookbackPeriod) - HHV(C,lookbackPeriod) * (stoplossPercentage / 100));
function SPlot( Pr, Txt, Co, St )
{
PlotOHLC(Pr, Pr,Pr+Thick, Pr+Thick, "",Co,styleCloud );
}
SPlot(StopLoss,"" ,ParamColor( "Color", colorCycle ), 2) ;

_SECTION_END();*/





_SECTION_BEGIN("Pivot_Finder");
/* **********************************

Code to automatically identify pivots

********************************** */

// -- what will be our lookback range for the hh and ll?
farback=Param("How Far back to go",100,0,5000,10);
nBars = Param("Number of bars", 12, 5, 40);


GraphXSpace=7;

// -- Create 0-initialized arrays the size of barcount

aHPivs = H - H;

aLPivs = L - L;

// -- More for future use, not necessary for basic plotting

aHPivHighs = H - H;

aLPivLows = L - L;

aHPivIdxs = H - H;

aLPivIdxs = L - L;

nHPivs = 0;

nLPivs = 0;

lastHPIdx = 0;

lastLPIdx = 0;

lastHPH = 0;

lastLPL = 0;

curPivBarIdx = 0;

// -- looking back from the current bar, how many bars

// back were the hhv and llv values of the previous

// n bars, etc.?

aHHVBars = HHVBars(H, nBars);

aLLVBars = LLVBars(L, nBars);

aHHV = HHV(H, nBars);

aLLV = LLV(L, nBars);

// -- Would like to set this up so pivots are calculated back from

// last visible bar to make it easy to "go back" and see the pivots

// this code would find. However, the first instance of

// _Trace output will show a value of 0

aVisBars = Status("barvisible");

nLastVisBar = LastValue(Highest(IIf(aVisBars, BarIndex(), 0)));

_TRACE("Last visible bar: " + nLastVisBar);

// -- Initialize value of curTrend

curBar = (BarCount-1);

curTrend = "";

if (aLLVBars[curBar] < aHHVBars[curBar]) { curTrend = "D"; } else { curTrend = "U"; } // -- Loop through bars. Search for // entirely array-based approach // in future version for (i=0; i lastHPIdx) {

// -- Bar and price info for candidate pivot

candIdx = curBar - aHHVBars[curBar];

candPrc = aHHV[curBar];

if (

lastHPH < candPrc AND candIdx > lastLPIdx AND

candIdx < curBar) { // -- OK, we'll add this as a pivot... aHPivs[candIdx] = 1; // ...and then rearrange elements in the // pivot information arrays for (j=0; j candPrc AND

candIdx > lastHPIdx AND

candIdx < curBar) { // -- OK, we'll add this as a pivot... aLPivs[candIdx] = 1; // ...and then rearrange elements in the // pivot information arrays for (j=0; j M2, colorLime, colorRed);
shape = Buy * shapeUpArrow + Sell * shapeDownArrow ;


PlotShapes( shape, IIf( Buy, colorGreen, colorRed ),0, IIf( Buy, Low, High ) );
dist = 1.5*ATR(20);
for( i = 0; i < BarCount; i++ ) { if( Buy[i] ) PlotText( "Buy\n@" + Close[i], i, Low[i] - dist[i], colorGreen ); if( Sell[i] ) PlotText( "sell\n@" + Close[i], i, Low[i] + dist[i], colorRed ); } Plot( Close, "Close", mycolor, styleNoTitle ); _SECTION_END(); PH PL LINEAR REGRESSION _SECTION_BEGIN(""); SetBarsRequired(350, -0); parmPlotScoreCard = ParamToggle("Plot KPScoreCard", "No|Yes", 1); parmPlotA900AutoStop = ParamToggle("Plot A900/AutoStop", "No|Yes", 0); parmA900Color = ParamColor("A900 Color", colorWhite); parmA900Style = ParamStyle("A900 Style", styleLine, maskAll); parmAutoStopColor = ParamColor("AutoStop Color", colorYellow); parmAutoStopStyle = ParamStyle("AutoStop Style", styleLine, maskAll); parmPPTextColor = ParamColor("PP Text color", colorBlue); parmPPTrndColorUp = ParamColor("PP Trend Up color", ColorRGB(167,224,243) ); parmPPTrndColorDn = ParamColor("PP Trend Dwn color", ColorRGB(255,192,203) ); parmPPTextOffSet = Param("PP OffSet", 0.60, 0.40, 1.5, 0.1); parmTickMultipler = Param("M/W tick allowance", 1, 0, 10, 1); parmA900AutoStopX = ParamToggle("Plot A900/AutoStop Cross", "No|Yes"); parmA900AutoStopColorX = ParamColor("A900/AutoStop Cross Color", colorBlue); ParmSCThreshold = Param("ScoreCard Threshold", 3, 1, 9, 1); parmVoice = ParamToggle("Voice 123 Setups", "No|Yes", 0); parmAlert = ParamToggle("Alert 123 Setups", "No|Yes", 0); parmPivotPop = ParamToggle("PivotPop", "No|Yes", 1); parmBarCancel = Param("Bar Cancel", 7, 1, 20, 1); parmWaterLevelColor = ParamColor("WalterLevel Color", ColorRGB(127,255,212)); parmWaterLevelStyle = ParamStyle("WaterLevel Style", styleLine, maskAll); parmBBPeriod = Param("Bollinger Band Period", 10, 2, 30, 1); parmBBSD = Param("bollinger Band SD", 0.8, 0.2, 3.0); ParmPlotPPIndicators = ParamToggle("Plot Pivot Pop indicators", "No|Yes", 0); parmBBColor = ParamColor("BBands Color", colorWhite); parmBBStyle = ParamStyle("BBands Style", styleLine, maskAll); ParmDebug = ParamToggle("Debug", "No|Yes", 0); _N(PaneName = Name() + Interval(2)+ _SECTION_NAME()); _N(NewBarName = "NewBar" + PaneName); function NewBarP() { PrevDT = StaticVarGet( NewBarName); DT = LastValue(DateTime()); StaticVarSet( NewBarName,DT); return DT != PrevDT; } function MRoundP(Number, Multiple ) { if(Multiple == 0 ) { xMultiple = 0.01; } else { xMultiple = Multiple; } Divided = Number / xMultiple; intDivided = int(Divided); intDivided = intDivided + round(Divided - intDivided); return intDivided * xMultiple; } ObjAB = CreateObject("Broker.Application"); ticker = objAB.Stocks(Name() ); if(ticker.TickSize == 0) { TickValue = 0.01; } else { TickValue = ticker.TickSize; } NewBarSignal = NewBarP(); KPA900 = E_TSKPA900(Close); KPAutoStop = E_TSKPAUTOSTOP(High,Low,Close); Ctmpl = E_TSKPCOLORTMPL(Open,High,Low,Close,Volume); //ScoreCard KPScoreCard = 0; KPScoreCard = KPScoreCard + IIf(tskp_colortmplcnd0 > 0, 1, -1);
KPScoreCard = KPScoreCard + IIf(tskp_colortmplcnd1 > 0, 1, -1);
KPScoreCard = KPScoreCard + IIf(tskp_colortmplcnd2 > 0, 1, -1);
KPScoreCard = KPScoreCard + IIf(tskp_colortmplcnd3 > 0, 1, -1);
KPScoreCard = KPScoreCard + IIf(tskp_colortmplcnd4 > 0, 1, -1);
KPScoreCard = KPScoreCard + IIf(tskp_colortmplcnd5 > 0, 1, -1);
KPScoreCard = KPScoreCard + IIf(tskp_colortmplcnd6 > 0, 1, -1);
KPScoreCard = KPScoreCard + IIf(tskp_colortmplcnd7 > 0, 1, -1);
KPScoreCard = KPScoreCard + IIf(tskp_colortmplcnd8 > 0, 1, -1);

if(parmDebug == 1)
{
// printf("a900: %0.6f% \nAutoStop: %0.6f%\nScoreCard: %0.0f%\n", KPA900, KPAutoStop, KPScoreCard);
}
if(parmPlotScoreCard == 1)
{
//_N(Title = StrFormat("{{NAME}} - {{INTERVAL}} {{DATE}} Open %g, Hi %g, Lo %g, Close %g% (%0.4f%) {{VALUES}}", O, H, L, C, SelectedValue( C - Ref(C, -1)) ));
if( ParamToggle("Tooltip shows", "All Values|Only Prices" ) )
{
// ToolTip=StrFormat("Open: %g\nHigh: %g\nLow: %g\nClose: %g (%.2f%%)\nVolume: "+NumToStr( V, 1 ), O, H, L, C, SelectedValue( ROC( C, 1 )));
}
//Color = IIf(KPScoreCard >= parmSCThreshold, colorBlue, IIf(KPScoreCard <= -parmSCThreshold, colorRed, colorYellow) ); //Plot( C, "Close", Color , styleNoTitle | ParamStyle("OHLC Style") | GetPriceStyle() ); } //user want A900/AutoStop plotted if(parmPlotA900AutoStop == 1) { // Plot(KPA900, "A900", parmA900Color, parmA900Style); // Plot(KPAutoStop, "AutoStop", parmAutoStopColor, parmAutoStopStyle); } // find A900/AutoStop cross over/under with ScoreCard confirmation. XOUp = (KPA900 > KPAutoStop) AND (KPScoreCard >= parmSCThreshold); // New Pivot Low
XODn = (KPA900 < KPAutoStop) AND (KPScoreCard <= -parmSCThreshold); // New Pivot High if(parmDebug == 1) { // printf(WriteIf(XOUp, "before= XOUp: True", "before= XOUp: False") + WriteIf(XODn, " XODn: True\n", " XODn: False\n") ); } //remove duplicate signals XOUp = ExRem(XOUp, XODn); XODn = ExRem(XODn, XOUp); if(parmDebug == 1) { // printf(WriteIf(XOUp, "after= XOUp: True", "after= XOUp: False") + WriteIf(XODn, " XODn: True\n", " XODn: False\n") ); } //find the current Pivot Points - PL and PH //remember XOUp = 1 means a PL and XODn =1 means a PH PLBars = IIf(XOUp, LowestSinceBars(XODn, L ,1), 0); //find the bar that produced the Lowest Low PHBars = IIf(XODn, HighestSinceBars(XOUp, H, 1),0); //find the bar that produced the Highest High //PLPrice = IIf(XOUp, Ref(L, -PLBars), 0); //PHPrice = IIf(XODn, Ref(H, -PHBars),0); PLPrice = Ref(L, -PLBars); PHPrice = Ref(H, -PHBars); //keep track of the previous Pivot Points PrevPLBars = Ref(BarsSince(XOUp), -1) +1; PrevPHBars = Ref(BarsSince(XODn), -1) +1; PrevPLPrice = Ref(PLPrice, -prevPLBars); PrevPHPrice = Ref(PHPrice, -PrevPHBars ); PivotsCloseEnough = TickValue * parmTickMultipler; PLDifference = MroundP(PLPrice - PRevPLPrice, ticker.TickSize); PHDifference = MroundP(PHPrice - PrevPHPrice, ticker.TickSize); PPTrend = IIf(XOUp AND (PLDifference > PivotsCloseEnough) AND PrevPHPrice > PrevPLPrice AND PRevPHPrice > PLPrice, 1,
IIf(XOUp AND (PLDifference < - PivotsCloseEnough) AND PRevPHPrice > PrevPLPrice AND PrevPHPrice > PLPrice, -1,
IIf(XODn AND (PHDifference > PivotsCloseEnough) AND PrevPLPrice < PrevPHprice AND PrevPLPrice < PHPrice, 1, IIf(XODn AND (PHDifference < -PivotsCloseEnough) AND PrevPLPrice < PrevPHPrice AND PrevPLPrice < PHPrice, -1, IIf(XOUp AND (abs(PLDifference) <= PivotsCloseEnough) AND PrevPHPrice > PrevPLPrice AND PRevPHPrice > PLPrice, 2,
IIf(XODn AND (abs(PHDifference) <= PivotsCloseEnough) AND PrevPLPrice < PrevPHPrice AND PrevPLPrice < PHPrice, -2, 0)))) )); if(ParmDebug) { //printf("Current PH Bar: %g% /Price: %g%\n", PHBars, PHPrice); //printf("Current PL Bar: %g% /Price: %g%\n", PLBars, PLPrice); //printf("Previous PH Bar: %g% /Price: %g%\n", PrevPHBars, PrevPHPrice); //printf("Previous PL Bar: %g% /Price: %g%\n", PrevPLBars, PrevPLPrice) ; //printf("PP Trend: %g%\n", PPTrend); //printf("PHPrice - PrevPHPrice: %g%\nPLPrice - PrevPLPrice: %g%\nPivotsCloseEnough: %g%", PHDifference, PLDifference, PivotsCloseEnough); } //PLot pivots as text dist = parmPPTextOffSet * ATR(10); //for( i = 0; i < BarCount -1; i++) for( i = 0; i < BarCount ; i++) { if(XOUp[i ] == 1 AND abs(PPTrend[i]) != 2) //cross up -plot the Pivot Low { PlotText("PL", i - PLBars[i], PLPrice[i] - dist[i] , parmPPTextColor, IIf(PPTrend[i] == 1, parmPPTrndColorUp, IIf(PPTrend[i] == -1, parmPPTrndColorDn, colorYellow) )); } if(XODn[i ] == 1 AND abs(PPTrend[i]) != 2) //cross down - plot the pivot high { PlotText("PH", i - PHBars[i], PHPrice[i] + dist[i], parmPPTextColor, IIf(PPTrend[i] == 1, parmPPTrndColorUp, IIf(PPTrend[i] == -1, parmPPTrndColorDn, colorYellow) )); } if(XOUp[i ] == 1 AND (PPTrend[i]) == 2) // the Pivot Low is a W Bottom { PlotText("PW", i - PLBars[i], PLPrice[i] - dist[i] , parmPPTextColor, colorYellow) ; } if(XODn[i ] == 1 AND PPTrend[i] == -2) //cross down - pivot high is a M Top { PlotText("PM", i - PHBars[i], PHPrice[i] + dist[i], parmPPTextColor, colorYellow) ; } } //end For // Plot A900/AutoStop cross over/under if(parmA900AutoStopX == 1) { PlotShapes(IIf(Cross(KPA900, KPAutoStop), shapeUpTriangle, shapeNone),colorYellow, 0, L, -30); PlotShapes(IIf(Cross(KPAutoStop, KPA900), shapeDownTriangle, shapeNone), colorRed, 0, H , -30); } if(parmPivotPop == 1) { //Kp indicators for Pivot Pop dummy = E_TSKPFAST2(Open, High, Low, Close, Volume); KPFast2 = IIf(tskp_fast2val1 > 0, 1, -1);
//calculations
BarsSinceXOUp =BarsSince(XOUp);
BarsSinceXODn = BarsSince(XODn);
UBB = BBandTop(C, parmBBPeriod, parmBBSD);
LBB = BBandBot(C, parmBBPeriod, parmBBSD);
PopFilter = True;
if(parmDebug == 1)
{
//printf("\nFast2: %1.0f% \nUBB: %0.6f%\nLBB: %0.6f%\nC: %g%\n", KPFast2, UBB, LBB, C);
//printf("Bars since Last XOUp: %1.0f%\nBars since last XODn: %1.0f%\n", BarsSinceXOUp, BarsSinceXODn );
//printf("Bars since PPTrnd =1: %1.0f%\nBars since PPTrnd = -1: %1.0f%\n", BarsSince(PPTrend ==1), BarsSince(PPTrend == -1) );

}
PPopUp = (BarsSince(PPTrend >= 1) < BarsSince(PPTrend <= -1)) AND (BarsSince(XOUp) <= parmBarCancel) AND (KPA900 >= KPAutoStop) AND(KPFast2 == 1) AND (KPScoreCard >= 5)
AND PopFilter AND (C > UBB) AND (C > O) ;
PPopUp = IIf( PPopUp AND Sum(PPopUP, BarsSince(XOUp)+1) == 1, True, False ); //keep only the 1st signal
PPopDn = (BarsSince(PPTrend <= -1) < BarsSince(PPTrend >= 1)) AND (BarsSince(XODn) <= parmBarCancel) AND (KPA900 <= KPAutoStop) AND(KPFast2 == -1) AND (KPScoreCard <= -5) AND PopFilter AND (C < LBB) AND (C < O) ; PPopDn = IIf( PPopDn AND Sum(PPopDn, BarsSince(XODn) + 1) == 1, True, False); //keep only the first signal if(parmDebug == 1) { //printf(WriteIf(PPopUp,"PPopUp: True", "PPopUp: False") + WriteIf(PPopDn, " PPopDn: True\n", " PPopDn: False\n") ); //printf("PPopUp sum: %1.0f% \nPPopDn sum: %1.0f%\n", Sum(PPopUP, BarsSince(XOUp)) , Sum(PPopDn, BarsSince(XODn)) ); } // Plots PlotShapes(IIf(PPopUp, shapeHollowUpArrow, shapeNone), colorYellow, 0, L, -25); PlotShapes(IIf(PPopDn, shapeHollowDownArrow, shapeNone), colorRed, 0, H, -25); if(ParmPlotPPIndicators == 1) //plot the Pivot Pop Indicators { //Plot(UBB, "Upper BB", colorYellow, parmBBStyle); //Plot(LBB, "Lower BB", colorRed, parmBBStyle); if(parmPlotA900AutoStop == 1) { // Plot(KPA900, "A900", parmA900Color, parmA900Style); // Plot(KPAutoStop, "AutoStop", parmAutoStopColor, parmAutoStopStyle); } //Plot( 0.5, "Fast2", IIf(tskp_fast2val1 > 0, parmPPTrndColorUp, parmPPTrndColorDn) , styleArea | styleNoLabel | styleOwnScale , 0, 10);
} //endif parmPlotPPIndicators
} // end if parmPivotPop
// Type 1, 2 or 3 setups
// kp indicators
KPWaterlevel = E_TSKPWATERLEVEL(Open,High,Low,Close,Volume);
dummy = E_TSKPMEDIUM(Close);
KPMediumUp = tskp_mediumup;
KPMediumDn = tskp_mediumdown;
KPMediumMA = tskp_mediumma;
KPMedium = KPMediumUp + KPMediumDn;
//calculations
PLBars = IIf(XOUp, LowestSince(XODn, KPMedium ,1), 0); //find the Lowest Low
PHBars = IIf(XODn, HighestSinceBars(XOUp, KPMedium, 1),0); //find the bar that produced the Highest High
PrevPLMedium = Ref(KPMedium, -prevPLBars);
PrevPHMedium = Ref(KPMEdium, -PrevPHBars );

Type1Filter = IIf(PPopUp AND (LowestSince(XODn, KPMedium, 1) > 0 ) AND (HighestSince(XODn, KPMedium, 1) > 0 ), True, IIf(PPopDn AND (HighestSince(XOUp, KPMedium ,1) < 0) AND (LowestSince(XOUp, KPMedium ,1) < 0), True, False)); Type2Filter = IIf(PPopUp AND LowestSince(XODn, KPMedium, 1) < 0 AND KPMedium > 0, True, IIf(PPopDn AND (HighestSince(XOUp, KPMedium ,1) > 0) AND KPMEdium < 0, True, False)); Type3Filter = IIf(PPopUp AND LowestSince(XODn, KPMedium, 1) < 0 AND KPMedium < 0 AND (KPMedium > KPMediumMA), True, IIf(PPopDn AND (HighestSince(XOUp, KPMedium ,1) > 0) AND KPMEdium > 0 AND(KPMedium < KPMediumMA), True, False)); Type1Buy = PPopUp AND ((Close - Open) >= 0) AND (KPScoreCard >= ParmSCThreshold) AND Type1Filter;
Type1Sell = PPopDn AND ((Close - Open) <= 0) AND (KPScoreCard <= -ParmSCThreshold) AND Type1Filter; Type2Buy = PPopUp AND ((Close - Open) >= 0) AND (KPScoreCard >= ParmSCThreshold) AND Type2Filter AND C > KPWaterLevel;
Type2Sell = PPopDn AND ((Close - Open) <= 0) AND (KPScoreCard <= -ParmSCThreshold) AND Type2Filter AND C < KPWaterLevel; Type3Buy = PPopUp AND ((Close - Open) >= 0) AND (KPScoreCard >= ParmSCThreshold) AND Type3Filter AND C > KPWaterLevel;
Type3Sell = PPopDn AND ((Close - Open) <= 0) AND (KPScoreCard <= -ParmSCThreshold) AND Type3Filter AND C < KPWaterLevel; if(parmDebug == 1) { //printf("Type1Filter: %g%\nType2Filter: %g%\nType3Filter: %g%\n", Type1Filter, Type2Filter, Type3Filter); //printf("KPWaterlevel: %g%\n", KPWaterLevel); //printf("KPMedium: %g%\nKPMediumMA: %g%\n", KPMedium, KPMediumMA); //printf("Highest XOUp Medium: %g%\nLowest XOUp Medium: %g%\n", HighestSince(XOUp, KPMedium, 1), LowestSince(XOUp, KPMedium ,1) ); //printf("Highest XODn Medium: %g%\nLowest XODn Medium: %g%\n", HighestSince(XODn, KPMedium, 1), LowestSince(XODn, KPMedium ,1) ); //printf("Prev PH Medium: %g%:Prev PL Medium: %g%\n", PrevPHMedium, PrevPLMedium); //printf("Type1Buy: %g%:Type1Sell: %g%\n", Type1Buy, Type1Sell); //printf("Type2Buy: %g%:Type2Sell: %g%\n", Type2Buy, Type2Sell); //printf("Type3Buy: %g%:Type3Sell: %g%\n", Type3Buy, Type3Sell); } // Plots PlotShapes(IIf(Type1Buy, shapeDigit1 , IIf(Type1Sell, shapeDigit1, shapeNone)), IIf(Type1Buy, colorBlue, IIf(Type1Sell, colorRed, Null)), 0, IIf(Type1Buy, High, IIf(Type1Sell, L, O)), IIf(Type1Buy, 30, IIf(Type1Sell, -30, 0)) ); PlotShapes(IIf(Type2Buy, shapeDigit2 , IIf(Type2Sell, shapeDigit2, shapeNone)), IIf(Type2Buy, colorBlue, IIf(Type2Sell, colorRed, Null)), 0, IIf(Type2Buy, High, IIf(Type2Sell, L, O)), IIf(Type2Buy, 30, IIf(Type2Sell, -30, 0)) ); PlotShapes(IIf(Type3Buy, shapeDigit3 , IIf(Type3Sell, shapeDigit3, shapeNone)), IIf(Type3Buy, colorBlue, IIf(Type3Sell, colorRed, Null)), 0, IIf(Type3Buy, High, IIf(Type3Sell, L, O)), IIf(Type3Buy, 30, IIf(Type3Sell, -30, 0)) ); //Plot(KPWaterLevel, "KPWaterLevel", parmWaterLevelColor, parmWaterLevelStyle); // HMM how to print Medium on a price chart //voice if(parmVoice ==1) { if(NewBarSignal) { if( LastValue(Ref(Type1Buy, -1)) == 1) Say(Interval(2) + " New Type one buy."); if( LastValue(Ref(Type2Buy, -1)) == 1) Say(Interval(2) + " New Type two buy"); if( LastValue(Ref(Type3Buy, -1)) == 1) Say(Interval(2) + " New Type three buy."); if( LastValue(Ref(Type1Sell,-1)) ==1) Say(Interval(2) + " New Type one sell."); if( LastValue(Ref(Type2Sell,-1)) ==1) Say(Interval(2) + " New Type two sell."); if( LastValue(Ref(Type3Sell,-1)) ==1) Say(Interval(2) + " New Type three sell."); } } //alerts if(parmAlert ==1) { AlertIf(NewbarSignal AND Ref(Type1Buy, -1), "", "Type 1 Buy.", 1, 15, 0); AlertIf(NewbarSignal AND Ref(Type2Buy, -1), "", "Type 2 Buy.", 1, 15, 0); AlertIf(NewbarSignal AND Ref(Type3Buy, -1), "", "Type 3 Buy.", 1, 15, 0); AlertIf(NewbarSignal AND Ref(Type1Sell, -1), "", "Type 1 Sell.", 2, 15, 0); AlertIf(NewbarSignal AND Ref(Type2Sell, -1), "", "Type 2 Sell.", 2, 15, 0); AlertIf(NewbarSignal AND Ref(Type3Sell, -1), "", "Type 3 Sell.", 2, 15, 0); } _SECTION_END(); //********************************* //********************************* _SECTION_BEGIN("Chart Settings"); SetChartOptions(0,chartShowArrows|chartShowDates); SetChartBkColor(ParamColor("Outer Panel",colorPaleBlue)); SetChartBkGradientFill(ParamColor("Upper Chart",1),ParamColor("Lower Chart",23)); _SECTION_END(); //================================================Start Chart Configuration============================================================================ _N(Title = StrFormat("{{NAME}} - {{INTERVAL}} {{DATE}} Open %g, Hi %g, Lo %g, Close %g (%.1f%%) Vol " +WriteVal( V, 1.0 ) +" {{VALUES}}", O, H, L, C, SelectedValue( ROC( C, 1 )) )); Plot( C, "Close", colorBlue, styleCandle, Zorder = 1); //================================================End Chart Configuration=============================================================================== //====================================Start of Linear Regression Code================================================================================== P = ParamField("Price field",-1); Length = 150; Daysback = Param("Period for Liner Regression Line",Length,1,240,1); shift = Param("Look back period",0,0,240,1); //=============================== Math Formula ======================================================================================================== x = Cum(1); lastx = LastValue( x ) - shift; aa = LastValue( Ref(LinRegIntercept( p, Daysback), -shift) ); bb = LastValue( Ref(LinRegSlope( p, Daysback ), -shift) ); y = Aa + bb * ( x - (Lastx - DaysBack +1 ) ); //==================Plot the Linear Regression Line ==================================================================================================== LRColor = ParamColor("LR Color", colorCycle ); LRStyle = ParamStyle("LR Style"); LRLine = IIf( x > (lastx - Daysback) AND BarIndex() < Lastx, y, Null ); LRStyle = ParamStyle("LR Style"); Angle = Param("Angle", 0.05, 0, 1.5, 0.01);// A slope higher than 0.05 radians will turn green, less than -0.05 will turn red and anything in between will be white. LRLine = IIf( x > (lastx - Daysback) AND BarIndex() < Lastx, y, Null ); Pi = 3.14159265 * atan(1); // Pi SlopeAngle = atan(bb)*(180/Pi); LineUp = SlopeAngle > Angle;
LineDn = SlopeAngle < - Angle; if(LineUp) { Plot(LRLine, "Lin. Reg. Line Up", IIf(LineUp, colorBrightGreen, colorWhite), LRStyle); } else { Plot(LRLine, "Lin. Reg. Line Down", IIf(LineDn, colorDarkRed, colorWhite), LRStyle); } //========================== Plot 1st SD Channel ====================================================================================================== SDP = Param("Standard Deviation", 1.5, 0, 6, 0.1); SD = SDP/2; width = LastValue( Ref(SD*StDev(p, Daysback),-shift) ); //Set width of inside chanels here. SDU = IIf( x > (lastx - Daysback) AND BarIndex() < Lastx, y+width , Null ) ; SDL = IIf( x > (lastx - Daysback) AND BarIndex() < Lastx, y-width , Null ) ; SDColor = ParamColor("SD Color", colorCycle ); SDStyle = ParamStyle("SD Style"); Plot( SDU , "Upper Lin Reg", colorBrown,SDStyle ); //Inside Regression Lines Plot( SDL , "Lower Lin Reg", colorLime,SDStyle ); //Inside Regression Lines //========================== Plot 2d SD Channel ======================================================================================================== SDP2 = Param("2d Standard Deviation", 2.0, 0, 6, 0.1); SD2 = SDP2/2; width2 = LastValue( Ref(SD2*StDev(p, Daysback),-shift) ); //Set width of outside chanels here. SDU2 = IIf( x > (lastx - Daysback) AND BarIndex() < Lastx, y+width2 , Null ) ; SDL2 = IIf( x > (lastx - Daysback) AND BarIndex() < Lastx, y-width2 , Null ) ; SDColor2 = ParamColor("2 SD Color", colorCycle ); SDStyle2 = ParamStyle("2 SD Style"); Plot( SDU2 , "Upper Lin Reg", colorRed,SDStyle2 ); //OutSide Regression Lines Plot( SDL2 , "Lower Lin Reg", colorLime,SDStyle2 ); //OutSide Regression Lines Trend = IIf(LRLine > Ref(LRLine,-1),colorGreen,colorRed);//Changes LR line to green if sloping up and red if sloping down.

Plot( LRLine , "LinReg", Trend, LRSTYLE );
PlotOHLC(SDU,SDL2,SDU2,SDL,"",colorYellow,styleNoLabel | styleCloud);
//============================ End Indicator Code ========================================================================================================



_SECTION_BEGIN(" ");
farback=Param("How Far back to go",100,50,5000,10);
nBars = Param("Number of bars", 12, 5, 40);


aHPivs = H - H;

aLPivs = L - L;

// -- More for future use, not necessary for basic plotting

aHPivHighs = H - H;

aLPivLows = L - L;

aHPivIdxs = H - H;

aLPivIdxs = L - L;

nHPivs = 0;

nLPivs = 0;

lastHPIdx = 0;

lastLPIdx = 0;

lastHPH = 0;

lastLPL = 0;

curPivBarIdx = 0;

// -- looking back from the current bar, how many bars

// back were the hhv and llv values of the previous

// n bars, etc.?

aHHVBars = HHVBars(H, nBars);

aLLVBars = LLVBars(L, nBars);

aHHV = HHV(H, nBars);

aLLV = LLV(L, nBars);

// -- Would like to set this up so pivots are calculated back from

// last visible bar to make it easy to "go back" and see the pivots

// this code would find. However, the first instance of

// _Trace output will show a value of 0

aVisBars = Status("barvisible");

nLastVisBar = LastValue(Highest(IIf(aVisBars, BarIndex(), 0)));

_TRACE("Last visible bar: " + nLastVisBar);

// -- Initialize value of curTrend

curBar = (BarCount-1);

curTrend = "";

if (aLLVBars[curBar] < aHHVBars[curBar]) { curTrend = "D"; } else { curTrend = "U"; } // -- Loop through bars. Search for // entirely array-based approach // in future version for (i=0; i lastHPIdx) {

// -- Bar and price info for candidate pivot

candIdx = curBar - aHHVBars[curBar];

candPrc = aHHV[curBar];

if (

lastHPH < candPrc AND candIdx > lastLPIdx AND

candIdx < curBar) { // -- OK, we'll add this as a pivot... aHPivs[candIdx] = 1; // ...and then rearrange elements in the // pivot information arrays for (j=0; j candPrc AND

candIdx > lastHPIdx AND

candIdx < curBar) {


// -- OK, we'll add this as a pivot...

aLPivs[candIdx] = 1;

// ...and then rearrange elements in the

// pivot information arrays

for (j=0; j
aLPivLows[nLPivs-j] = aLPivLows[nLPivs-(j+1)];

aLPivIdxs[nLPivs-j] = aLPivIdxs[nLPivs-(j+1)];

}

aLPivLows[0] = candPrc;

aLPivIdxs[0] = candIdx;

nLPivs++;

}

}


PlotShapes(

IIf(aHPivs==1, shapeDownArrow, shapeNone), colorRed, 0,

High, Offset=-15);

PlotShapes(
IIf(aLPivs==1, shapeUpArrow , shapeNone), colorGreen, 0,

Low, Offset=-15);

AlertIf( aHPivs==1, "SOUND C:\\Windows\\Media\\Ding.wav", "Sell " + C,2,1+2,1);
AlertIf( aLPivs==1, "SOUND C:\\Windows\\Media\\Ding.wav","Buy " + C,1,1+2,1);

_SECTION_END();


_SECTION_BEGIN("");


n=25; Av=12; Av1=16; Av2=2; stp=2;

Var1= TEMA(Close,n);
Var2= TEMA(var1,av);
Var3= (var1-var2)+var1;
Var1= TEMA(var3,av1);
Var4= MA((var1-var2)+var1,av2);
Var5=(Var1-Var2)+Var1;

//Buy=Cover=Cross(Var5,Var4);
//Sell=Short=Cross(Var4,VAR5);

Buy=Cover=Cross(Var5,Ref(Var5,-1));
Sell=Short=Cross(Ref(Var5,-1),VAR5);
Filter =Buy OR Sell;

Plot( Flip( Buy, Sell ), "Trade", 9, styleArea | styleOwnScale, 0, 1 );
_SECTION_END();

No comments:

My Blog List

Total Pageviews

Search This Blog

Followers

Blog Archive