Join our facebook group for Amibroker afl code discussion https://www.facebook.com/groups/603980776889348

Highly Accurate All In One Trading System


Highly Accurate All In One Trading System


//www.aflcode.com
_SECTION_BEGIN("ADX Candle stick ");
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 ) ) ));
 if (SetBarFillColor( IIf( (C < O) AND (C < Ref( C, -1)), colorPlum, colorDarkGreen  ) ) );
else
(SetBarFillColor( IIf( (C > O)AND (C < Ref( C, -1)), colorWhite,colorWhite)));
Plot( C, "Close",IIf( Close < Ref( Close, -1), colorRed, colorGreen ), styleCandle );
_SECTION_END();

_SECTION_BEGIN("Detecting double tops and bottoms");
/* Detecting double tops and bottoms (for come into view, by Isfandi)*/ 
percdiff = 5; /* peak detection threshold */ 
fwdcheck = 5; /* forward validity check */ 
mindistance = 10; 
validdiff = percdiff/400; 

PK= Peak( H, percdiff, 1 ) == High; 
TR= Trough( L, percdiff, 1 ) == Low; 
x = Cum( 1 ); 
XPK1 = ValueWhen( PK, x, 1 ); 
XPK2 = ValueWhen( PK, x, 2 ); 
xTR1 = ValueWhen( Tr, x, 1 ); 
xTr2 = ValueWhen( Tr, x, 2 ); 

peakdiff = ValueWhen( PK, H, 1 )/ValueWhen( PK, H, 2 ); 
Troughdiff=ValueWhen( tr, L, 1 )/ValueWhen( tr, L, 2 ); 

doubletop = PK AND abs( peakdiff - 1 ) < validdiff AND (Xpk1 -Xpk2)>mindistance AND High > HHV( Ref( H, fwdcheck ), fwdcheck - 1 ); 
doubleBot=tr AND abs( troughdiff - 1 ) < validdiff AND (Xtr1 -Xtr2)>mindistance AND Low < LLV( Ref( L, fwdcheck ), fwdcheck - 1 ); 

Buy = doublebot; 
Sell = doubletop; 
for( i = 0; i < BarCount; i++ ) 
{ 
if( Buy[i] ) PlotText( "BOT " , i, L[ i ],colorYellow ); 
if( Sell[i] ) PlotText( "TOP" , i, H[ i ], colorWhite ); 
} 

