// Downloaded From https://www.WiseStockTrader.com /////////////////////////////// // CCI Panel for Amibroker // Codded/Added by Dennis, Kris, Wring, Santacs, Yofa (jtoth100) // Last Update: 10/19/2008 /////////////////////////////// // Go to www.woodiescciclub.com to learn everything about this system. // You must be a registered user to see the images and downloads. /////////////////////////////// // Setup Axes and Grid section (right click on chart panel, click on Parameters): // Scaling: Custom , Min=-250 Max=250 // Show Date Axis = Yes , Show Middle Lines = No /////////////////////////////// // To activate the timer properly, make sure the following is set: // click on Tools==>Preferences==>Intraday.... // make sure "Allign minute bars to market hours" is checked... // make sure "Start time of interval" is checked... // make sure "Override: Weekly/monthly bars use day of last trade" is checked. /////////////////////////////// // Tic/PIP values: YM=1.0, ER2=0.10, NQ=0.25, EUR/USD=.0001, USD/JPY=0.01, Stocks=0.01 /////////////////////////////// // Rangebar Settings : // ER2 1.50 // YM 25 // ES 3 // NQ 3.75 // DAX 5 // ZG 1.5 /////////////////////////////// // Discalimer: For educational purposes only. Trade at your own risk. /////////////////////////////// //******************************************************************************************** // Static variable functions used in charts //******************************************************************************************** function StaticName( VarName ) { return Name() + VarName; } procedure StaticSet( VarName, VarValue ) { StaticVarSet(Name() + VarName, VarValue); } function StaticGet( VarName ) { return Nz(StaticVarGet(Name() + VarName)); } procedure StaticSetText( VarName, VarValue ) { StaticVarSetText(Name() + VarName, VarValue); } function StaticGetText( VarName ) { return StaticVarGetText(Name() + VarName); } //******************************************************************************************** // Basic panel setup //******************************************************************************************** //Disable printing to commentary window EnableTextOutput(False); //Version info of the panel Revision = "$Revision: 39 $"; SetChartOptions(0, chartShowDates); SetChartOptions(3, chartLogarithmic, chartGridMiddle | chartGridPercent | chartGridMargins); //Anything to print at the end of the tooltip for debugging purposes ToolTipDebug = ""; // Bar indexes for titles and commentary LastBarIndex = BarCount-1; CurBarIndex = SelectedValue(BarIndex()); if (CurBarIndex > LastBarIndex) //on tick charts SelectedValue(BarIndex()) maypoint beyond last bar CurBarIndex = LastBarIndex; //******************************************************************************************** // Low level graphics setup //******************************************************************************************** if (Status("action") == 1) //indicator { MinY = Status("axisminy"); MaxY = Status("axismaxy"); TotalY = MaxY - MinY; LastVisibleIndex = Status("lastvisiblebarindex"); FirstVisibleIndex = Status("firstvisiblebarindex"); TotalVisibleBars = LastVisibleIndex - FirstVisibleIndex; PixelWidth = Status("pxwidth"); PixelHeight = Status("pxheight"); ScaleY = PixelHeight / TotalY; } else { MinY = -300; MaxY = 300; TotalY = MaxY - MinY; LastVisibleIndex = BarCount -1; FirstVisibleIndex = 0; TotalVisibleBars = LastVisibleIndex - FirstVisibleIndex; PixelWidth = 1; PixelHeight = 1; ScaleY = PixelHeight / TotalY; } FontNameSmall = "Ariel"; FontSizeSmall = 8; FontWeightSmall = 300; FontNameNormal = "MS Sans Serif"; FontSizeNormal = 8; FontWeightNormal = 300; FontNameBig = "MS Sans Serif"; FontSizeBig = 10; FontWeightBig=700; GfxSetOverlayMode(0); //low level graph over chart... GfxSetBkMode(1); //transparent GfxSelectPen( StaticGet("ChartBkColor"), 1, 0); //to clear value area GfxSelectSolidBrush( StaticGet("ChartBkColor") ); GfxSetTextColor( StaticGet("ChartTextColor") ); GfxSetTextAlign(10); //right, buttom GfxSelectFont(FontNameSmall, FontSizeSmall, FontWeightSmall, True, False, 0); GfxTextOut("by Yofa", PixelWidth-2, PixelHeight-12 ); GfxTextOut(Revision, PixelWidth-2, PixelHeight ); GfxSetTextAlign(26); //right, baseline GfxSelectFont(FontNameNormal, FontSizeNormal, FontWeightNormal, False, False, 0); function GfxMapYtoPixelY(Y) { return ( TotalY / 2 - Y ) * ScaleY; } _SECTION_END(); //Woodie CCI - Indicators // Timer TTMperiod = 6; Low_ma = EMA(L, TTMperiod); High_ma = EMA(H, TTMperiod); Low_third = (High_ma - Low_ma) / 3 + Low_ma; High_third = 2 * (High_ma - Low_ma) / 3 + Low_ma; tempnum = Now( 4 ) - TimeNum(); TimeRem = Interval() - ((int(tempnum[BarCount - 1] / 100) * 60) + (tempnum[BarCount - 1] - int(tempnum[BarCount - 1] / 100) * 100)); if (TimeRem[BarCount - 1] < 0) TimeRem = 0; MinuteVar = int(TimeRem / 60); SecondsVar = int(frac(TimeRem / 60) * 60); if (TimeRem[BarCount - 1] > 60) { TitleTimeRem = EncodeColor(colorWhite) + MinuteVar + ":" + WriteIf(SecondsVar > 9, "", "0") + SecondsVar; } else if (TimeRem[BarCount - 1] > 20) { TitleTimeRem = EncodeColor(colorYellow) + MinuteVar + ":" + WriteIf(SecondsVar > 9, "", "0") + SecondsVar; } else { TitleTimeRem = EncodeColor(colorRed) + MinuteVar + ":" + WriteIf(SecondsVar > 9, "", "0") + SecondsVar; } // Background color SetChartBkColor(ParamColor("Panel color ",colorCustom1)); // CCI colors zcolor= ParamColor("WCCI color",colorBlack); z6color= ParamColor("TCCI color",colorBrown); patterncolor= ParamColor("Pattern trace color",colorWhite); // CCI periods zperiod=Param("WCCI period",14,0,100); z = CCI(zperiod); z6period=Param("TCCI period",6,0,1000); z6 = CCI(z6period); // Tic/PIP value TicMult= Param("Tic multiplier(ER2=10,YM=1,ES=4,FOREX=1)",1,0,1000000); TicDiv= Param("Tic or PIP value(ER2=0.1,YM=1,FOREX=1)",1,0,1000000); // Rangebar interval rbint= Param("Rangebar Interval:(YM=25.0,AB=1.5,NQ=3.75,ES=3.0)",1.0,0.25,1000000); // Rangebar counter rbcounter= round(((rbint-(H-L))) * ticmult); rbcounterpercent= round((rbcounter/(rbint * ticmult))*100); // Timer/counter title timercode= Param("Timer:(minutes=1,rangebar=2)",1,1,2); timetitle= WriteIf(timercode==1,TitleTimeRem, EncodeColor(colorWhite) + "Countdown " + rbcounter + " (" + rbcounterpercent + "%)"); // Spread spread= Param("Spread (included in stop)",0,0,1000000); // Stop value stopval= Param("Stop above/below entry bar",2,0,1000000); // Plot grids PlotTheGrids = ParamToggle("Plot grids","No|Yes",0); if (PlotTheGrids ==1) { PlotGrid(0); PlotGrid(-100); PlotGrid(100); PlotGrid(-200); PlotGrid(200); } // Angle variables PI = atan(1.00) * 4; periods = 30; HighHigh = HHV(H, periods); LowLow = LLV(L, periods); range = 25 / (HighHigh - LowLow) * LowLow; // EMA34 Angle EMA34 = EMA(C,34); x1_EMA34 = 0; x2_EMA34 = 1; y1_EMA34 = 0; y2_EMA34 = (Ref(EMA34, -1) - EMA34) / Avg * range; c_EMA34 = sqrt((x2_EMA34 - x1_EMA34)*(x2_EMA34 - x1_EMA34) + (y2_EMA34 - y1_EMA34)*(y2_EMA34 - y1_EMA34)); angle_EMA34 = round(180 * acos((x2_EMA34 - x1_EMA34)/c_EMA34) / PI); angle_EMA34 = IIf(y2_EMA34 > 0, - angle_EMA34, angle_EMA34); // LSMA25 Angle LSMA25 = LinearReg(C, 25 ); x1_LSMA25 = 0; x2_LSMA25 = 1; y1_LSMA25 = 0; y2_LSMA25 = (Ref(LSMA25, -1) - LSMA25) / Avg * range; c_LSMA25 = sqrt((x2_LSMA25 - x1_LSMA25)*(x2_LSMA25 - x1_LSMA25) + (y2_LSMA25 - y1_LSMA25)*(y2_LSMA25 - y1_LSMA25)); angle_LSMA25 = round(180 * acos((x2_LSMA25 - x1_LSMA25)/c_LSMA25) / PI); angle_LSMA25 = IIf(y2_LSMA25 > 0, - angle_LSMA25, angle_LSMA25); // Color the bars for Woodies Trend Following function Consecutive( array ) { return BarsSince( NOT( array ) ); } function Occurrences( array , period ) { return Sum( array, period ); } array = z; HighBars = Consecutive( array > 0 ); LowBars = Consecutive( array < 0 ); UpCondition = BarsSince( HighBars >= 6 AND Occurrences( array > 100 , 5 ) > 0 ); DnCondition = BarsSince( LowBars >= 6 AND Occurrences( array < -100 , 5 ) > 0 ); UpTrend = ( array > 0 ) AND ( UpCondition < DnCondition ); DnTrend = ( array < 0 ) AND ( UpCondition > DnCondition ); TrTrend = ( HighBars >= 5 AND NOT UpTrend ) OR ( LowBars >= 5 AND NOT DnTrend ); Color = IIf( UpTrend, colorBlue, IIf( DnTrend, colorRed, IIf( TrTrend, colorYellow, colorGrey40 ) ) ); // Plot the Mock CZI on the 100s ColorANGLE_EMA = IIf(angle_EMA34 >=5,colorTurquoise, IIf(angle_EMA34 <5 AND angle_EMA34 >=3.57,colorDarkGreen, IIf(angle_EMA34 <3.57 AND angle_EMA34 >=2.14,colorPaleGreen, IIf(angle_EMA34 <2.14 AND angle_EMA34 >=.71,colorLime, IIf(angle_EMA34 <=-1*5,colorDarkRed, IIf(angle_EMA34 >-1*5 AND angle_EMA34 <=-1*3.57,colorRed, IIf(angle_EMA34 >-1*3.57 AND angle_EMA34 <=-1*2.14,colorOrange, IIf(angle_EMA34 >-1*2.14 AND angle_EMA34 <=-1*.71,colorLightOrange,colorYellow)))))))); Plot(100,"", ColorANGLE_EMA , styleLine | styleThick | styleNoLabel); Plot(-100,"", ColorANGLE_EMA , styleLine | styleThick | styleNoLabel); // Plot the Mock Sidewinder on the 200s SW = IIf((abs(angle_EMA34) >= 15) AND (abs(angle_EMA34 + angle_LSMA25) >= 50), IIf(angle_LSMA25 > 0, 2, -2), IIf((abs(angle_EMA34) >= 0) AND (((angle_EMA34 >= 0) AND (angle_LSMA25 >= 0)) OR ((angle_EMA34 <= 0) AND (angle_LSMA25 <= 0))) AND (abs(angle_EMA34 + angle_LSMA25) >= 5), IIf(angle_LSMA25 > 0, 1, -1), 0)); ColorSW = IIf(abs(SW) == 2, colorBrightGreen, IIf(abs(SW) == 1, colorYellow, colorRed)); Plot(200,"", ColorSW, styleLine | styleThick | styleNoLabel); Plot(-200,"", ColorSW, styleLine | styleThick | styleNoLabel); // Zero line 25lsma Plot(0,"", IIf(C > LSMA25,colorBrightGreen,IIf(C < LSMA25,colorRed,colorTeal)), styleLine | styleThick | styleNoLabel); // CCI Points diffCode=ParamToggle("Plot CCI diff ","No|Yes",1); CCipointmove= z-Ref(z,-1); CCIpointmovetitle= WriteIf(diffcode==1 AND abs(CCipointmove)<15,EncodeColor(colorRed) + "\n" + "DIFF " + abs(round(CCipointmove)) + "\n",WriteIf(diffcode==1 AND abs(CCipointmove)>=15 AND abs(CCipointmove)<20,EncodeColor(colorYellow) + "\n" + "DIFF " + abs(round(CCipointmove)) + "\n",WriteIf(diffcode==1 AND abs(CCIpointmove)>=20,EncodeColor(colorBrightGreen) + "\n" + "DIFF " + abs(round(CCipointmove))+ "\n",""))); // Price Panel Lastpricetitlehi= WriteIf(H>Ref(H,-1),EncodeColor(colorBrightGreen) + Ref(H,-1) + " " + H , EncodeColor(colorWhite)+ Ref(H,-1) + " " + H); Lastpricetitlelo= WriteIf(LRef(H,-1),EncodeColor(colorBrightGreen),WriteIf(C==L AND L=R3, "\n" + EncodeColor(colorYellow)+"R3 " + "-" + (R3value) + "\n" + "\n", WriteIf(pivCode==1 AND C<=R3 AND C>=R2, "\n" + EncodeColor(colorYellow)+"R3 " + "+" + (R3value) + "\n" + EncodeColor(colorYellow) + "R2 " + "-" + (R2value) + "\n" + "\n", WriteIf(pivCode==1 AND C<=R2 AND C>=R1, "\n" + EncodeColor(colorYellow)+"R2 " + "+" + (R2value) + "\n" + EncodeColor(colorYellow) + "R1 " + "-" + (R1value) + "\n" + "\n", WriteIf(pivCode==1 AND C<=R1 AND C>=PP, "\n" + EncodeColor(colorYellow)+"R1 " + "+" + (R1value) + "\n" + EncodeColor(colorYellow) + "PP " + "-" + (PPvalue) + "\n" + "\n", WriteIf(pivCode==1 AND C<=PP AND C>=S1, "\n" + EncodeColor(colorYellow)+"PP " + "+" + (PPvalue) + "\n" + EncodeColor(colorYellow) + "S1 " + "-" + (S1value) + "\n" + "\n", WriteIf(pivCode==1 AND C<=S1 AND C>=S2, "\n" + EncodeColor(colorYellow)+"S1 " + "+" + (S1value) + "\n" + EncodeColor(colorYellow) + "S2 " + "-" + (S2value) + "\n" + "\n", WriteIf(pivCode==1 AND C<=S2 AND C>=S3, "\n" + EncodeColor(colorYellow)+"S2 " + "+" + (S2value) + "\n" + EncodeColor(colorYellow) + "S3 " + "-" + (S3value) + "\n" + "\n", WriteIf(pivCode==1 AND C<=S3, "\n" + EncodeColor(colorYellow)+"S3 " + "+" + (S3value) + "\n"+ "\n","")))))))); // HOD , LOD, Range HiDayTitle = WriteIf(pivCode==1,EncodeColor(colorYellow) + "HOD ",""); HiDayTitle = WriteIf(pivCode==1,HiDayTitle + EncodeColor(colorYellow) + HiDay + " +" + round(abs((HiDay-C)/ticdiv)) + "\n",""); LoDayTitle = WriteIf(pivCode==1,EncodeColor(colorYellow) + "LOD ",""); LoDayTitle = WriteIf(pivCode==1,LoDayTitle + EncodeColor(colorYellow) + LoDay + " -" + round(abs((C-LoDay)/ticdiv)) + "\n"," "); RangeTitle1 =WriteIf(pivCode==1,EncodeColor(colorYellow) + "Day Range " + EncodeColor(colorYellow) + StrToNum(NumToStr(round((HiDay - LoDay)/ticdiv), 4.4)) + "\n",""); // Pattern codes Cziquallong= ((angle_EMA34>=5 OR Ref(angle_EMA34,-1)>=5) AND Ref(angle_EMA34,-2)>=5) OR (Ref(angle_EMA34,-1)>=5 AND angle_EMA34>=5); Cziqualshort= ((angle_EMA34<=-5 OR Ref(angle_EMA34,-1)<=-5) AND Ref(angle_EMA34,-2)<=-5) OR (Ref(angle_EMA34,-1)<=-5 AND angle_EMA34<=-5); // ZLR Long Linex_long=Ref(z,-1)>100 AND z<100; barsfromline_long=BarsSince(Linex_long); CCIhook_long=z>Ref(z,-1) AND Ref(z,-1)>-100 AND Ref(z,-1)-100 AND z>0; SW_trendinglong= sw==1 OR sw==2; zlrlong1= abs(CCipointmove)>=15 AND SW_trendinglong AND z<120 AND barsfromline_long<=10 AND CCIhook_long AND UpTrend; zlrnextl= z<120 AND barsfromline_long<10 AND CCIhook_long AND UpTrend; zlrlong= Cziquallong AND (zlrlong1 OR ( NOT Ref(zlrlong1,-1) AND Ref(zlrnextl,-1) AND abs(CCipointmove)>=15 AND z>=Ref(z,-1) AND SW_trendinglong AND z<120 AND UpTrend)); // ZLR Short Linex_short=Ref(z,-1)<=-100 AND z>=-100; barsfromline_short=BarsSince(Linex_short); CCIhook_short=zRef(z,-2) AND Ref(z,-2)<100 AND z<0; SW_trendingshort= sw==-1 OR sw==-2; zlrshort1= abs(CCipointmove)>=15 AND SW_trendingshort AND z>-120 AND barsfromline_short<=10 AND CCIhook_short AND DnTrend; zlrnexts= z>-120 AND barsfromline_short<10 AND CCIhook_short AND DnTrend; zlrshort= Cziqualshort AND (zlrshort1 OR (NOT Ref(zlrshort1,-1) AND Ref(zlrnexts,-1) AND abs(CCipointmove)>=15 AND z<=Ref(z,-1) AND SW_trendingshort AND z>-120 AND DnTrend)); // Famir Long FamirLinex_long=Ref(z,-1)<=-100 AND z>-100; Famir_barsfromline_long=BarsSince(FamirLinex_long); Famir_pivotlong= (Ref(z,-2)>Ref(z,-1)AND Ref(z,-1)>=-55 AND Ref(z,-2)>=-55) OR (Ref(z,-3)>Ref(z,-1) AND Ref(z,-1)>=-55 AND Ref(z,-2)>=-55 AND Ref(z,-3)>=-55)OR (Ref(z,-4)>Ref(z,-1) AND Ref(z,-1)>=-55 AND Ref(z,-2)>=-55 AND Ref(z,-3)>=-55); Famirhook_long=Famir_pivotlong AND z>Ref(HHV(z,Famir_barsfromline_long),-1) AND (z>=-55 AND z<=55); Famirlong= Famir_barsfromline_long<10 AND Famirhook_long AND ((DnTrend OR Ref(Dntrend,-BarsSince(z<0))==1) AND NOT UpTrend) AND C>LSMA25; // Famir Short FamirLinex_short=Ref(z,-1)>=100 AND z<100; Famir_barsfromline_short=BarsSince(FamirLinex_short); Famir_pivotshort= (Ref(z,-2)=-55 AND z<=55); Famirshort= Famir_barsfromline_short<10 AND Famirhook_short AND ((UpTrend OR Ref(Uptrend,-BarsSince(z>0))==1) AND NOT DnTrend) AND C200 AND z<200); HFElong=(Ref(z,-1)<-200 AND z>-200); HFE= HFEshort OR HFElong; // VT Long vtLinex_long=Ref(z,-1)<=-200 AND z>-200; vt_barsfromline_long=BarsSince(vtLinex_long); vtlong_A = z<-200; vtlong_B = Ref(z,-1)<=Ref(z,-2) OR Ref(z,-2)<=Ref(z,-3) OR Ref(z,-3)<=Ref(z,-4) OR Ref(z,-4)<=Ref(z,-5) OR Ref(z,-5)<=Ref(z,-6) OR Ref(z,-6)<=Ref(z,-7) OR Ref(z,-7)<=Ref(z,-8); vtlong_bs_A = BarsSince(vtlong_A); vtlong_bs_B = BarsSince(vtlong_b); Vtlong_bars = vtlong_bs_A>=5 AND vtlong_bs_B<=0; vt_pivotlong= Vtlong_bars; swinghibars=BarsSince(z>Ref(HHV(z,vt_barsfromline_long),-1)); vthook_long= vt_pivotlong AND z>Ref(HHV(z,vt_barsfromline_long),-1); vtlong= z<100 AND vt_barsfromline_long<=11 AND (Ref(HHV(z,vt_barsfromline_long),-1)<0 OR HHV(z,vt_barsfromline_long)<=0) AND vthook_long AND C>Lsma25 AND Ref(swinghibars>=2,-1) AND z>-100; // VT Short vtLinex_short=Ref(z,-1)>=200 AND z<200; vt_barsfromline_short=BarsSince(vtLinex_short); vtshort_A = z>200 ; vtshort_B =Ref(z,-1)>=Ref(z,-2) OR Ref(z,-2)>=Ref(z,-3) OR Ref(z,-3)>=Ref(z,-4) OR Ref(z,-4)>=Ref(z,-5) OR Ref(z,-5)>=Ref(z,-6) OR Ref(z,-6)>=Ref(z,-7) OR Ref(z,-7)>=Ref(z,-8); vtshort_bs_A = BarsSince(vtshort_A); vtshort_bs_B = BarsSince(vtshort_b); Vtshort_bars = vtshort_bs_A>=5 AND vtshort_bs_B<=0; vt_pivotshort= Vtshort_bars; swinglowbars= BarsSince(z-100 AND vt_barsfromline_short<=11 AND (Ref(LLV(z,vt_barsfromline_short),-1)>0 OR LLV(z,vt_barsfromline_short)>0) AND vthook_short AND C=2,-1) AND z<100; // GB 100 Long Linex_longGB=Ref(z,-1)>100 AND z<100; barsfromline_longGB=BarsSince(Linex_longGB); CCIhook_longGB= Ref(z,-1)<-100 AND z>-100; GB100long= z<100 AND barsfromline_longGB<=12 AND Cziquallong AND CCIhook_longGB AND (Ref(UpTrend,-BarsSince(z>0))==1 AND NOT DnTrend); // GB100 Short Linex_shortGB=Ref(z,-1)<-100 AND z>-100; barsfromline_shortGB=BarsSince(Linex_shortGB); CCIhook_shortGB=Ref(z,-1)>100 AND z<100; Gb100short= z>-100 AND barsfromline_shortGB<=12 AND Cziqualshort AND CCIhook_shortGB AND (Ref(DnTrend,-BarsSince(z<0))==1 AND NOT UpTrend); // TT Long Minuszero=BarsSince(Ref(z,-1)>0) + 1; TTCCIhook_long= z>Ref(z,-1) AND z>0; TTlong= Cziquallong AND z<100 AND Ref(UpTrend,-Minuszero)==1 AND LLV(Ref(z,-1),BarsSince(Ref(z,-1)>=100))>-100 AND HHV(Ref(z,-1),BarsSince(Ref(z,-1)< 0))>=100 AND TTCCIhook_long AND Ref(LowBars,-1)>=4 AND Ref(LowBars,-1)<=9; // TT Short Pluszero=BarsSince(Ref(z,-1)<0) + 1; TTCCIhook_short=z-100 AND Ref(DnTrend,-Pluszero)==1 AND HHV(Ref(z,-1),BarsSince(Ref(z,-1)<=-100))<100 AND LLV(Ref(z,-1),BarsSince(Ref(z,-1)>0))<=-100 AND TTCCIhook_short AND Ref(HighBars,-1)>=4 AND Ref(HighBars,-1)<=9; // PT Long Phook_long1= Ref(z,-1)>=Ref(z,-2) AND Ref(z,-2)0; Phook_long2= Ref(z,-3)>-100 AND Ref(z,-1)>Ref(z,-2) AND Ref(z,-2)0; Ptlong= Cziquallong AND (Phook_long1 OR Phook_long2) AND (z>0 AND Ref(z,-1)<0 AND z<120 AND Ref(z,-1)>-100 AND Ref(z,-2)>-100 AND z>Ref(z,-1) AND UpTrend); // PT Short Phook_short1= Ref(z,-1)<=Ref(z,-2) AND Ref(z,-2)>Ref(z,-3) AND Ref(z,-3)<0; Phook_short2= Ref(z,-3)<100 AND Ref(z,-1)Ref(z,-3) AND Ref(z,-3)> Ref(z,-4) AND Ref(z,-4)<0; Ptshort= Cziqualshort AND (Phook_short1 OR Phook_short2) AND (z<0 AND Ref(z,-1)>0 AND z>-120 AND Ref(z,-1)<100 AND Ref(z,-2)<100 AND z 0 - 600) C14GhostSteepCompToZL=Param("Ghost - Max trend line slope to ZL(CCI/bar)", 8,0, 30, 1); C14GhostSteepCompFromZL=Param("Ghost - Max trend line slope from ZL(CCI/bar)",4, 0, 30, 1); // Ghost Long (6) C14Shifted = -Z + GhostCciShift; C14Shifted = IIf(C14Shifted < 0, 0, C14Shifted); C14Shifted = IIf(C14Shifted > 600, 600, C14Shifted); GhostLongLeft = -Peak(C14Shifted, GhostCciChange, 3) + GhostCciShift; GhostLongHead = -Peak(C14Shifted, GhostCciChange, 2) + GhostCciShift; GhostLongRight = -Peak(Ref(C14Shifted,-1), GhostCciChange, 1) + GhostCciShift; GhostLongRightDip = -Ref(Trough(C14Shifted, GhostCciChange, 1), -1) + GhostCciShift; GhostLongRightDipIndex = BarIndex() - Ref(TroughBars(C14Shifted,GhostCciChange, 1), -1)-1; GhostLongLeftDip = -Ref(Trough(C14Shifted, GhostCciChange, 2), -1) +GhostCciShift; GhostLongLeftDipIndex = BarIndex() - Ref(TroughBars(C14Shifted, GhostCciChange,2), -1) -1; GhostLongHeadWidth = GhostLongRightDipIndex - GhostLongLeftDipIndex; GhostLongRightWidth = BarIndex() - GhostLongRightDipIndex; GhostLongComp = (GhostLongRightDip - GhostLongLeftDip) / GhostLongHeadWidth; GhostLongBar = ( (GhostLongLeft > GhostLongHead AND GhostLongRight > GhostLongHead AND GhostLongHead <= -100 ) //Ghost OR (GhostLongLeft < GhostLongHead AND GhostLongRight < GhostLongHead AND GhostLongLeft <= -100)) //MGhost AND GhostLongLeftDip <= 0 AND GhostLongRightDip <= 0 AND (GhostLongRightDip + GhostLongComp*GhostLongRightWidth <= Z OR Z>0)//WCCI returned above neckline AND GhostLongHeadWidth < 25 AND GhostLongRightWidth > 1 AND GhostLongRightWidth < 12; GhostLong = GhostLongBar AND NOT Ref(GhostLongBar,-1) AND Z < 120 AND GhostLongComp >= -C14GhostSteepCompFromZL AND GhostLongComp <= C14GhostSteepCompToZL; GhostLongRef = BarsSince(GhostLong); if ( GhostLongRef[GhostBarIndex] <= 5 ) { GhostLongIndex = GhostBarIndex - GhostLongRef[GhostBarIndex]; GhostLine = LineArray( GhostLongLeftDipIndex[GhostLongIndex], GhostLongLeftDip[GhostLongIndex], GhostLongRightDipIndex[GhostLongIndex] + 10, GhostLongRightDip[GhostLongIndex] + GhostLongComp[GhostLongIndex] * 10, 0, False); Plot(GhostLine, "", colorWhite, styleThick | styleNoLabel | styleNoTitle); } //DEBUG //Plot(-120, "GhostLongBar", IIf(GhostLongBar, colorGreen, colorRed)); //GhostLine = LineArray( GhostLongLeftDipIndex[CurBarIndex], // GhostLongLeftDip[CurBarIndex], // GhostLongRightDipIndex[CurBarIndex] + 10, // GhostLongLeftDip[CurBarIndex] + GhostLongComp[CurBarIndex]*(GhostLongHeadWidth[CurBarIndex]+10), // 0, False); //Plot(GhostLine, "", colorGreen, styleThick); // Ghost Short (6) C14Shifted = Z + GhostCciShift; C14Shifted = IIf(C14Shifted < 0, 0, C14Shifted); C14Shifted = IIf(C14Shifted > 600, 600, C14Shifted); GhostShortLeft = Peak(C14Shifted, GhostCciChange, 3) - GhostCciShift; GhostShortHead = Peak(C14Shifted, GhostCciChange, 2) - GhostCciShift; GhostShortRight = Peak(C14Shifted, GhostCciChange, 1) - GhostCciShift; GhostShortRightDip = Ref(Trough(C14Shifted, GhostCciChange, 1), -1) - GhostCciShift; GhostShortRightDipIndex = BarIndex() - Ref(TroughBars(C14Shifted,GhostCciChange, 1), -1) -1; GhostShortLeftDip = Ref(Trough(C14Shifted, GhostCciChange, 2), -1) -GhostCciShift; GhostShortLeftDipIndex = BarIndex() - Ref(TroughBars(C14Shifted,GhostCciChange, 2), -1) -1; GhostShortHeadWidth = GhostShortRightDipIndex - GhostShortLeftDipIndex; GhostShortRightWidth = BarIndex() - GhostShortRightDipIndex; GhostShortComp = (GhostShortRightDip - GhostShortLeftDip) / GhostShortHeadWidth; GhostShortBar = ( (GhostShortLeft < GhostShortHead AND GhostShortRight < GhostShortHead AND GhostShortHead >= 100) //Ghost OR (GhostShortLeft > GhostShortHead AND GhostShortRight > GhostShortHead AND GhostShortLeft >= 100)) //MGhost AND GhostShortLeftDip >= 0 AND GhostShortRightDip >=0 AND (GhostShortRightDip + GhostShortComp*GhostShortRightWidth >= Z OR Z<0) //WCCI returned below neckline AND GhostShortHeadWidth < 25 AND GhostShortRightWidth > 1 AND GhostShortRightWidth < 12; GhostShort = GhostShortBar AND NOT Ref(GhostShortBar,-1) AND Z > -120 AND GhostShortComp <= C14GhostSteepCompFromZL AND GhostShortComp >=-C14GhostSteepCompToZL; GhostShortRef = BarsSince(GhostShort); if ( GhostShortRef[GhostBarIndex] <= 5 ) { GhostShortIndex = GhostBarIndex - GhostShortRef[GhostBarIndex]; GhostLine = LineArray( GhostShortLeftDipIndex[GhostShortIndex], GhostShortLeftDip[GhostShortIndex], GhostShortRightDipIndex[GhostShortIndex] + 10, GhostShortRightDip[GhostShortIndex] + GhostShortComp[GhostShortIndex] * 10, 0, False); Plot(GhostLine, "", colorWhite, styleThick | styleNoLabel | styleNoTitle); } //DEBUG //Plot(120, "GhostShortBar", IIf(GhostShortBar, colorGreen, colorRed)); //GhostLine = LineArray( GhostShortLeftDipIndex[CurBarIndex], // GhostShortLeftDip[CurBarIndex], // GhostShortRightDipIndex[CurBarIndex] + 10, // GhostShortLeftDip[CurBarIndex] + GhostShortComp[CurBarIndex]*(GhostShortHeadWidth[CurBarIndex]+10), // 0, False); //Plot(GhostLine, "", colorRed, styleThick); // Signal Title PatCode1=ParamToggle("Plot ZLR (1)","No|Yes",1); PatCode2=ParamToggle("Plot FAMIR (2)","No|Yes",1); PatCode3=ParamToggle("Plot VT (3)","No|Yes",1); PatCode4=ParamToggle("Plot GB100 (4)","No|Yes",1); PatCode5=ParamToggle("Plot TT (5)","No|Yes",1); PatCode6=ParamToggle("Plot GHOST (6)","No|Yes",1); PatCode7=ParamToggle("Plot HFE","No|Yes",1); Signaltitle= WriteIf(PatCode1==1 AND zlrlong,EncodeColor(colorDarkRed) + "\n" + "*** ALERT -- ZLR ***" + "\n", WriteIf(PatCode1==1 AND zlrshort,EncodeColor(colorDarkRed) + "\n" + "*** ALERT -- ZLR ***" + "\n", WriteIf(PatCode2==1 AND Famirshort,EncodeColor(colorDarkRed) + "\n" + "*** ALERT -- FAMIR ***" + "\n", WriteIf(PatCode2==1 AND Famirlong,EncodeColor(colorDarkRed) + "\n" + "*** ALERT -- FAMIR ***" + "\n", WriteIf(PatCode3==1 AND VTlong AND NOT famirlong,EncodeColor(colorDarkRed) + "\n" + "*** ALERT -- VT ***" + "\n", WriteIf(PatCode3==1 AND VTshort AND NOT famirshort,EncodeColor(colorDarkRed) + "\n" + "*** ALERT -- VT ***" + "\n", WriteIf(PatCode4==1 AND GB100long,EncodeColor(colorDarkRed) + "\n" + "*** ALERT -- GB100 ***" + "\n", WriteIf(PatCode4==1 AND Gb100short,EncodeColor(colorDarkRed) + "\n" + "*** ALERT -- GB100 ***" + "\n", WriteIf(PatCode5==1 AND TTLong,EncodeColor(colorDarkRed) + "\n" + "*** ALERT -- TT ***" + "\n", WriteIf(PatCode5==1 AND TTShort,EncodeColor(colorDarkRed) + "\n" + "*** ALERT -- TT ***" + "\n", WriteIf(PatCode6==1 AND GhostLong,EncodeColor(colorDarkRed) + "\n" + "*** ALERT -- GHOST ***" + "\n", WriteIf(PatCode6==1 AND GhostShort,EncodeColor(colorDarkRed) + "\n" + "*** ALERT -- GHOST ***" + "\n", WriteIf(PatCode7==1 AND HFE,EncodeColor(colorDarkRed) + "\n" + "*** ALERT -- HFE ***" + "\n",""))))))))))))); // Pattern signal codes PlotShapes(IIf(PatCode1==1 AND zlrlong,shapeDigit1,shapeNone),colorBlue,0,Min(z,0),-15); PlotShapes(IIf(PatCode1==1 AND zlrshort,shapeDigit1+ shapePositionAbove,shapeNone),colorRed,0,Max(z,0),-15); PlotShapes(IIf(PatCode2==1 AND famirlong,shapeDigit2,shapeNone),colorBlue,0,Min(z,0),-15); PlotShapes(IIf(PatCode2==1 AND famirShort ,shapeDigit2+ shapePositionAbove,shapeNone),colorRed,0,Max(z,0),-15) ; PlotShapes(IIf(PatCode3==1 AND vtlong AND NOT famirlong,shapeDigit3,shapeNone),colorBlue,0,Min(z,0),-47); PlotShapes(IIf(PatCode3==1 AND vtshort AND NOT famirshort,shapeDigit3+ shapePositionAbove,shapeNone),colorRed,0,Max(z,0),-47); PlotShapes(IIf(PatCode4==1 AND GB100long,shapeDigit4,shapeNone),colorBlue,0,Min(z,0),-60); PlotShapes(IIf(PatCode4==1 AND GB100short,shapeDigit4+ shapePositionAbove,shapeNone),colorRed,0,Max(z,0),-60); PlotShapes(IIf(PatCode5==1 AND ttlong,shapeDigit5,shapeNone),colorBlue,0,Min(z,0),-50); PlotShapes(IIf(PatCode5==1 AND ttshort,shapeDigit5+ shapePositionAbove,shapeNone),colorRed,0,Max(z,0),-50); PlotShapes(IIf(PatCode6==1 AND GhostLong,shapeDigit6,shapeNone),colorBlue,0,Min(z,0),-50); PlotShapes(IIf(PatCode6==1 AND GhostShort,shapeDigit6+ shapePositionAbove,shapeNone),colorRed,0,Max(z,0),-50); PlotShapes(IIf(PatCode7==1 AND HFEshort,shapeCircle,shapeNone),IIf(PatCode7==1 AND HFEshort,colorYellow,shapeNone),0,200,10); PlotShapes(IIf(PatCode7==1 AND HFElong,shapeCircle,shapeNone),IIf(PatCode7==1 AND HFElong,colorYellow,shapeNone),0,-200,-10) ; // CCI hook Exit HookExitLong= z<=Ref(z,-1); HookExitShort= z>=Ref(z,-1); // 100 Line Cross Exit Conservative Cross100longC= z<=Ref(z,-1) AND z<100; Cross100shortC= z>=Ref(z,-1) AND z>-100; // 100 Line Cross Exit Aggressive Cross100longA= Ref(z,-1)>100 AND z<100; Cross100shortA= Ref(z,-1)<-100 AND z>-100; // Mplay Exit MplayExitLong= zRef(z,-1) AND Ref(z,-1)>Ref(z,-2) AND C>O; // Heikin-Ashi Exit HaClose =EMA((O+H+L+C)/4,3); HaOpen = AMA( Ref( HaClose, -1 ), 0.5 ); HaHigh = Max( H, Max( HaClose, HaOpen ) ); HaLow = Min( L, Min( HaClose, HaOpen ) ); HExitConLong= HaLow < HaOpen; HExitConShort= HaHigh > HaOpen; // Exit code ExitCode=Param("Exits:Hook=1,100xConservative=2,100xAggressive=3,Mplay=4,H-Ashi=5",1,1,5); ExitCodeTitleLong=IIf(ExitCode==1,HookExitLong,IIf(Exitcode==2,Cross100longC,IIf(Exitcode==3,Cross100longA,IIf(Exitcode==4,MplayExitLong,IIf(Exitcode==5,HExitConLong,0))))); ExitCodeTitleShort=IIf(ExitCode==1,HookExitShort,IIf(Exitcode==2,Cross100shortC,IIf(Exitcode==3,Cross100shortA,IIf(Exitcode==4,MplayExitShort,IIf(Exitcode==5,HExitConShort,0))))); AllPatterns =(zlrlong AND patcode1==1) OR (famirlong AND patcode2==1) OR (Vtlong AND patcode3==1) OR (gb100long AND patcode4==1) OR (ttlong AND patcode5==1) OR (GhostLong AND patcode6==1) OR (Hfelong AND patcode7==1) OR (zlrshort AND patcode1==1) OR (famirshort AND patcode2==1) OR (Vtshort AND patcode3==1) OR (gb100short AND patcode4==1) OR (ttshort AND patcode5==1) OR (GhostShort AND patcode6==1) OR (Hfeshort AND patcode7==1); BuyPattern = (zlrlong AND patcode1==1) OR (famirlong AND patcode2==1) OR (Vtlong AND patcode3==1) OR (gb100long AND patcode4==1) OR (ttlong AND patcode5==1) OR (GhostLong AND patcode6==1) OR (Hfelong AND patcode7==1); SellPattern= ExitCodeTitleLong; ShortPattern = (zlrshort AND patcode1==1) OR (famirshort AND patcode2==1) OR (Vtshort AND patcode3==1) OR (gb100short AND patcode4==1) OR (ttshort AND patcode5==1) OR (GhostShort AND patcode6==1) OR (Hfeshort AND patcode7==1); CoverPattern = ExitCodeTitleShort; //Plot Sell/Cover Arrows Sell1=ExRem(SellPattern,BuyPattern); Cover1=ExRem(CoverPattern,ShortPattern); SellCode=ParamToggle("Plot sell/cover arrows ","No|Yes",0); PlotShapes(IIf(Sell1 AND SellCode==1,shapeHollowDownArrow,shapeNone),colorBlue,0,200,10); PlotShapes(IIf(Cover1 AND SellCode==1,shapeHollowDownArrow,shapeNone),colorRed,0,200,10); // Calculate pattern hilites // Long AsellL= BuyPattern; BsellL= Sell1; bs_AsellL= BarsSince(AsellL); bs_BsellL= BarsSince(BsellL); bars_sellL= IIf(bs_ASellL<= bs_BsellL,bs_AsellL,0); //Short AsellS= ShortPattern; BsellS= Cover1; bs_AsellS= BarsSince(AsellS); bs_BsellS= BarsSince(BsellS); bars_sellS= IIf(bs_ASellS<= bs_BsellS,bs_AsellS,0); hilitecode=ParamToggle("Hi-lite patterns","No|Yes",0); // CCI Line CCIcolor= IIf(((bars_sellL OR bars_sellS) OR AllPAtterns) AND hilitecode==1,patterncolor,zcolor); Plot(round(z),"WCCI", CCIcolor , styleLine | styleThick); // Turbo CCI Plot(round(z6),"TCCI", z6color, styleLine); // CCI Histogram Plot( array, "", colorDefault, styleLine | styleThick | styleNoLabel); Plot( array, "", Color, styleHistogram | styleThick| styleNoLabel); // BackTest Long LastPatLong= BuyPattern; LastPatBarLong= BarsSince(LastPatLong); DDL=IIf((((LLV(L,LastPatBarLong)-Ref(C,-LastPatBarLong))))/ticdiv>=0,0,(((LLV(L,LastPatBarLong)-Ref(C,-LastPatBarLong))))/ticdiv); BTExitLong= (((C-Ref(C,-LastPatBarLong))))/ticdiv; PeakLong=IIf((((HHV(H,LastPatBarLong)-Ref(C,-LastPatBarLong))))/ticdiv<=0,0,(((HHV(H,LastPatBarLong)-Ref(C,-LastPatBarLong))))/ticdiv); StopLong1= Ref(C,-LastPatBarLong) - (Ref(L,-LastPatBarLong) - (stopval*ticdiv) - (spread*ticdiv)); stoplong= (((StopLong1)))/ticdiv; BackTestLongTitle= WriteIf(Sell1,EncodeColor(colorBlue) + "\n" + "Stop " + (Ref(C,-LastPatBarLong) - (round(stoplong)*ticdiv)) + " " + round(stoplong) + "\n" + "DD " + (Ref(C,-LastPatBarLong) + (round(DDL)*ticdiv)) + " " + round(DDL) + "\n" + "Exit " + (Ref(C,-LastPatBarLong) + (round(BTExitLong)*ticdiv)) + " " + round(BTExitLong) + "\n" + "Peak " + (Ref(C,-LastPatBarLong) + (round(PeakLong)*ticdiv)) + " " + round(PeakLong) + "\n",EncodeColor(colorBlue) + "\n" + "Stop " + (Ref(C,-LastPatBarLong) - (round(stoplong)*ticdiv)) + " " + round(stoplong) + "\n" + "DD " + (Ref(C,-LastPatBarLong) + (round(DDL)*ticdiv)) + " " + round(DDL) + "\n" + "Exit " + (Ref(C,-LastPatBarLong) + (round(BTExitLong)*ticdiv)) + " " + round(BTExitLong) + "\n" + "Peak " + (Ref(C,-LastPatBarLong) + (round(PeakLong)*ticdiv)) + " " + round(PeakLong) + "\n"); // BackTest Short LastPatShort= ShortPattern; LastPatBarShort= BarsSince(LastPatShort); DDS= IIf((((Ref(C,-LastPatBarShort)-HHV(H,LastPatBarShort))))/ticdiv>=0,0,(((Ref(C,-LastPatBarShort)-HHV(H,LastPatBarShort))))/ticdiv); BTExitShort= (((Ref(C,-LastPatBarShort)-C)))/ticdiv; PeakShort=IIf((((Ref(C,-LastPatBarShort)-LLV(L,LastPatBarShort))))/ticdiv<=0,0,(((Ref(C,-LastPatBarShort)-LLV(L,LastPatBarShort))))/ticdiv); StopShort1= (Ref(H,-LastPatBarShort) + (Stopval*ticdiv) + (spread*ticdiv)) - Ref(C,-LastPatBarShort); StopShort= (((StopShort1)))/ticdiv; BackTestShortTitle= WriteIf(Cover1,EncodeColor(colorRed) + "\n" + "Stop " + (Ref(C,-LastPatBarShort) + (round(stopshort)*ticdiv)) + " " + round(stopshort) + "\n" + "DD " + (Ref(C,-LastPatBarShort) + abs(round(DDS)*ticdiv)) + " " + round(DDS) + "\n" + "Exit " + (Ref(C,-LastPatBarShort) - (round(BTExitShort)*ticdiv)) + " " + round(BTExitShort) + "\n" + "Peak " + (Ref(C,-LastPatBarShort) - (round(PeakShort)*ticdiv)) + " " + round(PeakShort) + "\n",EncodeColor(colorRed)+ "\n" + "Stop " + (Ref(C,-LastPatBarShort) + (round(stopshort)*ticdiv)) + " " + round(stopshort) + "\n" + "DD " + (Ref(C,-LastPatBarShort) + abs(round(DDS)*ticdiv)) + " " + round(DDS) + "\n" + "Exit " + (Ref(C,-LastPatBarShort) - (round(BTExitShort)*ticdiv)) + " " + round(BTExitShort) + "\n" + "Peak " + (Ref(C,-LastPatBarShort) - (round(PeakShort)*ticdiv)) + " " + round(PeakShort) + "\n"); // Backtest title BackTestCode= ParamToggle("Display Stop,DD,Peak,Exit stats","No|Yes",0); BackTestTitle= WriteIf((bars_sellL>0 OR Sell1) AND BackTestCode==1,BackTestLongTitle ,WriteIf((bars_sellS>0 OR Cover1 )AND BackTestCode==1,BackTestShortTitle ,"")); // Stop in Longbar= L+rbint; Shortbar= H-rbint; sstoptitle=WriteIf(timercode==2, EncodeColor(colorBlue) + "\n" + "Stop In Long " + Longbar + EncodeColor(colorRed) + "\n" + "Stop In Short " + Shortbar + "\n",""); // Stop out stopCode=ParamToggle("Display stop-out ","No|Yes",0); StopLong1= C -(L - (stopval*ticdiv) - (spread*ticdiv)); stoplong1c=C-stoplong1; stoplong= round(StopLong1/ticdiv); StopShort1= (H + (stopval*ticdiv) + (spread*ticdiv)) - C; stopshortc= C+StopShort1; StopShort= round(StopShort1/ticdiv); stoptitle= WriteIf(stopcode==1,EncodeColor(colorBlue) + "\n" + "Stop Out Long " + stoplong1c + " " +stoplong + "\n" + EncodeColor(colorRed) + "Stop Out Short " + stopshortc + " " + stopshort + "\n",""); // Title Title = "\n" + "" + EncodeColor(colorWhite) + Date() + "\n" + "\n" + timetitle + "\n" + "\n" + Lastpricetitlehi + "\n" + Closecolor + C + "\n" + Lastpricetitlelo + "\n" + CCIpointmovetitle + wptitle + HiDayTitle + LoDayTitle + RangeTitle1 + BackTestTitle + Signaltitle + sstoptitle + stoptitle;