WriteIf( Highest( doubletop ) == 1, "AmiBroker has detected some possible 
double top patterns for " + Name() + "\nLook for green arrows on the price 
chart.", "There are no double top patterns for " + Name() ); 

WriteIf(Lowest( doublebot)==1,"AmiBroker has detected some possible double 
bottom patterns for " + Name() + "\nLook for red arrows on the price 
chart.", "There are no double bottom patterns for " + Name() ); 
_SECTION_END();

_SECTION_BEGIN("My Name");
GfxSetBkColor(colorBlack);
GfxSetTextColor( colorGrey40 ); 
GfxSelectFont("Impact", 12, 500, True );
GfxTextOut("Isfandi Trading System II", 10 , 848 );
_SECTION_END();

_SECTION_BEGIN("Wall Indicator System_Isfandi");
//---- pivot points
DayH = TimeFrameGetPrice("H", inDaily, -1);// yesterdays high
DayL = TimeFrameGetPrice("L", inDaily, -1);//low
DayC = TimeFrameGetPrice("C", inDaily, -1);//close
DayO = TimeFrameGetPrice("O", inDaily);// current day open
HiDay = TimeFrameGetPrice("H", inDaily);
LoDay = TimeFrameGetPrice("L", inDaily);
PP = (DayH + DayL + DayO + DayO) / 4 ;
R1 = (2 * PP) - DayL;
S1 = (2 * PP) - DayH;
R2 = PP + R1 - S1;
S2 = PP + S1 - R1;
R3 = R2 + (R1 - PP);
S3 = S2 - (PP - S1);
// OTHER INDICATOR
MOMETUM =RSI(14);
radius = 0.1 * Status("pxheight"); // get pixel height of the chart and use 45% for pie chart radius
textoffset = 0.1 * radius;
GfxSelectFont("Arial", 9, 500, True );
GfxSetTextColor( colorGrey50 );
GfxTextOut("PIVOT POINT", textoffset , 288 );
GfxSetTextColor( colorGrey50 );
GfxTextOut("SIGNAL", textoffset , 188 );
GfxSetTextColor( colorGrey50);
GfxTextOut( "TREND", textoffset ,386 );
GfxSelectFont("Arial", 9 );
GfxSetTextColor( colorGreen);
GfxTextOut( "R1 =" + R1, textoffset + 1, 320 );
GfxSetTextColor( colorLime );
GfxTextOut( "R2 = " +R2, textoffset + 1, 305 );
GfxSetTextColor( colorWhite );
GfxTextOut( "PP = " +PP, textoffset + 1, 335 );
GfxSetTextColor( colorOrange );
GfxTextOut( "S1 = " +S1, textoffset + 1, 350 );
GfxSetTextColor( colorRed );
GfxTextOut( "S2 = " +S2, textoffset + 1, 365 );
GfxSelectFont("Arial", 9 );
_SECTION_END();
//////////////////////////////////////////////////////////////////////
_SECTION_BEGIN("Elder Impulse");
GfxSelectFont("Arial", 8, 500, True );
///////////////////////////////////////////////////
SetChartOptions(0,chartShowArrows|chartShowDates);
EnableTextOutput(False);
// User-defined parameter for EMA periods
EMA_Type = Param("EMA-1, TEMA-2, JMA-3", 2, 1, 3, 1);
EMA_prds = Param("EMA_periods", 7, 1, 30, 1);
Std_MACD = Param("Standard MACD? No-0, Yes-1", 1, 0, 1, 1);
Plot_fashion = Param("Bar+Arrows-1, Impulse Bars-2", 2, 1, 2, 1);
// Allow user to define Weekly and Monthly Ribbon Location and Height
WR_P1 = Param("Weekly Ribbon Location", 5.2, -1000, 1000, 0.1);
WR_P2 = Param("Weekly Ribbon Height", 199, -0.001, 500, 0.1);
//MR_P1 = Param("Monthly Ribbon Location", 5.2, -1000, 1000, 0.1);
//MR_P2 = Param("Monthly Ribbon Height", 199, -0.001, 500, 0.1);
// Compute EMA and MACD Histogram
if(EMA_Type == 1)
{
DayEMA = EMA(Close, EMA_prds);
}
if (EMA_Type == 2)
{
DayEMA = TEMA(Close, EMA_prds);
}
Histogram = MACD() - Signal();
// Determine if we have an Impulse UP, DOWN or None
Impulse_Up = DayEMA > Ref(DayEMA, -1) AND Histogram > Ref(Histogram, -1);
Impulse_Down = DayEMA < Ref(DayEMA, -1) AND Histogram < Ref(Histogram, -1);
Impulse_None = (NOT Impulse_UP) AND (NOT Impulse_Down);
// Compute Weekly MACD and determine whether rising or falling
TimeFrameSet(inWeekly);
if (Std_MACD == 0)
{
MACD_val = MACD(5, Cool);
Signal_val = Signal(5, 8, 5);
}
else
{
MACD_val = MACD(12, 26);
Signal_val = Signal(12, 26, 9);
}
Hist_in_w = MACD_val - Signal_val;
wh_rising = Hist_in_w > Ref(Hist_in_w, -1);
wh_falling = Hist_in_w < Ref(Hist_in_w, -1);
wh_none = (NOT wh_rising) AND (NOT wh_falling);
TimeFrameRestore();
// Now get Monthly MACD Histogram....
TimeFrameSet(inMonthly);
MACD_val = MACD(5, 8);
Signal_val = Signal(5, 8, 5);
Hist_in_m = MACD_val - Signal_val;
mh_rising = Hist_in_m > Ref(Hist_in_m, -1);
mh_falling = Hist_in_m < Ref(Hist_in_m, -1);
TimeFrameRestore();
wh_rising = TimeFrameExpand( wh_rising, inWeekly, expandLast );
wh_falling = TimeFrameExpand( wh_falling, inWeekly, expandLast);
wh_none = TimeFrameExpand( wh_none, inWeekly, expandLast);
mh_rising = TimeFrameExpand(mh_rising, inMonthly, expandLast);
mh_falling = TimeFrameExpand(mh_falling, inMonthly, expandLast);
kol = IIf( wh_rising, colorBrightGreen, IIf(wh_falling, colorRed, IIf(wh_none, colorCustom11, colorLightGrey)));
mkol = IIf( mh_rising, colorBlue, IIf(mh_falling, colorYellow, colorLightGrey));
if (Plot_fashion == 1)
{
}
else
{
bar_kol = IIf(impulse_UP, colorBrightGreen, IIf(impulse_Down, colorRed, colorCustom11));
}
Impulse_State = WriteIf(Impulse_Up, "Bulllish", WriteIf(Impulse_Down, "Bearish", "Neutral"));
GfxSetTextColor( colorPink );
GfxTextOut( "IMPULSE STATE = " +Impulse_State, textoffset + 1, 402 );
// Set the background color for Impulse Status Column
Impulse_Col = IIf(Impulse_Up, colorGreen, IIf(Impulse_Down, colorRed, colorGrey40));
// Determine Weekly Trend. Display as Text Column
Weekly_Trend = WriteIf(wh_rising, "Rising", WriteIf(wh_falling, "Falling", "Flat!"));
Weekly_Col = IIf(wh_rising, colorGreen, IIf(wh_falling, colorRed, colorLightGrey));
GfxSetTextColor( colorPink);
GfxTextOut( "WEEKLT TREND = " +Weekly_Trend, textoffset + 1, 417 );
// Determine Monthly Trend. Display as Text Column
Monthly_Trend = WriteIf(mh_rising, "Rising", WriteIf(mh_falling, "Falling", "Flat!"));
Monthly_Col = IIf(mh_rising, colorGreen, IIf(mh_falling, colorRed, colorLightGrey));
GfxSetTextColor( colorPink );
GfxTextOut( "MONTHLY TREND = " +Monthly_Trend, textoffset + 1, 432 );
// Determine how many bars has the current state existed
bars_in_bull = Min(BarsSince(impulse_none), BarsSince(impulse_down));
bars_in_bear = Min(BarsSince(impulse_up), BarsSince(impulse_none));
bars_in_neut = Min(BarsSince(impulse_down), BarsSince(impulse_up));
// Set a single variable to show number of bars in current state depending upon
// actual Impulse Status - Bullish, Bearish or Neutral
bars_in_state = IIf(Impulse_Up, bars_in_bull, IIf(Impulse_down, bars_in_bear, bars_in_neut));
//weekly pivot
k1=-1;
SetChartBkColor(16 ) ;
k=IIf(ParamList("select type","daily|next day")=="daily",-1,0);
k1=-1;
TimeFrameSet(inDaily);
day_h= LastValue(Ref(H,K));
day_l= LastValue(Ref(L,K));
day_c= LastValue(Ref(C,K));
TimeFrameRestore();
// day
DH=Day_h;
DL=Day_L;
DC=Day_C;
// DAY PIVOT Calculation
pd = ( DH+ DL + DC )/3;
sd1 = (2*pd)-DH;
sd2 = pd -(DH - DL);
sd3 = Sd1 - (DH-DL);
rd1 = (2*pd)-DL;
rd2 = pd +(DH -DL);
rd3 = rd1 +(DH-DL);
WriteVal( StochK(39) - StochK(12) );
GfxSelectFont("Arial", 8 );
_SECTION_END();

_SECTION_BEGIN("STOCHASTIC");
periods = Param( "Periods", 15, 1, 200, 1 );
Ksmooth = Param( "%K avg", 3, 1, 200, 1 );
a = StochK( periods , Ksmooth);
Dsmooth = Param( "%D avg", 3, 1, 200, 1 );
b = StochD( periods , Ksmooth, DSmooth );
Buy = Cross( a, b );
Sell = Cross( b, a );
STOCH =WriteIf(a>b , "BUY","SELL");
GfxSetTextColor( colorYellow );
GfxTextOut( "STOCH = " +STOCH, textoffset + 1, 229 );
GfxSelectFont("Arial", 8 );

_SECTION_BEGIN("Van K Tharp Efficient Stocks");
// Mark Keitel 12-05
// Van K Tharp Efficient Stocks
GfxSelectFont("Arial", 8, 500, True );
ATRD180 = ATR(180);
ATRD90 = ATR(90);
ATRD45 = ATR(45);
ATRD20 = ATR(20);
ATRD5 = ATR(5);
DifferenceD180 = Close - Ref(Close,-180);
DifferenceD90 = Close - Ref(Close,-90);
DifferenceD45 = Close - Ref(Close,-45);
DifferenceD20 = Close - Ref(Close,-20);
DifferenceD5 = Close - Ref(Close,-5);
EfficiencyD180 = IIf(ATRD180!=0,DifferenceD180/ATRD180,1);
EfficiencyD90 = IIf(ATRD90!=0,DifferenceD90/ATRD90,1);
EfficiencyD45 = IIf(ATRD45!=0,DifferenceD45/ATRD45,1);
EfficiencyD20 = IIf(ATRD20!=0,DifferenceD20/ATRD20,1);
EfficiencyD5 = IIf(ATRD5!=0,DifferenceD5/ATRD5,1);
Averageeff = (EfficiencyD180 + EfficiencyD90 + EfficiencyD45 +
EfficiencyD20 ) / 4;
//Plot( averageeff, "AvgEff", colorLightBlue, styleLine );
x = Param ( "Add Results to a Watchlist? Yes = 1, No = 2" , 2 , 1 , 2 , 1 ) ;  // select whether to add results to watchlist or not
y = Param("Set Watchlist Number", 25, 2, 60,1);    // sets the watchlist number, but reserves the first 2 and last 4 watchlists
//  --------  Parameter Variables for Exploration  --------------------------------
TCH = Param("High close value ", 20, 5, 300, 0.5);
TCL  = Param("Low close value " , 5, 1, 10, 0.25);
AVP = Param("Period for Avg Vol " , 21, 10, 240, 1);
SV = Param("Stock minimum Avg Vol " , 125000, 50000, 1000000, 500000);
//  --------------  Organize the exploration results ------------------------------------
P = Param("Period for Price Delta Comparisons", 1, 1, 120, 1);
P1 = Param("Period for Other Delta Comparisons", 3, 1, 120, 1);
PATR = Param("Period for ATR", 5,1,21,1);
PADX = Param("Period for ADX", 14, 3, 34,1);
PRSI = Param("Period for RSI", 13, 3, 34,1);
ADX_TREND =WriteIf(PDI(PADX)>MDI(PADX),"_ TREND UP","_TREND DOWN");
GfxSetTextColor( colorRed );
GfxTextOut( "RSI(14) = " + MOMETUM +  ADX_TREND , textoffset + 1,465 );
ADX_14 = ADX(14);
GfxSetTextColor( colorLightBlue );
GfxTextOut( "ADX_TREND = " +ADX_14+ ADX_TREND, textoffset + 1, 452 );
_SECTION_END();


_SECTION_BEGIN("Gann HiLo");
/*Gann HiLo*/
pds=Param("Stop Period",4,2,10,0.25);

barcolor=
 IIf(Outside(),colorYellow,
   IIf(L<Ref(L,-1) && H<=Ref(H,-1),colorRed,
     IIf(H>Ref(H,-1) && L>=Ref(L,-1),colorBrightGreen,colorBlue)));

Hld = IIf(C > Ref(MA(H, 2), -1), 1, IIf(C < Ref(MA(L, 2), -1), -1, 0));
Hlv = ValueWhen(Hld != 0, Hld, 1);
Hilo = IIf(Hlv == -1, MA(H, 2), MA(L, 2));
Trigger = IIf(C>Hilo, colorBrightGreen, colorRed);
Buy = Close > Hilo;
Sell = Close < Hilo;
GannHiLo =WriteIf(C>Hilo,"BUY","SELL");
GfxSetTextColor( colorBrightGreen );
GfxTextOut( "GannHiLo = " +GannHiLo, textoffset + 1, 255 );
GfxSelectFont("Arial", 8 );
_SECTION_END();

_SECTION_BEGIN("Indicator ZeroLag W%R");
/*ZeroLag W%R*/
"========";
R = ((HHV(H,12) - C) /(HHV (H,14) -LLV (L,14))) *-100;
Period= 10;
EMA1= EMA(R,Period);
EMA2= EMA(EMA1,5);
Difference= EMA1 - EMA2;
ZeroLagEMA= EMA1 + Difference;
PR=100-abs(ZeroLagEMA);
Buy=Cross(R,ZeroLagEMA);
Sell=Cross(ZeroLagEMA,R);
ZeroLagEMA =WriteIf(R > ZeroLagEMA, "BUY","SELL");
GfxSetTextColor( colorOrange );
GfxTextOut( "William%R = " +ZeroLagEMA, textoffset + 1, 216 );
GfxSelectFont("Arial", 8 );
_SECTION_END();

_SECTION_BEGIN("PVR");
"PVR";
P1=Ref(C,-1);
V1=Ref(V,-1);
PVR=IIf(C>P1 AND V>V1,4,
    IIf(C>P1 AND V<V1,3,
    IIf(C<P1 AND V<V1,2,1)));
GraphXSpace=10;
A=EMA(PVR,5);
B=EMA(A,3);
Buy = Cross(A, B);
Sell = Cross(B, A);
PVR =WriteIf(A > B, "BUY","SELL");
GfxSetTextColor( colorRed );
GfxTextOut( "PVR = " +PVR, textoffset + 1, 203 );
GfxSelectFont("Arial", 8 );
_SECTION_END();

_SECTION_BEGIN("ASHISHDA MACD");
a=TSF(C,3)+TSF(C,5)+TSF(C,8)+TSF(C,13)+TSF(C,17)+TSF(C,26);
b=TSF(C,8)+TSF(C,13)+TSF(C,26)+TSF(C,35)+TSF(C,50)+TSF(C,56);
mova= TSF(a,3);
movb=TSF(b,26);
diff= a + mova;
diff1= b + movb;
m= diff - diff1;
m1= TSF(m,5)*.5;
Buy = Cross(m1,Ref(m1, -1));
Sell = Cross(Ref(m1, -1),m1);
QuickMACD =WriteIf(m1>Ref(m1, -1), "BUY","SELL");
GfxSetTextColor( colorGreen);
GfxTextOut( "MACD = " +QuickMACD, textoffset + 1, 242 );
GfxSelectFont("Arial", 8 );
_SECTION_END();

_SECTION_BEGIN("SECONDARY LANDIS");
x = ((StochK(9,3)*0.05)+(StochK(182,9)*0.43)+(StochK(34,13)*0.26)+(StochK(34,8)*0.16)+(StochK(21,5)*0.10));
y = MA(x,15);

Buy= Cross (x,y);
Sell= Cross (y,x);
LANDIS =WriteIf(x > y, "SECONDARY UPTREND","SECONDARY DOWNTREND");
GfxSetTextColor( colorPink );
GfxTextOut( "LANDIS = " +LANDIS, textoffset + 1, 491 );
GfxSelectFont("Arial", 8 );

//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
_SECTION_BEGIN("Average");
P = ParamField("Field");
Type = ParamList("Type", "Weighted,Lagless-21,Hull-26,Linear Regression-45,Exponential,Double Exponential,Tripple Exponential,Wilders,Simple");
Periods = Param("Periods", 14, 2, 100 );
Displacement = Param("Displacement", 1, -50, 50 );
m = 0;

if( Type == "Weighted" )     m=  WMA( P, Periods );
if( Type == "Lagless-21"  )    m=  2*EMA(P, Periods)-EMA(EMA(P, Periods), Periods); 
if( Type == "Hull-26"  )    m=  WMA(2*(WMA(P, Periods/2))-WMA(P, Periods) ,4 );
if( Type == "Linear Regression-45"  ) m=  LinearReg( P, Periods );
if( Type == "Exponential" )    m = EMA( P, Periods );
if( Type == "Double Exponential" )  m = DEMA( P, Periods );
if( Type == "Tripple Exponential" )  m = TEMA( P, Periods );
if( Type == "Wilders" )     m = Wilders( P, Periods );
if( Type == "Simple" )      m = MA( P, Periods );

Buy=Cover=Cross(C,m);
Sell=Short=Cross(m,C);
AveragePrice =WriteIf(C > m, "ABOVE AVERAGE","BELOW AVERAGE");
GfxSetTextColor( colorDarkYellow );
GfxTextOut( "PRICE = " +averageprice, textoffset + 1, 504 );
GfxSelectFont("Arial", 8 );

_SECTION_BEGIN("SAR ARROW");
Plot( Close, "C", colorBlack, styleCandle ); 
acc = Param("Acceleration", 0.02, 0, 1, 0.001 ); 
accm = Param("Max. acceleration", 0.2, 0, 1, 0.001 ); 
S = SAR(); 
Buy = Cross( Close, S ); 
Sell = Cross( S, Close ); 
SARPhase =WriteIf(Close>S,"BUY","SELL");
GfxSetTextColor( colorRed);
GfxTextOut( "S A R = " +SARPhase, textoffset + 1, 517 );
GfxSelectFont("Arial", 8 );
_SECTION_END();

_SECTION_BEGIN("Stochastic Momentum Index");
period1 = 12;
period2 = 6;
period3 = 6;
SMI = 
100 * ( EMA( EMA( C - (0.5 * ( HHV(H,period1) + LLV(L,period1))),period2),period3)/(0.5*EMA( EMA( HHV(H,period1) - LLV(L,period1),period2),period3)));
Buy= Cross (SMI,MA( SMI, 6 ));
Sell= Cross (MA( SMI, 6 ),SMI);
Momentum =WriteIf(SMI > MA( SMI, 6 ), "BUY","SELL");
GfxSetTextColor( colorOrange );
GfxTextOut( "Stoch Momentum = " +Momentum, textoffset + 1, 530 );
GfxSelectFont("Arial", 8 );
_SECTION_END();

_SECTION_BEGIN("JMAHiLo");
function JMA( array, per )
{ 
TN1=MA(array,per); 
s1=0;
for( i = 0; i < per; i=i+1 ) 
{
s1=s1+((per-(2*i)-1)/2)*Ref(array,-i); 
} 
return TN1+(((per/2)+1)*S1)/((per+1)*per);
} 
JMAperiods = Param( "JMA Periods", 10, 1, 200, 1 );
_SECTION_BEGIN("RWIHILO");
minperiods = Param( "Min Periods", 2, 1, 200, 1 );
maxperiods = Param( "Max Periods", 8, 1, 200, 1 );
varLo = RWILo( minperiods, maxperiods);
minperiods = Param( "Min Periods", 2, 1, 200, 1 );
maxperiods = Param( "Max Periods", 8, 1, 200, 1 );
varHi = RWIHi( minperiods, maxperiods) ;
Buy= Cross (JMA(varHi ,JMAperiods),JMA(varLo ,JMAperiods));
Sell=Cross (JMA(varLo ,JMAperiods),JMA(varHi ,JMAperiods));
JMAHiLo =WriteIf(JMA(varHi ,JMAperiods) > JMA(varLo ,JMAperiods), "BUY","SELL");
GfxSetTextColor( colorGreen );
GfxTextOut( "JMAHiLo = " +JMAHiLo, textoffset + 1, 543 );
GfxSelectFont("Arial", 8 );
_SECTION_END();

_SECTION_BEGIN("SmoothHeikin MA Swing");
SetBarsRequired(200,0);
GraphXSpace = 5;
SetChartOptions(0,chartShowArrows|chartShowDates);
k = Param("K", 1.5, 1, 5, 0.1);
Per = Param("ATR", 3, 1, 30, 0.50);
k1 = Optimize("K", 1, 0.1, 5, 0.1);
Per1 = Optimize("ATR", 3, 1, 30, 0.50);
HACLOSE=(O+H+L+C)/4;
HaOpen = AMA( Ref( HaClose,  -1 ),  0.5 );
HaHigh = Max( H,  Max( HaClose,  HaOpen ) );
HaLow = Min( L,  Min( HaClose,  HaOpen ) );
j=Haclose;
//=======================================================================================================================
//=========================Indicator==============================================================================================
f=ATR(14);

rfsctor = WMA(H-L, Per);

revers = k * rfsctor;

Trend = 1;  
NW[0] = 0;  


for(i = 1; i < BarCount; i++)
{
 if(Trend[i-1] == 1)                
 {
  if(j[i] < NW[i-1])                 
  {
   Trend[i] = -1;                   
   NW[i] = j[i] + Revers[i];        
  }
  else                              
  {
   Trend[i] = 1;
   if((j[i] - Revers[i]) > NW[i-1])
   {
    NW[i] = j[i] - Revers[i]; 
   }
   else
   {
    NW[i] = NW[i-1];
   }
  } 
 }
 if(Trend[i-1] == -1)               
 {
  if(j[i] > NW[i-1])                
  {
   Trend[i] = 1;                    
   NW[i] = j[i] - Revers[i];        
  }
  else                              
  {
   Trend[i] = -1;
   if((j[i] + Revers[i]) < NW[i-1]) 
   {
    NW[i] = j[i] + Revers[i]; 
   }
   else
   {
    NW[i] = NW[i-1];
   }
  }
 }
}

//===============system================
Plot(NW, "", IIf(Trend == 1, 3, 25), 1);

Buy=Cover=Cross(j,nw);
Sell=Short=Cross(nw,j);
SWING =WriteIf(j > nw, "UPTREND","DOWNTREND");
GfxSetTextColor( colorLightBlue );
GfxTextOut( "SWING = " +SWING, textoffset + 1, 268 );
GfxSelectFont("Arial", 8 );
shape = Buy * shapeCircle + Sell * shapeCircle;
_SECTION_END();

_SECTION_BEGIN("Sigma Bands");
A = Param("Periods?",21,1,300,1);

x = MA(C,a);

x1  = x+1*StDev(C,a);
x2  = x+2*StDev(C,a);
x3  = x+3*StDev(C,a);

y1 = x-1*StDev(C,a);
y2 = x-2*StDev(C,a);
y3 = x-3*StDev(C,a);

Plot(x1, "", colorDarkGreen, styleDashed);
Plot(x2, "", colorDarkGreen, styleThick | styleDashed);
Plot(x3, "", colorDarkGreen, styleThick);

Plot(y1, "", colorDarkRed, styleDashed);
Plot(y2, "", colorDarkRed, styleThick | styleDashed);
Plot(y3, "", colorDarkRed, styleThick);
_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<farback; i++) {

curBar = (BarCount - 1) - i;

// -- Have we identified a pivot? If trend is down...

if (aLLVBars[curBar] < aHHVBars[curBar]) {

// ... and had been up, this is a trend change

if (curTrend == "U") {

curTrend = "D";

// -- Capture pivot information

curPivBarIdx = curBar - aLLVBars[curBar];

aLPivs[curPivBarIdx] = 1;

aLPivLows[nLPivs] = L[curPivBarIdx];

aLPivIdxs[nLPivs] = curPivBarIdx;

nLPivs++;

}

// -- or current trend is up

} else {

if (curTrend == "D") {

curTrend = "U";

curPivBarIdx = curBar - aHHVBars[curBar];

aHPivs[curPivBarIdx] = 1;

aHPivHighs[nHPivs] = H[curPivBarIdx];

aHPivIdxs[nHPivs] = curPivBarIdx;

nHPivs++;

}

// -- If curTrend is up...else...

}

// -- loop through bars

}

// -- Basic attempt to add a pivot this logic may have missed

// -- OK, now I want to look at last two pivots. If the most

// recent low pivot is after the last high, I could

// still have a high pivot that I didn't catch

// -- Start at last bar

curBar = (BarCount-1);

candIdx = 0;

candPrc = 0;

lastLPIdx = aLPivIdxs[0];

lastLPL = aLPivLows[0];

lastHPIdx = aHPivIdxs[0];

lastHPH = aHPivHighs[0];

if (lastLPIdx > 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<nHPivs; j++) {

aHPivHighs[nHPivs-j] = aHPivHighs[nHPivs-

(j+1)];

aHPivIdxs[nHPivs-j] = aHPivIdxs[nHPivs-(j+1)];

}

aHPivHighs[0] = candPrc ;

aHPivIdxs[0] = candIdx;

nHPivs++;

}

} else {


// -- Bar and price info for candidate pivot

candIdx = curBar - aLLVBars[curBar];

candPrc = aLLV[curBar];

if (

lastLPL > 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<nLPivs; j++) {

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

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

}

aLPivLows[0] = candPrc;

aLPivIdxs[0] = candIdx;

nLPivs++;

}

}

// -- Dump inventory of high pivots for debugging



for (k=0; k<nHPivs; k++) {

_TRACE("High pivot no. " + k

+ " at barindex: " + aHPivIdxs[k] + ", "

+ WriteVal(ValueWhen(BarIndex()==aHPivIdxs[k],

DateTime(), 1), formatDateTime)

+ ", " + aHPivHighs[k]);

}



// -- OK, let's plot the pivots using arrows

PlotShapes(

IIf(aHPivs==1, shapeHollowSquare, shapeNone), colorRed, 0, H, 15);

PlotShapes(

IIf(aLPivs==1, shapeHollowSquare , shapeNone), colorLime, 0, L, -15);

_SECTION_BEGIN("Graphics");
GrpPrm=Param("Graphic Space",1,0,10);
GraphXSpace=GrpPrm;
_SECTION_END();

_SECTION_BEGIN("channels");
//Pattern Recognition graph
//with shading
/*TRENDLINES BREAKOUT*/
 
 
x = Cum(1);
per = Param("Percent",3,1,5,1);
s1=L;
s11=H;
pS = TroughBars( s1, per, 1 ) == 0;
endt= LastValue(ValueWhen( pS, x, 1 ));
startt=LastValue(ValueWhen( pS, x, 2 ));
endS = LastValue(ValueWhen( pS, s1, 1 ) );
startS = LastValue( ValueWhen( pS, s1, 2 ));
dtS =endt-startt;
aS = (endS-startS)/dtS;
bS = endS;
trendlineS = aS * ( x -endt ) + bS;
 
pR = PeakBars( s11, per, 1 ) == 0;
endt1= LastValue(ValueWhen( pR, x, 1 ));
startt1=LastValue(ValueWhen( pR, x, 2 ));
endR = LastValue(ValueWhen( pR, s11, 1 ) );
startR = LastValue( ValueWhen( pR, s11, 2 ));
DTR=ENDT1-STARTT1;
aR = (endR-startR)/dtR;
bR = endR;
trendlineR = aR * ( x -endt1 ) + bR;
BEGIN=Min(STARTT,STARTT1);
TRS = IIf(x>BEGIN-10,trendlineS,-1e10);
TRR = IIf(x>BEGIN-10,trendlineR,-1e10);
 
Condcolor=(Cross(C,trendlineR) AND X>ENDT1) OR (Cross(trendlineS,C) AND
X>ENDT);
BarColor=IIf(Condcolor,7,1);
Plot(C,"Close",BarColor,styleCandle); 
Plot(TRS,"Support",colorYellow,styleLine);
Plot(TRR,"Resist",colorYellow,styleLine);
/////////////////////////////////////
// Shading // 
////////////////////////////////////
fill=Param("style",2,1,2,1);
style=IIf(fill==1,styleHistogram,IIf(fill==2,styleArea,Null));
x=IIf(trs > trr,trr,trs);
Plot(x,"",colorBlack,style);
Plot(trr,"",colorDarkTeal,style);
////////////////////////////////////////////
// Pattern Recognition in title bar // 
///////////////////////////////////////////
Lowline=Ends-starts;
Highline=endr-startr;
Wedge=IIf(Highline <0 AND Lowline > 0,1,0);
DecendingTriangle=IIf(Highline < 0 AND Lowline==0,1,0);
AscendingTriangle=IIf(Highline==0 AND Lowline > 0,1,0);
DownChannel=IIf(Highline<0 AND Lowline<0,1,0);
UpChannel=IIf(Highline>0 AND Lowline>0,1,0);
BroadeningWedge=IIf(Highline > 0 AND Lowline < 0,1,0);
///////////////////////////////////
// Bullish or Bearish breakout //
//////////////////////////////////
BullishBreakout=Cross(C,trendlineR);
BearishBreakout=Cross(trendlineS,C);
Breakout =WriteIf(C > trendlineR, "Bullish","Bearish");
GfxSetTextColor( colorWhite );
GfxTextOut( "Breakout = " +Breakout, textoffset + 1, 558 );
GfxSelectFont("Arial", 8 );
 
Title=Name()+ WriteIf(wedge==1," Wedge","")+WriteIf(DecendingTriangle==1," Decending Triangle","")+WriteIf(AscendingTriangle==1,"Ascending Triangle","")/*+WriteVal(Lowline)*/+WriteIf(DownChannel==1," Downward Sloping Channel","")+WriteIf(UpChannel==1," Upward Sloping Channel","")+WriteIf(broadeningWedge==1," Broadening Wedge","")+"\n"+EncodeColor(colorGreen)+WriteIf(bullishbreakout,"Bullish Breakout",EncodeColor(colorRed)+WriteIf(bearishbreakout,"Bearish Breakout",""))/*+WriteVal(highline)*/; 
/////////////////////////////////////
// Automatic Analysis //
////////////////////////////////////
Filter=AscendingTriangle OR DecendingTriangle OR Wedge OR DownChannel OR UpChannel OR BroadeningWedge OR Bullishbreakout OR bearishbreakout;
AddTextColumn(WriteIf(bullishbreakout,"bullish Breakout",""),"BullBreak"); 
AddTextColumn(WriteIf(bearishBreakout,"Bearish Breakout",""),"BearBreak"); 
AddTextColumn(WriteIf(ascendingtriangle,"Ascending Triangle",WriteIf(decendingtriangle,"Decending Triangle",WriteIf(Wedge,"Wedge",WriteIf(DownChannel,"Down Channel",WriteIf(UpChannel,"Up Channel",WriteIf(BroadeningWedge,"Broadening Wedge","")))))),"Pattern");
_SECTION_END();

_SECTION_BEGIN("Calculation Bar");
Version(4.70); // needs AmiBroker 4.70
function msPattPos( element )
{
   Value1 = Ref( H, -1 );
   Value2 = Ref( L, -1 );
   Value3 = ( Value1 + Value2 )/2;
   Dist = Ref( ATR( 10 ), -1 );
   Value4 = Value1 + Dist;
   Value5 = Value2 - Dist;
   result = IIf( element < Value5, 0,
            IIf( element < Value2, 1,
            IIf( element < Value3, 2,
            IIf( element < Value1, 3,
            IIf( element < Value4, 4,
                              5 ) ) ) ) );
  return result;
}
function msPattToText( patt )
{
 result =
 WriteIf( patt == 0, " is below previous (Low - ATR 10) ",
 WriteIf( patt == 1, " is above (at) previous (Low - ATR 10) and below previous Low ",
 WriteIf( patt == 2, " is above (at) previous Low and below previous Midpoint ",
 WriteIf( patt == 3, " is above (at) previous Midpoint and below previous High ",
 WriteIf( patt == 4, " is above (at) previous High and below (High + ATR 10) ",
 " is above (at) previous (High + ATR(10) " ) ) ) ) );
 return result;
}
function msRecognize()
{
   return 1000 * msPattPos( Open ) + 100 * msPattPos( High ) +
          10 * msPattPos( Low ) + msPattPos( Close );
}
function msPatternDescription( patt )
{
   return "Open: " + msPattToText( round( ( patt / 1000 ) % 10 ) ) + "\n" +
          "High: " + msPattToText( round( ( patt / 100 ) % 10 ) ) + "\n" +
          "Low: " + msPattToText( round( ( patt / 10 ) % 10 ) ) + "\n" +
          "Close: " + msPattToText( round( patt % 10 ) );
}
patts = msRecognize();
// by default use pattern occuring at selected bar
DesiredPattern = SelectedValue( patts );
// if you want manual-entry of pattern code from parameter dialog
// then uncomment the line below
//DesiredPattern=Param("Pattern to look for", 3434, 0, 5555, 0 );
Title = StrFormat("{{NAME}} - {{INTERVAL}} {{DATE}} Open %g, Hi %g, Lo %g, Close %g", O, H, L, C);
Title = Title + "\nPattern code is : " + DesiredPattern + "\n" + msPatternDescription( DesiredPattern  );
//Plot(C, "Price", ParamColor("Color", colorGrey40), styleNoTitle | ParamStyle("Style") | GetPriceStyle() );
PattCloseAbove = DesiredPattern == patts AND Ref( Close > Open, 1 );
PattCloseBelow = DesiredPattern == patts AND Ref( Close < Open, 1 );
//PlotShapes(    ( DesiredPattern == patts ) * shapeCircle , IIf( PattCloseAbove, colorDarkGreen, IIf( PattCloseBelow, colorDarkRed, colorDarkBlue ) ), 0, High, 30 );
NumPatterns = LastValue( Cum( DesiredPattern == patts ) );
NumPattCloseAbove = LastValue( Cum( PattCloseAbove ) );
NumPattCloseBelow = LastValue( Cum( PattCloseBelow ) );
NumPattCloseEqual = NumPatterns - NumPattCloseAbove - NumPattCloseBelow;
Title = Title +
"\n\nTotal number of Patterns: " + NumPatterns +
"\n% on Total Bars: " + 100 * NumPatterns/BarCount +
"\nIn the next bar\n" +
EncodeColor(colorGreen) +
"Close has been above the open " + NumPattCloseAbove +
" (" + NumPattCloseAbove / NumPatterns + "%) times\n" +
EncodeColor(colorRed) +
"Close has been below the open " + NumPattCloseBelow + " (" +
NumPattCloseBelow / NumPatterns +" %) times\n" +
EncodeColor(colorGrey50) +
"Close has been equal to the open " + NumPattCloseEqual + " (" +
NumPattCloseEqual / NumPatterns +" %)times";
_SECTION_END();

Previous
Next Post »